GAN(Generative Adversarial Network)은 2014년 Ian Goodfellow가 제안한 두 신경망이 경쟁하며 이미지를 생성하는 모델이다. 생성자(Generator)와 판별자(Discriminator)가 서로를 속이고 구분하는 게임을 통해 학습한다.
구조
노이즈 z → [생성자 G] → 가짜 이미지
↓
실제 이미지 ────────── [판별자 D] → 진짜/가짜 판별
생성자: D를 속이려고 더 실제같은 이미지 생성
판별자: G의 이미지를 더 잘 구분하도록 학습
→ 결국 생성자가 진짜 같은 이미지 생성
python
# 판별자 손실: 진짜는 1, 가짜는 0으로 분류
D_loss = BCE(D(real), 1) + BCE(D(G(z)), 0)
# 생성자 손실: D가 가짜를 1로 분류하도록
G_loss = BCE(D(G(z)), 1)
python
import torch.nn as nn
class Generator(nn.Module):
def __init__(self, latent_dim=100):
super().__init__()
self.model = nn.Sequential(
nn.Linear(latent_dim, 256),
nn.LeakyReLU(0.2),
nn.Linear(256, 512),
nn.LeakyReLU(0.2),
nn.Linear(512, 784),
nn.Tanh()
)
def forward(self, z):
return self.model(z).view(-1, 1, 28, 28)
관련 개념
참고문헌
- •Goodfellow et al. (2014). Generative Adversarial Networks