$\mathbb{E}_{x\sim p_{data}}[\log D(x)]$: 진짜 데이터를 D가 진짜(1)로 분류하는 정도. D는 이 항을 크게 만들고 싶다.
$\mathbb{E}_{z\sim p_z}[\log(1-D(G(z)))]$: G가 만든 가짜를 D가 가짜(0)로 분류하는 정도. D는 이 항도 크게, G는 이 항을 작게(즉 D를 속여 1에 가깝게) 만들고 싶다.
이론적 최적해: $p_g = p_{data}$일 때, $D^*(x) = \dfrac{p_{data}(x)}{p_{data}(x)+p_g(x)} = \dfrac{1}{2}$. G가 실제 분포와 완벽히 일치하는 데이터를 만들면 D는 더 이상 구분할 수 없다.
실제 훈련 디테일
논문에서 제안한 실제 훈련 절차: G 1회 업데이트당 D를 k회 업데이트한다(논문 기본값 k=1). 또한 G를 훈련할 때 $\log(1-D(G(z)))$를 최소화하는 대신 $\log D(G(z))$를 최대화하도록 한다. 두 목표는 이론적으로 동치지만, 학습 초기에 D가 G를 쉽게 구분할 때 전자는 그래디언트가 포화(saturate)되어 학습이 느려지기 때문이다.
학습 중 분포 변화
아래 시각화에서 녹색은 실제 데이터 분포 $p_{data}$, 보라색은 G가 만들어내는 분포 $p_g$다. 학습이 진행될수록 $p_g$가 $p_{data}$에 수렴한다. 노란 선은 D의 결정 경계(D(x)=0.5)로, 수렴 후에는 두 분포가 같아져서 D가 어디서도 구분을 못 하게 된다.
왜 학습이 어려운가
GAN의 훈련은 이론적으로 우아하지만 실제로는 매우 불안정하다. 두 네트워크의 학습이 균형을 이루어야 하는데, 한쪽이 너무 강해지면 다른 쪽이 학습을 멈춘다.
Mode Collapse (모드 붕괴): G가 D를 속이는 특정 샘플(예: 특정 얼굴 표정 하나)만 반복 생성. 다양성이 전혀 없어진다. G 입장에서는 하나의 "좋은 위조품"을 계속 내는 게 합리적 전략이라 발생.
학습 불균형: D가 너무 강해지면 D(G(z))≈0이 되어 $\log(1-D(G(z)))$의 그래디언트가 0에 수렴 → G가 학습할 신호를 받지 못한다. 반대로 G가 너무 강하면 D가 진짜/가짜를 구분 못 해서 의미 없는 피드백만 준다.
평가 어려움: 손실값이 수렴해도 생성 품질을 보장 못 한다. GAN 연구자들은 주로 FID(Fréchet Inception Distance) 같은 별도 지표로 샘플 품질을 측정한다.