질문 및 토론
🔗 논문 링크
Generative Adversarial Networks
👨💻 구현 코드
gan.ipynb
📚 참고한 자료
1시간만에 GAN(Generative Adversarial Network) 완전 정복하기
[목차]
Abstract
- 본 논문에서는, 실제 data의 distribution을 모방하려는 generative model $G$와 입력된 sample이 $G$로부터 생성된 data가 아닌 실제 data일 확률을 출력하는 discriminative model $D$가 서로 adversarial process를 통해 generative model을 학습하는 방법을 제안한다.
- GAN에서 목표로 하는 solution은 다음과 같다.
- $G$: training data의 distribution을 완전히 모방
- $D$: 실제 training data sample과 생성된 data sample을 구분하지 못해 항상 1/2를 출력
Adversarial nets
$$
\min_G \max_D V(D, G) = \mathbb{E}{\mathbf{x} \sim p{data}(\mathbf{x})} [\log D(\mathbf{x})] + \mathbb{E}{\mathbf{z} \sim p{\mathbf{z}}(\mathbf{z})} [\log (1 - D(G(\mathbf{z})))]
$$
-
GAN에서 objective function은 위와 같으며, $D$와 $G$의 관점에서 그 의미를 해석하면 다음과 같다.
- $D$의 관점
- $\max\limits_D V(D) = \mathbb{E}{\mathbf{x} \sim p{data}(\mathbf{x})} [\log D(\mathbf{x})] + \mathbb{E}{\mathbf{z} \sim p{\mathbf{z}}(\mathbf{z})} [\log (1 - D(G(\mathbf{z})))]$
- 실제 데이터의 분포로부터 샘플링한 데이터 $\mathbf{x} \sim p_{data}(\mathbf{x})$에 대한 확률 $D(\mathbf{x})$가 1이 되어야 함
- Prior distribution (normal or uniform) 으로부터 샘플링한 random noise vector $\mathbf{z} \sim p_{\mathbf{z}}(\mathbf{z})$를 입력으로 받아 generator가 생성한 데이터 $G(\mathbf{z})$에 대한 확률 $D(G(\mathbf{z}))$은 0이 되어야 함
- $G$의 관점
- $\min\limits_G V(G) = \mathbb{E}{\mathbf{z} \sim p{\mathbf{z}}(\mathbf{z})} [\log (1 - D(G(\mathbf{z})))]$
- Prior distribution (normal or uniform) 으로부터 샘플링한 random noise vector $\mathbf{z} \sim p_{\mathbf{z}}(\mathbf{z})$를 입력으로 받아 generator가 생성한 데이터 $G(\mathbf{z})$에 대한 확률 $D(G(\mathbf{z}))$은 1이 되도록 학습
-
실제 학습시에는 $G$를 학습하기 위해 $\log (1 - D(G(\mathbf{z})))$를 minimize 하는 것 대신에 $\log D(G(\mathbf{z}))$를 maximize하게 되는데, 그 이유는 다음과 같다.
- 학습 초기에는 generator가 생성하는 이미지가 실제와 많이 다르기 때문에 $D(G(\mathbf{z}))$는 0에 가깝게 되고, 이때의 gradient값이 작기 때문에 generator가 잘 학습되지 않을 수 있다.
- $D(G(\mathbf{z})) = 0$ 지점에서, $\log D(G(\mathbf{z}))$의 gradient는 $\log(1 - D(G(\mathbf{z})))$의 gradient보다 크기 때문에, $\log D(G(\mathbf{z}))$를 maximize하는 것이다.
- Algorithm 1은 minibatch SGD를 통해 학습하는 과정을 나타낸 것이며, 요약하자면 다음과 같다.
- $D$의 학습
- Minibatch수 만큼의 sample을 noise prior distribution과 training datasets으로부터 각각 샘플링한다.
- Gradient가 증가하는 방향으로 학습한다.
- $G$의 학습
- Minibatch수 만큼의 sample을 noise prior distribution으로부터 샘플링한다.
- Gradient가 감소하는 방향으로 학습한다.
Theoretical Results
$$
\min_G \max_D V(D, G) = \mathbb{E}{\mathbf{x} \sim p{data}(\mathbf{x})} [\log D(\mathbf{x})] + \mathbb{E}{\mathbf{z} \sim p{\mathbf{z}}(\mathbf{z})} [\log (1 - D(G(\mathbf{z})))] \tag{1}
$$
$$
\begin{align} \min_{G} V(D^*G, G) &= -\log(4) + KL \left( p{data} \| \dfrac{p_{data} + p_g}{2} \right) + KL \left( p_{g} \| \dfrac{p_{data} + p_g}{2} \right) \\ &= -\log(4) + 2 \cdot JSD(p_{data} \| p_g) \tag{2} \end{align}
$$