머신러닝/Vision

DCGAN

망나 2020. 8. 18. 15:36

Unsupervised Representation Learning with Deep Convolutional Generative Adversarial Networks

 

DCGAN?

DCGAN은 불안정한 GAN의 구조적 단점을 보완하고 좋은 성능을 보여주었습니다. DCGAN은 이름 (Deep Convolutional GAN)에서도 알 수 있듯이 Convolutional 구조를 GAN에 사용하였습니다.

 

지도 학습에서는 CNN을 이용하여 좋은 성능들이 이미 보였지만, 이 DCGAN은 GAN과 같이 비지도 학습에 Convolutional 구조를 사용하여 좋은 성능을 보인 대표적인 결과물이라고 할 수 있습니다. 따라서 이후의 대부분의 GAN 모델들은 DCGAN의 구조가 기반으로 사용되었다고 할 수 있습니다.

 

DCGAN이 기여한 바를 정리하면 다음과 같습니다.

  • 안정적으로 학습이 가능한 Convolutional GAN 구조 제안했다는 것
  • Generator가 벡터 산술 연산이 가능하다는 것 (word2vec과 같은 성질)
  • Discriminator가 다른 비지도 학습 알고리즘들과 비교하여 비슷한 성능을 보여줬다는 것

 

Model Architecture

DCGAN Generator

 

DCGAN의 구조의 특징을 정리하면 다음과 같습니다.

  • 모든 max pooling을 convolutional stride로 변환 (all convolutional net)
  • Batchnorm 사용 (Generator의 output layer와 Discriminator의 input layer 제외)
  • Fully connected layer 제거
  • Generator의 output을 제외한 모든 layer에 ReLU 사용 (output에는 Tanh 사용)
  • Discriminator의 모든 layer에 LeakyReLU 사용

그리고 추가적으로 모델 튜닝에 대한 팁을 아래와 같이 논문에 소개하고 있습니다.

  • 모델은 128 사이즈의 mini-batch를 SGD로 학습.
  • 모든 weights는 zero-centered Normal distribution with standard deviation 0.02로 초기화.
  • LeakyReLU의 leak은 0.2로 설정.
  • Optimizer는 Adam 사용.
  • Learning rate는 0.001, 너무 높다면 0.0002 사용.
  • Momentum 사용 시 β1이 0.9일 때 학습이 불안정하고 0.5일 때 학습이 안정적. 
All models were trained with mini-batch stochastic gradient descent (SGD) with a mini-batch size of 128. All weights were initialized from a zero-centered Normal distribution with standard deviation 0.02. In the LeakyReLU, the slope of the leak was set to 0.2 in all models. While previous GAN work has used momentum to accelerate training, we used the Adam optimizer with tuned hyperparameters. We found the suggested learning rate of 0.001, to be too high, using 0.0002 instead. Additionally, we found leaving the momentum term β1 at the suggested value of 0.9 resulted in training oscillation and instability while reducing it to 0.5 helped stabilize training.

 

 

Experiment

LSUN 데이터 결과

 

생성 모델 연구에서 중요한 핵심은 다음과 같다고 합니다.

  1. Generator가 이미지를 외우는 것이 아니라 특징들을 학습해서 생성한다는 것을 보여줘야 한다.
  2. Generator의 input 공간인 latent space (z)의 변화에 대해 결과의 급작스런 변화가 아닌 부드러운 변화를 보여야 한다.

1, 2번은 같은 맥락이라고 합니다. 그 이유는 Generator가 이미지를 외웠다는 것은 overfitting으로 인한 training data와 z의 1:1 매핑을 배웠다는 의미이기 때문에 z의 변화에 부드러운 변화(일부 특징의 변화)가 아닌 급작스런 변화(아예 다른 데이터와의 매핑)를 보인다는 것이죠. - 참고 블로그 -

 

 

DCGAN 논문에서는 위에서 설명한 핵심에 대해서도 실험을 통해 직접 보여주고 있습니다. 먼저 첫 번째 핵심인 이미지를 외우는 것이 아니라 특징들을 학습했다는 것을 확인시켜주는데요. 바로 일부 특징이 학습된 filter를 dropout 시켜서 이미지를 생성하면 해당 특징이 사라지는 것을 확인할 수 있습니다.

이미지를 보면 일부 특징(창문)이 위의 이미지에는 존재 하지만 dropout으로 인해 아래 이미지에서는 사라진 것을 확인할 수 있습니다. 즉, Generator가 학습 데이터를 memorize 한 것이 아니라 모델의 filter들이 데이터의 각 특징들을 학습했다고 할 수 있겠죠.

 

다음으로는 두 번째 핵심에 대한 내용입니다. 바로 아래 이미지가 z 값을 조금씩 바꿔가면서 생성한 이미지 결과입니다.

Walking in the latent space

결과를 보면 알 수 있듯이 z 값을 서서히 바꿔감에 따라서 생성 이미지가 완전히 바뀌는 것이 아니라 부드럽게 일부 특징들이 변화하고 있는 것을 확인할 수 있습니다. (방의 벽면이 창문으로 바뀐다던지 반대로 창문이 벽면으로 변화하는 것을 확인할 수 있죠)

 

 

Reference

[1] 초짜 대학원생의 입장에서 이해하는 Deep Convolutional Generative Adversarial Network (DCGAN)

[2] GAN - DCGAN (Deep convolutional generative adversarial networks)

'머신러닝 > Vision' 카테고리의 다른 글

LSGAN  (0) 2020.08.12
Generative Adversarial Networks?  (0) 2020.08.12
About GAN  (0) 2020.08.12
The Lottery Ticket Hypothesis  (4) 2019.06.24
ResNet 이해하기  (0) 2019.06.04