2020. 6. 11. 01:17ㆍResearch
Notation
$G$ | Generator |
$D$ | Discriminator |
$x$ | Input data |
$z$ | Input noise |
$p_g$ | Generator의 확률 분포 |
$\theta_g$ | MLP로 구성된 $G$의 parameter |
$G(z; \theta_g)$ | Generator의 mapping function |
$\theta_d$ | MLP로 구성된 $D$의 parameter |
$D(x; \theta_g)$ | Discriminator의 mapping function |
$D(x)$ | $G$가 생성한 확률 분포인 $p_g$와 real data인 $x$가 주어졌을 때 $x$가 나올 확률 |
$G$와 $D$의 훈련
$D$는 real data $x$와 $G$가 생성한 $p_g$가 주어졌을 때 correct label인 $x$를 예측할 확률을 최대화 하도록 훈련을 해야한다.
반면, $G$는 $\log(1-D(G(z)))$를 최소화 하도록 훈련해야한다. $G(z)$는 $G$가 noise $z$를 통해서 생성한 데이터이므로, $D(G(z))$는 $D$가 real data인 $x$보다 $G$가 생성한 데이터가 더욱 진짜 같다고 판별할 확률을 의미한다. 따라서 $\log(1-D(G(z)))$를 최소화한다는 것은 $D(G(z))$를 최대화한다는 것이므로, $D$가 최대한 $G$가 생성한 데이터가 진짜 같다고 믿도록 훈련시킨다는 뜻이다.
위의 내용을 종합하면 결국 $D$와 $G$는 다음과 같은 value function을 통해 표현되는 two-player minimax game 문제라고 볼 수 있다.
위의 식은 직관적이긴 하지만 실제로 그대로 사용하기엔 문제가 있다.
문제점 1.
Compuation의 효율성과 한정된 데이터로부터의 오버피팅을 방지하기 위해서 $k$번의 step만큼 $D$를 최적화하는 동안 $G$는 딱 한 번만 최적화를 한다. 이렇게 해야 $G$는 충분히 서서히 변하고, $D$는 optimal solution에 충분히 가까운 균형 상태가 유지될 수 있다. 아래 Algorithm 1을 보면 이 과정이 잘 나와 있다.
문제점 2.
$G$가 제대로 훈련되지 않은 상태인 초반에는 $G$가 생성한 데이터인 $G(z)$가 real data $x$와 너무나도 다르기 때문에 $D$가 너무 쉽게 구분을 해낼 수 있다. 즉 $D(x)$가 너무 높다. 이렇게 되면 $D(G(z))$는 거의 0에 수렴하고, 이에 따라 $\log(1-D(G(z)))$도 거의 0으로 수렴하게 된다. (saturated)
이 문제를 해결하기 위해서 $G$는 $\log(1-D(G(z)))$를 최소화 하도록 훈련하는 대신 $\log(D(G(z))$를 최대화 하도록 훈련한다.
최종 목표: $D(x) = D(G(z)) = \frac{1}{2}$
위의 그림에서 파란색 점선은 discriminative distribution을 의미하고, 검은 점선은 real data $x$의 확률 분포인 $p_x$이고, 초록 실선은 $G(z)$의 확률 분포인 $p_g$를 의미한다. 위의 그림은 convergence 되기 직전의 상황을 보여주는데, (a)에서 (d)로 갈 수록 $p_x$와 $p_g$의 분포가 일치해 가는 것을 볼 수 있다. 결국엔 (d)에서 $p_g = p_x$가 되고, 이는 $D$가 더 이상 실제 데이터 $x$와 $G$가 생성한 데이터 $G(z)$를 구분하지 못 하는 상황이 되었음을 의미한다. ( $D(x) = D(G(z)) = \frac{1}{2}$ )