주제: 8-1 GAN (Generative Adversarial Network와 Min-Max 학습)

분류: generative

타입: concept

난이도: 중급

선수지식: 있음 — 확률분포, Cross-Entropy, Gradient Descent

GAN은 "가짜를 만드는 생성자"와 "가짜를 잡아내는 판별자"가 서로 경쟁하면서 같이 좋아지는 구조다.

생성 모델을 직접 확률식으로 세우는 대신, GAN은 문제를 게임처럼 바꾼다. generator는 진짜 같은 샘플을 만들려 하고, discriminator는 그 샘플이 진짜인지 가짜인지 맞히려 한다. 이 경쟁이 잘 맞물리면 generator가 점점 더 현실적인 샘플을 만들게 된다.

문제 설정

생성 모델의 목표는 실제 데이터와 비슷한 데이터를 생성하는 것입니다.

목표:

x Pdata(x)

즉 모델이 실제 데이터 분포를 학습해야 합니다.

하지만 직접 분포를 모델링하는 것은 어렵습니다.

GAN은 이 문제를 게임 구조로 해결합니다.

즉 GAN은 확률분포를 직접 쓰는 대신, "판별자를 속일 수 있을 정도로 진짜 같은가"를 목표로 삼는 우회 전략이다. 그래서 학습이 직관적이면서도, 동시에 불안정성과 mode collapse 같은 고유한 어려움도 생긴다.

시각 자료로 먼저 보기

GAN의 generator-discriminator 구조
Generator가 가짜 샘플을 만들고, Discriminator가 진짜/가짜를 구분하는 GAN의 핵심 경쟁 구조를 보여준다.
원본 / 라이선스 · d2l-ai authors · CC BY-SA 4.0
판별 모델과 생성 모델 비교 그림
분류를 하는 판별 모델과 데이터를 직접 만들어내는 생성 모델의 차이를 비교하면 GAN의 위치가 더 선명해진다.
원본 / 라이선스 · own work · CC0
DCGAN 생성 샘플 변화 예시
GAN 계열 모델이 학습되며 샘플 품질이 점점 좋아지는 모습을 보여주는 예시다. 실제 생성 품질 개선을 체감하기 좋다.
원본 / 라이선스 · Zisaac33 · CC BY-SA 4.0

1. GAN 핵심 아이디어

GAN은 두 모델이 경쟁하면서 학습합니다.

모델 역할
Generator (G) 가짜 데이터 생성
Discriminator (D) 진짜/가짜 판별

Noise z → Generator → Fake Image
                   ↓
           Discriminator
            /         \
         Real       Fake

이 구조는 적대적 학습(adversarial learning)이라고 합니다.

2. Generator

Generator는 노이즈에서 데이터를 생성합니다.

xfake=G(z)

기호 의미

왜 필요한가

랜덤 노이즈를 실제 데이터처럼 변환합니다.

주의점

초기에는 생성 데이터 품질이 매우 낮습니다.

3. Discriminator

Discriminator는 입력이 진짜인지 가짜인지 판별합니다.

D(x)=P(real|x)

기호 의미

왜 필요한가

Generator가 더 좋은 데이터를 만들도록 압박합니다.

4. GAN Min-Max Objective

GAN의 핵심 수식:

minGmaxDV(D,G)

objective:

V(D,G)=Ex Pdata[logD(x)]+Ez Pz[log(1D(G(z)))]

기호 의미

왜 필요한가

주의점

학습이 불안정할 수 있습니다.

5. Min-Max 게임 직관

GAN은 다음 게임을 수행합니다.

단계 목표
D 업데이트 real vs fake 구분
G 업데이트 D 속이기

1 Train D
2 Train G
3 반복

6. Generator Loss

Generator는 다음 목표를 가집니다.

LG=logD(G(z))

왜 필요한가

Discriminator가 fake를 real로 판단하도록 유도합니다.

7. Discriminator Loss

Discriminator 손실:

LD=logD(x)log(1D(G(z)))

왜 필요한가

real과 fake를 정확히 구분하도록 학습합니다.

8. GAN 학습 과정


z ~ noise
x_fake = G(z)

D(x_real) → real
D(x_fake) → fake

Update D
Update G

9. GAN 학습 문제

문제 설명
Mode Collapse 같은 샘플만 생성
Training Instability loss 불안정
Gradient Vanishing generator 학습 어려움

10. GAN 직관 비유

경찰이 발전하면 위조범도 발전합니다.

결과적으로 더 현실적인 데이터가 생성됩니다.

코드-수식 연결

개념 코드 설명
noise 생성 torch.randn(batch, latent_dim) latent vector
generator fake = G(z) 가짜 데이터 생성
discriminator D(x) real/fake 판별

자주 하는 오해 5개

체크리스트 (스스로 설명 가능해야 하는 질문)