본문 바로가기
딥러닝

[GAN논문 리뷰] Discriminator Rejection Sampling

by 미스터탁 2019. 1. 7.

이번에 포스팅할 논문은 Discriminator Rejection Sampling (DRS) 이라는 논문으로 (https://arxiv.org/pdf/1810.06758.pdf) 2019 ICLR에 accept된 논문입니다.

 

GAN의 disicriminator만 건드린 논문인데 GAN모델 성능지표(IS, FID)에서 SOTA를 찍었습니다.

 

(그런데 동시에 ICLR에나온 BigGAN(DeepMind)이란 논문이 이 논문의 성능 대비 2배이상 SOTA를 찍었습니다...ㅎㅎ)

 

현시점에서 GAN SOTA는 BigGAN입니다. 그럼에도 불구하고 이 논문을 리뷰하는 이유는 아이디어가 직관적이고 흥미롭기 때문입니다.

 

DRS는 이 전시점의 SOTA 모델인 Self-Attention GAN (SAGAN) 을 basemodel로 잡고 SAGAN discriminator에 rejection sampling을 적용하였습니다.

 

즉 이전 SOTA모델에 약간의 아이디어만 추가해서 다시 SOTA를 찍은 셈인 거죠

 

그래서 DRS를 리뷰하기 위해서는 SAGAN과 rejection sampling을 알고 가야합니다.

 

 

SAGAN

SAGAN과 vanilla GAN과 다른 점은 다음과 같습니다.

 

1. Normal CNN을 사용한 대신 large residual network를 사용

2. Generator와 discriminator에 spectral normalization을 사용하고 매우 적은 learning rate를 사용

3 Self-attention layer를 사용

4. 다음과 같은 hinge loss을 사용

 

 

 
 
Rejection Sampling
Rejection sampling은 샘플링하기 쉬운 분포인 제안분포 (proposal distribution) q를 통해 샘플을 추출하고자 하지만 샘플링하기 어려운 확률 분포 p를 추정하고자하는 알고리즘입니다.
 
제안 분포로는 uniform distribution 또는 normal distribution등을 들 수 있습니다.
 
제안분포를 설정한 뒤 상수 M을 설정하는데, 아래그림과 같이 모든 x에 대하여 p(x) <= Mq(x)가 되도록 설정하여야합니다.
 
 

 

 

그 다음 확률 분포 q로부터 임의 값을 생성고 그때의 값이 p(x)안에 있다면 accept 그 밖에 있다면 reject하게 됩니다.
 
아래 그림의 A영역에 있다면 reject, B영역에 있다면 accept되는 것입니다.
 
 
이 과정을 무수히 반복하게 되면 결국 확률 분포 p를 따르는 sample을 얻을 수 있을것입니다.
 
 
 
 
DRS
 

만약 

 이면 모든 x에 대하여 

가 만족하게 되고, 

만 평가(evaluation) 할수 있다면 rejection sampling을 통해 target 분포 pd를 추정할 수 있습니다. 저자들은 

를 평가하기 위해서 Ian Goodfellow 의 original GAN paper의 GAN의 수렴 증명 부분을 가져옵니다. 

 

Optimal discriminator 는 다음과 같이 (식3) 표현할 수 있습니다. D(x)는 discriminator의 sigmoid output 이기 때문에 D(x)를 식4와 같이 설정하고 이는 식3과 같으니 식 5와 같이 전개를 할 수 있습니다. 

 

 

즉, 이론적으로 몇몇의(some x*) x에 대하여  

 을 구할 수가 있습니다. 만약 다음과 같이 정의하면 

, 모든 x에 대하여 accept probability 

를 

 와 같이 쓸수 있습니다. Random하게 생성한 난수 

에 대하여

를 만족하면 sample을 accept하는 방식으로 rejection sampling을 수행할수 있습니다.

 

 

 

그런데 저자들은 여러가지 이유로 인해 실제로 M을 구하기는 매우 어려운 일이며 이와 관련된 이슈들을 다음과 같이 언급하고 있습니다

 

1. Density function을 실제로 optimize할수는 없고 실제로 D*를 계산할수 없기 때문에, acceptance probability는 반드시 Pd(x)/Pg(x) 와 비례할 필요는 없다

2. 저자들이 고려하는 GAN은 Pg와 Pd가 같은 support를 가진다라고 가정하는데, large dataset에서는 이 가정을 만족하지 않는다. Pg와 Pd의 support가 low-volume intersection을 가진다면 Pd(x)/Pg(x) 가 대부분 0이 된다.

3. D*에 대한 수식 또한 Pd에서 무한히 많은 sample을 추출할 수 있다라는 가정이 전제 된다. 

4. 일반적으로 M을 정학히 구할 수가 없음

5. Rejection sampling은 target 분포가 high dimension일 경우 acceptance probability가 매우낮아진다고 알려져 있다.

 

D*를 계산하는 것에대해서 실질적으로 잘 할 수 있는 일은 empirically D*를 approximate하는 방법이라고 저자들은 이야기하고 있습니다. 즉, 실험적으로 최대한 잘 approximate하게 학습시켜야한다.. 더불어 저자들은 학습된 D는 good/bad sample을 잘 구분할 수 있다고 가정합니다. 

 

또한 D* 를 정확하게 구할 수 없기 때문에 M또한 실제로 계산하는 것이 어렵습니다. 결국에, sample을 통해서 M을 측정할수 밖에 없습니다. 

을 첫 10000개의 sample을 통해서 측정하고, 점차 이를 update하는 방식을 사용하였습니다. 

 

저자들은  acceptance probability가 너무 낮아지는 문제에 대하여 다음과 같은 technique을 제안합니다. 
만약 
이 너무 크다면, acceptance probability(
) 는 0에 가까워지게 되고 대부분의 sample들이 reject됩니다. 이 문제를 해결하기 위한 간단한 방법은 다음 식을 만족하는 F(x)를 구하는 것입니다.
 

 

 

 

hyper parameter epsilon과 gamma로 acceptance probability를 조절하고,

를 구하여 다시 sigmoid함수에 넣어 acceptance probability를 계산합니다. 아래 알고리즘에서 이를 확인 할 수 있습니다. M을 추정하고, acceptance probability 구하여 난수가 이보다 작으면 accept하고 아니면 reject하는 것 외에는 일반적인 GAN과 다른점이 전혀없습니다.

 

 

 

 

와 sigmoid(

) 에 대한 histogram을 아래 그림에서 볼 수 있습니다. 

값이 클 수록 accept될 확률이 높다라는 것을 알 수가 있습니다. 아래 그림의 우측그림은 pretrained model에 대하여 xi이미지를 yj로 분류하는 maximum확률값의 histogram분포입니다. 이 그림의 의미하는 바는 reject된 이미지일 수록 classification모델이 잘 분류하지 못한다라는 것입니다.

 

 

2차원의 데이터를 생성하는 toy sample문제에 대한 DRS의 결과입니다. 아래 그림에서 보시는 것처럼 DRS가 있느냐 없느냐는 큰차이를 보여주고 있습니다.

 

 

 

 

 

ImageNET데이터를 생성하는 문제에 대해서는 앞서 언급한것처럼 SAGAN + DRS모델을 사용하였습니다. 그 결과는 아래표에서 보시는 것처럼 꽤 높은 성능을 보이고 있습니다. Improved-SAGAN은 SAGAN을 더 적은 learning rate를 적용한 모델입니다.

 

 

 

 

아래 그림의 우측 그림을 보시면, 각 그림의 상단에 빨간색~흰색의 bar가 표시되어있습니다. 이는 acceptance probability를 의미하고 각 행의 맨 좌측과 우측의 이미지는 각각 임의의 매우 현실/비현실적인 이미지이고 가운데 이미지들은 latent variable z에대하여 interpolate시킨 이미지입니다. 현실적인 이미지일수록 acceptance probability가 높다라는 것을 보여주는 그림입니다. 즉, 저자들이 제안한 DRS가 효과적으로 작동한다라는 것이죠. 실제 이미지의 분포를 잘 측정했기때문에 가짜의 이미지가 들어왔을때 이를 reject할 확률이 높다라는 것을 의미합니다.

 

 

 

 
 

 

[PyTorch] 쉽고 빠르게 배우는 딥러닝(할인쿠폰코드) 369-7c698142f82e

https://www.inflearn.com/course/PyTorch-%EB%94%A5%EB%9F%AC%EB%8B%9D

 
 
 

 

반응형

댓글