Pseudo Lab/3기 반 고흐 전시전

[5주차] NIPS 2016 Tutorial: Generative Adversarial Networks: Ian Goodfellow part 2

공부중인학생 2021. 9. 12. 01:06

본 내용은 NIPS 2016 Tutorial: Generative Adversarial Networks: Ian Goodfellow 17~33P까지의 내용입니다.

 

How do GANs work?

 

The GAN framework

  • GAN은 두가지 network로 구성됩니다. (generator, dicriminator)
  • 두 명의 플레이어가 서로 게임을 하는 방식과 비슷합니다.
    • Generator: noise벡터(gaussian)를 입력하여 output으로 이미지를 생성, 생성된 이미지는 fake 이미지입니다.
    • Discrminator : 판별자는 generator가 생성한 이미지를 입력받아 해당 이미지가 fake 인지 real인지 판단합니다.
    • 아래 그림에서 Dicriminator가 판별한 결과가 1이면 real, 0이면 fake라는 뜻

 

중요한 점은 cost를 계산할 때, generator와 discriminator는 서로 상대방의 parameter에 의존하고 있지만, 상대방의 parameters는 건들일 수 는 없다.

 

The training process

  • minibatch of x와 mintbatch of z가 동시에 실행됩니다.
  • x(data set)는 Dicriminator의 cost function을 줄이는 방향으로 파라미터를 업데이트합니다.
  • z (latent variable)는 Generator의 cost function을 줄이는 방향으로 파라미터를 업데이트합니다.
  • 이때, 비용 함수를 줄이는 최적화 알고리즘은 여러 가지가 있지만 여기서는 Adam이라는 optimizer 알고리즘을 사용합니다.

 

minibatch란?

학습을 진행하면서 여러 번 시행하는데, 한 개의 batch 사이즈가 너무 크면 연산 시간이 너무 길어 이러한 문제를 해결하기 위해 batchsize를 더욱 줄여서 시행하는 방법

 

 

Cost functions

  • GANs framework에는 여러 가지 cost function방법이 있습니다.

 

The discriminator`s cost

  • discriminator의 loss function은 binary cross entropy loss function을 사용한다. (위 공식) 위 공식은 Discriminator의 cost function 함수인데, 두 군데의 minibatch 데이터를 입력받습니다.
    • 한 곳은 dataset에 존재하는 real 이미지 (x~p(data))
    • 또 다른 한 곳은 generator가 생성한 fake 이미지 (z)
  • log D(x) 부분에서 D(x)는 1로 최대화할 수 있도록 해야 합니다.
    • 1 → real image
  • 반면에 log (1-D(G(z)) 이 부분에서 D(G(z))는 0으로 minimize 해야 합니다.
    • 0 → fake image

 

Minimax

  • 위 공식은 discriminator에 대해서만 정리한 것으로 실제로는 generator와 discriminator 두 부분 모두 cost function이 정의되어야 합니다.
  • GAN은 optimizer 문제이기보다는 서로 상대방이 싸우는 게임과 가깝다. 결국 generator와 discriminator의 합은 0이라고 볼 수 있습니다.

 

Heuristic, non-saturating game

  • Minimax를 적용하면 이론처럼 실제는 잘 작동하지 않습니다.
  • 왜냐하면 Discriminator의 정확도가 거의 완벽에 가까워진다는 말은 더 이상 generator가 잘 작동할 수 없다는 의미와도 같기 때문입니다.
  • Minimax에서는 Generator가 discriminator가 real이미지를 찾을 수 있는 확률을 최소화하는 방향으로 진행했지만, 반대로 discriminator가 fake 이미지를 찾을 수 있는 확률을 최대화하는 방향으로 변경합니다.

 

Comparison of cost functions

  • 특히 GAN의 J(G)는 training data에 직접 접근하지 않고, training data에 관한 모든 정보를 discriminator로부터 전달받습니다.

 

 

정규화란?

기본적으로 정규화를 하는 이유는 학습을 더 빨리 하기 위해서 or Local optimum 문제에 빠지는 가능성을 줄이기 위해서 사용합니다.


아래 그림을 보면 이해가 쉽게 될 것입니다. 아래 그림에서 최저점을 찾을 때 그래프를 전체적으로 이해하지 못하여 global optimum지점을 찾지 못하고 local optimum에 머물러 있게 되는 문제가 발생하게 됩니다. 이러한 문제점은 정규화 하여 그래프를 왼쪽에서 오른쪽으로 만들어, local optimum 에 빠질 수 있는 가능성을 낮춰주게 됩니다.

 

 

 

Covariate Shift : 이전 레이어의 파라미터 변화로 인하여 현재 레이어의 입력의 분포가 바뀌는 현상
Internal Covariate Shift : 레이어를 통과할 때마다 Covariate Shift 가 일어나면서 입력의 분포가 약간씩 변하는 현상

 

 

Batch Normalization이란?


이러한 Whitening의 문제점을 해결하도록 한 트릭이 배치 정규화입니다. 배치 정규화는 평균과 분산을 조정하는 과정이 별도의 과정으로 떼어진 것이 아니라, 신경망 안에 포함되어 학습 시 평균과 분산을 조정하는 과정!

역시 같이 조절된다는 점이 단순 Whitening 과는 구별됩니다. 즉, 각 레이어마다 정규화하는 레이어를 두어, 변형된 분포가 나오지 않도록 조절하게 하는 것이 배치 정규화입니다.

 

 

 

The DCGAN architecture

  • 대부분의 GAN 모델은 DCGAN 아키텍처에 기반한다.

 

특징은 다음과 같다.

  • Batch normalization을 generator와 discriminator의 대부분의 레이어에서 사용합니다. 그러나 Generator의 마지막 레이어와 discriminator의 첫 레이어는 batch normalization이 적용되지 않는데, 모델이 data distribution에 대한 정확한 mean과 sacle을 학습해야 하기 때문입니다.
  • 전체 네트워크 구조는 all-convolutional net으로부터 가져온 것입니다. 이 아키텍처는 pooling, unspooling 레이어를 사용하지 않습니다.

 


제한된 도메인의 이미지에 대해서 DCGAN은 매우 높은 퀄리티의 이미지를 generate 해줍니다. 또한 DCGAN은 GAN이 latent code를 유의미하게 사용하는 방법을 배웠다는 것을 보여줍니다.(latent space에서의 간단한 사칙연산으로 이미지의 semantic 한 특성들에 대한 operation을 가능함을 보여줍니다.)

 

 

 

How do GANs relate to noise-constrastive estimation and maximum likelihood?

 

  • GAN의 작동방식을 이해하기 위해서, noise-contrastive estimation(NCE)와 어떤 식으로 연관성이 있는지 살펴보자

 

  • 해당 표는 간단히 말해서 NCE와 MLE는 dicriminator의 density model을 학습하는 것인 반면, GAN은 generator를 학습하는 것입니다.

 

Tips and Tricks

GAN을 실제로 사용할 때 성능을 높이기 위한 팁들을 살펴보자

Train with labels

어떤 모양이나 형태로든, 레이블을 사용하는 것은 매우 드라마틱한 성능 개선을 보여줍니다.

 

  • class-conditional GAN은, class에 특정되지 않은 sample을 만드는 기존 GAN보다 훨씬 나은 결과물 보여주었습니다.
  • 이런 트릭이 왜 좋은 결과를 내어주는지는 사실 명확지 않습니다. Class 정보를 맵핑해 주는 것이 optimization과정에서 무언가 도움을 주기 때문일 수도 있습니다. 또한, sample quality에 대해서 객관적인 개선 효과를 주는 것이 아니지만, 인간이 사물을 보는 특성에 더 가깝도록 sample을 bias 시키는 효과를 주는 것일 수도 있습니다.
  • 따라서, 여러 모델을 비교한다고 했을 때, 한 모델에 Label을 사용하는 트릭을 사용했으면, 다른 모델에도 같은 트릭을 사용해서 학습시켜야 합니다.

 

 

One-sided label smoothing

  • GAN은 discriminator가 두 density 사이의 ratio를 estimate 함으로써 작동하게 모델링 되어 있습니다. 하지만 deep neural net은 어떤 correct 한 class에 대한 매우 높은 확률을 만들어냄으로써 confident 한 classification을 수행하도록 학습되는 경향이 있습니다.
  • 이런 경향은 classifier 매우 확신에 찬 prediction을 하는 경향이 있다는 것을 뜻합니다.
  • 따라서 discriminator가 좀 더 소프트하게 estimation을 수행할 수 있도록 하기 위해, onesided
    label smoothing이라는 테크닉을 사용합니다.
  • discriminator의 extreme 한 extrapolation을 예방할 수 있다. 만약 discriminator가 어떤 인풋에 대해 매우 큰 logit 값을(1에 가까운 확률) 예측하도록 학습된다면, logit 값을 낮추도록 penalize 되는 것입니다. Fake sample에 대해서는 label을 smoothing하지 않는 것이 중요합니다.

 

 

Virtual batch normalization

 

  • DCGAN이 소개된 이후로, 대부분의 GAN architecture들은 batch normalization을 어떤
    형태로든 사용했습니다.
  • Batch normalization은 모든 레이어에서 (feature를 뽑아내기 위한) weight값들 사이에 복잡한 인터랙션이 이루어져야 하는 부분을 개선해서, 모든 feature에서 하나의 mean과 하나의 variance값을 갖도록 reparameterize 하는 것입니다. 이로써 모델의 optimization 결과를 개선합니다.
  • 이러한 normlization이 해당 모델의 일부분이 되는 것이 중요합니다. 왜냐하면, Back propagation이 항상 normalize 되도록 정의된 gradient를 계산해야 하기 때문입니다. 모델의 부분으로 normalization이 이루어지도록 하지 않고 feature들이 그저 자주 normalized 되도록 하면 덜 효과적이 됩니다.
  • Batch Normalization은 아주 효과적이지만 나쁜 점도 있습니다. 매 스텝마다 다른 minibatch를
    사용하면서 normalization을 계산하도록 하면 normalizaing constant에 불안정한 요동이 일어납니다. minibatch의 크기가 작을 경우 이런 요동이 크고, GAN이 생성하는 이미지가 영향을 받습니다.

 

한 minibatch는 orange 색 위주의 샘플들만을 포함하고, 다른 minibatch는 green색 위주의 샘 플들만 포함하고 있는 경우였다. 이들은 사실 서로 독립적이었어야 하지만 batch normalization 때문에 서로간의 correlation이 생겨버렸다.

 

이 문제를 해결하기 위해 reference batch normalization이라는 방법이 있지만, 이 방법의 문제점은 overfit 될 수 있다는 점입니다. 이 문제 또한 해결하기 위해 virtual batch normalization이라는 방법을 사용합니다. 이는 각 샘플을 normalizing 하기 위한 값을 그 샘플과 reference batch의 union을 사용해서 얻어냅니다.

 

 

Can one balance G and D?

  • G와 D 중 어느 하나가 다른 하나를 제압해버리지 않도록 어떻게든 밸런스를 맞추는 것이
    필요하다고 많은 연구자들이 직관적으로 생각해왔다.
  • Discriminator가 너무 정확해지면, 때때로 generator의 gradient가 vanish 해버릴 수 있다. 하지만 이 문제를 해결하기 위한 방법은 discriminator의 능력을 제한하는 것이 아니라, gradient가 vanish하지 않도록 gan을 잘 parameterization 하는 것이다
  • Discriminator가 너무 확신을 가지게 되어 버리면, generator의 gradient는 때때로 너무 커져버릴 수도 있다. 이럴 때 discriminator의 정확도를 낮추는 것보다는 one-sided label smoothing을 하는 것이 좋다.
  • 모델 사이즈를 다르게 함으로써 G와 D의 밸런스를 맞추는 방법도 시도해볼 수 있다. 실제 상황에서는, D는 보통 더 깊고 각 레이어에 더 많은 수의 필터를 가지도록 한다.
  • 이는 D가 (두 density의 ratio를) 정확히 예측하는 것이 중요하기 때문일 것이다. 하지만 이 방식 역시 mode collapse 문제라는 부작용이 있을 수 있다.