GAN(Generative Adversarial Network)

Overview

딥러닝 모델 중 GAN에 대해서 알아볼 것입니다. GAN은 다른 모델과 달리 데이터를 생성함에 있습니다. GAN에 대하여 알아보도록 하겠습니다.

이 글은 Google Developer를 참고하여 만들어 졌습니다.
[출처]https://developers.google.com/machine-learning/gan/gan_structure


1. GAN이란
2. Discriminator
3. Generator
4. GAN의 손실 함수
5. 마치며



GAN이란

GAN은 Generative adversarial networks로 말 그대로 생성적 적대 망 입니다.
최근 머신러닝에서 혁신으로 기대되고 있으며, training data를 기반으로 새 데이터를 만듭니다.
아래 예시를 보면 GAN은 실제 이미지와 생성된 이미지를 비교하는 Discriminator 가 존재하고 이 Discriminator 를 통하여 Generator의 손실률을 개선하여 실제 이미지에 가까운 이미지를 만듭니다.
GAN을 이해하기 위해서 이산수학(확률 분포 기대값 등)의 내용을 알아야 하지만 현재 포스팅에서 생략하겠습니다.


GAN이란


Discriminator

Discriminator를 간단히 말하면 식별자입니다.
Generator에 의해 만들어진 가짜이미지와 실제 이미지 샘플 입력을 받습니다.
입력 받은 샘플이 실제 이미지인지 가짜 이미지 인지 구분을 합니다.
그리고 결과가 손실함수와 연결되어 학습을 하게 됩니다.
이 때 Generator Loss와는 상관이 없습니다.
Generator나 Discriminator는 동시에 학습을 하지 않습니다.




Generator

GAN의 Generator는 무작위 데이터 입력을 받아 가짜 데이터를 생성합니다.
Discriminator에 의해 Generator Loss가 나와 Generator의 학습이 진행 됩니다.
학습이 진행될 수록 Generator는 진짜에 가까운 Generator를 생성합니다.



GAN의 손실 함수

GAN의 원리는 실제 이미지의 확률 분포를 복제하는 것에 있습니다.
분포의 실제 데이터와의 거리를 반영하는 손실함수를 사용해야 합니다.
손실 함수는 아래와 같습니다.

Ex[log(D(x))]+Ez[log(1-D(G(z)))]


D(x)는 Discriminator가 실제 데이터 x 를 진짜로 판단할 확률에 대한 추정값 입니다. Ex는 기대값 입니다.
G(z)는 임의의 z 가 주어졌을 때 Generator의 출력입니다.
D(G(z))는 Discriminator가 가짜 데이터를 진짜로 판단할 확률에 대한 추정값 입니다.
Ez는 z가 주어졌을 때 기대값 입니다.


GAN 예제코드

GAN 예제코드는 아래를 참고하면 됩니다.

TensorFlow Example
Pytorch Example
C-GAN Pytorch Example

예제를 돌리면 아래와 같이 GAN 모델에 의해 이미지가 생성 됩니다.
GAN 예제 결과


마치며

읽어주셔서 감사합니다. GAN에 대하여 간단하게 알아보았습니다.