Gorio Tech Blog search

Pix2Pix(Image-to-Image Translation with Conditional Adversarial Networks, Pix2Pix 논문 설명)

|

이 글에서는 2016년 11월 Phillip Isola 등이 발표한 Image-to-Image Translation with Conditional Adversarial Networks(Pix2Pix)를 살펴보도록 한다.

Pix2Pix는 Berkeley AI Research(BAIR) Lab 소속 Phillip Isola 등이 2016 최초 발표(2018년까지 업데이트됨)한 논문이다.

Pix2Pix는 Image to Image Translation을 다루는 논문이다. 이러한 변환은 Colorization(black & white $\rightarrow$ color image) 등을 포함하는데, Pix2Pix에서는 이미지 변환 문제를 colorization처럼 한 분야에만 국한되지 않고 좀 더 일반화한 문제를 풀고자 했다. 그리고 그 수단으로써 Conditional adversarial nets를 사용했다.

중요한 부분만 적을 예정이므로 전체가 궁금하면 원 논문을 찾아 읽어보면 된다.


Pix2Pix(Image-to-Image Translation with Conditional Adversarial Networks)

논문 링크: Pix2Pix(Image-to-Image Translation with Conditional Adversarial Networks)

초록(Abstract)

우리는 conditional adversarial networks를 일반화된 이미지 변환 문제에 테스트하였다. 이 네트워크는 단지 input-output mapping만 배우는 것이 아니라 이를 학습하기 위한 loss function까지 배운다. 따라서 전통적으로 매우 다른 loss function을 쓰던 문제에들도 이 접근법을 적용할 수 있다.
우리는 이 접근이 label과 동기화, 경계선만 있는 이미지를 복원, 흑백이미지에 색깔 입히기 등등의 문제에 효과적임을 보였다.


서론(Introduction)

이미지를 이미지로 변환할 뿐인 수많은 문제들은 그 세팅이 똑같음에도 각각 따로 연구되어 왔다(위에서 말한 이미지 변환 문제들). 우리는 이러한 변환 문제를 위한 일반적인 framework를 개발하는 것이 목표이다.

이쪽 방향으로는 이미 CNN이라는 좋은 기계가 있다. CNN은 결과의 품질을 알려주는 loss function을 최소화한다. 그러나 학습 과정 자체는 자동화되어 있지만 결과를 잘 나오게 하기 위해서는 여전히 수동으로 조절해야 할 것이 많다. 즉, 우리는 무엇을 최소화해야하는지 CNN에게 말해주어야 한다.
만약 우리가 단순히 결과와 정답 사이의 유클리드 거리를 최소화하라고만 하면 뿌연(blurry) 이미지를 생성하게 된다. 이는 유클리드 거리는 그럴듯한 결과를 평균했을 때 최소화되기 때문이고, 결과적으로 이미지가 흐려진다. 실제 같은(realistic) 이미지를 얻기 위해서는 더 전문 지식이 필요하다.

만약 우리가 원하는 것을 고수준으로(high-level goal) 말할 수만 있다면, 네트워크는 스스로 그러한 목표에 맞게 loss를 줄여나갈 것이다. 운 좋게도, 최근에 정확히 이것을 해주는 GAN이 발표되었다. GAN은 실제와 가짜를 구분하지 못하도록 학습을 진행하며, 이는 흐린 이미지를 생성하지 않게 할 수 있다(뿌연 이미지는 실제 사진처럼 보일 리 없으므로).

이 논문에서, 우리는 CGAN이라는 조건부 생성모델을 사용한다. 우리는 input image라는 조건을 줄 것이고 그에 맞는 output image를 생성할 것이기 때문에 이는 이미지 변환 문제에 잘 맞는다.

이 논문이 기여하는 바는

  • conditional GAN이 넓은 범위의 문제에서 충분히 합리적인 결과를 가져다준다는 것을 밝혔고
  • 좋은 결과를 얻기에 충분한 간단한 framework를 제안하고 여러 중요한 architecture의 효과를 분석하였다.

관련 연구(Related Works)

  • Structures losses for image modeling: 이미지 변환 문제는 per-pixel 분류 또는 회귀 문제로 다뤄졌다. 이러한 공식화는 output space는 “unstructured”이며 각 결과 픽셀은 다른 픽셀에 독립적인 것처럼 다룬다. CGAN는 “structured loss”를 학습하며 많은 논문들이 이러한 loss를 다룬다. conditional random fields, SSIM metric, nonparametric losses 등등.
  • Conditional GANs: 사실 이 논문에서 GAN을 처음 사용한 것은 아니다. 그러나 조건부 GAN을 이미지 변환 문제에 사용한 적은 없었다. CGAN에 대한 설명은 여기를 참조하자.

방법(Method)

GAN은 random noise vector $z$로부터 output image $y$를 생성하는 $G: z \rightarrow y$를 학습하는 생성모델이다. 이에 비해 CGAN은 $z$와 observed image $x$로부터 $y$로의 mapping인 $G: {x, z} \rightarrow y$를 학습한다.

[\]

목적함수(Objective)

CGAN의 목적함수는 다음과 같다.

[\mathcal{L}{\text{cGAN}}(G, D) = \mathbb{E}{x , \ y}[log \ D(x,y)] + \mathbb{E}_{x , \ z}[log \ (1-D(G(x, z)))]]

D를 조건부로 학습시키는 것을 중요하게 여겨, D가 $x$를 관측하지 못하도록 unconditional variant를 비교하도록 했다:

[\mathcal{L}{\text{GAN}}(G, D) = \mathbb{E}{ y}[log \ D(y)] + \mathbb{E}_{x , \ z}[log \ (1-D(G(x, z)))]]

D의 할일은 그대로이지만, G는 단지 D를 속이는 것뿐만 아니라 L2 distance에서의 ground truth에도 가깝도록 만들어야 한다.
사실 L2보다는 L1을 사용하는 것이 덜 흐린 이미지를 생성하는 데 도움이 되었다:

[\mathcal{L}{L1}(G) = \mathbb{E}{x, \ y, \ z }[ \Vert y - G(x, z) \Vert_1 ]]

그래서 최종 목적함수는

[G^\ast = arg \ min_G \ max_D \ \mathcal{L}{\text{cGAN}}(G, D) + \lambda \mathcal{L}{L1}(G)]

이다.

$z$가 없이도 네트워크는 $x \rightarrow y$ mapping을 학습할 수 있지만, 결정론적인 결과를 생성할 수 있고, 따라서 delta function 이외의 어떤 분포와도 맞지 않을 수 있다. 과거의 conditional GAN은 이를 인정하여 $x$에 더해 Gaussian noise $z$를 입력으로 주었다.
초기 실험에서 우리는 noise를 단순히 무시하도록 했지만, 최종 모델에서는 dropout 시에만 noise를 제공하여 학습과 테스트 시 모두에 G의 여러 레이어에 적용되도록 만들었다. dropout noise에도 불구하고 우리는 매우 조금의 stochasiticity만을 관측하였다. 아주 stochastic한 결과를 생성하는 conditional GAN을 설계하는 것은 아주 중요한 문제이다.

네트워크 구조(Network architectures)

우리는 DCGAN을 G와 D의 기본 모델로 하였고 둘 다 convolution-BatchNorm-ReLU 구조를 따른다.

Generator with skips

이미지 변환(image-to-image translation) 문제에서 어려운 점은 고해상도 input grid를 고해상도 output grid로 mapping하는 것이다. 심지어 표면의 외관은 다른데 각각 같은 근본적인 구조를 가진다는 것이다.
많은 이전 연구들은 encoder-decoder 네트워크를 사용한다. 이러한 네트워크에서는 bottleneck 레이어를 통과하기 때문에 정보의 손실이 필연적으로 발생할 수밖에 없다. 그래서, skip-connection을 추가한 U-Net이라는 구조를 사용했다.
정확히는, 전체 레이어 개수를 $n$이라 할 때 모든 $i$번째 레이어와 $n-i$번째 레이어를 연결했다. 각 연결은 단순히 concatenate한 것이다.

Markovian discriminator(PatchGAN)

high-frequency 모델링을 위해, 집중할 부분(attention)을 local image patch 단위로만 제한하는 것으로 충분하다. 그래서, 우리는 D를 PatchGAN(일반 GAN인데 단지 Patch 단위로만 보는 것) 구조로 만들었다.
그래서 우리의 D는 $N \times N$개의 각 Patch별로 이 부분이 진짜인지 가짜인지를 판별한다.

실험 단계에서 우리는 $N$이 작아도 전체 이미지를 한번에 보는 것보다는 더 좋은 결과를 얻을 수 있음을 보였다. 이는 더 작은 PatchGAN은 더 적은 parameter를 가지고, 더 빠르며, 더 큰 이미지에 적용하는 데에서도 이점이 있음을 보여준다.

D가 이미지를 Markov random field처럼 보는 것이 효과적인 모델링 방법이므로, patch의 지름보다 더 먼 pixel들은 독립적이라고 보았다. 이러한 접근은 이미 연구된 바 있고, texture/style 모델에서 꽤 흔하며 적절한 가정이다. 따라서 PatchGAN은 texture/style loss면에서 충분히 이해가능한 모델이다.

최적화 및 추론(Optimization and inference)

일반적인 GAN 접근법을 따랐다. original GAN에서는 $log \ (1-D(x, G(x,z)))$를 최소화하는 대신 $log \ D(x, G(x,z))$를 최대화하는 것이 낫다고 했다.
그러나 우리는 D를 최적화하는 목적함수를 2로 나누어 D가 G보다 상대적으로 더 빠르게 학습되지 않도록 하였다.
또한 minibatch SGD와 Adam을 사용하였다($lr=0.0002, \beta_1 = 0.5, \beta_2 = 0.999$). 또한 batch size는 실험에 따라 1~10으로 조정하였다.


실험(Experiments)

conditional GAN의 보편성을 테스트하기 위해, 다양하게 진행하였다.

Problem Dataset
Semantic labels $\leftrightarrow$ photo Cityspaces dataset
Architectural labels $\leftrightarrow$ photo CMP Facades
Map $\leftrightarrow$ aerial photo Google Maps
BW $\rightarrow$ color photos ImageNet
Edges $\rightarrow$ photo Natural Image manifold
Sketch $\rightarrow$ photo human sketches
Day $\rightarrow$ night ACM Transactions on Graphics
Thermal $\rightarrow$ color photos Benchmark dataset and baseline
Photo with missing pixels $\rightarrow$ inpainted photo Paris StreetView

다른 네트워크보다 더 좋은 결과:

encoder-decoder보다 더 효과적인 U-Net:

Patch의 개수를 늘렸을 때의 선명도 상승:

구글맵 사진과 도식화한 그림 간 변환 결과:

Colorization과 이미지 도식화:

등등 많은 결과가 논문에 나타나 있다.

사실 colorization 문제와 같은 것에서는 colorization에 특화된 네트워크가 더 좋은 결과를 내기는 한다.
그러나 이 Pix2Pix는 훨씬 더 넓은 범위의 문제를 커버할 수 있다는 점에서 의의가 있다.

더 많은 결과에 대해서는 여기를 참조하라.


결론(Conclusion)

이 논문에서는 image-to-image translation 문제에 대해, 특히 고도로 구조화된 그래픽 결과에 대해 conditional adversarial networks가 괜찮은 접근법이라는 것을 보여주었다. 이 네트워크는 문제와 데이터에 대한 loss를 학습함으로써 넓은 범위의 문제에 대해 적합함을 보여주었다.

Acknowledgments

매우 많다 ㅎㅎ


참고문헌(References)

논문 참조!


결론 이후에도 많은 실험 결과가 있으니 참조하시라. 매우 흥미로운 것들이 많다.


부록

Generator architectures

코드는 여기에 있다.

encoder는 C64-C128-C256-C512-C512-C512-C512-C512 구조이다(convolution layer).
decoder는 CD512-CD512-CD512-C512-C256-C128-C64 구조이다.

decoder의 마지막 레이어 이후 output 채널에 맞게 mapping되고(3, colorization에서는 2), Tanh 함수가 그 뒤를 따른다.
또한 encoder의 C64에서는 BatchNorm이 없다.
encoder의 모든 ReLU는 기울기 0.2의 Leaky ReLU이며, decoder는 그냥 ReLU이다.

U-Net decoder는 다음과 같이 생겼다. 앞서 언급했든 $i$와 $n-i$번째 레이어 사이에 skip-connection이 존재한다. 이는 decoder의 채널의 수를 변화시킨다.

CD512-CD1024-CD1024-C1024-C1024-C512-C256-C128

Discriminator architectures

$ 70 \times 70 $ discriminator의 구조는:

C64-C128-C256-C512

단 C64에는 BatchNorm이 적용되지 않는다.
마지막 레이어 이후 convolution을 통해 1차원으로 mapping하며 마지막에 sigmoid 함수가 적용된다.
0.2짜리 Leaky ReLU가 적용되었다.

다른 크기의(patch) D들은 조금씩 깊이가 다르다.

$ 1 \times 1 $ discriminator: C64-C128(convolution들은 $ 1 \times 1 $ spatial 필터를 사용)

$ 16 \times 16 $ discriminator: C64-C128

$ 286 \times 286 $ discriminator: C64-C128-C256-C512-C512-C512

학습 상세

  • $ 256 \times 256 $ 이미지는 $ 286 \times 286 $ 크기로 resize되었다가 random cropping을 통해 다시 $ 256 \times 256 $가 되었다.
  • 모든 네트워크는 scratch로부터 학습되었다.
  • weights는 (0, 0.02) 가우시안 분포를 따르는 랜덤 초기값을 가진다.
  • 데이터셋마다 조금씩 다른 기타 설정은 논문을 참조하자.

Comment  Read more

GAN의 개선 모델들(catGAN, Semi-supervised GAN, LSGAN, WGAN, WGAN_GP, DRAGAN, EBGAN, BEGAN, ACGAN, infoGAN), GAN의 개선 모델 설명

|

이 글에서는 catGAN, Semi-supervised GAN, LSGAN, WGAN, WGAN_GP, DRAGAN, EBGAN, BEGAN, ACGAN, infoGAN 등에 대해 알아보도록 하겠다.

아래쪽의 ACGAN, infoGAN은 발표 시기가 아주 최신은 아니지만 conditional GAN(CGAN)의 연장선상에 있다고 할 수 있기 때문에 따로 빼 놓았다.

각각에 대해 간단히 설명하면,

  • catGAN(Categorical GAN): D가 real/fake만 판별하는 대신 class label/fake class을 출력하도록 바꿔서 unsupervised 또는 semi-supervised learning이 가능하도록 하였고 또한 더 높은 품질의 sample을 생성할 수 있게 되었다.
  • Semi-supervised GAN: catGAN과 거의 비슷하다. original GAN과는 달리 DCGAN을 기반으로 만들어졌다.
  • LSGAN: 진짜 분포 $ p_{data} $와 가짜 데이터 분포 $p_g$를 비슷하게 만들기 위해, decision boundary에서 멀리 떨어진 sample에게 penalty를 주어 진짜 데이터에 근접하게 만드는 아이디어를 사용했다. 이름답게 loss function에는 Least Square가 사용되었고, 이를 통해 더 선명한 출력 이미지와 학습 과정의 높은 안정성을 얻었다. 또한, 이 최적화 과정이 $\chi^2$ divergence 최소화와 같음을 보였다.
  • WGAN: 실제 데이터의 분포와 가짜 데이터의 분포의 거리를 측정하는 방법으로 Wasserstein Distance를 정의하여 가짜 데이터를 실제 데이터에 근접하도록 하는 방법을 제시하였는데, 기존의 GAN들이 최적 값으로 잘 수렴하지 않던 문제를 해결, 거의 대부분의 데이터셋에서 학습이 잘 되는 GAN을 만들어냈다.
  • WGAN_GP: Improved WGAN이다. WGAN이 k-Lipschitz constraints를 만족시키기 위해 단순히 clipping을 수행하는데, 이것이 학습을 방해하는 요인으로 작용할 수 있다. WGAN_GP에서는 gradient penalty라는 것을 목적함수에 추가하여 이를 해결하였고, 학습 안정성을 데이터셋뿐만 아니라 모델 architecture에 대해서도 얻어냈다.
  • DRAGAN: Deep Regret Analytic GAN이다. WGAN에 더불어 gradient penalty를 정규화하고 더 다듬어 gradient penalty schemes(또는 heuristics)를 만들었고, 이를 저자들은 DRAGAN algorithm이라 하였다. 결과적으로 여전히 남아 있던 mode collapse 문제를 더 완화하였다.
  • EBGAN: Energy-Based GAN. 지금까지 대부분의 GAN이 D가 real일 확률을 0/1로 나타냈었다면, 이 모델은 그 구조를 깨고 에너지 기반 모델로 바꿨다는 데 의의가 있다. 그래서 D는 단지 real/fake를 구분하는 것이 아닌 G에 대한 일종의 loss function처럼 동작하며, 실제 구현은 Auto-Encoder으로 이루어졌다.
  • BEGAN: Boundary Equilibrium GAN으로, EBGAN을 베이스로 하고 Watterstein distance를 사용하였으며, 모델 구조를 단순화하고 이미지 다양성과 품질 간 trade-off를 조절할 수 있는 방법 또한 알아냈다고 한다. 이 논문에서는 스스로 milestone한 품질을 얻었다고 한다.
  • ACGAN: D를 2개의 분류기로 구성하고 목적함수도 두 개로 나눠서 real/fake, 데이터의 class를 구하는 과정을 분리하여 disentangled한 $z$를 만들었다.
  • infoGAN: 많은 GAN들이 그 내부의 parameter가 심하게 꼬여(entangled) 있고 이는 parameter의 어떤 부분이 어느 역할을 하는지 전혀 알 수 없게 만든다. infoGAN에서는 이를 잘 분리하여, semantic feature를 잘 조작하면 어떤 인자를 조작했느냐에 따라 생성되는 이미지의 각도, 밝기, 너비 등을 임의로 조작할 수 있게 하였다.

이 글에 소개된 대부분의 GAN은 다음 repository에 구현되어 있다.

Pytorch version
Tensorflow version


catGAN

논문 링크: catGAN

2015년 11월 처음 제안되었다.

데이터의 전체 또는 일부가 unlabeled인 경우 clustering은 $p_x$를 직접 예측하는 generative model과 분포를 예측하는 대신 데이터를 직접 잘 구분된 카테고리로 묶는 discriminative model로 나누어지는데, 이 모델에서는 이 두 아이디어를 합치고자 했다.
논문에서 이 catGAN은 original GAN이 $real, fake$만 구분하던 것을 real인 경우에는 그 class가 무엇인지까지 구분하게($C_1, C_2, …, C_N, C_{fake}$)했다는 점에서 original GAN의 일반화 버전이라고 하였으며, 또한 RIM(Regularized Information Maximization)에서 regularization이 추가가 되었듯 catGAN에선 G가 D에 대한 regularization을 하기 때문에 RIM의 확장판이라고도 하였다.

RIM에서 최적의 unsupervised classifier의 목적함수로 엔트로피를 사용하였듯 catGAN도 목적함수로 엔트로피 개념을 사용한다. 아래는 논문에 나온 그림이다.

왼쪽에서 초록색은 G(generate라고 되어 있다), 보라색은 D를 의미한다. 여기서 H는 엔트로피이다.

오른쪽 그림을 보면, D의 입장에서는:

  • i) real data는 실제 class label을 딱 하나 갖고 있기 때문에 해당하는 label일 확률만 1에 가깝고 나머지는 0이어야 한다. 따라서 엔트로피( $ H[p(y \vert x, D)] $ )를 최소화한다.
  • ii) fake data의 경우 특정 class에 속하지 않기 때문에 class label별로 확률은 비슷해야 한다. 따라서 엔트로피$H[p(y \vert x, G(z))]$를 최대화한다.
  • iii) 학습 sample이 특정 class에 속할 확률이 비슷해야 한다는 가정을 했기 때문에, input data $x$에 대한 marginal distribution(주변확률분포)의 엔트로피($H[p(y \vert D)]$)가 최대가 되어야 한다.

G의 입장에서는:

  • D를 속여야 하기 때문에 G가 만든 가짜 데이터는 가짜임에도 특정 class에 속한 것처럼 해야 한다. 즉, D의 i) 경우처럼 엔트로피($H[p(y \vert x, G(z))]$)를 최소화한다.
  • 생성된 sample은 특정 class에 속할 확률이 비슷해야 하기 때문에 marginal distribution의 엔트로피($H[p(y \vert D)]$)가 최대화되어야 한다.

따라서 D와 G의 목적함수를 정리하면,

[L_D = max_D ~~~ H_{\chi}[p(y D)] - \mathbb{E}_{x\sim \chi} [H[p(y x, D)]] + \mathbb{E}_{z\sim P(z)}[H[p(y G(z), D)]]]
[L_G = min_G ~~~ H_G[p(y D)] + \mathbb{E}_{z\sim P(z)}[H[p(y G(z), D)]]]

다만 $L_D$의 마지막 항을 직접 구하는 것은 어렵기 때문에, $z \sim P(z) $를 $M$개 뽑아 평균을 계산하는 몬테카를로 방법을 쓴다.

위 목적함수를 사용하여 실험한 결과는 다음과 같다.

Unsupervised catGAN은 9.7%의 error를 보이는 데 반해 $n=100$만의 labeled data가 있는 버전의 경우 error가 1.91%까지 떨어진다. $n=1000$, $n=전체$인 경우 error는 점점 떨어지는 것을 볼 수 있다. 즉, 아주 적은 labeled data를 가진 semi-supervised learning이라도 굉장히 쓸모있다는 뜻이다.

또한 k-means나 RIM과 비교했을 때 두 원을 잘 분리해내는 것을 볼 수 있다.

MNIST나 CIFAR-10 데이터도 잘 생성해내는 것을 확인하였다.


Semi-supervised GAN

논문 링크: Semi-supervised GAN

2016년 6월 처음 제안되었다.

위의 catGAN과 거의 비슷한 역할을 한다. 전체적인 구조도 비슷하다.

논문 자체가 짧고 목적함수에 대한 내용이 없어서 자세한 설명은 생략한다. 특징을 몇 개만 적자면,

  • original GAN과는 달리 sigmoid 대신 softmax를 사용하였다. $N+1$개로 분류해야 하니 당연하다.
  • DCGAN을 기반으로 작성하였다.
  • D가 classifier의 역할을 한다. 그래서 논문에서는 D/C network라고 부른다(D이자 C).
  • classifier의 정확도는 sample의 수가 적을 때 CNN보다 더 높다는 것을 보여주었다. sample이 많을 때는 거의 같았다.
  • original GAN보다 생성하는 이미지의 품질이 좋다.

LSGAN

논문 링크: LSGAN

2016년 11월 처음 제안되었다.

original GAN의 sigmoid cross entropy loss function은 vanishing gradients 문제가 있고, 따라서 출력 이미지는 실제 이미지에 비해선 분명히 품질이 떨어진다.

아래 그림의 (b)에서, 오른쪽 아래의 가짜 데이터는 D를 잘 속이고 있지만 vanishing gradient(sigmoid 그래프의 양쪽 끝을 생각하라) 문제로 인해 거의 업데이트되지 않고, 따라서 가짜 이미지는 실제 이미지와는 동떨어진 결과를 갖는다.
그러나 (c)처럼 이렇게 경계로부터 멀리 떨어진 sample들을 거리에 penalty를 줘서 경계 근처로 끌어올 수 있다면 가짜 이미지는 실제에 거의 근접하게 될 것이다. LSGAN은 이 아이디어에서 출발한다.

그래서, D를 위한 loss function을 least squares로 대체하면, 경계(decision boundary)로부터 먼 sample들은 penalty를 받아 경계 근처로 끌려온다.

original GAN의 목적함수는 다음과 같았다.

[min_G max_D V(D, G) = \mathbb{E}{x \sim p{data}(x)}[log D(x)] + \mathbb{E}{x \sim p{z}(z)}[log (1-D(G(z)))]]

LSGAN의 목적함수는 다음과 같다. $a$: fake data label , $b$: real data label.
$c$: G가 원하는 것은 이 $c$라는 값을 D가 fake data라고 믿는 것이다.

[min_D V_{\text{LSGAN}}(D) = \frac{1}{2} \mathbb{E}{x \sim p{data}(x)}[(D(x)-b)^2] + \frac{1}{2} \mathbb{E}{x \sim p{z}(z)}[(D(G(z)) - a)^2]]

[min_G V_{\text{LSGAN}}(G) = \frac{1}{2} \mathbb{E}{x \sim p{z}(z)}[(D(G(z)) - c)^2]]

이렇게 목적함수를 바꿈으로써 얻는 이득은 두 가지다.

  1. original GAN과는 달리 decision boundary에서 멀리 떨어진 sample을 오랫동안 가만히 두지 않고, 설령 맞는 영역에 위치한다고 해도 이에 penalty를 준다. 이는 결과적으로 G가 이미지를 생성할 때 decision boundary에 최대한 가까운, 즉 실제 이미지에 가깝게 생성하도록 한다.
  2. 멀리 떨어진 sample일수록 square 함수에 의해 penalty를 크게 받는다. 따라서 vanishing gradients 문제가 많이 해소되며, 따라서 학습이 안정적이게 된다. original GAN의 sigmoid는 $\vert x \vert$가 클 때 gradient가 매우 작다.

또 한 가지 더: LSGAN의 목적함수를 최적화하는 과정은 $\chi^2$ divergence를 최소화하는 것과 같다.
간략히 설명하면,

original GAN에서는 최적화 과정이 Jensen-Shannon divergence를 최소화하는 것을 보였다.

[C(G) = KL \biggl( p_{data} \Vert \frac{p_{data}+p_g}{2} \biggr) + KL \biggl( p_{g} \Vert \frac{p_{data}+p_g}{2} \biggr) - log(4)]

이제 LSGAN의 목적함수를 확장해 보면,

[min_D V_{\text{LSGAN}}(D) = \frac{1}{2} \mathbb{E}{x \sim p{data}(x)}[(D(x)-b)^2] + \frac{1}{2} \mathbb{E}{x \sim p{z}(z)}[(D(G(z)) - a)^2]]

[min_G V_{\text{LSGAN}}(G) = \frac{1}{2} \mathbb{E}{x \sim p{data}(x)}[(D(x)-c)^2] + \frac{1}{2} \mathbb{E}{x \sim p{z}(z)}[(D(G(z)) - c)^2]]

$ V_{\text{LSGAN}}(G) $의 추가된 항은 G의 parameter를 포함하지 않기 때문에 최적값에 영향을 주지 않는다.

우선 G를 고정했을 때 D의 최적값은:

[D^\ast(x) = {bp_{data}(x) + ap_g(x) \over p_{data}(x) + p_g(x)}]

중간 과정을 조금 생략하고 적으면, $b-c=1, b-a=2$라 했을 때

[2C(G) = \mathbb{E}{x \sim p{data}} [(D^\ast(x)-c)^2] + \mathbb{E}{x \sim p{g}} [(D^\ast(x)-c)^2]]

[= \int_\chi {((b-c)(p_d(x) + p_g(x)) - (b-a)p_g(x))^2 \over p_d(x) + p_g(x)} dx]

[= \int_\chi {(2p_g(x) - (p_d(x) + p_g(x)))^2 \over p_d(x) + p_g(x)} dx]

[= \chi^2_{Pearson} (p_d + p_g \Vert 2p_g)]

그러므로 LSGAN의 최적화 과정은 $b-c=1, b-a=2$일 때 $p_d + p_g$와 $2p_g$ 사이의 Pearson $\chi^2$ divergence를 최소화하는 과정과 같다.

학습시킬 때 $a, b, c$ 값을 $a=-1, b=1, c=0$ 또는 $a=0, b=c=1$ 등을 쓸 수 있다. 둘 사이의 차이는 실험 결과 별로 없으므로, 논문에서는 후자를 택했다.

LSGAN의 구조는 두 가지가 제안되어 있다. 하나는 112$ \times $112 size의 이미지를 출력하는 모델, 다른 하나는 class 개수가 3470개인 task를 위한 것(한자를 분류한다)인데, 충분히 읽기 쉬운 글자를 만들어내는 것을 볼 수 있다.

아래에 모델 구조를 나타내었다.

많은 class 수를 가진 경우 생성된 이미지 품질이 좋지 못한데, 이유는 입력 class 종류는 매우 많지만 출력은 하나뿐이기 때문이다. 이를 해결하는 방법은 conditional GAN을 쓰는 것이다.
그러나 one-hot encoding은 너무 비용이 크기 때문에 그 대신 각각의 class에 대응하는 작은 벡터를 linear mapping을 통해 하나 만들어서 모델의 레이어에 붙이는 방식을 썼다. 그 결과가 위 그림과 같으며, 목적함수는 다음과 같이 정의된다:

[min_D V_{\text{LSGAN}}(D) = \frac{1}{2} \mathbb{E}{x \sim p{data}(x)}[(D(x \vert \Phi(y))-1)^2] + \frac{1}{2} \mathbb{E}{x \sim p{z}(z)}[(D(G(z) \vert \Phi(y)))^2]]

[min_G V_{\text{LSGAN}}(G) = \frac{1}{2} \mathbb{E}{x \sim p{z}(z)}[(D(G(z \vert \Phi(y))) - 1)^2]]

$y$는 label vector, $ \Phi(\cdot) $은 linear mapping 함수이다.

LSUN-bedroom 등 여러 데이터셋에 대한 실험 결과이다.

마지막 그림의 경우 한자 글자를 꽤 잘 생성해내는 것을 볼 수 있다.

LSGAN도 GAN의 역사에서 꽤 중요한 논문 중 하나이다.


WGAN

논문 링크: WGAN

2017년 1월 처음 제안되었다.

소스코드: pytorch

참고할 만한 사이트: 링크

이 논문도 f-GAN처럼 수학으로 넘쳐흐른다. 다만 요약하지 않을 뿐

이 논문의 수학을 이해하는 데 있어 매우 좋은 참고자료가 있다: 링크

이 논문은 실제 데이터 분포와 가짜 데이터 분포 사이의 거리를 측정하는 방법을 바꿈으로써 GAN이 매우 안정적인 학습을 할 수 있도록 만들었다는 것에 의의가 있다.
기억할 것은 하나다: 거의 대부분의 데이터셋에서 학습이 안정적으로 잘 진행된다(다만 경우에 따라 약간 느리다고 한다).

original GAN부터 시작해서 GAN의 기본 아이디어는 두 분포 사이의 거리를 최소화하도록 G(와 D)를 잘 학습시키는 것이다. original GAN의 경우 이 최적화 과정이 Jenson-Shannon divergence(JSD)를 최소화하는 것과 같다는 것은 이미 증명되어있다.

그러나 이 JSD는 모든 분포의 거리를 효과적으로 측정해주지 못한다. 예를 들어

[\mathbb{P}0(x=0, y>0), \quad \mathbb{P}\theta(x=\theta, y>0)]

두 (반직선 형태인) 분포 간의 거리를 JSD로 측정하면,

[JS ( \mathbb{P}{0}, \mathbb{P}\theta ) = 0 \ \ if \ \theta=0, \quad log \ 2 \quad otherwise]

즉, $ \theta $가 1이든 0.0001이든 상관없이 두 분포가 얼마나 가까운지에 대한 정보를 JSD는 전혀 제공해주지 못한다. 이는 KL divergence도 마찬가지이다.

[KL ( \mathbb{P}{0}, \mathbb{P}{\theta}) = 0 \ \ if \ \theta=0, \quad \infty \quad otherwise]

참고로 논문에 나온 다른 측정방식으로 Total Variation(TV)이 있는데 별반 다를 것은 없다.

[\lambda( \mathbb{P}{0}, \mathbb{P}{\theta}) = 0 \ \ if \ \theta=0, \quad 1 \quad otherwise]

참고로 TV는 이렇게 정의된다.

[\delta(\mathbb{P}r, \mathbb{P}_g) = sup{A \in \Sigma} \vert \mathbb{P}_r(A) - \mathbb{P}_g(A) \vert]

그래서 WGAN의 저자들은 이와 비슷한 분포를 가진 경우 등은 GAN이 수렴을 잘 하지 못할 것이라고 하며 분포 간 거리를 측정하는 새로운 Earth-Mover(EM) distance 또는 Wasserstein-1 distance라고 부르는 것을 제안했다.

[W(\mathbb{P}r, \mathbb{P}_g) = \text{inf}{\gamma \in \Pi(\mathbb{P}r, \mathbb{P}_g)} \int d(x, y) \gamma (dxdy) \ \qquad = \text{inf}{\gamma \in \Pi(\mathbb{P}r, \mathbb{P}_g)} \ \mathbb{E}{(x, y) \sim \gamma} [ \Vert x - y \Vert ]]

$\Pi(\mathbb{P}, \mathbb{Q})$는 두 확률분포 $\mathbb{P}, \mathbb{Q}$의 결합확률분포들의 집합이고, $\gamma$는 그 중 하나이다.
즉 위 식은 모든 결합확률분포 $\Pi(\mathbb{P}, \mathbb{Q})$ 중 $d(x,y)$의 기댓값을 가장 작게 추정한 값이다.

이제 이 식을 위 그림의 두 분포에 적용하면 거리는

[W(\mathbb{P}0, \mathbb{P}\theta) = \vert \theta \vert]

로 아주 적절하게 나온다.

그래서 이렇게 나온 Wasserstein distance는 $\mathbb{P}_r$$\mathbb{P}_\theta$ 사이의 거리를 $\mathbb{P}_r$$\mathbb{P}_\theta$로 옮길 때 필요한 양과 거리의 곱으로 측정한다.
이를 어떤 산(분포) 전체를 옮기는 것과 같다고 해서 Earth Mover 또는 EM distance라고 불린다.

[Cost = mass \times distance]

original GAN과 목적함수의 차이를 비교하면,

name Discriminator Generator
GAN $\nabla_{\theta_d} \frac{1}{m} \sum^m_{i=1} \ [log D(x^{(i)}) + log (1-D(G(z^{(i)})))] $ $\nabla_{\theta_g} \ \frac{1}{m} \sum^m_{i=1} log (D(G(z^{(i)}))) $
WGAN $\nabla_w \frac{1}{m} \ \sum^m_{i=1} \ [f(x^{(i)}) + f(G(z^{(i)}))] $ $\nabla_{\theta} \frac{1}{m} \ \sum^m_{i=1} \ f(G(z^{(i)})) $

차이점이 더 있는데,

  • $f$는 k-Lipschitz function이어야 한다. 이를 위해 WGAN에서는 단순히 $[c, -c]$로 clipping한다.
  • log_sigmoid를 사용하지 않는다.

이제 WGAN 논문에 제시된 알고리즘을 보자.

알고리즘에 굉장히 특별하진 않다. optimizer로 RMSProp을 사용한 것이 약간의 차이점이다.

학습 과정에서의 장점을 보여주는 그림이 논문에 제시되어 있다. 두 Gaussian 분포를 볼 때 GAN의 수렴이 훨씬 잘 된다는 말이다.

WGAN 실험 결과를 보면 다음과 같다.

\(\\\) 사실 이 논문은 부록을 포함해 32page짜리 논문으로 수학이 넘쳐흐르지만, 필자의 논문 리뷰는 이 논문이 무슨 내용인지 정도만 전달하려는, 내용을 적당히 요약하여 보여주는 것이 목적이므로 자세한 수식 및 증명 과정은 따로 적지 않는다.

궁금하면 직접 읽으면 된다


Improved WGAN

논문 링크: WGAN_GP

2017년 3월 처음 제안되었다.

소스코드: pytorch

참고할 만한 사이트: 링크

WGAN은 clipping을 통해 Lipschitz 함수 제약을 해결하긴 했지만, 이는 예상치 못한 결과를 초래할 수 있다:

(WGAN 논문에서 인용)
만약 clipping parameter($c$)가 너무 크다면, 어떤 weights든 그 한계에 다다르기까지 오랜 시간이 걸릴 것이며, 따라서 D가 최적화되기까지 오랜 시간이 걸린다.
반대로 $c$가 너무 작다면, 레이어가 크거나 BatchNorm을 쓰지 않는다면 쉽게 vanishing gradients 문제가 생길 수 있다.

clipping은 단순하지만 문제를 발생시킬 수 있다. 특히 $c$가 잘 정해지지 않았다면 품질이 낮은 이미지를 생성하고 수렴하지 않을 수 있다. 모델의 성능은 이 $c$에 매우 민감하다.

가중치 clipping은 가중치를 정규화하는 효과를 갖는다. 이는 모델 $f$의 어떤 한계치를 설정하는 것과 같다.

그래서 이 논문에서는 gradient penalty라는 것을 D의 목적함수에 추가해 이 한계를 극복하고자 한다(G의 목적함수는 건드리지 않은 듯 하다).

[L = \mathbb{E}{\hat{x} \sim \mathbb{P}_g} \ [D(\hat{x})] - \mathbb{E}{x \sim \mathbb{P}r} \ [D(x)] + \lambda \ \mathbb{E}{\hat{x} \sim \mathbb{P}{\hat{x}}} \ [(\Vert \nabla{\hat{x}}D(\hat{x}) \Vert_2 - 1)^2 ]]

즉 clipping을 적용하는 대신 WGAN_GP는 gradient norm이 목표인 $1$에서 멀어지면 penalty를 주는 방식을 택했다.

  • Sampling Distribution: $\mathbb{P}_{\hat{x}}$는 실제 데이터 분포 $\mathbb{P}_r$과 G가 생성한 데이터 분포 $\mathbb{P}_g$로부터 추출한 point 쌍들 사이에 직선을 하나 그어서 얻은 것이다.
  • Penalty coefficient: $\lambda$가 붙은 마지막 항(이 논문에서는 $\lambda=10$으로 고정됨)이 gradient penalty이다.
  • No critic batch normalization: BN은 D의 문제의 형식을 1-1 매칭 문제에서 전체 batch input-batch output으로 바꿔버린다. 이 논문에서 새로 만든 gradient penalty 목적함수는 이 조건에 맞지 않기 때문에 BN을 쓰지 않았다.
  • Two-sided penalty: gradient가 단지 $1$ 아래로 내려가는 것을 막는(one-sided) 대신 $1$ 근처에 머무르도록 했다(two-sided).

그래서 발전시킨 알고리즘은 다음과 같다.

좀 특이하게도 이 논문에는 모델 구조(architecture)를 바꿔가면서 한 실험 결과가 있다. 확실히 WGAN_GP 버전이 뛰어남을 볼 수 있다.

WGAN_GP만이 (이 논문에서 실험한) 모든 architecture에 대해서 제대로 된 학습에 성공하였다고 한다.

여러 실험 결과들이 더 있지만 하나만 더 소개하면,
논문에서는 아래 이미지(LSUN-bedroom)가 지금까지의 연구에 의해 나온 것 중 제일 잘 나온 것이라고 믿는다고 한다. 각각의 이미지가 $128 \times 128 $ 크기라 그다지 고해상도는 아니긴 하지만 어쨌든 실제로 꽤 깨끗한 이미지로 보인다.

[\]

종합하면 이 개선된 버전은 데이터셋뿐만 아니라(WGAN) 모델 구조에 대해서도(architecture) 학습 안정성을 얻었다고 할 수 있다.


DRAGAN

논문 링크: DRAGAN

2017년 5월 처음 제안되었다.

소스코드: tensorflow, pytorch

참고할 만한 사이트: 링크

WGAN_GP 논문과 차이점은 D(critic network)에 의해 계산되는 식별함수 $f$가 gradient에 있어 어떤 제한을 받는가이다.

  • WGAN_GP에서는 gradient가 실제 데이터와 가짜 데이터 사이의 직선 위 랜덤한 곳으로 설정되기 때문에 모든 곳에서 $ \vert \nabla f \vert = 1 $를 향한다.
  • DRAGAN에서는 gradient가 실제에 “가깝게” sampling된다. 이는 실제 데이터 근처에 있을 때만 $ \vert \nabla f \vert = 1 $를 향한다.

아래 그림은 위 차이를 보여준다. 참고 사이트에서 가져왔다.

간단히 DRAGAN은 실제 데이터 분포(manifold)에 가까울 때만 gradient penalizing을 시켜 mode collapsing을 막을 수 있다.

$ \lambda $가 penalty hyperparameter로 사용되는데, 작은 $\lambda$는 toy tasks에 있어 특히 잘 학습됨을 볼 수 있다.

이 논문이 기여한 바는 다음과 같다:

  • AGD를 regret minimization으로 봄으로써 GAN 학습에 대한 추론을 제안하였다.
  • nonparametric 한계 안에서 GAN 학습의 점근적 수렴과 매 단계마다 D가 최적이어야 할 필요가 없다는 것을 증명하였다.
  • AGD가 비 볼록(non-convex) 게임에서 잠재적으로 어떻게 나쁜 국소평형 지점(local minima)으로 수렴하는지와 이것이 GAN의 학습에 있어 mode collapsing에 얼마나 큰 책임이 있는지를 논했다.
  • 실제 데이터에 근접한 경우에 D의 $f$의 gradient가 큰 값을 가질 때 어떻게 mode collapse 상황이 생기는지를 특징지었다.
  • 이러한 관찰에 의해 DRAGAN(a novel gradient penalty scheme)을 소개하였고 이것이 mode collapsing 문제를 완화해준다는 것을 보였다.

원래의 GAN들은, sample이 real data에 가까움에도 sharp gradient를 갖기 떄문에 mode collapse의 정의에 의해 이것이 나타난다. 이러한 sharp gradient는 G가 많은 $z$ 벡터들을 하나의 출력값 $x$로 가게끔 하고 따라서 형평성(equilibrium, mode collapse의 정의를 생각하라)을 약화시키도록 한다.
그래서 이러한 실패를 막으려면 D에게 다음과 같은 penalty를 줘서 gradient를 정규화시키는 것이다:

[\lambda \ \cdot \ \mathbb{E}{x \sim P{real}, \ \delta \sim N_d (0, \ cI)} [\Vert \nabla_X D_\theta(x+\delta) \Vert^2 ]]

이 전략은 GAN 학습의 안정성을 증가시킨다. 이 논문에는 그 결과와 그렇게 되는 이유가 설명되어 있으니 자세한 부분은 이를 참고하자.

그러나, 이 논문에서는 위의 penalty 식이 여전히 불안정하며 지나치게 penalty를 주는(over-penalized) 경우가 있을 수 있고, 따라서 D는 real point $x$와 noise인 $x+\lambda$에게 동일한 “실제 데이터일” 확률을 부여할 수 있다는 것을 발견하였다. 따라서 더 나은 gradient penalty 식은

[\lambda \ \cdot \ \mathbb{E}{x \sim P{real}, \ \delta \sim N_d (0, \ cI)} [ \ max(0, \ \Vert \nabla_X D_\theta(x+\delta) \Vert^2 - k )\ ]]

그리고, 실험적인 최적화를 적용한 최종 penalty 식은

[\lambda \ \cdot \ \mathbb{E}{x \sim P{real}, \ \delta \sim N_d (0, \ cI)} [ \ \Vert \nabla_X D_\theta(x+\delta) \Vert - k \ ]^2]

결과적으로 real data의 작은 동요(변화, perturbations)에도 잘 작동하였다.

이 논문에서 사용한 gradient penalty schemes 또는 heuristics는 DRAGAN algorithm으로 부르기로 하였다.


EBGAN

2016년 9월 처음 제안되었다.

논문 링크: EBGAN

이 논문에서는 D를 data manifold에 가까운 지점에서는 낮은 에너지를, 그렇지 않은 지점에서는 높은 에너지를 갖도록 하는 일종의 energy function으로 보는 Energy-Based GAN을 소개한다. 일반 GAN과 비슷하게 G는 최대한 낮은 에너지를 갖는(즉, 실제 데이터와 비슷한) sample을 생성하고, D는 G가 생성한 이미지들에는 높은 에너지를 부여하도록 한다.
D를 energy function으로 봄으로써 다양한 architecture과 loss function에 사용할 수 있게 되었다. 이 논문에서는 D를 auto-encoder로 구현하였다.
결과적으로 EBGAN은 학습이 더 안정적이며 또한 고해상도 이미지를 생성하는 데에도 능하다는 것을 보여주었다.

우선 Energy Based Model은,

  • LeCun이 2006년 제안하였으며
  • input space를 하나의 scalar(energy로 지칭된다)로 mapping하는 모델이다.
  • 학습이 제대로 된 경우 낮은 에너지를, 아니면 높은 에너지를 생성하며
  • CNN등의 학습에서 cross entropy loss를 사용하여 loss를 낮춰가는 것과 비슷하다. 여기선 loss랑 energy랑 비슷하게 사용된다.

간단히 이 Energy Based Model을 GAN에 적용시킨 것이 EBGAN이다.

이 논문의 contribution은,

  • GAN 학습에 energy-based를 적용시켰고
  • simple hinge loss에 대해, 시스템이 수렴했을 때 G는 데이터 분포를 따르는 point를 생성하게 된다는 증명과
  • energy를 reconstruction error로 본 auto-encoder architecture로 EBGAN framework를 만들었고
  • EBGAN과 확률적 GAN 모두에게 좋은 결과를 얻을 수 있는 시스템적 실험셋(hyperparameter 등)
  • ImageNet 데이터셋에 대해 256$\times$256 고해상도 이미질르 생성할 수 있음을 보여주었다.

목적함수는 다음과 같이 정의된다. $[\cdot]^+ = max(0,\ \cdot)$이다.

[\mathcal{L}_D(x, z) = D(x) + [m - D(G(z))]^{+}]

[\mathcal{L}_G(z) = D(G(z))]

EBGAN은 per-pixel Euclidean distance를 사용한다.

찾아낸 해가 optimum인지에 대한 증명은 Theorem 1과 2로 나누어져 증명이 논문에 수록되어 있다. 간략히 소개하기엔 꽤 복잡하므로 넘어간다.

D의 구조를 나타내면 다음과 같다.

왜 auto-encoder를 썼냐 하면:

  • D가 오직 0과 1 두 값만 낸다면 한 minibatch 안에서 많은 다른 sample들이 orthogonal에서 멀어질 것임을 뜻한다. 이는 비효율적인 학습을 초래하며, minibatch size를 줄이는 것은 현재 하드웨어 상으로 별로 좋은 옵션이 아니다. 그래서 이 대신 reconstruction-based output을 씀으로써 D에게 좀 더 다양한 target을 제공한다.
  • Auto-encoder는 전통적으로 energy-based model을 표현하는 좋은 모델이다. auto-encoder는 supervision이나 negative sample 같은 것 없이도 energy manifold를 잘 학습할 수 있다. 이는 EBGAN auto-encoding model이 실제 데이터를 복원하도록 학습했을 때, D는 그 data manifold를 스스로 찾아낼 수 있다는 뜻이다. 반대로 G로부터의 negative sample이 없다면 binary logistic loss로 학습된 D는 무의미하다는 뜻이기도 하다.

이 논문에서는 repelling regularizer라는 것을 제안하는데, 이는 모델이 겨우 몇 개의 $p_{data}$로 뭉쳐 있는 sample들을 생성하는 것을 고의로 막기 위한 것으로 EBGAN auto-encoder model에 최적화된 것이다.
Pulling-away Term, PT는 다음과 같이 정의된다:

[f_{PT}(S) = \frac{1}{N(N-1)} \sum_i \sum_{j \ne i} \Bigl( \frac{S_i S_j}{\Vert S_i \Vert \Vert S_j \Vert } \Bigr)^2]

PT는 minibatch 상에서 동작하고 쌍으로 sample representation을 orthogonalize하려고 한다. 논문에서는 PT로 학습된 EBGAN auto-encoder model을 EBGAN-PT라고 부르기로 하였다.

이 논문의 실험결과는 다른 GAN과는 약간 다르다. Inception score를 생성 품질을 측정하는 척도로 사용하여 GAN과 EBGAN의 생성 품질을 비교한 것이다. 점수가 높을수록 품질이 좋은 것이도, 각 막대그래프는 해당 점수를 가진 sample의 비율이 얼마나 되는지를 나타낸 것이다. 따라서 각 막대가 오른쪽에 많이 분포할수록 생성 품질이 좋다고 할 수 있다.
아래 그림은 일부만 가져온 것이다. 논문에서도 그림이 너무 작으니 pdf에서 확대해서 보라는 것을 추천하고 있다. 그림이 15개 정도 있는데, 실험 조건만 다를 뿐 대부분 비슷한 분포를 보이고 있다.

일반 GAN과 비교하면 MNIST 생성 품질도 확실히 좋은 것을 볼 수 있다.

또 LSUN, CELEBA, ImageNet 데이터셋에 대해서도 실험한 결과들이 논문에 실려 있다. 대부분의 이미지는 품질이 훨씬 좋고 선명한 이미지 품질을 볼 수 있다.


BEGAN

논문 링크: BEGAN

2017년 3월 처음 제안되었다.

구글이 내놓은 GAN 논문이다. 이 논문에서 중요한 특징 및 개선점은,

  • 모델 구조는 더 단순해졌고, 여전히 빠르고 안정적인 학습이 가능하다.
  • EBGAN을 바탕으로 해 energy와 auto-encoder를 사용한다. 다만 loss는 WGAN의 Wasserstein distance를 사용한다.
  • 대부분의 GAN이 ‘실제 데이터 분포’와 ‘가짜 데이터 분포’ 사이의 거리를 좁히기 위해 노력해왔다면, BEGAN은 ‘진짜 데이터에 대한 auto-encoder 데이터 분포’와 ‘가짜 데이터에 대한 auto-encoder 데이터 분포’ 사이의 거리를 계산한다.
  • D가 G를 압도하는 상황이 발생하는 것을 막기 위해 D와 G의 equilibrium을 조절하는 hyperparameter $\gamma$를 도입하였다. diversity ratio라고 부른다는데, 이것으로
    • auto-encoder가 데이터를 복원하는 것과 진짜/가짜를 구별하는 것 사이의 균형을 맞추고
    • $\gamma$가 낮으면 auto-encoder가 새 이미지를 생성하는 것에 집중한다는 것이므로 이미지 다양성이 떨어진다. 반대는 당연히 반대의 효과를 가진다.
    • 이 equilibrium 개념을 가져와서 수렴(즉, 학습)이 잘 되었는지를 판별하는 데 쓸 수도 있다.

이 논문은 결과에 비해 수식이 꽤 단순한 편이다.

auto-encoder의 Wasserstein distance 하한

우선 pixel-wise auto-encoder를 학습할 때 $ \mathcal{L}: \mathbb{R}^{N_x} \mapsto \mathbb{R}^+$ 를 정의하면,

$\mu_{1, 2}$를 auto-encoder loss의 두 분포라 하고, $\Gamma(\mu_1, \mu_2)$를 모든 $\mu_1$과 $\mu_2$의 결합들의 집합이라 하고, $m_{1, 2} \in \mathbb{R}$을 각 평균이라 하면, Wasserstein distance는

[W_1(\mu_1, \mu_2) = inf_{\gamma \in \Gamma(\mu_1, \mu_2)} \ \mathbb{E}_{(x_1, x_2) \sim \gamma} [\vert x_1 - x_2 \vert ]]

Jensen’s inequality를 써서

[inf \mathbb{E}[ \vert x_1 - x_2 \vert ] \geqslant inf \vert \mathbb{E}[x_1 - x_2] \vert = \vert m_1 - m_2 \vert]

데이터 분포 간 사이의 거리를 구하려는 것이 아니라 auto-encoder loss distribution의 Wasserstein distance를 구하려고 하는 것이라는 것을 알아둘 필요가 있다.

GAN의 목적함수에서, $\vert m_1 - m_2 \vert $를 최대화하는 것은 딱 두 가지인데, $m_1$이 0으로 가는 것이 auto-encoder가 실제 이미지를 생성하는 것으로 자연스럽기 때문에 선택한 것은 다음 중 (b)이다.

GAN의 목적함수를 정리하면,

[\mathcal{L}_D = \mathcal{L}(x;\theta_D) - \mathcal{L}(G(z_D;\theta_G);\theta_D) \qquad \text{for} \ \ \theta_D]

[\mathcal{L}_G = -\mathcal{L}_D \qquad \qquad \qquad \qquad \qquad \qquad \text{for} \ \ \theta_G]

참고: $ G(\cdot) = G(\cdot, \ \theta_G), \mathcal{L}(\cdot) = \mathcal{L}(\cdot ; \ \theta_D)$이다.

D와 G의 평형(equilibrium)

만약 평헝이 이루어졌다면 다음은 당연하다:

[\mathbb{E} [ \mathcal{L}(x)] = \mathbb{E}[\mathcal{L}(G(z))]]

한쪽이 지나치게 강해지는 것을 막기 위해, diversity ratio $\gamma$를 정의하였다:

[\gamma = \frac{\mathbb{E}[\mathcal{L}(G(z))]}{ \mathbb{E}[\mathcal{L}(x)] } \in [0, 1]]

이것으로 조금 위에서 말한 이미지의 다양성과 품질 간 trade-off, D와 G의 평형 등을 모두 얻을 수 있다.

BEGAN의 목적함수

  • $ \mathbb{E}[\mathcal{L}(G(z))] = \gamma \mathbb{E}[ \mathcal{L}(x)] $를 유지하기 위해 Proportional Control Theory를 사용하였다.
    • $k_t \in [0, 1]$를 사용하여 얼마나 경사하강법 중 $\mathcal{L}(G(z))$를 강조할 것인지를 조절한다.
    • $k_0 = 0$
    • t가 지날수록 값이 커진다.
  • $\lambda_k$는 learning rate와 비슷하다.

수렴 판별 방법

조금 전의 equilibrium 컨셉을 생각해서, 수렴과정을 가장 가까운 복원 $\mathcal{L}(x)$를 찾는 것으로 생각할 수 있다.

수렴 측정방법은 다음과 같이 표현 가능하다:

[\mathcal{M}_{global} = \mathcal{L}(x) + \vert \gamma \mathcal{L}(x) - \mathcal{L}(G(z_G)) \vert]

이는 모델이 잘 학습되어 최종 상태에 도달했는지, 아니면 mode collapsing했는지를 판별할 때 쓸 수 있다.

Model architecture

DCGAN과는 달리

  • batch norm
  • dropout
  • transpose convolution
  • exponential growth for convolution filters

등이 다 없다. 모델 구조가 상당히 단순함을 알 수 있다.

실험 결과

간단히 말하면..좋다.

예전에 DCGAN에서 봤던 interpolating도 잘 됨을 확인할 수 있다.


ACGAN

논문 링크: ACGAN

2016년 10월 처음 제안되었다.

DCGAN에서는 $z$가 속한 벡터공간의 각 차원별 특징은 사람이 해석할 수 없는 수준이다. 즉 $z$의 요소를 변화시킬 때 사진이 변화하는 형상은 알 수 있지만, 각각의 차원이 정확히 무슨 역할을 하고 어떤 특징을 갖는지는 알 수가 없다.
그러나 해석하기 쉬운 특징량(disentangled latend code)에 의존하는 모델들이 여럿 제안되었는데, 그것은 앞에서 설명했던 CGAN, ACGAN, infoGAN 등이 있다.

ACGAN이 original GAN 및 CGAN과 다른 점은,

  • D는 2개의 분류기로 구성되는데
    • 하나는 original GAN과 같은 real/fake 판별
    • 다른 하나는 데이터의 class 판별
  • 목적함수: 맞는 Source의 log-likelihood $L_S$, 맞는 Class의 log-likelihood $L_C$ 두 개로 나누어
    • $L_S$는 기존 GAN의 목적함수와 같다. 즉 real/fake를 판별하는 것과 관련이 있다.
    • $L_C$는 그 데이터의 class를 판별하는 것과 관련이 있다. CGAN에서 본 것과 약간 비슷하다.
    • D는 $L_S+L_C$를 최대화하고
    • G는 $L_C-L_S$를 최대화하도록 학습된다.

[L_S = E[log \ p(S=real \vert X_{real})] + E[log \ p(S=fake \vert X_{fake})]]

[L_C = E[log \ p(C=c \quad \ \vert X_{real})] + E[log \ p(C=c \ \ \quad \vert X_{fake})]]

실험은 ImageNet과 CIFAR-10에 대해 진행하였다고 한다. 결과는 (위의 BEGAN에 비해) 아주 놀랍지는 않아서(물론 예전 논문이다) 생략한다.

대신 실험 시 사용한 모델 구조를 가져왔다.


infoGAN

논문 링크: infoGAN

2016년 6월 처음 제안되었다.

original GAN은 input vector $z$에 어떠한 제한도 없이 단순히 무작위 값을 집어넣었기 때문에, 이러한 $z$의 각 차원은 역할이 분리되지 않고 심하게 꼬여(entangled) 있다.
그러나 이 domain들은 서로 다른 역할을 하는 여러 부분으로 분리될 수 있다.

그래서 이 논문에서는 noise 부분 $z$와, 데이터 분포의 가장 중요한 의미를 가지는 특징량(latent code) $c$ 두 부분으로 나누었다(CGAN과 비슷). 특징량은 설명 가능한 부분(semantic features), $z$는 원래의 것처럼 데이터를 생성하기 위한 incompressible noise이다.

G에 들어가는 input은 따라서 $G(z, c)$로 표시된다. 그러나 기존 GAN은 단지 $P_G(x \vert c) = P_G(x)$로 처리함으로써 특징량 $c$를 무시해버릴 수 있다. 따라서 정보이론적 정규화를 시행하도록 한다: $c$와 $G(z, c)$ 사이에는 아주 높은 상호정보량이 있기 때문에, $I(c;\ G(z,c))$ 역시 높을 것이다.

참고: 상호정보량은 다음과 같이 KLD로 측정한다. 서로 독립인 경우 0이 되는 것은 상호정보량의 이름에서 봤을 때 직관적이다.

[I(X;Y) = D_{KL}(p(x,y) \Vert p(x)p(y))]

그래서 목적함수는 다음과 같다.

[min_G max_D V_I(D, G) = V(D, G) - \lambda I(c; G(z, c))]

$V(D, G)$는 기존 GAN의 목적함수이다.

상호정보량은 쉽게 구하긴 어렵기 때문에, 논문에서는 이를 직접적으로 구하는 대신 하한을 구해 이를 최대화하는 방식을 썼다. 수식을 중간과정을 일부 생략하고 적으면

[I(c; G(z, c)) = H(c) - H(c \vert G(z, c)) = \mathbb{E}{x \sim G(z,c)} [ \mathbb{E}{c’ \sim P(c \vert x)}[log \ P(c’ \vert x)]] + H(c)]

[\qquad \qquad \qquad \qquad \qquad \qquad \qquad \quad \ \ \ge \mathbb{E}{x \sim G(z,c)} [ \mathbb{E}{c’ \sim P(c \vert x)}[log \ Q(c’ \vert x)]] + H(c)]

상호정보량 I(c; G(z, c))의 variational lower bound $L_I(G, Q)$를 정의할 수 있는데,

[L_I(G, Q) = E_{c \sim P(c), x \sim G(z, c)}[log \ Q(c \vert x)] + H(c)]

[\qquad \qquad \qquad \ = E_{x \sim G(z,c)} [ \mathbb{E}_{c’ \sim P(c \vert x)}[log \ Q(c’ \vert x)]] + H(c)]

[\le I(c; G(z, c)) \ \qquad \qquad \quad]

그래서 infoGAN은 아래 minimax game을 하는 것이 된다:

[min_{G, Q} max_D V_{\text{infoGAN}}(D, G, Q) = V(D, G) - \lambda L_I(G,Q)]

실험 결과

semantic features $c$를 적절히 조작하면 생성될 이미지에 어떤 변화를 줄 수 있는지를 중점적으로 보여주었다.
MNIST의 경우 숫자의 종류(digit), 회전, 너비 등을 조작할 수 있고, 사람 얼굴의 경우 얼굴의 각도, 밝기, 너비 등을 바꿀 수 있음을 보여주었다.

더 많은 결과는 논문을 참조하자.


이후 연구들

GAN 이후로 수많은 발전된 GAN이 연구되어 발표되었다.
GAN 학습에 관한 내용을 정리한 것으로는 다음 논문이 있다. Improved Techniques for Training GANs

또 다른 것으로는 PROGDAN, SLOGAN 등이 있다.


Comment  Read more

f-GAN(f-GAN 논문 설명)

|

이 글에서는 2016년 6월 Sebastian Nowozin 등이 발표한 f-GAN - Training Generative Neural Samplers using Variational Divergence Minimization를 살펴보도록 한다.

f-GAN은 특정한 구조를 제안했다기보다는 약간 divergence에 대한 내용을 일반적으로 증명한 수학 논문에 가깝다.

중요한 부분만 적을 예정이므로 전체가 궁금하면 원 논문을 찾아 읽어보면 된다.

이 논문은 수학이 넘쳐흐르는 논문이다.


f-GAN

논문 링크: f-GAN

초록(Abstract)

2016년에 나온 논문임을 생각하라.

Generative neural sampler는 random input vector를 입력으로 받아 network weights에 정의된 확률분포로부터 sample을 만들어내는 확률적 모델이다. 이 모델들은 sample과 도함수 계산이 효율적이지만 우도(likelihood)나 주변화(marginalization)을 계산하진 못한다. 적대생성적 학습방법은 이런 모델이 추가 신경망을 통해 이를 학습할 수 있게 해준다.
우리는 이 적대생성적 접근법이 더 일반적인 변분 발산(variational divergence) 추정 접근의 특별한 경우임을 보일 것이다. 우리는 임의의 f-divergence가 Generative neural sampler에 쓰일 수 있음을 보일 것이다. 우리는 이렇게 다양한 divergence 함수를 쓸 수 있는 것이 학습 복잡도와 생성모델의 품질 면에서 이득임을 논할 것이다.


서론(Introduction)

확률적 생성모델은 주어진 domain $\chi$ 상의 확률분포를 서술한다. 예를 들면 자연언어 문장, 자연 이미지, 녹음된 파형 등의 분포가 있다.

가능한 모델 집합 $Q$에서 생성모델 Q가 주어졌을 때 우리는 일반적으로 다음에 관심이 있다:

  • Sampling. Q로부터 sample을 생성한다. sample을 살펴보거나 어떤 함숫값을 계산해봄으로써 우리는 분포에 대한 통찰을 얻거나 결정문제를 풀 수 있다.
  • Estimation. 알려지지 않은 진짜 분포 P로부터 iid sample ${x_1, x_2, …, x_n}$이 주어졌을 때, 이 진짜 분포를 가장 잘 설명하는 Q $\in Q$를 찾는다.
  • Point-wise 우도 측정. sample $x$가 주어지면, 우도 Q($x$)를 계산한다.

GAN은 정확한 sampling과 근사추정이 가능한 인상적인 모델이다. 여기서 사용된 모델은 균등분포 같은 random input vector를 받는 feedforward 신경망이다. 최종적으로 모델을 통과하여 나오는 것은 예를 들면 이미지이다. GAN에서 sampling하는 것은 딱 1개의 input이 신경망을 통과하면 정확히 하나의 sample이 나온다는 점에서 효율적이다.

이런 확률적 feedforward 신경망을 generative neural samplers라고 부를 것이다. GAN도 여기에 포함되며, 또한 variational autoencoder의 decoder 모델이기도 하다.

original GAN에서, neural sample를 JSD의 근사적 최소화로 추정하는 것이 가능함이 증명되어 있다.

[D_{JS}(P | Q) = {1 \over 2} D_{KL}(P | {1 \over 2}(P+Q)) + {1 \over 2} D_{KL}(Q | {1 \over 2}(P+Q))]

$D_{KL}$은 Kullback–Leibler divergence이다.

GAN 학습의 중요한 테크닉은 동시에 최적화된 Discriminator 신경망을 만든 것에 있다. 왜냐하면 $D_{JS}$는 진짜 분포 $P$는 충분한 학습을 통해 Q가 $P$에 충분히 가까워졌을 때 분포 간 divergence를 측정하는 적정한 방법이기 때문이다.

우리는 이 논문에서 GAN 학습목적(training objectives)과 이를 임의의 f-divergence로 일반화하고자, GAN을 variational divergence 추정 framework로 확장할 것이다.

구체적으로, 이 논문에서 보여주는 state-of-the-art한 것은:

  • GAN 학습목적을 모든 f-divergence에 대해 유도하고 여러 divergence 함수를 소개할 것이다: Kullback-Leibler와 Pearson Divergence를 포함한다.
  • 우리는 GAN의 saddle-point 최적화를 단순화할 것이고 또 이론적으로 증명할 것이다.
  • 자연 이미지에 대한 generative neural sampler을 측정하는 데 어느 divergence 함수가 적당한지 실험적 결과를 제시하겠다.

방법(Method)

먼저 divergence 추정 framework를 리뷰부터 하겠다. 이후 divergence 추정에서 model 추정으로 확장하겠다.

The f-divergence Family

Kullback-Leibler divergence같이 잘 알려진 것은 두 확률분포 간 차이를 측정한다.

두 분포 $P$와 $Q$가 있고, domain $\chi$에서 연속밀도함수 $p$와 $q$에 대해 f-divergence
$ f : \mathbb{R}_+ \rightarrow \mathbb{R} $이 $f(1)=0$인 볼록이고 하반연속인(convex, lower-semicontinuous) 함수 $f$에 대해

[D_f(P \Vert Q) = \int_{\chi} q(x) f \Bigl( {p(x) \over q(x)} \Bigr) dx]

로 정의된다.

Variational Estimation of f-divergences

Nyugen 등 연구자는 $P$와 $Q$로부터의 sample만 주어진 경우에서 f-divergence를 측정하는 일반적인 변분법을 유도했다. 우리는 이를 고정된 모델에서 그 parameter를 측정하는 것으로까지 확장할 것이고, 이를 variational divergence minimization(VDM)이라 부를 것이다. 또한 적대적 생성 학습법은 이 VDM의 특수한 경우임을 보인다.

모든 볼록이고 하반연속인 볼록 켤레함수 $f^\ast$ (Fenchel conjugate)를 갖는다. 이는

[f^\ast(t) = \quad sup \quad { ut-f(u) } \ u \in dom_f \qquad]

로 정의된다.

또한 $f^\ast$ 역시 볼록이며 하반연속이고 $f^{\ast\ast} = f$이므로 $ f(u) = sup_{t \in dom_{f^\ast}} { tu-f^\ast(t) } $로 쓸 수 있다.

Nguyen 등 연구자는 lower bound를 구했다: $\tau$가 $T: \chi \rightarrow \mathbb{R} $인 함수들의 임의의 집합일 때,

[D_f(P \Vert Q) \ge sup_{T \in \tau} (\mathbb{E}{x \sim P} [T(x)] - \mathbb{E}{x \sim Q} [f^\ast(T(x))])]

변분법을 취해서,

[T^\ast(x) = f^{‘} \Bigl( {p(x) \over q(x)} \Bigr)]

아래는 여러 f-divergence를 생성함수와 함께 나타낸 것이다.

Variational Divergence Minimization(VDM)

이제 실제 분포 $P$가 주어졌을 때 생성모델 $Q$를 측정하기 위해 f-divergence $D_f(P\Vert Q)$에 하한을 적용할 수 있다.

벡터 $\theta$를 받는 모델 $Q$를 $Q_{\theta}$, $\omega$를 쓰는 $T$를 $T_{\omega}$로 썼을 때, 우리는 다음 f-GAN 목적함수의 saddle-point를 찾는 것으로 $Q_{\theta}$를 학습시킬 수 있다.

[F(\theta, \omega) = \mathbb{E}{x \sim P} [T{\omega}(x)] - \mathbb{E}{x \sim Q{\theta}} [f^\ast({T_\omega}(x))]]

주어진 유한한 학습 데이터셋에 대해 위 식을 최적화하려면, minibatch를 통해 기댓값을 근사해야 한다.

  • \(\mathbb{E}_{x \sim P}[\cdot]\)를 근사하기 위해 학습 셋으로부터 비복원추출하여 $B$개를 뽑고,
  • \(\mathbb{E}_{x \sim Q_{\theta}}[\cdot]\)를 근사하기 위해 현재 생성모델 $Q_{\theta}$로부터 $B$개를 뽑는다.

Representation for the Variational Function

위의 식을 다른 f-divergence에도 사용하려면 켤레함수 $f^\ast$의 도메인 $dom_{f^\ast}$를 생각해야 한다. $T_\omega (x) = g_f(V_\omega(x)) $로 바꿔 쓸 수 있다.

이제 GAN 목적함수를 보면, divergence가 sigmoid이므로

[F(\theta, \omega) = \mathbb{E}{x \sim P} [log D{\omega}(x)] - \mathbb{E}{x \sim Q{\theta}} [log(1-D_\omega(x))]]

출력 활성함수는 Table 6을 보라(부록).

Example: Univariate Mixture of Gaussians

가우시안 sample에 대해 근사한 결과를 적어 놓았다.


VDM 알고리즘(Algorithms for Variational Divergence Minimization(VDM))

이제 우리는 목적함수의 saddle point를 찾기 위한 수치적 방법을 논할 것이다.

  1. Goodfellow가 제안한 교대(alternative) 학습 방법
  2. 더 직접적인 single-step 최적화 과정

두 가지를 쓴다.

Single-Step Gradient Method

원래 것과는 달리 inner loop가 없고, 단 하나의 back-propagation으로 $\omega$와 $\theta$의 gradient가 계산된다.

saddle point 근방에서 $\theta$에 대해 볼록하고 $\omega$ 에 대해 오목한 $F$에 대해 위 알고리즘 1은 saddle point $(\theta^\ast, \omega^\ast)$에서 수렴함을 보일 수 있다.

이를 위해 다음 정리를 논문 부록에서 보이고 있다.

Theorem 1. $\pi^t := (\theta^t, \omega^t) $ 라 하고, 조금 위의 근방 조건을 만족하는 saddle point $ \pi^\ast = (\theta^\ast, \omega^\ast) $ 가 존재한다고 가정하자. 더욱이 위 근방에 포함되는 $ J(\pi) = {1\over 2} \Vert \nabla F(\pi) \Vert_2^2 $ 를 정의할 수 있고, $F$는 $ \pi^\ast $ 근방 모든 $ \pi, \pi^{‘} $ 에 대해 $ \Vert \nabla J(\pi^{‘}) - \nabla J(\pi) \Vert_2 \le L \Vert \pi^{‘} - \pi \Vert_2 $ 를 만족하는 상수 $ L > 0 $ 가 존재할 수 있게 하는 $F$는 충분히 smooth하다.
알고리즘 1에서 step-size를 $ \eta=\delta / L$ 라 할 때,

[J(\pi^t) \le \Bigl( 1 - {\lambda^2 \over 2L} \Bigr)^t J(\pi^0)]

를 얻을 수 있다.
또 gradient $ \nabla F(x) $ 의 2차 norm은 기하적으로 감소한다.

Practical Considerations

Goodfellow가 GAN 논문 당시 제안한 팁 중에 \( \mathbb{E}_{x \sim Q_{\theta}} [log(1-D_\omega(x))]\)를 최소화하는 대신 \( \mathbb{E}_{x \sim Q_{\theta}} [log D_\omega(x)] \)를 최대화하는 것으로 속도를 빠르게 하는 것이 있었다.
이를 더 일반적인 f-GAN에 적용하면

[\theta^{t+1} = \theta^t + \eta \nabla_\theta \mathbb{E}{x \sim Q{\theta^t}} [g_f(V_{\omega^t}(x))]]

그렇게 함으로써 generator 출력을 최대화할 수 있다.

실험적으로, 우리는 Adam과 gradient clipping이 LSUN 데이터셋의 대규모 실험에서는 특히 유용함을 발견하였다.


실험(Experiments)

이제 VDM에 기초하여 MNIST와 LSUN에 대해 학습시킨 결과는 다음과 같다.

결과 요약을 하면… 약간 예상 외로 divergence 함수가 달라져도 결과의 품질은 큰 차이가 없었다고 한다.


관련 연구(Related Work)

오직 신경망에 적용할 수 있는 것에 대해서만 논하겠다.

  • Mixture density networks: 유한한 mixture 모델의 parameter를 직접 회귀시키는 데 쓸 수 있다.
  • NADE and RNADE: 사전에 정의되었고 어느 정도 임의의 출력 차원을 가진 출력의 factorization을 수행한다.
  • Diffusion probabilistic models: 자명하고 알려진 분포에서 출발하는 학습된 발산과정의 결과로 목표 분포를 정의한다.
  • Noise contrasive estimation(NCE): 임의로 생성된 noise로부터 데이터를 식별하는 비선형 logistic 회귀를 수행하여 비정규화된 확률모델의 parameter를 추정하는 방법이다.
  • Variational auto-encoders(VAE): 변분법적 베이지안 학습 목표함수를 갖고 sample을 잠재표현식으로 매핑하는 확률적 encoder와 decoder 모델의 쌍이다.

토의(Discussion)

Generative neural samplers는 factorizing 가정 없이도 복잡한 분포를 표현하는 강력한 방법을 제공한다. 그러나 이 논문에서 사용된 순수 generative neural samplers는 관측된 데이터에 대한 조건부로 적용할 수 없고 따라서 그로부터 추론할 것이 없다는 한계를 갖고 있다.

우리는 미래에는 표현의 불확실성을 위한 neural samplers의 진면목이 식별 모델에서 발견될 것이며 생성자와 조건부 GAN 모델에 추가적인 input을 넣음으로써 쉽게 이 경우에 대해 확장할 수 있을 것이라 믿는다.


참고문헌(References)

논문 참조!


부록

  • Section A: 이 부분이다.
  • Section B: f-divergence의 확장된 리스트(생성함수와 볼록 켤레함수)를 나열하였다.
  • Section C: Theorem 1를 증명한다. (논문에는 Theorem 2라 되어 있는데 같은 것이다)
  • Section D: 현재 GAN 최적화 알고리즘과 차이를 논한다.
  • Section E: 다양한 divergence 측정방법을 써서 Gaussian을 혼합 Gaussian 분포에 맞춤으로써 우리의 접근법을 증명한다.
  • Section F: 본문에서 사용한 모델의 세부 구조를 보여준다.

증명의 자세한 부분은 논문을 보는 것이 빠르므로 생략하겠다.

MNIST 생성자:
$z \rightarrow Linear(100, 1200) \rightarrow BN \rightarrow ReLU \rightarrow Linear(1200, 1200) $
$ \rightarrow BN \rightarrow ReLU \rightarrow Linear(1200, 784) \rightarrow Sigmoid $

모든 weights는 0.05 scale로 초기화되었다.

MNIST Variational Function:
$ x \rightarrow Linear(784, 240) \rightarrow ELU \rightarrow Linear(240, 240) \rightarrow ELU \rightarrow Linear(240, 1) $

ELU는 exponential linear unit이다. 모든 weights는 0.005 scale로 초기화되었다.

LSUN Natural Images:
$ z \rightarrow Linear(100, 6\ast6\ast512) \rightarrow BN \rightarrow ReLU \rightarrow Reshape(512, 6, 6) \rightarrow Deconv(512, 256) \rightarrow BN $
$ \rightarrow ReLU \rightarrow Deconv(256, 128) \rightarrow BN \rightarrow ReLU \rightarrow Deconv(128, 64) \rightarrow BN \rightarrow ReLU \rightarrow Deconv(64, 3) $

deconv는 kernel size 4, stride 2를 사용하였다.

Deconv는 Deconvolution을 의미하는데, DCGAN 글에서도 설명하였듯 잘못된 표현이다.


이후 연구들

GAN 이후로 수많은 발전된 GAN이 연구되어 발표되었다.

많은 GAN들(catGAN, Semi-supervised GAN, LSGAN, WGAN, WGAN_GP, DRAGAN, EBGAN, BEGAN, ACGAN, infoGAN 등)에 대한 설명은 다음 글에서 진행하도록 하겠다.


Comment  Read more

CGAN(Conditional GAN), C-GAN 논문 설명

|

이 글에서는 2014년 11월 Mehdi Mirza 등이 발표한 Conditional Generative Adversarial Nets(CGAN)를 살펴보도록 한다.

CGAN은 GAN의 변형 모델이다.

(즉 DCGAN보다는 먼저 나왔다. 하지만 DCGAN이 GAN의 역사에서 제일 중요한 것 중 하나이기 때문에 CGAN을 나중으로 미뤘다.)

CGAN은 GAN과 학습 방법 자체는 별로 다를 것이 없다(D 학습 후 G 학습시키는 것).
GAN의 변형 모델들은 대부분 그 모델 구조를 바꾼 것이다.

CGAN을 도식화한 구조는 다음과 같다. 출처

중요한 부분만 적을 예정이므로 전체가 궁금하면 원 논문을 찾아 읽어보면 된다.


Conditional GAN(CGAN)

논문 링크: Conditional GAN

초록(Abstract)

2014년에 나온 논문임을 생각하라.

최근 GAN이 생성모델을 학습시키는 근사한 방법으로 소개되었다. 우리는 이 GAN의 조건부(conditional) 버전, 간단히 $y$ 데이터를 추가하여 만든 적대적 망을 소개하려 한다. 이 CGAN이 class label(숫자 0~9)에 맞는 MNIST 이미지를 생성할 수 있음을 보일 것이다. 또한 이 모델이 multi-modal 모델에 어떻게 사용될지, 또 이미지 태깅에 어떻게 응용 가능할지도 또한 설명할 것이다.


서론(Introduction)

생성 모델을 학습하기 위해, 다루기 힘든 엄청난 확률적 계산의 어려움을 대체하는 GAN이 최근 소개되었다. 적대신경망은 Markov chain이 필요없이 오직 back-propagation만으로 학습이 가능하고, 별다른 추측도 할 필요가 없다.

Unconditional 생성모델에서, 데이터가 생성되는 종류(mode)를 제어할 방법은 없다. 그러나, 추가 정보를 통해 데이터 생성 과정을 제어할 수 있다. 이러한 조건 설정(conditioning)은 class label 등에 기반할 수 있다.

이 논문에서 우리는 conditional 적대신경망을 구현할 것이다. 또 이를 MNIST와 MIR Flickr 데이터셋에 대해 테스트한다.


관련 연구(Related Works)

궁금하면 읽어보자.

Multi-modal Learning for Image Labelling

굉장히 많은 카테고리를 다룰 수 있는 모델에 관한 문제는 추가 modality에 대한 정보를 다루는 것으로 일부 해결 가능하다. 단어를 vector representation으로 변형하는 것 등이 있다.

input-output 1-1 매칭에만 치중한 문제는 conditional 확률적 생성모델을 사용하는 것이 한 방법이 될 수 있다.

자세한 내용은 원문을 보고 각 논문을 찾아보라. 이미 요약된 부분이라 그냥 건너뛰거나 본문을 보는 것이 더 낫다.


조건부 적대신경망(Conditional Adversarial Nets)

GAN(Genearative Adversarial Nets)

최근 소개된 GAN은 다음 두 부분으로 이루어졌다. 둘 다 non-linear하게 매핑하는 함수일 수 있다.

  • 데이터분포를 입력받아 실제에 가깝게 데이터를 생성하는 생성모델 G
  • 입력받은 데이터가 진짜 데이터인지 G가 만들어낸 것인지를 판별하는 D

다음 식으로 표현되는 minimax 게임을 G와 D가 진행하게 된다:

[min_G max_D V(D, G) = \mathbb{E}{x \sim p{data}(x)}[log D(x)] + \mathbb{E}{x \sim p{z}(z)}[log (1-D(G(z)))]]

수식에 대한 자세한 설명은 GAN을 참고하라.

CGAN(Conditional Adversarial Nets)

G와 D가 추가 정보 $y$라는 조건이 붙는다면 조건부 생성모델을 만들 수 있다. $y$는 어떤 보조 정보라도 될 수 있는데, class label이나 다른 modality의 데이터 등이다. 우리는 $y$를 G와 D의 input layer에 추가로 같이 집어넣음으로써 이를 수행할 수 있다.

G에서는 input noise $p_z(z)$와 $y$가 합쳐진 형태가 된다. 이 적대적 학습 framework는 이 hidden representation이 어떻게 생겼는지에 별 영향을 받지 않는다.
D에서는 $x$와 $y$가 input으로써 들어가게 된다.

좀 전 수식을 conditional 버전으로 바꿔보면,

[min_G max_D V(D, G) = \mathbb{E}{x \sim p{data}(x)}[log D(x y)] + \mathbb{E}{x \sim p{z}(z)}[log (1-D(G(z y)))]]

참고: D와 G에 들어가는 input이 단지 조건부로 바뀌었다. 실제 들어가는 형태는 합쳐진 형태이다.


실험 결과(Experimental Results)

이미 좋다는 게 알려진 논문의 경우에는 굳이 실험 조건 등을 자세히 볼 필요는 없다. 여기서는 결과만 소개한다.

Unimodal

모델 구조는 다음과 갈다.

  • G
    • uniform distribution $z$. size=100
    • $z$와 $y$는 각각 size 200, 1000짜리 hidden layer(ReLU)로 매핑됨
    • 1200짜리 hidden layer로 합쳐짐(ReLU)
    • 마지막으로 784차원으로 변환됨(MNIST 이미지는 $28^2$이다)
  • D
    • $x$는 240 unit과 5 piece짜리 maxout layer, $y$는 50 unit과 5 piece짜리 maxout layer로 매핑됨
    • 240 unit, 5 piece짜리 maxout layer로 합쳐진 후 Sigmoid

MNIST로 실험한 결과이다. Log-likelihood 값이 잘 나왔음을 확인할 수 있다.

Model MNIST
DBN 138 $\pm $ 2
Stacked CAE 121 $\pm $ 1.6
Deep GSN 214 $\pm $ 1.1
Adversarial nets 225 $\pm $ 2
Conditional adversarial nets 132 $\pm $ 1.8

$y$ 데이터는 각 row별로 0~9까지 들어갔다. 아래는 CGAN을 통해 생성된 이미지이다.

주어지는 조건($y$)에 따라 class가 잘 나뉘는 것은 확인할 수 있다(이미지 품질은 original GAN과 비슷하다).

Multimodal

여러 이미지들에 대해 사람이 직접 넣은 태그와 CGAN이 생성해낸 태그를 비교한 테이블을 가져왔다.

가장 오른쪽 열이 생성된 태그 중 제일 나은 것 10개를 나열한 것인데, 꽤 잘 된 것으로 보인다.


추후 연구(Future work)

이 논문에서 소개된 결과는 서론 정도의 내용이지만, 각각은 조건부 생성모델의 잠재력과 다른 많은 분야로의 응용에 대한 가능성을 보여 준다.

이번 실험에서는 태그를 독립적으로 사용했지만, 한번에 여러 태그를 사용한다면 더 나은 결과를 얻을 수 있을 것이다.

추후 연구의 또 다른 방향은 언어 모델을 배우는 학습계획을 구현하는 것이 있겠다.

Acknowledgments

이 프로젝트는 Pylearn2 framework로 개발되었다.

참고문헌(References)

논문 참조!


튜토리얼

GAN의 핵심 부분을 제외한 부분은 여기를 참고하면 된다.

여기에서 CGAN을 학습시켜볼 수 있다. 해당 repository에는 CGAN뿐 아니라 많은 종류의 GAN이 Pytorch로 구현되어 있으므로 참고하면 좋다.


이후 연구들

GAN 이후로 수많은 발전된 GAN이 연구되어 발표되었다.

많은 GAN들(catGAN, Semi-supervised GAN, LSGAN, WGAN, WGAN_GP, DRAGAN, EBGAN, BEGAN, ACGAN, infoGAN 등)에 대한 설명은 여기, f-GAN에 대한 설명은 여기에서 진행하도록 하겠다.


Comment  Read more

DCGAN(Deep Convolutional GAN, DCGAN 논문 설명)

|

이 글에서는 2015년 11월 Alec Radford 등이 발표한 DCGAN(Unsupervised Representation Learning with Deep Convolutional Generative Adversarial Networks)를 살펴보도록 한다.

DCGAN은 GAN의 개선 모델로 GAN과 다른 점은 다음과 같다.

  • $D$
    • Strided Convolution을 사용한다.
    • Batch Normalization을 사용한다. 입력 레이어(첫 번째)에는 사용하지 않는다.
    • activation function으로 Leaky ReLU를 사용한다.
  • $G$
    • Fractional Strided Convolution(Transposed Convolution)을 사용한다.
    • Batch Normalization을 사용한다. 출력 레이어(마지막)에는 사용하지 않는다.
    • activation function으로 ReLU를 사용하고 마지막 레이어에는 tanh를 사용한다.

참고: 논문에서 deconvolution이라 되어 있는 것은 Transposed 또는 fractional strided convolution을 의미한다. 이 연산은 엄밀히 말해 convolution의 역연산이 아니기 때문에(그 비슷한 것을 의도하긴 했지만) deconvolution은 사실 틀린 표현이다.

그래서 나아진 점, 혹은 알아낸 것은?

  • (흔히 생각하는 FHD를 넘는 고해상도랑은 거리가 멀지만) 고해상도 이미지를 생성할 수 있게 되었다.
  • 거의 대부분의 상황에서 안정적인 학습이 가능하다.
  • 단순히 이미지를 기억(overfitting)하는 것이 아님을 보였다.
  • convolution의 각 filter는 의미 있는 부분에 대한 정보를 갖고 있다. 논문에서는 침실 데이터를 사용하였는데, 어떤 필터는 창문에 대한 정보를 갖고 있는 식이다. 논문에서는 이를 시각화하여 보여주었다.
  • input인 noise($z$)는 별 의미 없는 값이 아니라, 이것이 생성될 이미지의 특징을 결정하는 벡터이다. 논문에서는,
    • 웃는 여자를 생성한 noise $z_1$
    • 무표정 여자를 생성한 noise $z_2$
    • 무표정 남자를 생성한 noise $z_3$
    • $z_4 :=$ $z_1$ - $z_2$ + $z_3$이라 할 때
    • $z_4$를 noise로 쓰면 웃는 남자를 생성해낸다.
  • 또 왼쪽을 보는 사람과 오른쪽을 보는 사람을 생성한 두 벡터를 interpolating하면 마치 얼굴을 회전시킨 듯한 중간 결과들이 얻어진다.

DCGAN은 GAN과 학습 방법 자체는 별로 다를 것이 없다(D 학습 후 G 학습시키는 것).

참고: $G$로 들어가는 입력 벡터를 뜻하는 noise는 latent variable이라고도 하며, Auto-encoder에서 출력 영상을 만들기 위한 source와 비슷하기에 이 표현도 사용된다.

중요한 부분만 적을 예정이므로 전체가 궁금하면 원 논문을 찾아 읽어보면 된다.


논문(DCGAN)

논문 링크: Deep Convolutional GAN

초록(Abstract)

2015~2016년에 나온 논문임을 생각하라.

최근에는 CNN을 통한 supervised learning 연구가 많이 이루어졌지만 unsupervised learning은 별 주목을 받지 못했다. 우리는 Deep Convolutional GANs를 소개하여 그 간극을 좁히고자 한다. 여러 이미지 데이터셋을 학습시키면서 우리는 DCGAN의 G와 D 모두가 object로부터 유의미한 표현 구조를 찾았음을 보였다. 또, 이를 일반적인(general) 이미지 표현에도 응용해 보았다.


서론(Introduction)

GAN은 최대우도(maximum likelihood) 테크닉의 매력적인 대체재이다. 또한 그 학습 방법과 heuristic cost function가 적다는 것 때문에 representation learning에도 훌륭히 잘 쓸 수 있다. 다만 학습이 불안정하고 G가 터무니없는 output을 내뱉을 때가 있다. 그래서 상당히 제한적으로 쓰일 수밖에 없었다.

이 논문에서는, 우리는 다음과 같은 것들을 보일 것이다:

  • 거의 대부분의 상황에서 학습이 안정적인 Convolutional GAN을 제안하고 평가한다. 이것이 DCGAN이다.
  • D에게 image classification를 시켜봤는데, 거의 state-of-the-art한 결과를 보인다.
  • 특정 필터가 특정 object를 그려낸다는 것을 시각화한다.
  • G에 들어가는 noise에 산술 연산을 한 결과로 많은 의미있는 이미지를 생성함을 보인다.

관련 연구(Related Works)

궁금하면 읽어보자.

Representation Learning from Unlabeled Data

Unsupervised representation learning은 꽤 잘 연구되었다. 전통적인 접근 방법으로는 clustering(K-means)이 있다.
이미지 쪽에서는 image representation을 학습하기 위한 구조적 clustering, auto-encoder를 학습시키는 것, what/where 분리 구조, image를 간략한 code로 encode하고 다시 이미지로 복원하는 decoder를 포함하는 사다리 구조 등등이 있었다.
Deep belief networks도 구조적 표현방식을 학습하는 데 좋은 성능을 보였다.

Generating Natural Images

이건 두 종류가 있다: parametric과 non-parametric.

database에 존재하는 이미지 찾기 등을 수행하는 non-parametric 모델들은 texture synthesis, super-resolution, in-painting 등에 사용되었다.

Parameteric 모델은 꽤 널리 알려졌지만(MNIST), 성공적인 것은 별로 없다. 대부분 흐린(blurry) 이미지만을 생성해냈다.
GAN이 생성한 것은 noise가 많고 이해하기 어려웠다. Laplcian pyramid extension, recurrent network, deconvolution network 등의 접근은 자연 이미지를 생성하는 데 성공적이었지만 supervised task에 generator를 활용하진 않았다.

Visualizing the Internals of CNNs

Neural Networks의 문제점은 너무 black-box같다는 것이다(참고: 네트워크의 각 필터 등이 정확히 무엇을 의미하는지 사람이 이해할 수가 없다). 다만 각 필터의 의미를 찾으려는 시도는 있었다.

자세한 내용은 원문을 보고 각 논문을 찾아보라.


접근법과 모델 아키텍처(Approach and Model Architecture)

GAN에 CNN을 써서 이미지 품질을 높이려는 시도는 지금까지 성공적이지 못했다.

우리는 많은 시도 끝에 다양한 데이터셋에서 안정적인 그리고 더 높은 해상도의 이미지를 생성하는 모델 구조를 찾아내었다.
핵심은 다음 3가지를 CNN 구조에 적용시키는 것이다.

  1. max-pooling과 같은 미분불가능한 레이어를 strided convolution으로 바꿔 spatial downsampling이 가능하게 한 것이다. 이는 G에 사용된 것이고, D에는 upsampling이 가능하게 바꿨다.
  2. 요즘 트렌드는 FC(Fully Connected) Layer를 없애고 convolution layer로 바꾸는 것이다.
  3. Batch Normalization을 사용하여 학습을 안정화시킨다(참고: 2019년 현재 BN은 거의 필수처럼 되어 있다). 이는 weight 초기화가 나쁘게 된 경우와 깊은 모델에서 gradient flow를 도우며, 이는 학습 초기에 잘못된 방향으로 학습이 진행되어 망하는 경우를 막아준다. 그러나 sample이 요동치는 것을 막기 위해 G의 출력 레이어와 D의 input layer에는 넣지 않았다(이건 많은 시도 끝에 알아낸 듯).

G에서는 activation function으로 ReLU를 사용하고 마지막 레이어에는 tanh를 사용한다. Bounded activation(tanh)은 더 빠르게 수렴하고 학습샘플의 분포를 따라갔다. D에는 Leaky ReLU를 사용하여 높은 해상도를 만들 수 있게 하였다. 이는 GAN과 다른 부분이다.

적대적 학습 상세(Details of Adversarial Training)

우리는 Large-scale Scene Understanding(LSUN), Imagenet-1k, Faces 데이터셋으로 학습을 진행했다.

  • pre-processing은 쓰지 않았고
  • size 128인 mini-batch SGD
  • (0, 0.02) 정규분포를 따르는 초기화
  • Leaky ReLU의 기울기는 0.2
  • AdamOptimizer(0.0002, 0.9)

로 했다. AdamOptimizer의 beta1을 0.5로 줄이는 것보다 학습 안정성이 좋았다.

모델 구조는 아래와 같다.

단 1 epoch만 학습시켰을 때의 결과. minibatch SGD를 썼기 때문에 이미지를 기억한다고는 볼 수 없다. 따라서 overfitting 없이 잘 생성하고 있는 것이다.

5 epoch만 학습시켰을 때의 결과. 침대 근처 noise로 볼 때 오히려 underfitting이 일어난 것 같다.


DCGAN의 능력의 경험적 검증(Empirical Validation of DCGANs Capabilities)

Unsupervised representation learning 알고리즘을 평가하는 일반적인 방법은 supervised 데이터셋에 대해 특징 추출을 시킨 뒤 performance를 측정하는 것이다.

검증 요약:

  • CIFAR-10 데이터셋에 대해 검증한 결과, 다른 방법들(K-means, Exemplar CNN 등)과 비교하여 정확도가 별 차이가 없었다!(80.6~84.3%, DCGAN은 82.8%)
  • StreetView House Numbers dataset(SVHN)은 state-of-the-art 결과를 얻었다.

네트워크 내부 조사 및 시각화(Investigating and Visualizing the Internals of the Networks)

우리는 가장 가까운 학습 데이터 이미지를 찾거나, 최근접 픽셀이나 특징 혹은 log-likelihood metric 같은 방법은 별로이기 때문에 사용하지 않았다.

생성된 2개의 이미지에 사용된 noise인 $z$를 선형 보간하며 그 보간된 $z$로 이미지를 생성시켜본 결과 한 이미지에서 다른 이미지로 서서히 변해가는 결과를 얻었다(아래 그림). 이미지를 보면 창문 없는 방이 거대한 창문이 있는 방으로 변해 가거나(6th row), TV가 창문으로 변해가는 과정(10th row)을 볼 수 있다.

벡터 산술 연산을 통해, vec(웃는 여자) $-$ vec(무표정 여자) $+$ vec(무표정 남자) $=$ vec(웃는 남자) 같은 결과를 얻을 수 있다.

네트워크 내부의 각 필터는 이해할 수 없는 형식이 아닌 특정 object나 특징을 추출하였음을 알 수 있다.


결론 및 추후 연구(Conclusions and future work)

우리는 안정적인 생성모델을 제안하였고 이 적대정 생성모델은 image representation에 탁월함을 보여 주었다. 그러나 아직 오래 학습시킬 시 필터 일부가 요동치는 것 등 모델에 불안정성이 남아 있다.

추후 연구는 이를 안정화하는 방법을 찾는 것이 될 것이다. 또한 이 framework를 영상 또는 음성 등의 다른 domain에도 확장시킬 수도 있다.

Acknowledgments

Ian GoodFellow 등의 연구자와 Nvidia Titan-X GPU에 감사를 표한다.

(광고인줄)

참고문헌(References)

논문 참조!


튜토리얼

공식 튜토리얼

DCGAN이 특별히 중요하기 때문인지 Pytorch 공식 홈페이지에 튜토리얼이 있다.

GAN의 핵심 부분을 제외한 부분은 여기를 참고하면 된다.

https://pytorch.org/tutorials/beginner/dcgan_faces_tutorial.html


이후 연구들

GAN 이후로 수많은 발전된 GAN이 연구되어 발표되었다. 가장 중요한 것 두 개는 GAN의 학습 불안정성을 많이 개선시킨 DCGAN(Deep Convolutional GAN), 단순 생성이 목적이 아닌 원하는 형태의 이미지를 생성시킬 수 있게 하는 CGAN(Conditional GAN)일 듯 하다.

많은 GAN들(catGAN, Semi-supervised GAN, LSGAN, WGAN, WGAN_GP, DRAGAN, EBGAN, BEGAN, ACGAN, infoGAN 등)에 대한 설명은 여기에서, CGAN에 대한 설명은 다음 글에서 진행하도록 하겠다.


Comment  Read more