2017년 4월 2일 일요일

초짜 대학원생의 입장에서 이해하는 LSGAN (2)

Least Squares Generative Adversarial Networks Xudong Mao et al. 2016을 바탕으로 작성한 리뷰

저번 글에 이어 LSGAN의 장점과 f-divergence와의 관계 등을 수식과 함께 좀 더 구체적으로 살펴보겠습니다.

LSGAN의 장점


LSGAN의 장점은 크게 두 가지로 나눌 수 있습니다. 지난 글에서도 언급했었지만 기존 GAN은 generator가 만든 sample이 실제 data distribution과 거리가 멀지라도, sigmoid cross entropy loss function 입장에서는 일단 discriminator를 속이기만 하면 문제가 없기 때문에 별다른 피드백을 주기 어렵습니다 (아래 그림).

Sigmoid decision boundary

하지만 LSGAN은 least square loss function을 사용하여 sample이 decision boundary로부터 멀리 떨어져 있는 경우 거리에 따라 패널티를 주기 때문에 generator가 좀 더 decision boundary에 가까운 (hopefully or approximately data distribution에 가까운) sample을 만들도록 할 수 있습니다.

LSGAN의 두번째 장점도 이 loss function과 관련이 있습니다. 아래 그림에서 보실 수 있듯이 $x$ 값에 따라 saturate 될 수 있는 sigmoid cross entropy loss function과는 달리 least square loss function이 오직 한 점에서만 최소값을 갖기 때문에 LSGAN이 좀 더 안정적인 학습이 가능하다고 설명하는군요.

(a) The sigmoid cross entropy loss (b) The least square loss


f-divergence와의 관계


LSGAN 저자들은 아마도 논문을 읽는 사람들이 least square로 간극을 줄이는 방식이 너무 단순하고 어떻게 보면 무식한? 방식이 아니냐는 생각을 할까봐 걱정이 되었나봅니다. 한 챕터를 할애하여 LSGAN이 푸는 문제에 작은 조건을 추가하면 LSGAN 방식이 결국 Pearson $\chi^2$ divergence를 최소화하는 것과 같은 것이란 것을 보여줍니다. (사실 이게 이렇게 연결이 된다는게 더 신기하네요..)

Original 논문에서도 보여주었듯이 GAN의 minimax problem을 푸는 문제는 결국 generator가 근사하고자 하는 $p_g$와 data distribution $p_{data}$ 사이의 괴리를 줄이는 문제와 동치입니다. 특히 GAN은 Jensen-Shannon divergence를 줄이는 것으로 알려져 있죠 (* GAN (2) 참고:
$$C(G) = KL\left(p_{data}||\frac{p_{data}+p_g}{2}\right) + KL\left(p_g||\frac{p_{data}+p_g}{2}\right) -log(4).$$
전에 보여드렸었지만 LSGAN은 다음과 같이 변형된 문제를 푸는데요:
$$\begin{align}&\min_DV_{LSGAN}(D) = \frac{1}{2}\mathbb{E}_{x\sim p_{data}~(x)}[(D(x)-b)^2] + \frac{1}{2}\mathbb{E}_{z\sim p_z(z)}[(D(G(z))-a)^2] \\ &\min_G V_{LSGAN}(G) = \frac{1}{2}\mathbb{E}_{z\sim p_z(z)}[(D(G(z))-c)^2] \end{align}.$$
이를 약간만 더 바꿔주면 아래와 같이 확장할 수 있습니다:
$$\begin{align}&\min_DV_{LSGAN}(D) = \frac{1}{2}\mathbb{E}_{x\sim p_{data}~(x)}[(D(x)-b)^2] + \frac{1}{2}\mathbb{E}_{z\sim p_z(z)}[(D(G(z))-a)^2] \\ &\min_G V_{LSGAN}(G) = \frac{1}{2}\mathbb{E}_{x\sim p_{data}(x)}[(D(x)-c)^2] + \frac{1}{2}\mathbb{E}_{z\sim p_z(z)}[(D(G(z))-c)^2] \end{align}.$$
$V_{LSGAN}(G)$에 $\frac{1}{2}\mathbb{E}_{x\sim p_{data}(x)}[(D(x)-c)^2]$가 추가된 것뿐인데 어짜피 $V_{LSGAN}(G)$는 $G$에 대한 문제이기 때문에 solution에는 변화가 없습니다.

이 때, $G$가 fix된 상태에서 optimal $D^*$는 다음과 같습니다.
$$D^*(x)=\frac{bp_{data}(x)+ap_g(x)}{p_{data}+p_g(x)}$$
(* 이 역시도 푸는 방식은 GAN (2)글을 참고하시면 됩니다.) 

그러면 이제 위에 소개했던 확장식을 다음과 같이 변형할 수 있습니다 (수식의 간결성을 위해 $p_{data}$를 $p_d$로 대체합니다):


거의 산수에 가까운데요 아무튼 이렇게 풀어 나온 식에 $b-c=1$ 그리고 $b-a=2$라는 조건을 주면,
$$\begin{align}2C(G)&=\int_{\chi}\frac{(2p_g(x)-(p_d(x)+p_g(x)))^2}{p_{d}(x)+p_g(x)} dx\\ &=\chi^2_{Pearson}(p_d+p_g||2p_g)\end{align}$$
라고 합니다. 여기서 $\chi^2_{Pearson}$은 Pearson $\chi^2$ divergence라고 하네요. 즉,  $a,b,c$가 위 조건을 만족할 때, LSGAN이 하는 일은 $p_g+p_d$와 $2p_g$ 사이의 Pearson $\chi^2$ divergence를 최소화하는 것과 동치라는 말입니다. 가만히 생각을 해보면 $p_g=p_d$일 때, 즉 generator가 만들어 내는 sample의 distribution이 data distribution과 같을 때 divergence가 최소가 되어 0이므로 궁극적으로 원래 GAN 가고자 하는 방향과 비슷하다는 것을 보여줍니다.

$f$-GAN 논문에서 이야기 하고자 했던 부분 역시도 결국의 JSD 대신 $f$라는 임의의 divergence로 바꿔도 결국에 GAN과 비슷한 일을 할 수 있다는 것을 보여준 것이기 때문에 LSGAN도 같은 맥락에서 볼 수 있다고 주장하는 것입니다.

재밌는 점은 $a,b,c$가 꼭 저 조건을 따르지 않는 경우에도 딱히 성능이 떨어지지는 않았다는 점입니다. 구체적으로 어떤 variation이 있는지에 대한 부분은 논문의 parameter selection section에서 짧게 다루는데 논문의 내용 이해에 크게 중요하지는 않으므로 생략합니다.

실험 결과


이론이나 분석만 좋고 결과가 별로면 사실 좀 그렇죠? (WGAN이 사실 좀...그런 면이 없잖아...) 앞서 애기한 분석을 바탕으로 LSGAN이 기존의 GAN보다 얼마나 잘하는지 보기 위해서 실험을 여러가지 수행하여 결과를 보여주는데 생성된 이미지들의 질이 상당히 놀랍습니다. (이게 바로 기대하지 않았던 녀석이 잘하면 반사 효과를 보는 그런 느낌인건가?...)



위 결과는 LSGAN과 DCGAN의 결과를 비교한 것입니다. 네트워크 구조는 거의 동일하되 끝에 loss function만 다르게 하였다고 합니다. 확대하거나 클릭하여 보시면 아실 수 있는데 꽤나 선명합니다. 저자들도 LSGAN의 결과가 좀 더 선명하고 진짜 같이 만들어 냈다고 주장합니다. 솔직히 이쯤되면 인정할만하군요...

안정성에 대한 실험을 위해 DCGAN에서 비교한 것과 같이 batch normalization (BN)의 유무에 따른 결과 역시도 비교해주는데요 generator에 없는 것을 $BN_G$ generator와 discriminator 둘 다 없앤 것을 $BN_{GD}$라고 표현했고 당연하지만? $BN_{GD}$+Adam 방식 외에는 모두 LSGANs이 mode collapse 없이 잘 수렴했다고 하는군요.





(a), (b)가 $BN_{G}$+Adam인 경우이고 (c), (d)가 $BN_{GD}$+RMSProp에 대한 결과입니다. 여기서 관찰된 내용은 LSGAN이나 GAN이 잘 학습되는데 생각보다 Optimizer의 종류가 영향을 많이 끼쳤다고 하네요. (앞으로 삽질할 때 꼭 참고하겠습니다...-_-;;)

두번째 실험으로는 일부러 discriminator가 saturate하기 좋은 구조로 네트워크를 만들어서 비교했을 때 결과가 어떻게 나오는 지를 확인하였습니다. 이를 위해서 (1) make the generator and the discriminator condition on label vectors (2) add sigmoid activation to the last layer of the discriminator 라고 하는데요. 음...(2)번은 sigmoid가 ReLu 등의 activation function에 비해 잘 saturate하는 것이 알려져 있으니 이 것을 말하는 것인가 싶은데 (1)번은 무슨 말인지 잘 모르겠네요..왜 저렇게 하면 discriminator가 더 잘 saturate하게 되는 것인지....아시는 분?  (conditional GAN을 읽어보면 이해가 되려나요)


Specially designed architecture for (a) Generator (b) Discriminator

아무튼 결과는 LSGAN이 그럼에도 불구하고 mode collapse 없이 잘 생성한다는 것을 보여줍니다. 윗 줄의 결과가 LSGAN입니다:



이 외에도 재미있는 실험을 한가지 더 추가하여 보여주는데요 클래스 수가 3740개로 매우 많은 한자를 생성하게 해봤는데 LSGAN이 한자를 읽을 수 있을 정도로 매우 잘 쓸 뿐만 아니라 (나는 까막눈이네...) 라벨도 정확히 일치하게 만들어낸다는 것을 보여줬다고 합니다. 이 경우 data augmentation과 같이 사용할 수도 있기 때문에 실제로 GAN이 만든 이미지나 데이터가 실전에 사용될 수 있는 퀄리티를 뽑아냈다는 점에서 매우 대단한 것 같습니다. 



사실 이 부분에서 더 중요한 점은 이렇게 class 수가 많은 데이터에 대해 GAN을 제대로 학습시키는 것이 매우 쉽지 않다는 점입니다. 어찌보면 당연하기도 한데 input과 output의 관계가 다대일이기 때문입니다 (음..하지만 엄밀하게 이해가 되지는 않네요..제가 universal approximator 논문(1989)과 conditional GAN을 읽어봐야겠습니다). 아무튼 이를 좀 더 잘하기 위해서는 input과 output 간에 deterministic relationship이 있어야 하는데 이를 위해 conditional GANs와 같이 label 정보를 condition으로 주었다고 합니다.

다만 여전히 one-hot encoding으로 이렇게 많은 (3740개) 클래스의 label 정보를 직접적으로 주는 것은 메모리나 계산량 증가 면에서 바로 적용하는 것이 불가능하여 약간의 trick을 추가했는데 이 부분도 간단하지만 아이디어가 좋습니다.

$\Phi(\cdot)$라는 linear mapping 함수를 이용해서 좀 더 짧은 vector로 label vector를 변환했다고 하네요. 그러면 다음과 같은 문제를 풀게 됩니다:
$$\begin{align}&\min_DV_{LSGAN}(D) = \frac{1}{2}\mathbb{E}_{x\sim p_{data}~(x)}[(D(x|\Phi(y))-1)^2] + \frac{1}{2}\mathbb{E}_{z\sim p_z(z)}[(D(G(z)|\Phi(y)))^2] \\ &\min_G V_{LSGAN}(G) = \frac{1}{2}\mathbb{E}_{z\sim p_z(z)}[(D(G(z)|\Phi(y)))^2] \end{align}.$$

내 멋대로 정리


  • LS loss로 멀리있는 sample을 decision boundary에 좀 더 가깝게 당겨오자는 아주 간단한 아이디어에 비해 결과가 상당히 재미있고 잘 나오는 방법입니다. 
  • Implementation 측면에서도 바꾸는데 겨우 두 줄 정도의 수정 혹은 추가만이 필요하기 때문에 매우 매력적이면서 강력한 방법이기도 합니다 (noise AE가 생각납니다..). 
  • 저자들도 아직 ImageNet 데이터와 같은 복잡한 dataset에 도전을 해보지는 않았다고 하는데 결과가 궁금하군요. 
  • 약간 더 해야할 부분으로 보이는 것은 discriminator가 만든 decision boundary가 아닌 실제 data distribution으로 당기는 방법을 찾을 필요가 있어보입니다. GAN이 잘 학습이 된다면야 discriminator가 true data distribution을 지나겠지만 아닐 경우 이상한 곳으로 당겨질 경우가 생길 것으로 예상됩니다. 

이 것으로 LSGAN 정리를 마쳐보겠습니다. GAN variants들이 너무 빨리 그리고 많이 나오는 지라 리뷰하는 동안 쌓이는 것이 더 많은 것 같습니다. 심지어 읽은 것도 한참은 쌓여있어서 꾸준히 써나가는 수밖에 없겠네요.

앞으로 정리해야 할 녀석들 적어보면 읽은 것만 해도 BiGAN, EBGAN, EGAN, McGAN, WGAN, f-GAN 굵직한 것들은 일단 이정도 있고 거기에 application 처럼 좀 더 범위를 넓히면 한참 더 많겠죠... DiscoGAN도 그렇고 요즘은 페북에서도 "저장됨" 페이지만 봐도 숨이 턱 막힐 때가 있습니다..-_-;

뭐 그래도 제가 스스로 재미있는 아이디어를 구현할 수 있을 때까지 꾸준히 해볼 생각입니다. 읽어주셔서 감사합니다 :0

다음 읽을거리



참고문헌:
[1] Least Squares Generative Adversarial Networks Xudong Mao et al. 2016



댓글 3개:

  1. 안녕하세요 박사님 lsgan 본문에 제시된 112x112 해상도 generator 아키텍처에서 vgg구조를 차용하여, upsample과 별개로 중간에 transposed conv 3x3 stride 1 padding 1의 레이어를 추가해주었던데 혹시 이부분을 똑같은 세팅의 convolution으로 바꾸었을때 의미적으로 어떤 차이가 있을지 궁금합니다.
    해당부분에 covolution 3x3 stride 1 padding1을 두어도 같은 의미를 가질것 같아서요..

    답글삭제
    답글
    1. 이정민님 안녕하세요. 답변이 늦어 의미가 있을지는 모르겠으나, 본 김에 글을 달아봅니다. 질문을 정리해보면 conv transpose와 conv 사이에 의미상 차이가 있는가?라고 이해했습니다. 결국 conv weights를 학습한다는 것을 생각해보면 결국에 별 의미가 없어보입니다. 다만 upsample 대신 convolution으로 대체할 때, grid artifact가 일어나는게 알려져서 요즘도 잘 쓰이는지는 모르겠습니다.

      삭제
  2. 안녕하세요. LSGAN 논문을 보다가, 혹시 수식이 틀리지 않았나 하는 의문이 들어 여기 답글 답니다.
    Pearson chi-squared divergence 수식에서 p_g + p_d 와 2p_g 의 위치가 서로 바뀌어야 하지 않는건지...

    2C(G) = \chi^2_{Pearson} (2p_g | p_g + p_d) 가 맞는 수식이 아닌지 궁금합니다.

    답글삭제