🎥

Generative Adversarial Networks

Tags
Generative Adversarial Networks
Created
2021/01/31 10:50
Publication
NIPS'14
Rate
5
Summary
그 유명한 GAN이다. 가짜 데이터를 생성해내는 모델 generator와 주어진 데이터가 가짜인지 진짜인지 판별해내는 모델 discriminator를 경쟁하듯 학습시킴으로써 두 모델의 성능을 동시에 끌어올리고, 이렇게 학습된 generator를 통해 실제 데이터와 유사한 데이터를 생성해내고자 한다. (상세 페이지 참고)

Reference

Tutorial Code: Colab Notebook
그 유명한 GAN이다. GAN은 1) Generative: 특정한 분포(i.e. 사람의 얼굴 이미지의 픽셀 값 분포)와 최대한 유사한 분포의 데이터를 생성하는 모델인데, 2) Adversarial: 특정한 분포를 모사하여 데이터를 생성하는 모델(Generator)과 주어진 데이터가 목적하는 분포에서 발생했는지, 그렇지 않은지(G에서 생성된 데이터인지)를 구별하는 모델(Discriminator)을 경합시킴으로써 Generator를 학습시키며, 3) Net: 인공 신경망으로 모델을 구성한다. 한 마디로 두 반대되는 목적을 가진 모델 G와 D를 경쟁시킴으로써 특정 데이터의 분포를 모사하는 모델 G의 성능을 끌어올리는 알고리즘이다.

Adversarial Nets

모델 자체는 간단하다. 우선 모델 GG는 random noise variable zpzz \sim p_z로부터 목적하는 데이터의 분포인 pdp_d로의 mapping을 학습하는 모델이다. 이 때 mapping은 zG(z;θg)pgz \rightarrow G(z; \theta_g) \sim p_g와 같이 표기할 수 있고, 이러한 mapping은 미분 가능한 다층 신경망으로 표현되는 함수이다. 한편 모델 DD는 어떠한 데이터가 주어졌을 때 그 데이터가 원래 분포인 pdp_d로부터 왔는지, 그렇지 않은지(pgp_g로부터 왔는지)를 구별해내는 모델이다. 즉 D(x;θd)D(x; \theta_d)는 데이터 xx가 원래 분포 pdp_d로부터 왔을 확률을 나타낸다. DD 역시 미분 가능한 다층 신경망으로 표현되는 함수이다.
이제 GG의 학습 목표는 DD를 최대한 속이는 것이며, DD의 학습 목표는 GG를 최대한 알아차리는 것이다. 즉 GGD(G(z))D(G(z))가 최대한 1에 가까운 값을 출력하도록 학습되어야 한다. 한편 DDD(x)xpdD(x)_{x \sim p_d}가 최대한 1에 가까운 값을 출력하는 동시에 D(G(z))zpzD(G(z))_{z \sim p_z}가 최대한 0에 가까운 값을 출력하도록 학습되어야 한다. 이는 다음과 같은 함수 V(G,D)V(G, D)에 대한 two-player minimax game으로 표현될 수 있다.
minGmaxDV(D,G)=Expd[logD(x)]+Ezpz[log(1D(G(z)))]min_{G} max_{D} V(D, G) = E_{x \sim p_d}[ \log{ D(x) } ] + E_{z \sim p_z}[ \log{( 1 - D(G(z)) )} ]
이제 위와 같은 목적 함수를 가지고 GGDD를 번갈아가며 학습하면 된다. 이 때 논문에서는 한 번의 iteration마다 DDkk번, 그리고 GG를 1번 학습함으로써 DD가 optimal solution과 가까이 유지되면서 천천히 GG를 개선하는 방식을 권한다. (그 이유는 Optimizing D to completion in the inner loop of training is computationally prohibitive, and on finite datasets would result in overfitting이라고 쓰여 잇는데 무슨 소리인지 잘 모르겠다. 차라리 밑의 theoretical results를 보고 나면 이해가 된다.) 또 GG의 경우 discriminator가 뛰어난 성능을 보일 경우 log(1D(G(z)))\log{( 1 - D(G(z)) )}가 0에 매우 가까울 것이기 때문에(그리하여 학습이 잘 이루어지지 않을 것이기 때문에) log(1D(G(z)))\log{(1 - D(G(z)))}를 최소화하는 것보다는 logD(G(z))\log{D(G(z))}를 최대화하는 식으로 학습하는 것을 권한다.
위의 알고리즘을 pseudo code로 표현하면 다음과 같겠다. Mini(Generator)Max(Discriminator) game이기 때문에 DD를 업데이트할 때는 gradient ascending, GG를 업데이트할 때는 gradient descending이 필요하다는 점에 주의하자.
for _ in range(num_iters): for _ in range(k): z = sample m noise samples from p_z x = sample m real data samples from p_d update discriminator by _ascending_ gradient dV(D, G)_d z = sample m noise samples from p_z update generator by _descending_ gradient dV(D, G)_g
Python
복사

Theoretical Results

한편 이 논문에서는 굉장히 훌륭하게도 알고리즘을 소개하는 데에 그치지 않고, 이러한 알고리즘의 이론적 토대를 제공한다. 요는 "표현력의 제한이 없다는 가정 하에, 소개된 minimax game은 pg=pdp_g = p_d에서 global optimum을 가지고, 소개된 알고리즘을 통해 이러한 global optimum에 도달할 수 있다"는 것이다.
위의 statement를 증명하기 위해 논문에서는 먼저 1) 주어진 임의의 GG에 대한 optimal discriminator DG(x)=pd(x)pd(x)+pg(x)D_{G}^{*}(x) = \frac{p_d(x)}{p_d(x) + p_g(x)}라는 것을 보이며, 2) 이러한 optimal discriminator DG(x)D_{G}^{*}(x)에 대해 GG의 training criterion의 global minimum이 pg=pdp_g = p_d일 때만 달성된다는 것을 보인다. 그리고 마지막으로 3) 표현력의 제한이 없는 상황에서 소개된 알고리즘의 매 iteration에서 DD가 optimum에 도달할 수 있고, pgp_g가 업데이트되어 pdp_d로 수렴할 수 있음을 보인다.
첫 두 증명은 따라갈 만 한데, 마지막 부분의 증명이 매우 까다롭다. 왜 pgp_g에 대한 criterion function V(G,D)=U(pg,D)V(G, D) = U(p_g, D)가 convex function인지 등... 어쨌거나 하고자 하는 말은 잘 알겠다! 물론 neural networks에 표현력의 제한이 없는 것은 아니지만, neural networks가 모든 함수에 대한 approximation을 할 수 있다는 측면에서 위의 이론적 토대를 뒷받침할 수 있는 (현재까지는) 가장 든든한 모델일 것이다.
예시 코드는 맨 위에서 언급된 나의 colab notebook에서 볼 수 있다. MNIST 데이터를 모사하는 매우 간단한 문제이지만, 이러한 직관적인 알고리즘이 괜찮게 작동한다는 측면에서 굉장히 신기하다.
E.O.D.