Create Opportunities

[논문 리뷰] Unsupervised Representation Learning with Deep Convolutional Generative Adversarial Networks (DCGAN) 본문

논문 리뷰

[논문 리뷰] Unsupervised Representation Learning with Deep Convolutional Generative Adversarial Networks (DCGAN)

kimjaeyoon 2022. 11. 18. 18:21

요즘 산학 프로젝트를 진행하면서, 어려움을 겪고 있다.

방학 중 여러 종류의 GAN 모델에 대해서 논문을 찾아보고, 공부한 기억을 더듬어 글을 작성해보려 한다.

 

DCGAN은 CNN을 GAN에 처음으로 적용시킨 똑똑해진 생성 모델이다. 발전된 GAN 모델로써 처음 등장했다고 볼 수 있다. GAN에 대한 내용을 알고 있어야 하는건 당연하다. 간단히 요약하면!

Generative Adversarial Networks의 약자인 "GAN"은 학습 데이터들의 분포를 학습해, 같은 분포에서 새로운 데이터를 생성할 수 있도록 Deep Learning 모델을 학습시키는 프레임워크라고 할 수 있다.

Generator와 Discriminator가 적대적으로 싸우면서 각자의 역할을 충실히 해내며 데이터를 생성해내는 모델인데, 아래의 그림으로 이해하는게 빠르겠다.

- Generator : 실제 이미지로 착각되도록 정교한 이미지 생성.

- Discriminator : 이미지를 보고 Generator에 의해 만들어진 것인지, 실제 이미지인지 판별.

목적함수도 같이 보자. Generator는 해당 목적식을 minimize / Discriminator는 maximize한다. 서로 번갈아가면서 이 목적식을 학습하게 되고, 그대로 해석해보면 실제 데이터의 확률분포에 대한 내용과 Generator에 의해서 생성된 랜덤한 데이터의 확률 분포에 대한 부분을 합친거다.

 

먼저 판별자의 관점에서 살펴봤을 때, 실제 이미지가 들어왔을 때는 1을 뱉을 수 있도록, 즉 높은 확률 값이 나올 수 있게끔 학습을 하고, 가짜 이미지가 들어왔을 때는 0에 가까운 낮은 확률 값이 나올 수 있도록 학습한다.
이렇게, 반복을 하다보면, 판별자인 D는 실제 데이터와 생성자 G가 만든 가상 데이터를 잘 구분하도록 조금씩 업데이트 된다.

반면에 생성자의 경우는 두 번째 항에만 관여하고, 자신이 생성한 이미지가 D에 의해서 진짜 이미지와 같이 1로 뱉어낼 수 있게끔 학습한다. 참 인간은 똑똑하다..

 

DCGAN은 GAN의 기본적인 모듈에 CNN을 결합한다.

DCGAN 이전의 GAN은 학습이 상당히 불안정했다. 터무니 없는 데이터를 생성하기도 하고, Mode collapse 문제가 발생하기도 했다. DCGAN을 통해 더 좋은 image representation을 만들어낼 수 있고, 더 나은 이미지 생성을 기대할 수 있다.

DCGAN Architecture

1. Replace any pooling layers with strided convolutions (discriminator) and fractional-strided convolutions (generator).

먼저 첫번째로는 모든 네트워크에 있는 pooling functionStrided convolution으로 교체했다고 말하고 있다.

일부 픽셀의 gradient 손실 문제를 해결하기 위해, 기존의 max pooling이 아닌 strided convolution을 적용한 pooling 기법으로 각 레이어마다 이미지를 축소했다는 것이다.

 

2. Use batch norm in both the generator and the discriminator.

Batch Normalization을 적용하여 학습 과정에서 변화하는 불안정성 해결, Generator가 Local minima에 빠지는 것을 방지하고 Smoothing 효과도 가져왔다.

 

3. Use  batchnorm in both the generator and the discriminator.

모든 네트워크에 있는 Fully connected layer 제거하고 Convolution layer로 대체했다.

 

4. Use ReLU activation in generator for all layers except for the output, which uses Tanh.

5. Use LeakyReLU activation in the discriminator for all layers.

활성화 함수는 어떻게 적용하였는지 말해주고 있다. 그냥 여러 함수 사용해보고 결정한, empirical한 결과이다.

 

본 논문의 연구에서 실험을 다양하게 진행했는데,, 아래와 같이 요약한다.

Empirical Validation of DCGAN's Capabilities
Walking in the Latent Space
Visualizing the Discriminator Features
Forgetting to draw certain objects
Vector Arithmetic on face samples

실험의 구체적인 setting과 내용은 기억나지 않는 부분이 많다.

로직은 사실 어렵지 않다. 그냥 정리해보았다.