수식으로 알아보는 GAN
이 글은 GAN이 처음 나타난 논문 「Generative adversarial nets」을 바탕으로 작성하였습니다.
Goodfellow, I. J., Pouget-Abadie, J., Mirza, M., Xu, B., Warde-Farley, D., Ozair, S., Courville, A., and Bengio, Y. (2014). Generative adversarial nets. In NIPS’2014
https://papers.nips.cc/paper/5423-generative-adversarial-nets.pdf
GAN에 대한 대략적인 설명은 이전 글에서 하겠습니다.
이전 글 https://rython.tistory.com/9
배경
논문에서 GAN의 등장 배경이 나오기에 간략하게 정리를 해보았습니다.
기존에 있던 딥러닝들은 다양한 분야에서 좋은 성능을 보여주었지만 생성 모델으로 사용한 경우 그렇지 못했다고 합니다. 그 원인으로 어려운 확률 계산을 근사하는 것과 생성 모델에서 선형 단위의 장점을 활용하기 어렵다는 것을 들었습니다. 따라서 논문의 저자들은 이러한 문제들을 피할 수 있는 새로운 모델을 제안하게 됩니다.
용어 정의
우선 논문에서 정의한 몇 개의 변수들과 함수에 대해 알아봅시다.
$p_{data}$
data의 확률 분포, 확률 밀도 함수입니다.
$p_{\mathbf{z}}$
input vector의 확률 분포, 확률 밀도 함수입니다.
$\mathbf{x}\sim p_{data}$와 $\mathbf{x}\sim p_{data}(\mathbf{x})$, $p_{data}(\mathbf{x})$가 값으로 사용되는 표현이 혼용되고있는데 이를 잘 구분하지 않은 것으로 보입니다. 제 나름대로 통일을 해보도록 하겠습니다.
$G(\mathbf{z};\theta_{g})$
input vector의 공간에서 data 공간으로의 사상으로 미분가능해야 합니다. 여기서는 파라미터로 $\theta_{g}$를 가지는 MLP model이 가장 잘 작동한다고 하고 이를 사용합니다. 확률 분포 $p_{\mathbf{z}}$의 입력으로 만들어진 $G$의 확률 분포와 확률 밀도 함수를 $p_{g}$라고 합니다.
$D(\mathbf{x};\theta_{d})$
data $\mathbf{x}$를 input으로 받아 $\mathbf{x}$가 $p_{g}$에서 나오지 않았을 확률, 즉 G에 의해 만들어진 것이 아니라 $p_{data}$에서 나온 실제 데이터일 확률을 output으로 가집니다.
$D$와 $G$는 $V(G,D)$값에 대해 minimax game를 하며 train 한다고 합니다.(*논문에서는 오타인 것 같지만 $V(G,D)$라고 쓰기도 했다가 $V(D,G)$라고 쓰기도 하는 등 통일되어있지 않은데 이 글에서는 $V(D,G)$로 통일하겠습니다. 대소문자도 섞여있어요)
$$\min_{G} \max_{D} V(G,D)$$
$$V(G,D)=\mathbb{E}_{\mathbf{x} \sim p_{data}}[\log D(\mathbf{x})]+\mathbb{E}_{\mathbf{z} \sim p_{\mathbf{z}}}[\log(1-D(G(\mathbf{z})))]$$
GAN의 최종적인 목표는 $p_{g}$가 $p_{data}$와 같아지게 하는 것입니다. 그러기 위해서는 두 확률 분포 사이의 유사도를 나타내는 방법을 알아야 합니다. 잠시 이와 관련된 Kullback-Leibler divergence와 Jensen-Shannon divergence에 대해 알아봅시다.(갑자기 이걸 설명하는 이유는 증명 과정에 갑자기 나오기 때문입니다.)
Kullback-Leibler divergence
두 확률 분포 $P$와 $Q$에 대해 Kullback-Leibler divergence는 $\text{KL}(P||Q)=\int_{X} p(x)\log\frac{p(x)}{q(x)}dx$로 정의됩니다. $KL(P||Q)$로 나타내기도 하고 $D_{KL}(P||Q)$ 등 여러 표기가 있지만 논문의 표기를 사용하겠습니다. 이는 상대 엔트로피라고 표현하기도 하는데 식을 조금만 정리해주면 $P$와 $Q$의 cross entropy와 $P$의 entropy의 차로 나타낼 수 있는 것을 알 수 있습니다.
$$\text{KL}(P||Q)=\int_{X} p(x)\log\frac{p(x)}{q(x)}dx=-\int_{X}p(x)\log q(x)dx +\int_{X}p(x)\log p(x)dx$$
또한 이 값은 항상 0 이상인 것을 증명할 수 있는데 이는 $\log$함수를 이용하여 젠센 부등식을 이용하면 어렵지 않게 증명할 수 있습니다. 이 값은 대칭적이지 않은데($\text{KL}(P||Q)\neq \text{KL}(Q||P)$) 이 때문에 거리(metric)으로 사용할 수 없다고 합니다.
Jensen-Shannon divergence
이 또한 두 확률 분포 사이의 유사도를 나타내는 수치로 Kullback-Leibler divergence를 이용하여 아래와 같이 정의됩니다.
$$\text{JSD}(P||Q)=\frac{1}{2}(\text{KL}(P||M)+\text{KL}(Q||M)), M=\frac{1}{2}(P+Q)$$
이 값은 Kullback-Leibler divergence와 달리 거리(metric)으로 사용할 수 있습니다. 또한 KL을 계산할 때 밑이 2인 $\log$를 사용한다면 JSD는 0이상 1이하의 값을 가진다고 합니다.
증명할 내용
논문에서는 크게 2가지를 증명하는 것으로 구성되어 있습니다.
1. 위에서 정의한 minimax game의 global optimum은 $p_{g}=p_{data}$로 유일하다.
2. 논문에서 정의한 Algorithm 1은 1에서의 global optimum으로 수렴한다.
2의 경우 논문에 7줄만에 증명하는데 저는 이해가 잘 안 갑니다. 1에서 증명한 바에 의해 convex 함수의 특징상 성립한다는 내용인 것 같지만 Algorithm 1과 어떤 연관인지 이해하지 못해서 넘어가겠습니다.
증명 과정
먼저 $G$를 고정시키고 이에 따른 최적의 $D$인 $D^{*}_{G}$ 대해 생각해봅시다. 최적의 $D^{*}_{G}$는 직관적으로도 다음을 만족해야 한다는 것을 생각해볼 수 있습니다.
$$D^{*}_{G}(\mathbf{x})=\frac{p_{data}(\mathbf{x})}{p_{data}(\mathbf{x})+p_{g}(\mathbf{x})}$$
위 성질을 증명해봅시다.
$G$가 고정된 상태에서 $D$는 $V(G,D)$를 최대로 만들어야합니다. 기댓값의 정의에 따라 식을 풀어주게 되면 $V(G,D)$를 다음과 같이 나타내볼 수 있습니다.
$$V(G,D)=\int_{X}p_{data}(\mathbf{x})\log(D(\mathbf{x})))dx+\int_{Z}p_{\mathbf{z}}(\mathbf{z})\log(1-D(G(\mathbf{z})))dz\\=\int_{X}p_{data}(\mathbf{x})\log(D(\mathbf{x}))+p_{g}(\mathbf{x})\log(1-D(\mathbf{x}))dx$$
두 번째 줄로 넘어가는 부분은 $p_{g}$가 어떻게 정의되었는지를 생각해보면 이해하실 수 있을 것입니다. 수학적으로는 치환적분법을 사용하면 될 것 같네요. $\int$ 속을 보면 $D(\mathbf{x})$에 대해 $a\log(y)+b\log(1-y)$ 형태인 것을 알 수 있습니다. 구간 $[0,1]$에서 $y$에 대해 미분하여 0이 되는 곳을 찾아보면 최대로 만드는 $y$를 찾을 수 있을 것입니다.
$$\frac{\partial}{\partial y}a\log(y)+b\log(1-y)=\frac{a}{y}-\frac{b}{1-y}=0$$
$$y=\frac{a}{a+b}$$
$\int$는 무한합으로 생각할 수 있으므로 각각을 최소화하는 것을 생각해본다면 $D^{*}_{G}$의 성질이 증명됩니다.
이제 이 값을 $V(G,D)$에 대입해봅시다. 여기까지의 식은 $\max_{D} V(G,D)$으로 생각할 수 있고 이를 $C(G)$로 나타내 봅시다. $G$는 이 값을 최소화해야 합니다.
$$C(G)=\mathbb{E}_{\mathbf{x}\sim p_{data}}\left[\log\frac{p_{data}(\mathbf{x})}{p_{data}(\mathbf{x})+p_{g}(\mathbf{x})}\right]+\mathbb{E}_{\mathbf{x}\sim p_{g}}\left[\log\frac{p_{g}(\mathbf{x})}{p_{data}(\mathbf{x})+p_{g}(\mathbf{x})}\right]$$
$$=\mathbb{E}_{\mathbf{x}\sim p_{data}}\left[\log\frac{p_{data}(\mathbf{x})}{\frac{p_{data}(\mathbf{x})+p_{g}(\mathbf{x})}{2}}-\log2\right]+\mathbb{E}_{\mathbf{x}\sim p_{g}}\left[\log\frac{p_{g}(\mathbf{x})}{\frac{p_{data}(\mathbf{x})+p_{g}(\mathbf{x})}{2}}-\log2\right]$$
$\mathbb{E}$에서 상수는 그대로 나올 수 있으므로
$$=-\log4+\text{KL}\left(p_{data}\bigg|\bigg|\frac{p_{data}+p_{g}}{2}\right)+\text{KL}\left(p_{g}\bigg|\bigg|\frac{p_{data}+p_{g}}{2}\right)$$
$$=-\log4+2\text{JSD}(p_{data}||p_{g})\geq -\log4$$
등호가 성립할 조건은 JSD가 0이 될 때이며 이는 $p_{data}=p_{g}$일 때만 성립합니다.
$\square$
한계
논문에서는 실제 구현할 때는 $G$에 대해 $\log(1-x)$를 최소화 하는 부분을 $\log x$를 최대화하는 것으로 바꾸는 것을 권고합니다. 이는 단순히 경험적으로 Gradient가 너무 작아서... 라고 하는데 수학적으로 저렇게 하는 근거는 없지만 구현은 잘 된다고 합니다.
또한 위의 증명에서 볼 수 있듯이 증명은 확률 밀도 함수에서 이루어졌습니다. 하지만 우리가 실제 사용하는 데이터는 무한하지 않으므로 확률 밀도로 근사하는 것이 되고 이해하지 못해서 여기서 다루지는 못했지만 2번 증명에서 몇 가지 가정을 하게 됩니다. MLP 모델이 '충분한' 용량을 가지고 있어야 하고 매 iteration마다 $G$에 최적화된 $D$를 가정하는데 이는 현실적으로 거의 불가능합니다.
쓰다보니 알게 되었는데 말투가 이전 글들이랑 바뀌었네요. 앞으로도 그럴거 같으니 미리 적어둡니다.
Written by Xylene