본문 바로가기

deep learning

[논문 공부] Generative Adversarial Nets

adversarial process를 이용한 generative model

두 개의 모델을 동시에 train

1. generative model G

  • 데이터 분포 capture
  • D가 실수할 확률을 maximize하도록 train
  • 화폐 위조자

2. discriminative model D

  • 샘플이 training data(실제 데이터, G가 생성한 데이터X) 로부터 나왔을 확률 추정
  • 화폐 위조자를 detect하는 경찰

=> 이 둘이 서로 경쟁하는데, G에서 생성된 게 진짜 데이터와 구별할 수 없을때까지 반복

 

이 논문에서는 특별한 case: adversarial nets에 대해 다룸.

- generative model: multilayer perceptron을 통해 random noise를 passing하면서 샘플 생성

- discriminative mdoel: multilayer percpetron으로 구성

  • 이 경우, 두 모델 모두 backpropagation, dropout 알고리즘을 통해 train할 수 있고, 생성 모델에서 데이터 생성의 경우는 forward propagation만 사용. 
  • approximate inference or Markov chains 필요 X

 

value function

Value function은 위와 같은데, G는 Value function(V)를 최소로 만들고 싶어하고, D는 V를 최대로 만들고 싶어한다.

이 value function은 loss function과 비슷한 느낌으로 이해해도 될 것 같다?! 

하나씩 살펴보면, 

 

D의 입장에서는 classification error를 최소화하는게 목적. 즉, real image에 대해서는 1의 값을, fake image에 대해서는 0의 값을 부여하고싶어한다. 

logD(x)+log(1-D(G(z)))에서, D(x)는 real data이므로 1에 가깝게, D(G(z))는 fake data이므로 0에 가깝게 추정?하고 싶을 텐데, 즉 V(D,G)를 최대로 만들고 싶어한다.

 

G의 입장에서는 D를 속이는게 목적.

log(1-D(G(z)))에서, D(G(z))는 fake data인데, 이거를 1에 가깝게 만들고 싶어한다. 

즉, V(D,G)를 작게 만들고 싶어한다.

 

fig.1

파란색이 D의 분포, 검정색이 real data인 x의 분포(P_x), 초록색이 fake data, generated data인 G의 분포(P_g)

(a)->(d)로 갈수록, 즉 train과정이 진행될수록 P_g가 P_x에 가까워지고, (d)에서는 둘이 같아짐으로써(gloabl optimum) D가 더이상 구별할 수 없게 된다. 즉, D(x) = 1/2

 

알고리즘을 살펴보면, 위의 value function이 구현된 것은 동일한데, 한가지 눈에 띄는 부분이 있다. 

바로 D와 G를 update하는 방식인데, 

하나의 training iteration 동안, k steps만큼 discriminator를 update하고,

그 뒤 1번의 generator update가 일어난다. 

(1:1로 반복되는게 X) 

=> D를 여러 번 먼저 학습시켜서 어느 정도 적절한 수준의 구분 능력을 갖게 만든 다음, G를 한 번 업데이트 하는 방식을 취함. ?! 

 

result 예시

 

 

 

theroetical 수식 부분은 일단 MNIST 실습을 먼저 간단히 해보고 나서 다시 살펴보려고한다.