[Paper Review] Generative Adversarial Nets (GANs)

Date:     Updated:

카테고리:

태그:

Main Reference:
- GANs Paper
- naver-d2
- PR-12


한동안 GAN 기반의 생성 모델들을 공부할 생각이다. 최근 생성 분야는 ‘diffusion이 미래다’라는 분위기가 강하다. 하지만 GAN도 2014년 처음 등장할 당시에는 Yann Lecun 교수님의 극찬을 들을 만큼 좋은 아이디어였고 2020년도까지 생성 분야를 점거하며 수많은 reference들을 쌓아왔다. 따라서 이해하기도, 구현하기도 훨씬 편한 GAN 모델이 diffusion 만큼의 성능을 뽑아준다면 많은 사람이 다시 GAN으로 넘어올 가능성이 크다고 한다.


🚀 Introduction

gan1

Generative adversarial Nets, 적대적 생성 모델은 말 그래도 두 모델이 서로 경쟁적으로(적대적으로) 학습을 진행하는 시스템이다. 본 논문에서는 지폐위조범과 경찰의 비유를 이용하여 모델을 설명한다.

  • Discriminator model (경찰)
    • 데이터 샘플이 실제 데이터인지, 생성 모델로부터 만들어진 데이터인지 구분
    • real value 반환
    • 실제 데이터는 1, 생성된 데이터는 0을 반환하도록 학습
  • Generaive model (지폐위조범)
    • 노이즈(z)로부터 데이터 생성
    • Discriminator를 속이도록 (1을 반환하게끔) 학습

이러한 방식으로 Discriminator와 Generator를 번갈아가며 경쟁적으로 학습을 진행시킨다. 결과적으로 G는 완벽한 데이터를 만들 것이고 D는 생성된 데이터인지, 실제 데이터인지 구별할 수 없을 것이다(P_g = P_d = 0.5).


gan2

  • (a) : 학습 전
    • 기존 데이터의 분포와 생성된 데이터의 분포가 많이 다름
    • D의 성능이 오락가락
  • (b) : D 학습
    • D 성능 향상
  • (c) : G 학습
    • G가 생성한 분포와 기존 데이터의 분포가 비슷해짐
  • (d) : 완벽하게 학습이 끝남
    • D가 구별하지 못함 (모든 데이터에 대해 0.5 값을 가짐)


🚀 Related work

GAN 이전의 생성 모델들은 잘 모르기 때문에 간단히 이야기하고 넘어가겠다. 먼저 Markov Chain Monte Carlo(MCMC)는 수많은 점들을 직접 뽑아가며 distribution을 유추하는 방식이기 때문에 복잡한 데이터 (high dimensional vector space)에서 작동하기 어렵다. 다음으로 잘 알려진 오토인코더 방식은 데이터의 분포를 미리 정의하고 이와 유사한 분포를 가지도록 데이터를 생성한다. 하지만 GAN의 경우 기존 데이터의 분포에 대해서 알빠노를 시전한다. 이 부분은 장점으로도, 단점으로도 작용한다. 우선 Generator가 기존의 data로 부터 학습되는 것이 아닌 noise로 부터 D만 속이면 되도록 D에 의해 학습된다. 따라서 생성된 데이터의 분포가 단순히 기존 데이터의 분포를 copy하는 방식으로 흐르지 않는다. 또한 같은 이유로 생성된 데이터가 훌륭하더라도 생성된 데이터의 분포로 기존 데이터의 분포를 유추할 수 없다.


🚀 Adversarial nets

Adversarial modeling은 G모델과 D모델이 모두 multi-layer perceptron일 때 진가가 발휘된다. Backpropagation 알고리즘을 통해 효과적으로 학습이 가능하고, approximate나 markov chain과 같은 번거로운 작업 없이 단순 forward로 inference가 가능하기 때문이다.


🚀 Objective Function

\[\min_{G} \max_{D} V(D, G) = \mathbb{E}_{x \sim p_{data}(x)}[log D(x)] + \mathbb{E}_{z \sim p_{z}(z)}[log (1-D(G(z)))]\]
  • D는 V를 최대화하도록, G는 V를 최소화하도록 학습.
  • 먼저 D의 입장에서 두 텀을 나누어 생각해보자
    • 왼쪽 텀은 log D(x) = 0 인 경우에 V 최대
    • 오른쪽 텀은 log (1-D(G(z))) = 1 인 경우에 V 최대
    • 즉, 실제 데이터에 대해서는 D(x) = 1 & 생성된 데이터에 대해서는 D(G(z)) = 0 으로 완벽하게 구분하도록 학습
  • G의 입장에서 바라보면
    • 왼쪽 텀은 G와 independent
    • 오른쪽 텀은 log (1-D(G(z))) = 0 인 경우에 V 최소
    • 즉, D(G(z)) = 1 로 D를 완벽하게 속이도록 학습


위 objective function이 직관적으로 잘 이해되지만 practical한 이유로 \(\min_{G}\mathbb{E}_{z \sim p_{z}(z)}[log (1-D(G(z)))]\) 대신 \(\max_{G}\mathbb{E}_{z \sim p_{z}(z)}[log D(G(z))]\) 을 사용한다.

log (1-x) log x
gan3 gan4

학습 초기 Generator가 아주 형편없는 데이터를 만들 경우 D(G(x))의 값이 너무 작아 gradient 값도 작은 값이 나오기 때문이다. 따라서 쭉쭉 나가야 할 학습 초기에 매우 느리게 학습하는 현상이 발생하기 때문이다.


🚀 Theroretical results

GAN 논문에서는 특이하게 objective function에 대한 수학적인 증명이 포함되어 있다. 열심히 미분하고 더하고 빼고 뚝딱뚝딱 하다보면 다음과 같은 결론이 나온다.

  • objective function은 global optimal value를 가진다. (존재성 증명)
  • 우리 알고리즘을 사용하면 optimal value에 도달할 수 있다. (수렴성 증명)

이때 global optimal value는 p_g = p_data 일때 발생하고, 논문의 알고리즘이란 D와 G를 1번씩 번갈아가며 SGD를 진행하는 것이다. 다만 위 증명은 multi-layer perceptron (parametric) 세팅을 가정한 것이 아니라 일반적인 무한 차원의 확률밀도함수(non-parametric) 공간에서의 이야기이다. 따라서 D와 G를 multi-layer perceptron으로 설정하면 이론에 허점이 생기고 global optimal value에 도달하지 못할 수 있다. 이런 한계에도 불구하고 multi-layer perceptron을 사용하면 학습과 추론이 매우 편할 뿐더러 이전 모델들에 비해 성능도 좋기 때문에 아주 이득이다.


🚀 Results

gan5


🚀 Code

GAN from scratch (pytorch)

실제로 돌려보면 만들기 쉬운 1 데이터가 많은 비중을 차지한다. GAN 기반 모델에서 발생하는 이러한 문제를 Mode Collapse Problem 이라고 한다.

Epoch 0 Epoch 50 Epoch 100 Epoch 150 Epoch 200
data0 data49 data99 data149 data199



맨 위로 이동하기

Paper 카테고리 내 다른 글 보러가기

댓글 남기기