DCGAN - (1) Generative Adversarial Networks

인턴 1주 차 목표는 pytorch가 제공하는 DCGAN tutorial을 공부해오는 것이었다. 디테일한 코드보다는 용어의 의미와 전체적인 흐름 및 이론에 주목하여 살펴보도록 하자.

GAN (Generative Adversarial Networks)

먼저, GAN 이란 Generator와 Discriminator로 이루어진 Adversarial Networks로, 주어진 data의 분포와 비슷한 분포의 sample을 추출하고자 하는 generative model이다. 여기서 ‘Adversarial(적대적)’이라 표현한 이유는, 후술하겠지만 Generator와 Discriminator가 서로 mini-max 게임을 하는 관계이기 때문이다.

Generator는 latent vector를 가지고 fake image를 만들고, Discriminator는 주어진 image가 진짜인지 아닌지를 판별한다. 즉, Discriminator는 주어진 image가 진짜인지 아닌지 정확하게 분류하고자 하는 것이 목표이고, Generator는 이러한 Discriminator가 자기가 만든 fake image를 real image로 인식하게끔 하는 것이 목표이다. 이러한 이유로 Adversarial Networks라고 표현하였다.

Loss Function

앞서 말한 GAN의 의미를 이해한다면, 다음과 같이 정의된 Loss Function은 꽤나 자연스럽게 다가온다.

Discriminator는 training data x를 real로, Generator에 의해 생성된 G(z)를 fake로 분류할 확률을 maximize 한다. 이와 동시에 Generator는 Discriminator가 G(z)를 fake로 분류할 확률을 minimize 한다.

GAN을 제시한 논문에 따르면 두 분포 가 같을 때가 본 mini-max game의 solution이지만, 수렴조건에 관한 부분은 아직 연구 중에 있다고 한다.

DCGAN은 이러한 GAN을 Deep Convolutional Architecture를 가지고 구현한 모델에 해당한다. 자세한 내용은 다음 글에서 다뤄보자.

Next Article: DCGAN - (2) Architecture

Share