2017년 4월 6일 목요일

초짜 대학원생의 입장에서 이해하는 BEGAN: Boundary Equilibrium Generative Adversarial Networks (2)

* BEGAN: Boundary Equilibrium Generative Adversarial Networks David Berthelot et al. 2017을 바탕으로 한 리뷰

지난 글에 이어 BEGAN 내용을 쭉 살펴보고 마무리해보겠습니다. 마지막 부분에 얘기했었지만 GAN에서는 generator와 discriminator 사이의 파워 게임에서 균형을 맞춰주는 것이 매우 중요합니다. 이 균형이 잘 안 맞으면 discriminator가 generator를 쉽게 이기는 경우가 많은데 BEGAN에서는 이 부분도 equilibrium measure technique이라는 개념을 도입해서 일부분 해결을 해줍니다. 심지어 한 쪽이 좀 더 학습이 잘 된 경우에도 모델이 안정적으로 학습되게 해준다는 것을 실험 결과로도 보여줍니다.


Equilibrium


균형이 딱 맞을 때 equilibrium은 다음과 같습니다:
$$\mathbb{E}[\cal{L}(x)]=\mathbb{E}[\cal{L}(G(z))].$$
뭐 당연한 얘기이죠. 생성된 sample이 진짜 이미지와 구별이 되지 않는다면 그 녀석들로 인한 error의 분포들도 당연히 비슷해야합니다. 따라서 그 평균이 같아져야겠죠. 그런데 이 개념을 좀 잘 이용하면 한 쪽이 다른 쪽을 완전 이기지 못하고 균형을 잡을 수 있도록 조절할 수가 있습니다.

일단 완벽한 균형 상태에서는 $m_1-m_2 \rightarrow 0$일 때 앞서 소개했던 condition이었던 $\frac{(c_1+c_2-2\sqrt{c_1c_2})}{||m_1-m_2||^2_2}$ 식이 불안정해지기 때문에 이 부분을 해결하기 위해 저자들이 $\gamma\in[0,1]$ hyper-parameter를 새로 도입합니다:
$$\gamma= \frac{\mathbb{E}[\cal{L}(G(z))]}{\mathbb{E}[\cal{L}(x)]}.$$
따라서 이 $\gamma$ 항이 BEGAN 모델에서는 discriminator가 auto-encoder로써 이미지를 복원하는 것과 진짜와 가짜를 구별하는 두 가지 역할 사이에서 균형을 맞춰주게 됩니다.

이해도 직관적입니다. $\gamma$ 값이 낮다는 것은 지금 discriminator가 진짜 이미지를 auto-encoding하는데 좀 더 무게를 둔다는 것이고 이 때문에 생성된 이미지의 다양성이 좀 떨어질 수 있습니다. 반대도 마찬가지구요.

Boundary Equilibrium GAN


그래서 결국 위에서 제시한 균형 개념을 넣으면 "BEGAN"의 objective가 다음과 같이 나오게 됩니다:

$\left\{\begin{array}{rrr} \begin{align}&\cal{L_D} = \cal{L}(x)-k_t\cal{L}(G(z_D)) \hspace{75pt}for~~\theta_D  \\  &\cal{L_G} = \cal{L}(G(z_G)) \hspace{119pt}for~~\theta_G \\   &k_{t+1}=k_t+\lambda_k(\gamma\cal{L}(x)-\cal{L}(G(z_G))) \hspace{35pt}for~~each~training~step~t \end{align}\end{array} \right.$

Equilibrium 유지하기위해 도입한 개념이 새로운 것이 아니라 Proportional Control Theory에 나오는 내용($\mathbb{E}[\cal{L}(x)]=\gamma\mathbb{E}[\cal{L}(G(z))]$)을 사용한 것이라고 얘기하는군요. 

$k_t\in[0,1]$ 변수를 사용해서 얼마나 $\cal{L}(G(z))$에 무게를 줄지를 결정하는 것입니다. 초기값으로는 $k_0=0$을 줘서 가면 갈수록 값이 커지게 해주는 것이죠. 세 번째 식을 보시면 됩니다. 여기서 $\lambda_k$는 machine learning context에서는 learning rate라 생각하시면 됩니다.

첫번째 식을 잘 보시면 이 $k$항 덕분에 처음에 generator가 완전 구별하기 쉬운 이상한 값을 내보내도 discriminator를 학습할 때 gradient가 없어지지 않습니다. 즉, 초기에 $\cal{L}(G(z))\gg0$이더라도 $k_t$값이 매우 작기 때문에 discriminator의 loss인 $\cal{L}_D$가 쉽게 만족하는 일이 없습니다. 

Convergence measure


BEGAN에서 얘기하는 또 다른 장점이죠. GANs 모델이 수렴했다는 것을 보여주는 것이 보통은 어렵고 (zero-sum game이라) 눈으로 이미지 질을 체크하는 수 밖에 없었는데, BEGAN에서는 equilibrium 개념을 가져와서 global measure of convergence를 제시해줍니다: 
$$\cal{M}_{global}= \cal{L}(x)+|\gamma \cal{L}(x)-\cal{L}(G(z_G))|$$
즉, 최대한 진짜 이미지에 가깝게 복원하도록 $\cal{L}(x)$ 항에 위에서 제시한 proportional control algorithm의 error인 $|\gamma \cal{L}(x)-\cal{L}(G(z_G))|$를 더한 값의 최소값을 찾는 과정이 generator와 discriminator 사이의 균형을 유지하는 수렴점을 찾는 것과 같기 때문에 이 measure를 사용하면 현재 모델이 최종 평형에 이르렀는지 혹은 mode collapse가 일어났는지 알 수가 있습니다. 

Training procedure


그래서 이렇게 얻은 objective 함수를 학습할 때는 굳이 기존의 GAN과 같이 alternative한 방식으로 학습할 필요가 없습니다. BEGAN의 objective 함수는 병렬로 동시에 학습이 가능하고 덕분에 실제로도 수렴이 빠르다고 합니다. 
$$\arg\min_{\theta_D}\cal{L}_D+\arg\min_{\theta_G}\cal{L}_G.$$
Adam을 사용하였고 batch size는 16으로 학습했다고 하네요.

* 결국에 각각의 식들이 자신의 역할을 해주기 때문에 이렇게 병렬로 동시에 학습하더라도 여전히 adversarial 학습입니다. 

Model architecture


놀랍게도 모델의 구조도 매우 단순합니다. DCGAN과는 달리 batch norm도 없고 dropout이나 transpose convolution, exponential growth for convolution filters 등도 필요없다고 하네요. (흠...신기하네)

Network architecture for the generator and discriminator

실험 결과


Setup


BEGAN에서 학습할 때 사용한 setup을 정리해보겠습니다. Optimizer로 Adam을 사용했고 learning rate는 $[5\times10^{-5}, 10^{-4}]$ 범위 안의 값을 사용하는데 학습을 하다가 measure of convergence가 지지부진하면 2의 배수로 값을 줄여줍니다. 초기 learning rate로 큰 값을 사용하면 mode collapse 현상이나 visual artifacts가 생길 수 있지만 learning rate를 줄여주면 이런 문제들을 피할 수 있다고 합니다.

BEGAN 실험에서는 영상 해상도를 상당히 다양하게 사용했는데, 32~256 사이의 이미지들을 사용했고 이를 위해서 convolution layer를 앞에 추가하거나 없애는 방식으로 이미지 사이즈를 맞춰주었습니다. 

얼굴 사진들이 모두 정렬되어있는 CelebA 데이터 대신, 여러 각도에서 촬영된 다양한 얼굴들이 있는 360K celebrity face 이미지들을 학습에 사용했습니다. 이미지 회전도 포함되어있어 더 어려운 문제를 풀었다고 얘기하는데요 이렇게 얼굴 이미지를 사용해서 모델이 잘 학습되었는지 확인하는 이유는 사람이 얼굴에서 이상한 점을 찾는 것을 일반 이미지보다 훨씬 더 잘하기 때문이라고 설명합니다.

하지만 사실 다른 모델과 비교를 공평하게 하려면 같은 데이터셋을 사용하는 것이 좋을텐데 왜 굳이 이렇게 했을까요? 혹시 회전이나 다양한 얼굴 포즈 등이 오히려 어려운 문제가 아니라 data augmentation의 효과가 있었을 수도 있는데 같은 데이터끼리 비교를 하지 않은 이유는 무엇인지 궁금하네요. (스스로 짜서 해봐야하나)

Image diversity and quality



위 그림이 EBGAN과 비교한 결과들인데 무작위로 뽑은 결과들이라고 합니다. 약간 뽀샤시한 듯한 느낌으로 sharpness가 떨어지는 경향이 있고 이는 hyper-parameter tuning을 더 하면 괜찮아질거라고 하는데...저는 오히려 그게 더 자연스러워 보입니다?
"우리가 아는 바 안에서는 128 X 128 해상도에 이렇게 일관성을 유지하는 질의 이미지를 뽑아내는 경우는 Stacked GANs 외에는 없다."
Stacked GANs는 보지 않았습니다만 흥미가 생겼습니다. 이름만 보면 앙상블이나 LAPGAN 같은 느낌인데... 

그 후로는 약간 거의 자랑에 가까운 결과 나열의 연속입니다..(질투가 나서 이렇게 보이는건지...) 포즈 변화나 표현 성별 피부색 빛 노출 정도 등등이 다양하게 변화하는 것을 볼 수 있었다네요. EBGAN과 비교 사진을 올렸지만 두 모델은 서로 다른 데이터셋을 사용했으니 직접 비교가 어렵다고 첨언해주는데...아무리 그렇다고 해도 일견 보기에는 차이가 좀 심하죠. EBGAN 입장에서는 약간 억울할 수 있을 것 같습니다. 

Random 64 X 64 samples at varying diversities $\gamma\in\{0.3,0.5,0.7\}$

위 그림은 앞서 소개했던 $\gamma$ 값을 바꾸면서 결과가 어떻게 변하는지 보여줍니다. 값이 바뀌더라도 모델이 꽤 잘 작동하고 이미지들의 다양성이 값에 따라 적절히 바뀌네요. 잘 보시면 재미있게도 작은 $\gamma$ 값에서는 이미지들이 약간 비슷비슷한 느낌을 줍니다. 얼굴 포즈와 눈 입매 등을 보시면 좀 더 느낌이 오실 것 같네요 (엄청 신기해!). 게다가 예측한대로 값이 커질 수록 다양성도 증가하지만 artifact도 증가해서 이미지의 질이 좀 떨어지는 면이 있습니다. 

Space continuity


전에 DCGAN에서도 말씀드렸지만 생성모델이 잘 학습되었다는 것을 보여주려면 latent space의 smoothness나 continuity를 확인하는 것이 중요합니다. Memorization으로 1:1 함수를 학습한 것이 아니라는 것을 보여주는 것이죠. 

Interpolations of real images in latent space

위 그림에서 첫 장과 마지막 장을 뺀 중간 사진들은 모두 interpolation 값들로 생성한 이미지들입니다. ALI와 PixelCNN 결과들과 비교하면서 또 한 번 평범한 말투로 별거 아닌듯이 데미지를 주네요.
ALI와 PixelCNN에서는 더 고해상도 데이터셋에서 학습된 모델을 찾을 수 없었기 때문에 ALI는 64 X 64 PixelCNN은 32 X 32 이미지를 사용해서 비교했다."
학습이 끝난 후 generator가 잘 학습했는지 확인하려면 진짜 이미지 하나를 골라서 이에 대응하는 $z_r$을 하나 latent space에서 뽑습니다. 이를 embedding 과정이라 할 수 있는데요 여기서 진짜 이미지를 학습한 데이터셋이 아닌 것에서 뽑습니다. Adam을 사용해서 $e_r = |x_r-G(z_r)|$를 최소화하는 $z_r$을 찾았다고 하네요.

Convergence measure and image quality




Convergence measure $\cal{M}_{global}$가 정말 BEGAN 모델의 수렴과 잘 대응하는지를 보여주는 결과입니다. 실제로 이 값이 줄어들수록 모델이 잘 수렴한 것을 볼 수 있습니다. 이렇게 빠르게 수렴하는 것은 EBGANs에서도 얘기했듯이 pixel-wise loss의 장점인 것으로 보입니다.

Equilibrium for unbalanced networks


보통 GAN은 generator와 discriminator 사이의 파워 게임 때문에 한 쪽이 세지면 불안정하게 되는 경우가 있어 문제로 지적되어 왔습니다. BEGAN은 심지어 일부러 한 쪽이 더 학습되도록 해둔 다음 모델이 얼마나 안정적으로 잘 동작하는지 보여줍니다. 


앞서 소개한 equilibrium balancing technique 때문에 모델이 최대한 안정적일 수 있도록 조절된다고 하는데 정말 놀랍습니다. 물론 $h$의 크기가 너무 작아지면 discriminator가 표현할 수 있는 capacity가 제한되기 때문에 이미지의 질이 떨어지는 경향은 있습니다만 놀랍게도 latent space의 dimensionality의 차이는 큰 영향이 없었다고 합니다.

내 멋대로 정리 및 결론


이로써 BEGAN을 빨리 한 번 훑어보았습니다. 구글은 구글이네요. GAN이 연구용으로만 그치지 않고 실제 상용화될 수 있는 가능성을 보여준 논문이었습니다.

그래도 아직 연구할 거리는 많이 남아있습니다. EBGAN도 그렇고 auto-encoder를 discriminator로 사용하고 있는데 꼭 그래야하는지, 이 것을 바꾸면 어떨지가 궁금해집니다. 게다가 auto-encoder를 사용하면 필연적으로 중간 code의 embedding dimension을 몇으로 해야 데이터에 최적일지 등의 문제가 남아있죠. Denoising auto-encoder나 VAE에서 사용한 방식으로 여러가지 확장을 해볼 수 있을지도 관건입니다.

앞서도 제가 말씀드렸지만 같은 데이터셋을 사용하고 일반적인 setup에서 논문처럼 정말 저 정도 질의 이미지를 안정적으로 뽑아내주는지는 좀 더 실험을 하고 지켜봐야겠죠. 다만 논문 결과들이 cherry picking이 아니라는 전제 하에 모델 이름과 같이 Ian Goodfellow가 시작한(begin) GAN은 이제야 시작되었다(began)라고 할 수 있는 것은 확실한 것 같습니다.

다음 읽을거리



참고문헌:
[1] BEGAN: Boundary Equilibrium Generative Adversarial Networks David Berthelot et al.



댓글 14개:

  1. 잘 읽었습니다. BEGAN으로 그럼 학습 문제는 어느정도 해결되었다고 볼수 있나요? - Sung Kim

    답글삭제
    답글
    1. 교수님 안녕하세요 ㅎ 댓글 감사합니다. 제 설익은 생각이라도 괜찮으시다면 말해보겠습니다. 음 학습 문제가 WGAN에서 어느 정도 해결되었다고들 얘기하는데 여전히 질이 완전 좋은 것은 아니고 BEGAN은 논문대로라면 결과도 학습도 잘 되는데 실제 구현한 분들 말씀으로는 좀 학습이 생각처럼 잘 안 된다고 하시더군요. 이런 것을 보면 역시 아직 연구할 거리들이 좀 남아있어보입니다 :) 게다가 사실 WGAN에서 적용된 convergence는 매우 weak한 수렴이라서 안정적인 것인데 이 쪽에서 조금 더 해결할 부분도 있는 것 같습니다.

      삭제
  2. 그리고 요즈음 GAN의 구현들이 많은데 매 글의 마지막에 GAN의 구현 링크도 넣어 주시면 도움이 될듯 합니다. 좋은글 다시한번 감사드립니다. -Sung Kim

    답글삭제
    답글
    1. ㅎㅎ 맨 처음 욕심에는 제가 구현한 코드들로 github을 홍보하겠다! 라는 원대한 목표가 있었지만 너무 허접하고 남들 것 보고 재구현하거나 베끼는 식이라 부끄러워 못 올리고 있네요. 이전 글에도 그렇고 다음부터 잘 정리된 다른 분들 링크들을 알게되면 올려보겠습니다.

      삭제
  3. gamma값이 작아지는 것이 왜 discriminator의 auto-encoding기능이 강화되는 것으로 연결되는지 혹시 설명해주실 수 있으신가요ㅠㅠgamma가 작다는 말은 E(L(x))가 크거나 E(L(G(z)))가 작은 것을 의미하는 것 같은데 오히려 이것은 인코딩이 잘 안되는 것을 의미하는 것이 아닌가 싶어서요. 그리고 random으로 generated된 이미지가 어떻게 sample로 오토인코딩 된 네트워크에서 loss가 기존 sample보다 적을 수 있는지도 직관적으로 이해가 잘 가지 않습니다ㅠㅠ

    답글삭제
    답글
    1. 안녕하세요 csk92님 좋은 질문 감사합니다. 덕분에 저도 다시 좀 고민하게 되었네요. 글도 수정할 예정입니다. 아직 완전히 확신이 든 것은 아니지만 objective function에서 discriminator loss 부분만 보시면 이해가 좀 되지 않을까 싶습니다. L_D = L(x) - k_t*L(G(z))인데 여기서 gamma가 작다는 의미는 말씀하신바와 같이 두 번째 항인 L(G(z))값이 매우 작고 L_D가 L(x)에 더 집중하여 학습을 한다고 생각하면 될 것 같습니다.

      삭제
  4. 좋은 글 감사합니다. 혹시 훈련에 시간에 얼마나 걸렸는 지에 대한 얘기가 있나요?

    답글삭제
    답글
    1. 안녕하세요 JM님 논문에 훈련 시간에 대한 내용은 나와있지 않습니다. 차후 제가 code 링크들을 올리긴 할텐데 질문 주신 부분은 오히려 그런 쪽에 더 잘 나와있지 않을까 싶네요.

      삭제
  5. 작성자가 댓글을 삭제했습니다.

    답글삭제
  6. 정말 구글은 놀랍네요. pretrained model과 image augmentation 으로 cnn성능 향상을 해왔는데 이정도면 말씀하신데로 BEGAN으로 augmentation한 성능이 매우 궁금해지네요! 좋은글 올려주셔서 진심으로 감사합니다. 많이 배우고 갑니다^^

    답글삭제
  7. "혹은 mode collapse가 일어났는지 알 수가 있습니다." 이 부분의 원문은 "if the model has collapsed"인데, 한 글자 차이지만 mode collapse와는 다른 의미인 것 같습니다. M_global로는 G(z_G)가 그럴듯한 남자 얼굴만 줄창 뽑아내는 경우를 알아낼 수 없습니다.

    답글삭제
  8. GAN은 두 개의 신경망이 서로 경쟁하면서 학습하는 방식 자체가 유기적인 면과 독립적인 면을 동시에 가지고 있어서, 다른 신경망과는 달리 레이어를 주구장창 변경해봤자 loss의 불안정성을 해결하지 못하면 아무 의미 없을 거란 생각을 해왔습니다. 구글도 비슷하게 생각했나 보네요.

    개인적으로는 minimize의 끝단이 여러 개면-tensorflow로 치면, minimize하는 loss term이 여러 개인 경우-필연적으로 모델의 불안정성이 높아질 수밖에 없다고 생각해서 여러 모로 GAN의 방식은 맘에 안 들었었습니다. 이 방식은 맘에 드네요. 제 생각에 이 방식은 감마 패러미터가 신경망의 구성이나 다른 하이퍼 패러미터들에 비해 훨씬 영향이 클 것 같습니다.

    답글삭제
  9. 음. 여러 가지로 파라미터를 바꿔가면서 수백여번? 정도 돌려보았습니다만...

    이미지 퀄리티가 좋은 것 뿐 한계가 명확한 방법이네요. 우선 이미지가 생각보다 sharp하지 않고 feature를 제대로 살리지 못합니다. 디테일이 필요한 이미지에서 약점이 많고, 이미지의 variation이 적어요. 아시아 사람 데이터와 서양인 데이터를 반반 섞었을 때 여성-서양인 쪽이 훨씬 자주 나오는 걸 발견할 수 있었네요.

    퀄리티와 variation을 같이 잡으려면, 아직 GAN은 갈 길이 먼 듯 합니다.

    답글삭제
  10. 안녕하세요 GAN에 관한 글을 읽다가 궁금한것이 생겨 여쭈어봅니다.
    현재 DCGAN을 짜고 있는데요. 처음에는 D,G loss가 0.7정도로 지속되다가 어느새 부터인가 D loss는 0을 향해 G loss는 1이상으로 커지고 있습니다. 이럴 경우 학습이 잘되고있는건지 궁금하네요

    답글삭제