ML/AI/SW Developer

GAN - Mode collapsing

1. Vanila GAN Backpropagation in Paper

  • Minibatch SGD를 optimizer로 학습을 진행한다.
  • Discriminator를 SGD가 높아지는 방향으로 업데이트 한다.
    • 식을 살펴보면 실제 데이터를 실제 데이터로 잘 판단하면 $log 1$ 로 0이 되고, 가짜 데이터를 가짜 데이터로 잘 판단하면 $log (too_small_number) $ 로 역시나 $log 1$ 로 0이 된다.
      반대의 경우, log 값들은 매우 작아지게 된다. 따라서 Discriminator는 ascending 하는 방향으로 업데이트를 진행한다.
  • Generator는 SGD가 감소하는 방향으로 업데이트 한다.
    • 논문의 식을 보면, Generator가 생성하는 데이터가 엉망이어서 D를 속이기 어렵다면$log(1-0.xx)$ 가 되어 0에 가까워 진다.
      반대로, 매우 잘 속인다면 $log(1-1)$ 로 매우 작은 값을 가지게 될 것이다. 따라서 Generator는 SGD가 descending 하는 방향으로 업데이트 해 나아간다.

2. GAN의 Vanishing Gradient 문제

  • Mode collapse problem
    • GAN의 BCE loss를 사용할 경우 생기는 문제 중 하나
    • GAN이 다양한 데이터를 만들어내지 못하고, 비슷한 데이터만 계속해서 생성하는 문제
    • 즉, 생성자가 local minimum에 빠진것!
  • 보통 판별자가 생성자 보다 학습이 빠르다!
    • 따라서 학습이 어느정도 진행된 경우, D는 데이터가 가짜인지 실제인지 매우 잘 구분하게 된다. 결국 Vnila GAN에서는 이러한 상황에서 논문에서 주어진 Gradient 값이 0이 되는 것을 확인 할 수 있다. 따라서 생성자의 Update가 잘 이루어지지 않고, 덜 학습된채로 더 이상 발전 하지 않는 문제가 일어난다.

3. Least Square GAN

  • Mode collapsing 문제를 해결하기 위한 방법 중 하나
    • 간단하게, Loss function을 변형한 것이다.
  • Objective function
    • a: 가짜 라벨, b: 실제 라벨, c: D가 속길 원하는 라벨
    • $min_D V(D)={1 \over 2} E_{x \sim P_{data}(x)} (log(D(x)-b)^2) + {1 \over 2} E_{x \sim P_z(z)} (log(D(G(z))-a)^2)$
    • $min_G V(G) = {1 \over 2} E_{x \sim P_z(z)} (log(D(G(z))-c)^2)$
  • 이점
    • Decision boundary에 모여있는 real sample들에서 멀리 떨어져 있지만 real이라고 판단되는 sample들에게 panelty를 부여할 수 있다. 즉, 더 실제같은 이미지를 생성할 수 있다.
    • 앞선 sample들에 panelty가 부여되면서 Gradient vanishing 문제가 어느정도 보완이 된다.
  • 논문에서 목적함수를 유도해
    • 카이제곱 분포 divergence를 최소화 하는것과 동치임을 보였다.

4. 그외

  • F-GAN, WGAN, RGAN, RSGAN 등 굉장이 많은 GAN이 있다.
  • Voice generation이나 conversion 등에 GAN이 많이 쓰이기 때문에 향후 더 공부가 필요할 것 같다.