2017년 2월 28일 화요일

초짜 대학원생의 입장에서 이해하는 Unrolled Generative Adversarial Networks (2)

* Unrolled Generative Adversarial Networks - L. Metz et al. 2016을 바탕으로 작성한 리뷰

이전 글의 마지막 부분에서 unrolled GAN이 어떻게 기존의 GAN과 다른지 짧게 살펴보았었습니다. 오늘은 그 부분에 대해 좀 더 설명을 하고 unrolling한 결과가 어떤 지에 대해 확인해보겠습니다.


Unrolled GAN and Missing Gradient Term


Unrolled GAN 도식 (unrolling three steps 예시)

Unrolled GAN은 generator를 update할 때 현재의 generator update에 대해 discriminator가 어떻게 반응하는지를 봅니다. 즉, K step 앞까지 내다보면서 미래에 대한 정보(future response)를 generator에 전해주어 좀 더 optimal discriminator의 역할을 해주고자 하는 것이죠.
"그러면 기존 GAN에서 generator update 한 번 할 때 discriminator를 K번 update하는 것과 무엇이 다른가?"

사실 이 부분이 제일 헷갈리는 부분이긴 합니다. 논문의 저자들도 다르다는 것을 분명히 하기 위해 아래와 같이 본문에 써두었는데:
글쎄....요 이 설명만 봐서는 그리 와닿지 않습니다. 저도 여러 번 읽고서야 조금 이해가 되더군요. (최소한 저는 그랬어요..orz...한 번에 이해가 되셨다면 똑똑하신 분들...).

제가 포인트라 생각하는 곳을 집어보자면 기존의 GAN에서는 한 쪽의 update가 진행될 때 다른 한 쪽은 fixed value를 갖는 부분입니다. Unrolled GAN은 그렇지 않지요:
$$\begin{align} \theta_G &\leftarrow \theta_G - \eta\frac{df_K(\theta_G,\theta_D)}{d\theta_G} \\ \theta_D &\leftarrow  \theta_D + \eta\frac{df(\theta_G,\theta_D)}{d\theta_D}. \end{align}$$
수식에서 generator update를 할 때 surrogate loss function을 사용하기 때문에 각각의 unrolled step마다 discriminator가 반응하여 달라집니다. 조금은 감이 잡히셨을까요? 본문에서 얘기하는 Eq. 12를 보면서 좀 더 살펴보겠습니다.

The Missing Gradient Term


$$ \frac{df_K(\theta_G,\theta_D)}{d\theta_G} = \frac{\partial f(\theta_G,\theta_D^K(\theta_G,\theta_D))}{\partial \theta_G}+\frac{\partial f(\theta_G,\theta_D^K(\theta_G,\theta_D))}{\partial \theta_D^K(\theta_G,\theta_D)}\frac{d\theta_D^K(\theta_G,\theta_D)}{d\theta_G}$$
이 수식이 논문에서 얘기하는 Eq. 12입니다. Surrogate loss 함수 $f_K(\theta_G,\theta_D)$가 어떤 식으로 동작하는지 이해하기 위해 $\theta_G$에 대한 gradient를 보여주고 있습니다. 복잡해 보이지만 의미를 따라가기는 그리 어렵지 않습니다.

먼저 기존의 GAN에서 each single step of generator update마다 K번 discriminator를 update하는 방식은 우변의 첫 번째 항만 사용하는 것과 동일합니다. 즉, discriminator update로부터 온 $\theta_D^K(\theta_G,\theta_D)$가 fixed value로 들어가서 generator update를 하고 있는 것입니다.

이를 두고 논문에서는 fixed discriminator에 대해 optimal generator는 discriminator가 현재 가장 높은 data probability를 두고 있는 $x$ 값에 대한 delta function이고, 따라서 기존의 GAN은 각각의 generator update step이 delta function으로의 partial collapse를 하게 된다고 설명하고 있습니다.

* 일단 이 부분이 직관적이기는 한데 정확한 설명은 아닙니다. Ian Goodfellow도 이 부분에 대해 reddit의 관련 글에서 지적을 했었죠. 조금 생각해보면 generator가 굳이 delta function이 아닌 예시도 많이 찾을 수 있습니다.

자 이제 unrolled GAN에 대해 볼까요. 두 번째 항을 보시면 어떻게 generator의 mode collapse가 일어나지 않도록 해주는지 알 수 있습니다.  두 번째 항을 말로 풀어 얘기한 것이 앞서 제가 계속 강조했던 부분입니다:
"현재의 generator update에 대해 discriminator가 어떻게 반응하는지 본다."

이를 수식과 대응해보겠습니다. 먼저 두 번째 항에서 $\frac{d\theta_D^K(\theta_G,\theta_D)}{d\theta_G}$ 부분이 $\theta_G$의 변화에 따른 $\theta_D^K$의 변화량을 나타내고 있습니다. 즉, discriminator의 반응을 보는 것이죠. 이어서 이렇게 변화한 $\theta_D^K$에 대해 $\frac{\partial f(\theta_G,\theta_D^K(\theta_G,\theta_D))}{\partial \theta_D^K(\theta_G,\theta_D)}$와 같이 $\theta_G$를 update하고 있는 것을 보실 수 있습니다.

따라서 $K\rightarrow \infty$일 때는 $f$가 local optimum에 이르러 $\frac{\partial f}{\partial \theta_D^K}= 0$이므로 두 번째 항이 사라집니다. 즉, $K\in \{ 0,\infty\}$일 때는 unrolled GAN의 surrogate loss가 기존의 GAN과 같지만 $K\in(0,\infty)$일 때는 unrolled GAN의 generator가 추가 정보를 얻기 때문에 기존의 GAN보다는 더 나은 성능을 보인다고 생각하시면 됩니다.

Consequences of the Surrogate Loss


앞서 여러 글에서 소개한 바와 같이 GAN의 generator(G)와 discriminator(D)는 결국 Nash equilibrium에 도달하기 위해 서로 경쟁합니다. 이를 한 단계씩 살펴보면 먼저 G는 현재 자신의 모델(보통 Neural Network)이 가지고 있는 역량의 최대 한도로 D가 높은 probability를 주는 단일 point에 가까워지도록 parameter를 수정합니다. 다음에 D가 할 일은 단순하죠. D는 이에 대응해서 해당 point를 찾아 또 자신의 모델이 허락하는 한 가장 낮은 probability를 할당합니다

이런 사이클이 무한히 반복되거나 두 모델의 변화량에 따라 수렴하기도 하죠. 이건 가위 바위 보 놀이랑 다를 바가 없는데 사실 이런 게임은 alternating gradient descent (acsent) 방식으로는 수렴하지 않는 다는 것이 이미 증명되어 있습니다.

하지만 surrogate loss를 사용하는 unrolled GAN의 경우에는 G가 D의 대응을 예측하기 때문에 이렇게 얻은 정보를 이용하여 D가 대응하기 어렵도록 G의 probability mass가 퍼지게 해줍니다. 마치 가위 바위 보에서 상대의 대응을 예측하며 복잡하게 자신의 수를 계산하는 것과 마찬가지 입니다.

* 이 경우 결국에는 1/3의 확률 분포로 수렴하게 되죠. 아래 영상을 보시면 더 확 와닿으리라 생각됩니다.


** 물론 반대로 discriminator를 update할 때 generator를 unrolling 할 수도 있습니다. 하지만 애초에 unrolled GAN에 대한 아이디어가 신경망이 maximin problem이 아닌 우리가 원래 풀고자 하던 minimax problem을 푸는 것에 좀 더 가깝도록 문제를 설계하려는 것에서부터 시작되었기 때문에 논문에서 하는 방식이 좀 더 목적에 맞는 방향으로 보입니다.
*** 이 부분의 이전 글의 minimax problem vs. maximin problem 부분을 참고하며 읽으시면 좋습니다.

실험 결과


Mixture of Gaussians Dataset


Unrolled GAN(위) vs. standard GAN(아래)

맨 처음에 보여드렸던 결과입니다. Gaussian 분포를 여럿 섞어 만든 toy dataset인데 줄여서 MOG라고 부릅니다. 매번 다른 mode들로 수렴하는 기존의 GAN과는 달리 확실히 unrolled GAN이 mode collapse가 일어나지 않는 것을 볼 수 있습니다.

예를 들어 K-unrolled GAN에서 generator가 각각의 unrolled step마다 다른 mode에 수렴했다면 generator가 방문한 총 K개의 mode에 대해 discriminator가 정보를 갖고 feedback을 줄 수 있게 됩니다. 따라서 한 번에 한 개씩에 대해서만 feedback을 줄 수 있는 기존의 GAN과는 달리 unrolled GAN이 좀 더 넓은 시야를 갖기에 mode collapse가 일어나는 것을 막을 수 있게 됩니다.

Pathological Model with Mismatched Generator and Discriminator



MNIST 데이터로 학습한 결과 비교

마찬가지로 위 줄의 unrolled 결과가 mode collapse도 일어나지 않고 학습도 잘 된 것을 볼 수 있습니다. 이 경우 RNN generator와 CNN discriminator를 사용하였기 때문에 generator와 discriminator 사이의 power balance가 상당히 어렵습니다. 따라서 기존 GAN의 결과를 보면 generator가 어떤 제대로 된 숫자가 아닌 여러 숫자를 cover할 수 있는 2D 이미지로 mode collapse가 일어나는 것을 볼 수 있습니다.

내 멋대로 정리 및 결론


  • Unrolled GAN은 unrolling step K에 비례하여 계산량이 커지는 것이 단점입니다.
  • 그리고 실행 속도 측면에서 보면 일반적인 GAN이 몇 배 빠른 속도로 학습할 수 있기 때문에 결국 Unrolled GAN이 따라잡히는 일도 충분히 있을 수 있겠습니다.
  • 하지만 각각의 반복에 대해 따져보면 Unrolled GAN은 목표 분포를 파악하는 것이 빠르기에 학습 초기부터 진짜 같은 데이터를 생성 할 수 있습니다.
  • 혼합 정규 분포의 예에서 알 수 있듯, unrolled GAN은 비교적 하이퍼 매개 변수의 차이에 민감하지 않고 안정되어 있기 때문에 좋은 결과를 얻을 수 있는 것으로 보입니다.


* 이외에도 매우 많은 결과가 논문에 나와있지만 나머지 부분은 사실 자기들의 알고리즘이 좋은 결과를 낸 다는 것을 어떻게 하면 잘 보여줄 수 있는지 열심히 다른 방법으로 보여준 것에 지나지 않는지라 생략하도록 하겠습니다. 논문을 실제로 볼 때 자기가 읽을 새로운 부분이 있는 즐거움도 있어야지요 ㅎㅎ(사실 이론적 부분을 다 하고나니 결과들을 다 쓰기 귀찮은 것이 더 크지만......-_-;;)
** 항상 그렇듯이 오탈자나 잘못된 점 궁금한 점이 있으시면 블로그의 댓글로 달아주세요. 가능한 빠른 시간 안에 확인하고 수정 혹은 답변을 하겠습니다. 이런 댓글과 함께 google plus 혹은 facebook을 통한 공유나 좋아요를 눌러주시는 것이 매우 큰 보람이 됩니다. 


다음 읽을거리


참고문헌:
[1] Unrolled Generative Adversarial Networks - L. Metz et al. 2016
[2] Unsupervised Representation Learning with Deep Convolutional Generative Adversarial Networks - Alec Radford et al. 2016
[3] Generative Adversarial Nets - Ian Goodfellow et al. 2014 논문, 
[4] NIPS 2016 Tutorial: Generative Adversarial Networks



댓글 5개:

  1. 항상 감사하게 글 읽고 있습니다.
    질문이 있는데, unrolled GAN은 testing 단계에서는 rolling이 없기 때문에 일반 GAN과 비교했을 때, 같은 모델을 썼다는 가정에선 속도 차이가 없지 않나요?

    감사합니다.

    답글삭제
    답글
    1. 안녕하세요 재미있게 읽어주신다니 다행입니다. 말씀하신 부분이 맞습니다.

      삭제
  2. 너무 잘 읽고있습니다 . 논문 정리 블로그들중에 최곤것 같아요 .
    저도 머신러닝이나 ai쪽의 대학원을 목표로 하고있는 학생인데 , 혹시 대학원 진학에있어서 어떤것을 하면 조금이나마 진학에 도움이 될까요 ?

    답글삭제
    답글
    1. 안녕하세요. 어떤 분야에 어떤 연구실로 가시냐에 따라 기본적으로 필요한 것이 다를테니 함부로 얘기하기가 어렵습니다. 일단 매우 기초적인거만 말씀드려보자면 주 분야가 비전 쪽이면 cs231n, nlp 쪽이면 cs224n과 같은 유명한 온라인 강의를 공부해두면 좋겠지요. 더불어 기본적인 배경지식이 될 수 있는 선형대수학이나 함수해석학을 잘 해두면 좋겠구요. 관심있는 논문을 찾아서 코드를 구현해보는 것이 또 한 가지 방법이겠습니다.

      삭제
  3. 논문 이해에 정말 큰 도움 되었습니다.
    읽고 나서 드는 생각이 nesterov momentum과 비슷하게 느껴지네요.

    답글삭제