Generative Adversarial Network (GAN)
생성적 적대 신경망(GAN)은 생성기가 판별기와 경쟁하며, 생성 샘플이 실제처럼 보일 때까지 학습합니다. 학습, 변형, 활용 사례를 다룹니다.
생성적 적대 신경망(GAN)은 서로 대항하도록 학습된 두 개의 신경망으로 구성된 생성형 AI 모델입니다. 생성자는 무작위 노이즈를 샘플로 변환하고, 판별자는 해당 샘플을 실제 학습 데이터와 구별하려고 합니다. 학습이 끝나면 생성자는 단일 순전파로 새로운 이미지, 오디오 또는 표 형식의 레코드를 만듭니다. Ian Goodfellow와 Université de Montréal의 동료들은 2014년 논문 생성적 적대 신경망에서 GAN을 소개했으며, GAN은 2021년 확산 모델이 앞서기 전까지 이미지 합성을 주도했습니다.
GAN 학습 방식#
두 네트워크는 미니맥스 게임을 수행합니다. 판별자는 입력이 실제일 확률을 출력하는 이진 분류기이며, 교차 엔트로피 손실 함수로 실제 샘플에 1, 생성된 샘플에 0을 부여하도록 학습됩니다. 생성자는 실제 데이터를 보지 않고 판별자의 그래디언트만으로 학습합니다. 이론적으로 게임이 최적 상태에 도달하면 생성 분포가 데이터 분포와 같아지고 판별자는 모든 입력에 대해 0.5를 출력합니다. 학습 초기에는 가짜 데이터를 쉽게 구별할 수 있어 원래 생성자 목적 함수의 그래디언트가 거의 발생하지 않습니다. 이는 그래디언트 소실 문제의 한 형태입니다. 이에 Goodfellow의 논문에서는 판별자가 생성자의 샘플을 실제라고 판단할 확률을 최대화하도록 생성자를 학습했습니다. 아래 코드는 이 비포화 손실을 사용합니다.
PyTorch로 구현한 1차원 GAN은 샘플만으로 가우시안 분포를 학습합니다.
import torch
from torch import nn
torch.manual_seed(0)
# Generator maps 8-D noise to a number; discriminator scores a number as real (high) or fake (low)
generator = nn.Sequential(nn.Linear(8, 32), nn.ReLU(), nn.Linear(32, 1))
discriminator = nn.Sequential(nn.Linear(1, 32), nn.LeakyReLU(0.2), nn.Linear(32, 1))
opt_g = torch.optim.Adam(generator.parameters(), lr=1e-3)
opt_d = torch.optim.Adam(discriminator.parameters(), lr=1e-3)
bce = nn.BCEWithLogitsLoss()
real_label, fake_label = torch.ones(64, 1), torch.zeros(64, 1)
for step in range(3000):
real = 4.0 + 1.25 * torch.randn(64, 1) # training data: samples from N(4, 1.25^2)
fake = generator(torch.randn(64, 8))
# Discriminator step: label real samples 1 and generated samples 0
loss_d = bce(discriminator(real), real_label) + bce(discriminator(fake.detach()), fake_label)
opt_d.zero_grad()
loss_d.backward()
opt_d.step()
# Generator step: push the discriminator to label generated samples 1
loss_g = bce(discriminator(fake), real_label)
opt_g.zero_grad()
loss_g.backward()
opt_g.step()
samples = generator(torch.randn(10000, 8)).detach()
print(f"Generated mean {samples.mean():.2f}, std {samples.std():.2f} (data: 4.00, 1.25)")
print(f"Discriminator's average P(real) on generated samples: {torch.sigmoid(discriminator(samples)).mean():.2f}")3,000회의 교대 학습 단계 후 생성된 샘플의 평균은 3.95, 표준 편차는 1.20이었습니다. 데이터의 평균 4.00, 표준 편차 1.25와 비교하면 근접한 값입니다. 판별자가 생성된 샘플을 실제라고 판단할 평균 확률은 0.51로, 이론적 최적 상태의 동전 던지기 확률인 0.5에 가깝습니다.
주요 GAN 변형#
- DCGAN: Alec Radford, Luke Metz, Soumith Chintala가 2015년에 제안한 설계는 합성곱 생성자와 판별자를 안정적으로 학습할 수 있게 했습니다. 풀링 레이어를 스트라이드 합성곱으로 바꾸고 배치 정규화를 추가했습니다.
- 조건부 GAN 및 pix2pix: 두 네트워크에 클래스 레이블이나 입력 이미지를 제공하면 생성자가 지정된 결과물을 만들 수 있습니다. Phillip Isola와 동료들이 개발한 pix2pix(2017)는 레이블 맵을 거리 사진으로, 윤곽선을 제품 사진으로 변환하는 등의 쌍을 이룬 변환을 학습합니다.
- CycleGAN: 말 이미지를 얼룩말 이미지로, 여름 풍경을 겨울 풍경으로 바꾸는 등 쌍을 이룬 예시 없이 두 이미지 컬렉션 간의 변환을 학습합니다. 변환된 이미지를 다시 원본으로 되돌릴 수 있도록 제약합니다.
- Wasserstein GAN(WGAN): Martin Arjovsky와 동료들은 2017년에 분류자를 실제 데이터와 생성 데이터 간 Wasserstein 거리를 추정하는 비평자로 대체했습니다. 두 분포가 거의 겹치지 않는 경우에도 유용한 그래디언트를 유지합니다.
- StyleGAN: NVIDIA의 StyleGAN(2018)과 StyleGAN2(2019)는 학습된 스타일 벡터를 생성자의 모든 레이어에 입력합니다. StyleGAN2는 FFHQ 데이터셋의 1024 x 1024 얼굴 이미지에서 Fréchet Inception Distance(FID) 2.84를 달성했습니다.
응용 분야#
- 초해상도: SRGAN(2017), ESRGAN(2018), Real-ESRGAN(2021)은 업스케일링 네트워크에 적대적 손실을 추가합니다. 픽셀 단위 손실만 사용할 때 흐려지는 선명한 질감을 복원합니다.
- 의료 이미지 증강: Maayan Frid-Adar와 동료들은 간 병변 182개의 CT 스캔으로 GAN을 학습하고 합성 병변을 학습 데이터에 추가했습니다. 그 결과 분류기의 민감도는 78.6%에서 85.7%로, 특이도는 88.4%에서 92.4%로 높아졌습니다.
- 딥페이크: Sophie Nightingale과 Hany Farid가 2022년에 수행한 연구에서 참가자들은 StyleGAN2 얼굴이 실제인지 합성인지 48%의 정확도로 식별했습니다. 이는 우연보다 약간 낮은 수준이며, 참가자들은 합성 얼굴을 더 신뢰할 만하다고 평가했습니다.
GAN으로 생성한 이미지는 실제 예시가 부족한 경우 합성 데이터로 사용되며, 뒤집기나 회전과 같은 기하학적 변환에 더하는 데이터 증강 기법으로도 활용됩니다. GAN 이미지도 다른 이미지와 마찬가지로 YOLO26 학습 세트에 포함할 수 있습니다. Ultralytics 탐지 데이터셋 YAML의 train 분할에는 디렉터리 목록을 지정할 수 있으므로 합성 이미지를 실제 이미지가 있는 폴더 옆의 별도 폴더에 두고 한 줄을 수정해 추가하거나 제거할 수 있습니다.
GAN과 확산 모델 및 VAE 비교#
확산 모델은 OpenAI의 Prafulla Dhariwal과 Alex Nichol이 2021년에 당시 가장 강력한 GAN인 BigGAN-deep보다 ImageNet에서 더 높은 FID 점수를 기록했다고 보고한 후 이미지 품질 면에서 GAN을 앞질렀습니다. 확산 모델 학습은 적대적 과정이 없는 안정적인 회귀 문제이며 데이터의 다양성을 더 충실하게 다룹니다. GAN 학습은 수렴하지 않고 진동하거나 모드 붕괴에 빠질 수 있습니다. 모드 붕괴가 발생하면 생성자는 판별자를 속일 수 있는 몇 가지 결과물에 고착되어 나머지 결과물은 생성하지 않습니다. 변분 오토인코더도 안정적으로 학습되지만, 샘플이 더 흐릿합니다. GAN의 지속적인 장점은 속도입니다. 샘플링에 순전파 한 번만 필요하기 때문입니다. Adobe Research, Carnegie Mellon University, POSTECH이 개발한 GigaGAN은 2023년에 512픽셀 텍스트-이미지 결과를 0.13초 만에 생성했습니다. 적대적 손실은 확산 시스템 내부에서도 계속 활용됩니다. Stable Diffusion의 오토인코더는 패치 기반 판별자를 사용해 학습되며, Stability AI의 SDXL Turbo는 손실에 판별자를 포함하는 지식 증류의 한 형태인 적대적 확산 증류를 사용해 한 단계 만에 이미지를 생성합니다.










