2018년 8월 30일 목요일

Spectral Normalization - part.2

이 정리는 Spectral Normalization 논문에 관한 정리입니다. 이번 포스팅에서는 Lipschitz constant의 정의와 의미 그리고 Spectral Normalization이 무엇이고 이것이 어떻게 Lipschitz constant를 control하게 되는지에 대해 알아보겠습니다.

* 아래 포스팅에 등장하는 수식들은 번호 혹은 영어로 태그가 붙어 있습니다. 번호로 태그 된 수식은 논문에서 해당 번호로 똑같이 태그 되어 있는 수식들이고 영어로 태그된 수식은 논문에는 등장은 하지만 따로 태그가 붙어 있지 않은 수식들입니다.

Lipschitz constant

우선 Lipschitz norm, Lipschitz constant, Lipschitz continuous가 무엇인지 알아보겠습니다.
첫 번째로 함수 $f$에 대한 Lipschitz norm

$\frac{\lVert {f(x) - f(x')}\rVert}{\lVert{x - x'}\rVert} \leq K\,for\,any\,x,\,x' \tag{a}$

이 조건을 만족하는 $K$의 최소값을 의미합니다. 이 때 $\lVert \cdot \rVert$은 아무 norm이나 가능합니다. 그리고 이러한 $K$가 존재한다면 함수 $f$는 Lipschitz continuous한 함수라고 합니다. 여기서 $\lVert \cdot \rVert$의 order가 정해지면 그 때의 $K$의 최소값을 Lipschitz constant라고 합니다. 보통 $\lVert \cdot \rVert$는 $L_2$를 사용하고 이 논문 역시 $L_2$를 사용합니다.

그리고 만약 여기서 $f$가 matrix $A$로 나타낼 수 있는 linear transformation이라면 $x$ 대신 어떤 vector $h$가 $A$에 의에 $Ah$로 linear transformation 된다면 위의 Lipschitz norm의 정의는 아래와 같은 조금 더 간결한 식을 만족하는 $K$입니다.

$\frac{\lVert{Ah}\rVert}{\lVert{h}\rVert} \leq K \, for \, any \,h \neq 0 \tag{b}$

그렇다면 이 Lipschitz constant가 갖는 의미는 무엇일까요? 정의를 자세히 보면 알 수 있듯이 $f$의 Lipschitz constant는 $f$의 기울기 혹은 gradient의 최대값입니다. 아래 그림을 통해 조금 더 직관적으로 살펴보도록 하겠습니다.


* $y=\sin x$

$y=\sin x$ 그래프입니다. $y=\sin x$의 gradient의 최대값은 1입니다. 즉 $y=\sin x$의 Lipschitz norm은 1입니다. 그래서 위 그래프에서 볼 수 있듯이 $y=\sin x$ 그래프가 $y=x$와 $y=-x$로 만든 노란색 영역에 들어가지 않는 것입니다. 다른 예도 살펴보도록 하겠습니다.


* ReLU 함수 

Activation function으로 굉장히 많이 사용되는 ReLU입니다. ReLU의 gradient 의 최대값 역시 1이기 때문에 Lipschitz norm도 1이고 $y=\sin x$의 그림과 동일한 양상을 보입니다. 마지막으로 하나의 예만 더 살펴보도록 하겠습니다.


* $y = x^2$

$y=x^2$ 그래프입니다. $y=x^2$는 gradient의 최대값이 존재하지 않고 무한으로 증가가 가능합니다. 그래서 이 함수는 Lipschitz continuous 하지 않고 $y=x^2$의 그래프가 노란색 영역 내부로 들어가는 것입니다.

이처럼 Lipschitz norm이 있다는 것은 $f$의 gradeint의 값에 제한이 걸린다는 의미입니다. 같은 내용을 다르게 표현하면 Lipschitz continuous한 함수 $f$는 기울기 혹은 gradient의 값이 무한하지 않고 제한되어 있다는 의미입니다. 최근 여러 연구 결과들에서 $D$의 Lipschitz constant를 bounded 하게 만들어 gradient가 폭발하는 것을 막는 것이 중요함을 밝히고 있습니다. 하지만 이전 포스팅인 Spectral Normalization - part.1의 식(4)에서 보였듯

$\bigtriangledown_x f^*(x) = {\partial{f^*(x)}\over\partial{x}} = \frac{1}{q_{data}(x)} \bigtriangledown_x q_{data}(x) - \frac{1}{P_G(x)} \bigtriangledown_x P_G(x) \tag{4}$

현재 $D$는 gradient 값에 아무 제한이 없어 Lipschitz continuous 하지 않습니다. 이 문제에 대해 이 논문에서는 $D$의 각 layer의 weight matrix $W$를 $W$의 Spectral Norm인 $\sigma (W)$로 나눠서 $D$의 Lipschitz constant를 1 이하로 만들고자 합니다.  이제 이것이 구체적으로 어떻게 이루어지는지 살펴보도록 하겠습니다.

Method - (2)

이제 어떻게 $D$의 각 layer의 weight matrix $W$를 $W$의 Spectral Norm인 $\sigma (W)$로 나누는 것이 $D$의 Lipschitz constant를 1 이하로 만들 수 있는지 따라가보도록 하겠습니다. 논문의 2.1 Spectral Normalization 부분에 해당합니다.

Discriminator function $f$의 하나의 layer인 $g : \mathbf{h_{in} \mapsto h_{out}}$에 대해 살펴보겠습니다. 여기서 $g$의 Lipschitz norm인 $\lVert{g}\rVert_{Lip}$은 정의상 아래와 같습니다.

$\lVert{g}\rVert_{Lip} = \sup_h \sigma(\bigtriangledown g(h)), \, where \, \sigma(A) := spectral \, norm(A) \tag{c}$

위 식에서 $g(h)$는 layer $g$에 $h$라는 input이 들어가 나온 output을 의미합니다. 따라서 $\bigtriangledown g(h) = {\partial{g(h)} \over \partial{h}}$로 볼 수 있습니다. 위의 정의를 말로 풀어쓰자면 $\sigma(\bigtriangledown g(h))$는 $g(h)$의 gradient matrix의 spectral norm입니다. 여기서 $h$가 무엇이냐에 따라 $\sigma(\bigtriangledown g(h))$의 값이 달라질텐데 그 앞에 붙은 $sup_h$는 쉽게 $h$에 대한 최대값으로 이해하시면 됩니다.

하지만 특별히 지금과 같이 Neural Net의 layer 하나에 해당하는 $g$는 $g(h) = Wh$의 꼴을 갖는 Linear transformation이기 때문에 위의 정의를 아래와 같은 방법으로 훨씬 간결하게 만들 수 있습니다. 
                        $\lVert{g}\rVert_{Lip} = \sup_h \sigma(\bigtriangledown g(h)) = \sup_h \sigma({\partial{g(h)} \over \partial{h}}) = \sup_h \sigma(W) = \sigma(W) \tag{d}$

굉장히 깔끔한 결론이 나왔습니다. $\lVert{g}\rVert_{Lip} = \sigma(W)$입니다. 말로 풀어서 쓰면 layer $g$의 Lipschitz norm은 그 layer의 weight인 $W$의 spectral norm입니다. 거꾸로 논문에 소개된 Spectral norm의 정의(식 (6))를 통해 역으로 $W$의 spectral norm이 $g$의 Lipschitz constant라는 결론을 낼 수도 있습니다.

$\sigma(A) := \max_{h:h \neq 0} \frac{\lVert{Ah}\rVert_2}{\lVert{h}]\rVert_2} = \max_{\lVert{h}\rVert_2 \leq 1}\lVert{Ah}\rVert_2 \tag{6}$

식 (6)에서 $\max_{h:h \neq 0} \frac{\lVert{Ah}\rVert_2}{\lVert{h}]\rVert_2}$ 이 부분을 자세히 살펴본다면 위의 Lipschitz norm의 정의에 해당하는 식 (b)의 $\frac{\lVert{Ah}\rVert}{\lVert{h}\rVert} \leq K \, for \, any \,h \neq 0$와 일치합니다. 즉, $\sigma(W) := \max_{h:h \neq 0} \frac{\lVert{Wh}\rVert_2}{\lVert{h}\rVert_2} = \lVert{g}\rVert_{Lip}$ 로 식 (d)가 거꾸로도 유도가 가능합니다.

여기서 이미 간결해진 식 (d)를 한 번 더 간결하게 만들어주는 $\sigma(W)$의 특징이 존재합니다. 그것은 $\sigma(W)$가 단순히 $W$의 largest singular value와 같다는 것입니다.

지금까지의 내용을 정리하자면 식 (c)에서 layer $g$의 Lipschitz norm의 정의를 살펴보았습니다. 그리고 neural net의 layer인 $g$는 $Wh$로 나타낼 수 있는 Linear transformation이기 때문에 식 (d)처럼 간결하게 만들 수 있고 식 (6)의 Spectral norm의 정의로부터 역으로 식 (d)의 결과를 유도할 수도 있습니다. 이렇게 해서 얻은 결론은 layer $g$의 Lipschitz norm은 그 layer의 weight인 $W$의 spectral norm이라는 것이고 이 때 $W$의 spectral norm은 $W$의 largest singular value라는 것입니다.

Method - (3)

위에서 하나의 layer $g$에 대한 Lipschitz norm은 $W$의 spectral norm임을 알게 되었습니다. 그럼 이제 이 여러 layer $g$들과 activation function이 모인 discriminator function $f$의 Lipschitz norm에 대해 살펴보겠습니다.

들어가기에 앞서 많이 사용되는 activation function들의 Lipschitz norm은 1 이하입니다. 이 논문에서는 activation function으로 ReLU를 사용하는데 ReLU는 Lipschitz norm이 정확히 1입니다. 이 사실 덕분에 아래의 부등식을 이용할 수 있습니다.

$\lVert g_1 \circ g_2 \rVert_{Lip} \leq \lVert g_1 \rVert_{Lip} \cdot \lVert g_2 \rVert_{Lip} \tag{e}$

식 (e)를 말로 풀어쓰자면 두 개의 layer $g_1$과 $g_2$로 이루어진 neural net의 Lipschitz norm각 layer의 weight matrix의 Lipschitz norm의 곱보다 작거나 같다는 것입니다. 이제 이 부등식을 이용해 총 $L+1$개의 layer를 갖는 discriminator function $f$의 Lipschitz norm을 표현해야 하는데 이것이 바로 논문의 식 (7)입니다.

$\lVert f \rVert_{Lip} \leq \lVert{(h_L \mapsto W^{L+1}h_L)}\rVert_{Lip} \cdot \lVert{ a_L}\rVert_{Lip} \cdot \lVert{(h_{L-1} \mapsto W^{L}h_L)}\rVert_{Lip} \\ \cdots \lVert{a_1}\rVert_{Lip} \cdot \lVert{(h_0 \mapsto W^1 h_0)}\rVert_{Lip} = \prod_{l=1}^{L+1} \lVert{(h_{L-1} \mapsto W^l h_{l-1})}\rVert_{Lip} = \prod_{l=1}^{L+1} \sigma (W^l) \tag{7}$

식이 다소 복잡해보이지만 위의 식 (e)의 확장판에 불과합니다. 하나씩 보도록 하겠습니다. 우선 $\lVert{(h_L \mapsto W^{L+1}h_L)}\rVert_{Lip}$는 $h_L$에서 $W^{L+1}h_L$로 가는 layer의 Lipschitz norm을 표시한 것입니다. 이것은 단순히 matrix $W^{L+1}$의 Lipschitz norm입니다. 그리고 $\lVert{a_L}\rVert_{Lip}$는 $L$번째 activation function의 Lipschitz norm입니다. 이 값은 1이기 때문에 식 (7)의 복잡한 두 번째 term을 세 번째 term으로 간단하게 만들 수 있습니다. 여기서 식 (e)가 사용되었습니다.

그리고 위에서 언급한 것 처럼 layer $g$의 Lipschitz norm은 그 layer의 weight인 $W$의 spectral norm 입니다. 그래서 모든 layer의 Lipschitz norm의 곱을 나타내는 세 번째 term이 모든 layer의 spectral norm의 곱을 나타내는 네 번째 term으로 바뀐 것입니다.

자 이제 거의 다 왔습니다. 식 (7)을 간단하게 요약하자면 $\lVert f \rVert_{Lip} \leq \prod_{l=1}^{L+1} \sigma (W^l)$입니다. 말로 풀어쓰자면 discriminator의 Lipschitz norm은 각 layer의 weight matrix의 spectral norm의 곱보다 작거나 같습니다.
이 논문의 목표 discriminator의 Lipschitz norm을 1 이하가 되도록 제한을 두는 것이었습니다. $f$의 Lipschitz norm이 각 layer의 spectral norm의 곱보다 작거나 같으므로 각 layer의 spectral norm이 1보다 작거나 같아진다면 모든 layer의 spectral norm을 곱해도 1보다 작거나 같아지므로 이 목표를 이룰 수 있습니다. 이는 각 layer의 weight matrix를 그 matrix의 spectral norm으로 나눠주면 간단하게 해결됩니다. 식으로 나타내자면 weight matrix를 아래의 식 (8)과 같은 방법으로 normalize 해주게 됩니다.

$\overline{W}_{SN}(W) := W / \sigma (W) \tag{8}$

이렇게 되면 $\sigma (\overline(W)_{SN}(W)) = 1$ 이 되고 $\lVert f \rVert_{Lip} \leq 1$이 되어 목표를 달성하게 됩니다. 그리고 이 Spectral norm인 $\sigma (W)$는 $W$의 Largest singluar value와 같습니다.

이번 포스팅의 내용은 여기까지입니다. 쓰고 나니까 굉장히 긴 포스팅이 되었네요ㅎㅎ 다음 포스팅에서는 이제 이 Spectral normalization을 통해서 무엇이 달라지고 어떠한 영향을 줄 수 있는지 알아보기 위해 Spectrally normalized weight의 gradient를 따져보고 그 의미에 대해 해석해보도록 하겠습니다.

2018년 8월 26일 일요일

Spectral Normalization - part.1

이 정리는 Spectral Normalization 논문에 관한 정리입니다. 이번 포스팅에서는 Spectral Normalization이 문제 삼는 부분과 그에 대한 해결책을 깊이 들어가지 않고 간단하게 알아보도록 하겠습니다.

Motivation

ICLR 2018에서 소개된 Spectral Normalization에 관한 정리입니다. Spectral Normlazation은 GAN의 discriminator의 학습을 안정화 시켜 최초로 단일 discriminator와 generator를 사용하여 ImageNet 데이터의 1000개 class에 대해 이미지 생성을 성공시킨 모델입니다.

* Spectral Normalization의 생성 결과

Spectral Normalization을 사용하면 아래와 같은 장점이 있다고 합니다.
  • Lipschitz constant만이 튜닝해야할 hyper-parameter이고 다른 hyper-parameter는 튜닝이 필요가 없습니다.
  • 구현이 간단하고 계산량이 적습니다.
구현이 간단하다고 하니 실험에 적용해 보기 좋을 것 같네요ㅎㅎ 지금부터 Spectral Normalization 논문에 관한 정리를 시작하겠습니다. 

Introduction

GAN은 이론적으로 optimal한 $D$를 가정합니다. $D$가 $x$에 대해 제대로 된 data distribution $q_{data}(x)$과 generative distribution $P_G(x)$의 density ratio인 $D^*_G(x) = \frac{q_{data}(x)}{q_{data}(x) + P_G(x)} = sigmoid(\log\frac{q_{data}(x)}{P_G(x)})$ 를 측정할 수 있다는 가정하에 모든 것이 시작됩니다. 따라서 $D$의 성능은 GAN의 성능에 아주 큰 비중을 차지합니다.

하지만 high dimensional space에 존재하는 $D$는 때로는 정확하지 않은 density ratio estimation을 할 수도 있습니다. 그리고 GAN의 학습 방법은 unstable하다는 문제점을 가지고 있습니다. 이렇게 되면 $D$의 성능을 보장할 수 없고 GAN의 성능 역시 보장할 수가 없습니다. 심지어 Towards Principled Methods for Training Generative Adversarial Networks에 따르면 $q_{data}$와 $P_G$의 $support$가 조금도 겹치지 않게 되면 $D$가 두 분포를 아주 완벽하게 구분할 수 있어 $G$가 학습을 할 수 없다고 합니다. $G$가 $D$를 도저히 속일 수 없을테니 당연한 이야기인 것 같습니다.

* $support$는 distribution이 0이 아닌 값을 갖는 모든 $x$의 공간을 의미합니다.

이 논문은 $D$의 중요성에 대한 문제를 제기하여 $D$의 각 layer에 Spectral Normalization이라는 기법을 도입하여 $D$를 좀 더 stable하게 만들어 위와 같은 결과를 만들게 됩니다.

Method - (1)

먼저 본격적으로 들어가기에 앞서 여러가지 notation과 이론적인 기반에 관한 이야기를 해보도록 하겠습니다. GAN이 익숙하신 분들이라면 이 부분은 쉽게 읽어나가실 수 있을 것 같습니다.

$f(x, \theta) = W^{L+1}a_L(W^L(a_{L-1}(W^{L-1}(...a_1(W^1(x)...))) \tag{1}$

  • $f$ = discriminator(가장 마지막 확률을 반환해주는 activation function의 직전 layer까지)
  • $W^L$ = L번째 layer의 weight(learning parameter) 
  • $a_L$ = L번째 activation function(ReLU, tanh ...)
  • $x$ = discriminator의 input
  • $\theta = \{W^1, ..., W^L, W^{L+1}\}$
$D(x, \theta) = A(f(x, \theta)) \tag{2}$

식(2) 는 완전한 $D$를 의미합니다. 위의 $f(x, \theta)$에 마지막 activation function $A$를 붙여 $x$가 $q_{data}$에서 sample 된 확률을 반환해줍니다. 이렇게 만들어진 $D$는 GAN의 objective function $V(G, D)$에 대해 $\min_{G} \max_{D} V(G, D)$ 로 학습을 하게 됩니다.

이렇게 학습을 하여 optimal해진 $D$인 $D^*_G$는 fixed generator $G$에 대해 아래와 같은 density ratio estimation이 가능합니다. 그리고 GAN은 이렇게 optimal해진 $D$에 대해 $G$를 학습하는 것을 가정합니다.

$D^*_G(x) = \frac{q_{data}(x)}{q_{data}(x) + P_G(x)} = sigmoid(f^*(x)), where f^*(x) = \log(q_{data}(x)) - \log(P_G(x)) \tag{3}$

$f^*(x) = \log\frac{q_{data}(x)}{P_G(x)}$ 이므로 식(3) 역시 density ratio를 표현한 것임을 알 수 있습니다. 여기서 이제 $D$의 허점이 생기는데요. $f^*(x) = \log(q_{data}(x)) - \log(P_G(x))$의 미분값에 대해 살펴보겠습니다.

$\bigtriangledown_x f^*(x) = {\partial{f^*(x)}\over\partial{x}} = \frac{1}{q_{data}(x)} \bigtriangledown_x q_{data}(x) - \frac{1}{P_G(x)} \bigtriangledown_x P_G(x) \tag{4}$

식 (4)는 단순히 $f^*(x)$를 $x$로 미분한 것입니다. 이 때 문제가 발생합니다. 바로 식 (4)에서 표현된 ${\color{red}{f^*(x)}}$ 의 derivate 값에 제한이 없고(Unbounded) 심지어 계산이 불가능 할 때도 있다는 것입니다. 이러한 현상에 대해 Loss-sensitive generative adversarial networks on lipschitz densities, Wasserstein generative adversarial networks(WGAN), Improved training of wasserstein GANs(WGAN-GP) 논문들에서 문제를 제기하고 이에 대한 해결책을 찾고자 노력해왔습니다. 이들은 input example $x$에 대해 regularization term을 추가하여 Lipschitz constant를 조절하는 방식으로 문제를 해결하고자 했습니다. 

Spectral Normalization은 regularization term을 추가하는 방식이 아닌 weight normalization 방식을 통해 $D$의 Lipschitz constant에 상한선 $K$를 만들어 $D$를 stable하게 만들고자 합니다.  이를 반영하여 $D$의 objective function을 만들면 아래와 같습니다.

$f = \arg\max_{\lVert f \rVert \leq K} V(D, G) \tag{5}$

이를 풀어서 설명하자면 $f$의 Lipschitz constant가 $K$이하인 $f$ 중에 $V(G, D)$를 maximize하는 $f$를 고르겠다는 뜻입니다. 여기서 $f$는 식(2) $D(x, \theta) = A(f(x, \theta))$의 $f$를 의미합니다.

이번 포스팅의 내용은 여기까지입니다. 다음 포스팅에서는 Lipschitz constant가 무엇이고 이것이 갖는 의미가 무엇인지 그리고 Spectral Normalization이 무엇이고 이를 통해 Lipschitz constant를 어떻게 조절하는지 알아보도록 하겠습니다. 감사합니다.

2018년 8월 25일 토요일

Generative Adversarial Network(GAN) - part.4

이 정리는 Generative Adversarial Nets 논문에 관한 정리입니다. 이번 포스팅은 GAN의 이론적인 뒷받침에 관한 내용입니다. 여기서 보이고자 하는 것들은

  1. GAN의 value function은 global optimum이 존재하고 이 때의 유일한 solution은 $\mathbf{P_g = P_{data}}$라는 것 
  2. 논문의 Algorithm 1에서 제시한 GAN의 학습 방법은 수렴한다는 것
이렇게 두 가지입니다. 각각 논문의 4.1과 4.2에 해당하는 내용입니다. GAN을 한 번 정리할 겸 우선 Algorithm 1을 먼저 훑어보고 넘어가도록 하겠습니다. 이어지는 내용은 Algorithm 1의 순서 그대로입니다.

<Algorithm 1>

for number of training iterations do
  for $k$ steps do
  1. 먼저 $D$를 $k$번 먼저 학습시키고자 합니다. 이는 뒤에 나오겠지만 GAN의 value function의 global optimum과 유일한 solution에 관한 증명이 $D$가 optimal 함을 가정으로 하기 때문입니다.
  2. noise prior $P_g(z) = N(0, 1)$에서 $m$개의 $z$를 sampling 합니다.
  3. Training data에서 $m$개의 $x$를 가져옵니다.
  4. $\bigtriangledown_{\theta_d}\frac{1}{m}\sum_{i=1}^m [\log D(x^{(i)}) + \log (1-D(G(z^{(i)})))] ]$ 을 gradient로 해서 gradient ascending 방법으로 $D$를 학습시킵니다. 이 식이 복잡해 보이지만 ${\partial{V(D, G)}\over\partial{\theta_d}}$ 과 똑같습니다. gradient ascending으로 하는 이유는 $D$는 $V(D, G)$를 maximize 해야하기 때문입니다. 이는 $-V(D, G)$를 minimize 하는 것과 동일합니다.
  end for
  1. noise prior $P_g(z) = N(0, 1)$에서 $m$개의 $z$를 sampling 합니다.
  2. $\bigtriangledown_{\theta_g}\frac{1}{m}\sum_{i=1}^m \log(1-D(G(z^(i))))]$ 을 gradient로 해서 gradient descending 방법으로 $G$를 학      습시킵니다. 이유는 위의 4번과 유사하게 $G$는 $V(D, G)$를 minimize 해야하기 때문입니다.
end for

4.1 Global optimality of $p_g = p_{data}$

여기서 이전부터 계속 나왔던 optimal discriminator에 대한 내용이 나옵니다. 우선 any given generator $G$에 대해 optimal discriminator $D$를 가정합니다. 이 때 이 $D$에 대해 아래의 Proposition 1. 이 성립합니다.

Proposition 1. For $G$ fixed, the optimal discriminator $D$ is

$D^*_G(x) = \frac{P_{data}(x)}{P_{data}(x) + P_g(x)} \tag{2}$

이 증명은 사실 굉장히 간단합니다. $D$는 $V(D, G)$를 maximize 시킵니다. 따라서 optimal $D$는 $V(D, G)$를 maximize 하는 $D$를 의미합니다. 이를 구하기 위해선 미분을 해야하므로 우선 $V(D, G)$를 풀어 써보도록 하겠습니다.

$\begin{align}
V(D, G) &= E_{x\sim p_{data}(x)}[\log D(x)] + E_{z\sim p_z(z)}[\log(1-D(G(z)))] \nonumber \\
&= \int_{x} p_{data}(x)\log(D(x)) + \int_{z} p_{z}(z)\log(1-D(G(z))) \nonumber \\
&= \int_{x} p_{data}(x)\log(D(x)) + p_{g}(x)\log(1-D(x)) \nonumber \\ \tag{3}
\end{align}$

식 (3)에서 첫 번째 줄의 식에서 두 번째 줄의 식으로 넘어가는 과정은 그저 expectation의 정의로 한 것이고 두 번째에서 세 번째 줄로 넘어가는 과정은 논문의 Figure 1과 함께 보면 좀 더 쉽게 이해할 수 있습니다. (논문의 Figure 1에 대한 설명은 Generative Adversarial Network(GAN) - part.3에 있습니다) 논문의 Figure 1을 보면 각 $z$는 $x$의 어느 한 점으로 mapping이 됩니다. $p_z(z)$에서 sample 된 $z$가 그대로 $x$에 mapping 되어 $p_g(x)$를 이루게 되므로 $\int_z{p_z(z)}$를 $\int_x{p_g(x)}$로 표현할 수 있습니다. 이렇게 해서 식 (3)이 나오게 됩니다.

논문의 식 (3)의 아래쪽에 The discriminator does not need to be defined outside of $Supp(p_{data}) \cup \, Supp(p_g)$ 라는 문장이 있습니다. $Supp(p_{data})$란 $p_{data}(x) \neq 0$인 $x$의 영역을 의미합니다. 따라서 outside of $Supp(p_{data}) \cup \, Supp(p_g)$ 는 data distribution 와 generative distribution 모두에서 값으로 0을 갖는 이미지 $x$들은 고려할 필요가 없다는 것을 의미하고 직관적으로도 납득이 되는 말입니다.

이제 이 $V(D, G)$의 값을 최대로 하는 $D$를 찾고자 합니다. 이는 적분 안쪽의 식을 $D(x)$로 편미분 하는 과정을 통해 얻을 수 있습니다. 이 과정은 아래와 같습니다.

${\partial\over\partial{D(x)}} \, p_{data}(x) \log(D(x)) + p_g(x) \log(1-D(x)) = 0$
$\frac{p_{data}(x)}{D(x)}-\frac{p_g(x)}{1-D(x)} = 0$

$\therefore \, D(x) = \frac{p_{data}(x)}{p_{data}(x) + p_g(x)}$

따라서 optimal $D$인 $\mathbf{D_G^*(x) = \frac{p_{data}(x)}{p_{data}(x) + p_g(x)}}$가 되는 것입니다.

이러한 $D$의 training objective는 $D$의 parameter를 잘 조절해서 $x \sim p_{data}(x) \mapsto y=1$과 $x \sim p_g(x) \mapsto y=0$이라는 observation 이 나올 가능성(likelihood)인 $P(Y=y | x)$를 최대화 하는 방법이므로 maximizing log-likelihood로 해석이 가능합니다.

지금까지는 optimal한 $D$는 $D_G^*(x) = \frac{p_{data}(x)}{p_{data}(x) + p_g(x)}$에 대한 증명이었습니다. 이제부터는 이 사실을 이용해 GAN의 training objective는 global optima를 갖고 이 global optima는 $p_g = p_{data}$가 되었을 때만 얻을 수 있다는 것에 대한 증명을 알아보도록 하겠습니다. 논문의 Theorem 1에 해당합니다.

Theorem 1. The global minimum of the virtual training criterion $C(G)$ is achieved if and only if $p_g = p_{data}$. At that point, $C(G)$ achieves the value $-\log4$

위에서 $\max_D V(D, G)$는 이미 해결했습니다. 따라서 Proposition 1을 이용해 $\max_D V(D, G)$를 다시 써보도록 하겠습니다.

$\begin{align}
C(G) &= \max_D V(G, D) \nonumber\\
&= E_{x \sim p_{data}}[\log D_G^*(x)] + E_{z \sim p_z}[\log(1-D_G^*(G(z)))] \nonumber\\
&= E_{x \sim p_{data}}[\log D_G^*(x)] + E_{x \sim p_g}[\log(1-D_G^*(x))] \nonumber\\
&= E_{x \sim p_{data}}[\log \frac{p_{data}(x)}{p_{data}(x) + p_g(x)}] + E_{x \sim p_g}[\log \frac{p_g(x)}{p_{data}(x) + p_g(x)}] \tag{4}
\end{align}$

optimal $G$는 이 $C(G)$를 minimize 하는 $G$를 의미합니다. $C(G)$의 minimum 값은 $C(G)$의 식을 조금 변형한 뒤 $KL Divergence$를 사용해 구할 수 있습니다. 아래의 식들이 이것을 구하는 과정입니다.

$\begin{align}
C(G) &= C(G) + \log4 - \log4 \nonumber\\
&= E_{x \sim p_{data}(x)} [\log \frac{p_{data}(x)}{p_{data}(x) + p_{g}(x)}] + \log2 + E_{x \sim p_{g}(x)} [\log \frac{p_g(x)}{p_{data}(x) + p_g(x)}] + \log2 - \log4\nonumber\\
&= \int_x p_{data}(x) \log \frac{2p_{data}(x)}{p_{data}(x) + p_g(x)} + \int_x p_g(x) \log \frac{2p_g(x)}{p_{data}(x) + p_g(x)}dx - \log4 \nonumber\\
&= \int_x p_{data}(x) \log \frac{p_{data}(x)}{\frac{p_{data}(x) + p_g(x)}{2}} dx + \int_x p_{g}(x) \log \frac{p_{g}(x)}{\frac{p_{data}(x) + p_g(x)}{2}} dx - \log4 \nonumber\\
&= -\log4 + KL(p_{data} \parallel \frac{p_{data} + p_g}{2}) + KL(p_g \parallel \frac{p_{data} + p_g}{2}) \tag{5}
\end{align}$

여기서 다음 단계로 넘어가기 전에 Jensen-Shannon divergence라는 것에 대해 알아보고 넘어가겠습니다. Jensen-Shannon divergence는 아래와 같이 정의됩니다.

$JSD(P \mid Q) = \frac{1}{2}KL(P \mid M) + \frac{1}{2}KL(Q \mid M) \, where \, M = \frac{P+Q}{2}$

눈치 빠르신 분들은 눈치 채셨겠지만 식(5)에서 저 고생을 한 이유가 바로 바로 $p_{data}$와 $p_g$ 사이의 Jensen-Shannon divergence 꼴을 만들기 위함이었습니다. 이제 식(5)는 아래와 같이 쓸 수 있습니다.

$C(G) = -\log4 + 2 JSD(p_{data} \parallel p_g)$

Kullback-Leibler divergence와 Jensen-Shannon divergence는 모두 두 분포 사이의 차이를 측정하는데 사용됩니다. 하지만 Kullback-Leibler divergence 는 distance metric이 될 수 없지만 Jensen-Shannon divergence는 distance metric입니다. 왜냐하면 $KL(P|Q) \neq KL(Q|P)$, $JSD(P|Q) = JSD(Q|P)$이기 때문입니다. 이제 $P$와 $Q$ 사이의 거리인 $JSD(P|Q)$는 오로지 P와 Q가 같을 때 최소값으로 0을 갖습니다. 따라서 $C(G)$는 오로지 $p_{data} = p_g$ 일 때 $-\log 4$의 global minimum을 갖게 됩니다.

이야기가 너무 길었으므로 짧게 정리해보도록 하겠습니다. $C(G)$는 $D$가 optimized 되었다고 가정할 때 $G$의 objective function입니다. $G$는 이 $C(G)$를 minimize 시켜야합니다. Theorem 1. 에서 증명하고자 하는 것은 $C(G)$가 minimize 되어 optimized $G$를 얻을 수 있는 경우는 오로지 하나, $p_{data} = p_g$의 경우일 때라는 것입니다.

이를 증명하기 위해 $C(G)$를 Jensen-Shannon divergence로 나타내는 과정을 거쳤고 $JSD(P|Q)$는 오로지 $P = Q$일 때 최소값으로 0을 갖는다는 성질을 이용해 $C(G)$는 $p_{data} = p_g$일 때 global minimum을 갖는다는 것을 증명하였습니다.

2018년 8월 22일 수요일

Generative Adversarial Network(GAN) - part.3

이 정리는 Generative Adversarial Nets 논문에 관한 정리입니다. 이번 포스팅부터 본격적으로 논문을 따라 가보도록 하겠습니다. 내용이 살...짝 어려울 수 있습니다. 논문의 Abstract3. Adversarial nets의 내용입니다.

Abstract

GAN에서는 두 개의 모델을 동시에 학습시킵니다. Discriminator($D$)Generator($G$)가 바로 그것입니다. 두 모델이 학습을 통해 궁극적으로 얻고자 하는 바는 아래와 같습니다.
  • $D$는 임의의 sample(이미지)를 보고 그것이 data distribution인 $P_x$에서 sample 된 것인지 혹은 generative distribution인 $P_g$에서 sample 된 것인지 구분합니다. output으로는 $P_x$에서 sample 됐을 확률을 반환합니다.
  • $G$는 학습을 통해 $P_x$와 최대한 유사한 $P_g$를 만들어냅니다. output으로는 가짜로 만든 이미지를 반환합니다. 
* $P_x$에서 sample된 이미지 = Training data = 진짜 이미지
* $P_g$에서 sample된 이미지 = $G$가 만든 이미지 = 가짜 이미지

이 때 $P_x$를 단숨에 수식으로 나타낸다던가 모든 픽셀 조합에 대해 확률을 계산하여 나타내는 것은 불가능합니다(Intractable probabilistic computation). 따라서 GAN은 $D$와 $G$라는 multi layer perceptron(mlp)를 이용해 $P_x$를 학습하고자 하는 것입니다.

학습을 통해 $D$는 real과 fake를 최대한 잘 구분하고자 하고 $G$는 $D$가 최대한 실수하도록 노력합니다. 이렇게 서로 적대적이기 때문에 adversarial nets라는 명칭이 붙었고 이러한 학습 과정 때문에 minimax game이라고도 불립니다. (minimax game은 잠시 후에 다시 자세히 다루겠습니다.)

학습이 완료 되어 $D$와 $G$가 Nash equilibrium에 도달해 더 이상 변하지 않는 unique solution을 찾으면 결국 $P_g$는 $P_x$와 정확히 일치하게 되고 $D$는 모든 $x$에 대해 $D(x) = \frac{1}{2}$가 나오게 됩니다. 직관적으로 말하자면, $P_g$가 $P_x$과 완전히 같아져 $D$가 임의의 $x$를 보고 이것이 $P_g$에서 sample된 것인지 $P_x$에서 sample된 것인지 구분하지 못해 반반이라고 판단해 $\frac{1}{2}$의 확률을 반환하는 상태가 되는 것입니다.

Adversarial nets

1. 어떻게 $D$ and $G$를 학습할까?

GAN의 value function인 $V(D, G)$를 살펴보도록 하겠습니다. 이 $V(D, G)$를 통해 $G$와 $D$가 학습을 하게 됩니다. 아래는 GAN의 training을 나타내는 수식입니다.

$\min_{G}\max_{D} V(D, G) = E_{x \sim p_{data}(x)}[\log D(x)] + E_{z \sim p_z(z)}[\log(1-D(G(z)))] \tag{1}$

* GAN의 value function. $p_{data}(x)$는 위의 $p_x(x)$와 동일하다

$E_{x \sim p_{data}(x)}[\log D(x)]$는 모든 training data $x$에 대한 $\log D(x)$의 평균, $E_{z \sim p_z(z)}[\log(1-D(G(z)))]$는 $N(0, 1)$에서 sampling된 모든 $z$에 대한 $\log(1-D(G(z)))$의 평균을 의미합니다. 위의 수식에서 $G$는 $V(D, G)$를 minimize하고 $D$는 $V(D, G)$를 maximize하므로 $D$와 $G$가 어떻게 학습 되는지를 알기 위해선 편의상 $E_{x \sim p_{data}(x)}$ 나 $E_{z \sim p_z(z)}$ 부분은 잠시 제외 하고 $\log$ 부분만 보셔도 무방합니다. 그리고 같은 식을 $G$는 minimize하고 $D$는 maximize하기 때문에 minimax game이라고 불립니다.
  • $D$는 $V(D, G)$를 maximize 시키기는 방향으로 학습합니다. $D$는 0과 1사이의 값을 반환하므로 $V(D, G)$를 maximize 하려면 $D(x) = 1$, $D(G(z)) = 0$이 되어야  최대값이 됩니다. 이는 $D$로 하여금 진짜 이미지는 1이라는 정답, 가짜 이미지는 0이라는 정답을 주고 $D$를 학습시키는 것과 마찬가지입니다. 이렇게 하여 $D$는 진짜 이미지라고 판단될 시 1에 가까운 값, 가짜 이미지라고 판단될 시 0에 가까운 값을 반환하게 되는 것입니다.
  • $G$는 $V(D, G)$를 minimize 시키는 방향으로 학습합니다. 이 때 $V(D, G)$를 보면 $G$가 영향을 미치는 term은 오직 $E_{z \sim p_z(z)}[\log(1-D(G(z)))]$ 이 부분 뿐임을 알 수 있습니다. $E_{z \sim p_z(z)}[\log(1-D(G(z)))]$를 minimize 시키기 위해선 $D(G(z)) = 1$이 되어야 최소값이 됩니다. 이는 $D$가 가짜 이미지를 보고 진짜 이미지라고 착각할 수 있도록, 즉 가짜 이미지를 보고 1을 반환할 수 있도록 $G$를 학습시키는 것과 마찬가지 입니다.
직관적으로도 알 수 있겠지만, GAN은 이론적으로 $D$가 optimal하다고 가정합니다. 즉 $D$가 임의의 이미지를 보고 이미지가 $P_{data}(x)$에서 sampling 됐을 확률을 반환하는데 이 값이 정말 정확한 확률임을 가정합니다. 하지만 현재의 $P_g$에 대해서 $D$를 optimal할 때까지 학습시키는 것은 computationally 불가능합니다(논문의 Algorithm 1. 에서 inner loop에서 $k$ steps가 아니라 optimal 해질 때까지 반복하는 것을 의미합니다). 따라서 $D$와 $G$를 번갈아가면서 학습하는데 $D$를 먼저 $k$번 학습하고 $G$를 1번 학습합니다(실제 구현시에는 $k=1$을 사용합니다). 이 때 $G$가 충분히 천천히 학습 된다면 $G$가 봤을 때 $D$는 $k$번의 학습으로 optimal solution에 근접한 상태가 되는 결과를 낳습니다. 따라서 이렇게 번갈아 학습하게 되면 optimal한 $D$와 $G$를 얻을 수 있습니다.

2. 실용성의 문제

하지만 실제로 Training을 시키면 조금 문제가 생깁니다. 바로 위의 식 (1)에서 $\log(1-D(G(z)))$ 부분 때문입니다. 아래 그림의 파란색 그래프가 바로 식(1)에 해당하는 $J(G) = \log(1-D(G(z)))$ 를 $y$축, $D(G(z))$를 $x$축으로 그린 그림입니다.
* $\log(1-D(G(z)))$ 부분을 여러가지로 변형한 것들의 그래프입니다.

문제는 바로 $D(G(z))$가 0에 가까울 때 파란 그래프의 기울기가 거의 0이라는 점입니다. $D(G(z))$가 0에 가까울 때는 학습 초기에 $G$가 가짜 이미지를 제대로 만들지 못해 $D$가 가짜 이미지를 보고 쉽게 0에 가까운 값을 반환할 때입니다. 그런데 이 때 그래프의 기울기가 거의 0이라는 것은 ${\partial J(G)\over\partial D(G(z))} \approx 0$임을 의미합니다. 기울기가 거의 0이 되는 것을 saturate 한다고 합니다. 이는 곧 ${\partial J(G)\over\partial \theta_G} = {\partial J(G)\over\partial D(G(z))} {\partial D(G(z))\over\partial (G(z))} {\partial G(z)\over\partial \theta_G} \approx 0$ (이 때, $\theta_G \equiv G$의 parameter)이므로 $G$가 학습 초기에 학습을 거의 하지 못한다는 의미가 됩니다.

따라서 $G$를 학습할 때는 기존의 식 (1)을 살짝 변형하여 사용하게 됩니다. 
$\min_G V(D, G) = E_z \sim p_z(z)[\log(1-D(G(z)))] \rightarrow \max_G V(D, G) = E_z \sim p_z(z)[\log(D(G(z))]$
이렇게 하면 saturate 문제를 해결할 수 있습니다. 화살표 오른쪽의 식은 위 그림에서 초록색 그래프에 해당합니다. $D(G(z))$가 0 근처일 때 더이상 그래프의 기울기가 0이 아님을 볼 수 있습니다. 따라서 $G$가 초기에 학습을 잘 진행하고 어느정도 진행된 후에 학습을 조금씩 진행하게 됩니다.

3. 학습이 점차 진행되면서 일어나는 distribution의 변화


* 논문의 Figure 1입니다. 학습이 진행되면서 distribution이 어떻게 변하게 되는지 보여줍니다.

우선 그림의 각 요소들이 무엇을 의미하는지 설명드리도록 하겠습니다.
  • 직선 $x$data space입니다. 모든 pixel 조합들이 직선 $x$위에 있다고 보시면 됩니다. 
  • 직선 $z$는 prior distribution에서 sample되는 $z$가 존재하는 space입니다. 직선 $x$와 직선 $z$가 화살표로 연결되는 것은 prior distribution에서 sample된 몇 개의 $z$가 $x$에 mapping 되는 것을 의미합니다. 
  • 초록색 그래프가 가짜 이미지가 sample 되는 generative distribution인 $P_g$입니다. $z$가 몰려서 mapping 된 $x$의 부근에서 $P_g$가 높음을 확인할 수 있습니다. 
  • 검은 점선data generating distribution, 즉 training data의 distribution인 $P_{data}$입니다. 검은색 점선과 최대한 유사한 초록색 선을 만드는 것이 GAN training의 목표입니다. 
  • 파란색 점선discriminative distribution, 즉 $D$가 $x$를 봤을 때 반환하는 확률값입니다. 파란색 점선의 각 값은 수직으로 아래에 있는 $x$를 보고 반환한 확률값이 됩니다.
왼쪽에서 오른쪽으로 갈 수록 학습이 진행되는 것입니다. 가장 왼쪽부터 오른쪽으로 차례대로 무슨 일이 일어나고 있는지 살펴보겠습니다.
  • 첫 번째는 $D$와 $G$가 거의 수렴했지만 아직 수렴하지 못한 상태입니다. $D$는 $P_{data}$가 높은 지점에서 높은 값을 반환하고 $P_g$가 높은 지점에서 낮은 값을 반환하려고 하지만 완벽하지는 않습니다. $P_g$역시 아직 $P_{data}$와 비슷하긴 하지만 아직 완벽히 똑같지는 않습니다.
  • 두 번째는 첫 번째에 비해 $D$가 한 번 학습된 모습입니다. $D$는 optimal 해졌을 때 $D^*(x) = \frac{P_{data}(x)}{P_{data}(x) + P_g(x)}$를 반환하게 됩니다. 다음 포스팅에서 자세히 다루겠지만 직관적으로 봤을 때 이 식은 $x$가 $P_{data}(x)$에서 sample 된 확률임을 알 수 있습니다. 따라서 그래프의 가장 왼쪽 부근의 $P_{data}(x)$와 $P_g(x)$의 값이 변하지 않는 구간에서 $D$의 distribution도 변하지 않는 것을 보면서 $D$가 조금 더 optimal 해짐을 볼 수 있습니다.
  • 세 번째는 두 번째에 비해 $G$가 한 번 학습된 모습입니다. $z$에서 $x$로의 mapping 이 집중되는 공간이 $P_{data}$의 값이 높은 구간인 왼쪽으로 살짝 이동하게 됩니다. 이에 따라 $P_g$ 역시 $P_{data}$와 조금 더 유사해졌습니다.
  • 네 번째는 몇 번의 training이 지나 $D$와 $G$가 optimal이 된 모습입니다. $P_g$는 $P_{data}$에 대한 학습을 끝내 완전히 일치하고 $D$는 $P_{data}$와 $P_g$를 구분하지 못해 모든 $x$에 대해 $D(x) = \frac{1}{2}$를 반환하고 있습니다.
이번 포스팅의 내용은 여기까지입니다. 이번 내용이 아리송하신 분들은 GAN을 구현한 코드를 같이 보면서 읽으시면 이해하는데 아아아아주 큰 도움이 될 것입니다. 다음 포스팅에서는 이제 위의 내용들을 뒷받침 해주는 이론적인 증명들에 대해 알아보겠습니다. 논문의 4. Theoretical Results에 해당합니다.


2018년 8월 19일 일요일

Generative Adversarial Network(GAN) - part.2

이 정리는 Generative Adversarial Nets 논문에 관한 정리입니다. 이번 포스팅에서는 GAN을 이해하는데 있어서 필수적인 distribution 개념에 대해 짚고 넘어가도록 하겠습니다. 우선 distribution이 무엇인지 그리고 이 논문에서 나오는 distribution을 어떻게 이해할 수 있는지를 살펴보겠습니다.

Distribution

Distribution이란 random하게 발생할 수 있는 모든 상황을 그 상황이 발생할 확률로 나타낸 것이라고 볼 수 있습니다.
* 주사위 두개를 던져 나온 숫자의 합에 관한 distribution입니다.

위 그림에서 $x$는 주사위 두 개를 던져 나온 숫자의 합입니다. 주사위는 1부터 6까지의 숫자가 있으므로 주사위 두 개를 던져 나온 숫자의 합 $x$는 2부터 12까지 나올 수 있습니다. 그리고 2부터 12까지 나올 확률이 각각 있습니다. 예를 들어 $P(x = 4) = \frac{3}{36} = 0.083$입니다. $x=7$에서 가장 높은 값을 갖는데 이는 주사위 두 개를 던졌을 때 합이 7이 나올 경우의 수가 가장 많기 때문입니다. 이런 식으로 2부터 12까지 모든 경우에 대해 확률을 계산하여 random한 상황 $x$를 나타낸 것을 random variable $x$에 대한 distribution이라고 합니다.

그리고 이는 $P(x = 2) = \frac{1}{36}$, $P(x=3) = \frac{2}{36}$ 처럼 함수로 나타낼 수 있습니다.

Distribution of image

GAN에서는 이 distribution이 어떻게 사용될까요? 우선 GAN에서는 $x$가 주사위 두 개의 합이 아닌 이미지가 됩니다. 예를 들어 사람 얼굴 이미지에 대한 distribution이 있다고 해보겠습니다. 이미지의 크기가 $128 \times 128$ 이고 RGB 채널을 갖는다고 하면 $x$는 $128 \times 128 \times 3$ 개의 실수이고 각 실수는 0부터 255까지의 값을 갖게 됩니다. 위의 주사위의 예에서는 $x$가 1개의 정수이고 가능한 값은 2부터 12까지 11개인데 이제는 $x$가 $128 \times 128 \times 3$ 개의 실수이고 가능한 값의 범위는 0부터 255까지가 되면서 가능한 값이 무한 개가 되었습니다.

아래 그림이 사람 얼굴 이미지에 대한 distribution입니다. $x$는 이미지이자 $128 \times 128 \times 3$ 개의 실수입니다. Probability Density Function(PDF)은 그래프 아래의 면적이 1이고 $x$의 확률이 높을 수록 큰 값을 갖는 함수입니다.

* 사람 얼굴 이미지에 대한 distribution

사람 얼굴 이미지에 대한 distribution에서 높은 확률을 갖는 $x$는 무엇일까요? 당연히 사람 얼굴 이미지입니다. 위 그림에서 $x$가 사람 얼굴 이미지이면 pdf가 큰 값을 갖고 사람 얼굴 이미지가 아닌 개, 나무 이미지일 때는 pdf가 작은 값을 갖습니다. 여기서 개, 나무 이미지 뿐만 아니라 사람 얼굴과 관련 없는 모든 픽셀 조합은 사람 얼굴 이미지에 비해 PDF가 전부 작은 값을 가질 것입니다. 이미지에 대한 distribution은 위와 같은 방법으로 해석할 수 있습니다.

위의 주사위 예제에서는 $P(x = 2) = \frac{1}{36}$, $P(x=3) = \frac{2}{36}$ 이런 식으로 모든 $x$에 대한 확률을 계산할 수 있었습니다. 하지만 이미지의 distribution은 이처럼 모든 픽셀 조합 $x$에 대해 확률을 계산할 수도 없고 Normal distribution 처럼 ${\displaystyle p(x\mid \mu ,\sigma ^{2})={\frac {1}{\sqrt {2\pi \sigma ^{2}}}}e^{-{\frac {(x-\mu )^{2}}{2\sigma ^{2}}}}}$ 이렇게 하나의 수식으로 pdf를 표현할 수도 없습니다.

Distribution in GAN

GAN에서는 몇 개의 중요한 Distribution이 나옵니다. 어떠한 Distribution이 나오는지 여기서 미리 정리하고 가도록 하겠습니다. 아래에서 등장하는 notation 혹은 명칭은 논문의 3. Adversarial nets를 기반으로 하였습니다.

$P_x$ 혹은 $P_{data}$ : data distribution, data generating distribution

Training data의 이미지들이 이루고 있는 distribution입니다. 즉, 가짜가 아닌 실제 이미지들이 이루는 distribution입니다. 이 distribution에서는 training data에 있는 이미지와 유사할 수록 pdf가 높은 값을 갖습니다. 이 distribution을 하나의 수식으로 나타내거나 모든 경우에 대해 확률을 기술하는 것은 역시 불가능합니다. 

$P_x$에 대해 pdf로도 표현할 수 없고 모든 경우에 대해 확률을 구할 수도 없는데 어떻게 임의의 이미지 $x$가 실제 이미지인지 가짜 이미지인지를 구분할 수 있을까요? $P_x$를 정확하게 pdf로 표현하거나 모든 경우에 대해 확률을 구할 수는 없지만 $P_x$에 대해 학습하여 임의의 $x$가 $P_x$에서 sampling 된 이미지일 확률(가짜가 아닌 실제 이미지일 확률)을 구해주는 객체는 만들 수 있습니다. 이 객체에 해당하는 것이 바로 discriminator입니다. 이 discriminator를 $D$로 표현하는데 $D(x)$ 의 값이 바로 위에서 말한 확률에 해당합니다.

* distribution $P$에서 sampling 한다는 것은 그 distribution이 나타내는 확률에 맞게 random으로 뽑는다는 의미입니다.
* $P_x$에서 sampling 된 이미지는 Training data에서 하나 뽑은 이미지라고 이해하시면 됩니다.

$P_g$ : generator's distribution

Generator가 학습을 통해 $P_x$와 최대한 유사하게 만든 distribution입니다. 즉, 실제가 아닌 가짜 이미지들이 이루는 distribution입니다. Generator는 이 distribution으로부터 이미지를 sampling하여 가짜 이미지를 만듭니다.

하지만 알 수 없는 분포 $P_g$로부터 바로 sampling하는 것은 불가능합니다. 따라서 이미 알고 있는 distribution으로부터 작은 vector를 sampling 한 다음 이 벡터를 data space($x$의 공간)에 mapping 시키는 과정을 통해 $P_g$로부터 sampling하게 됩니다. 여기서 data space의 아무 점에 mapping 하는 것이 아니라 최대한 $P_x$와 유사하게 mapping 하고자 하는 학습 과정을 통해 $P_g$가 만들어지게 됩니다. (이 내용은 다음 포스팅에서 더 자세히 다룹니다)

$P_z$ : prior distribution

prior 는 사전적으로 '어떤 사건이 일어나기 전'을 의미합니다. prior distribution은 사건이 일어나기 전부터 이미 알고 있는 distribution을 의미합니다. 이것이 위의 $P_g$에서 나온 이미 알고 있는 distribution에 해당합니다. 이 논문에서는 $P_z$를 $N(0, 1)$, 즉 평균이 0이고 분산이 1인 normal distribution으로 정의합니다. 사건이 일어나기 전에 이미 $N(0, 1)$ 임을 알고 있으므로 prior distribution입니다.

Generator를 $G$로 표현하는데 이 때 가짜 이미지를 만들어내는 과정은
  • $z \sim P_z(z)$ : $P_z$에서 random vector $z$ sampling
  • $ x_{fake} = G(z)$ : $z$와 data space의 mapping을 통한 $P_g$에서의 sampling
이렇게 나타낼 수 있습니다.

* $z \sim P_z(z)$은 distribution $P_z$에서 sample된 $z$를 의미합니다.


이것으로 Generative Adversarial Network(GAN) - part.2의 내용을 마치겠습니다. Generative Adversarial Network(GAN) - part.3 에서는 본격적으로 논문을 따라가며 GAN을 이해해보도록 하겠습니다. 감사합니다.

2018년 8월 14일 화요일

Generative Adversarial Network(GAN) - part.1

이 정리는 Generative Adversarial Nets 논문에 관한 정리입니다.

Motivation  


현재 세계적으로 굉장히 많은 주목을 받고 있는 분야인 Deep Learning, 그리고 그 중에서도 많은 주목을 받고 있는 모델을 고르자면 Generative Adversarial Network (GAN)을 빼지 않을 수가 없습니다. GAN이란 무엇일까요?

Deep Learning에 많은 분야가 있지만 그 중 GAN은 이름에서도 알 수 있듯이 생성 모델, 즉 Generative model에 속합니다. GAN을 이용하면 굉장히 사실적인 가짜 이미지를 만들 수도 있고 어떤 속성의 이미지를 다른 속성의 이미지로 위화감 없이 변화시키는 등 다양한 일을 할 수 있습니다. 아래 사진이 그 예시입니다(놀랍...)
* 이 사진은 ProgressiveGAN 이라는 GAN 모델이 만들어낸 '가짜' 사람 얼굴입니다.


지금부터 전설이 된 논문 Generative Adversarial Nets에 대한 정리 및 리뷰를 시작하겠습니다.

For beginners


우선 복잡한 수학은 다루지 않고 이야기를 시작하도록 하겠습니다.
* GAN의 기본적인 구조입니다.

그림에서 보면 파란색으로 칠해진 도형인 Generator Discriminator가 보입니다. 이 둘은 Deep neural network 입니다. 

Generator는 input을 이용해 가짜 이미지인 Fake를 만드는 network입니다. Discriminator는 input으로 들어온 이미지가 Training data에 해당하는 진짜 이미지 Real인지 Generator가 만든 가짜 이미지 Fake인지 판단하여 진짜 이미지라면 1, 가짜 이미지라면 0을 반환하는 network입니다. 위 그림에서 Real과 Fake가 Discriminator의 input으로 사용됨을 볼 수 있습니다.

GAN training을 통해 하고자 하는 것은 다음과 같습니다 
  1. Discriminator는 학습을 통해 Real을 input으로 받으면 1, Fake를 input으로 받으면 0을 반환하는 능력을 키웁니다. 즉, Real과 Fake를 올바로 판단하는 능력을 학습합니다.
  2. Generator는 Discriminator를 속일 수 있을 정도로 정교한 Fake를 만드는 능력을 키웁니다. 즉, Discriminator가 Fake를 봤을 때 1이라고 잘못 반환하도록 Fake를 최대한 진짜처럼 만들고자 노력합니다. ( * 여기서 Generator의 input은 일단은 작은 dimension의 random vector 라고 생각하시면 됩니다.)
  3. Discriminator와 Generator는 번갈아가면서 학습을 하여 같이 성장합니다. Discriminator는 Generator의 성장에 의해 점점 정교하게 만들어지는 Fake를 구분해내야 합니다. 이 과정을 통해 Discriminator가 더욱 성장하게 됩니다. Generator는 이렇게 강화된 Discriminator를 다시 속이기 위해 더욱 정교한 Fake를 만들어야 합니다. 이렇게 둘은 서로를 이기기 위해(Adversarial) 같이 성장하게 됩니다.

저자는 이러한 과정에 대해 굉장히 좋은 예시를 들어줍니다. Discriminator는 경찰이고 Generator는 지폐 위조범이라고 하는데요. Discriminator는 정상 지폐와 위조 지폐를 잘 구분해야하고 Generator는 Discriminator를 속일 수 있는 위조 지폐를 만들어야 하는 상황을 생각하면 위의 Training 과정과 정확히 일치함을 알 수 있습니다.

이것으로 Generative Adversarial Network(GAN) - part.1의 정리를 마치겠습니다. Generative Adversarial Network(GAN) - part.2에서는 논문을 이해하기 위해 필수적으로 이해하고 넘어가야할 distribution 개념에 대해 알아보겠습니다. 더 나아가 distribution이 GAN에서 어떤 식으로 적용 되는지 알아보도록 하겠습니다. 감사합니다.