[ 딥러닝 ] GAN
Updated:
GAN이란 무엇인가?
- minimax algorithm에 기반을 두고 있다.
알고리즘
-
제일 처음 Noise가 있다. 해당 Noise는 위 수식에서 z라고 표현된다.
-
해당 noise를 가지고 Generator(위조지폐범이) 위조지폐를 만든다. 만들어진 위조지폐들을 위 수식에서 G(z)라고 하자.
-
이제 Discriminator(경찰) 이 위조지폐와 실제 지폐를 구분해야 한다. 경찰은 이게 위조지폐라면 0을 출력하고, 진짜 지폐라면 1을 출력하기로 한다. 위조지폐 G(z) 와 실제 지폐 x 가 경찰 손으로 들어갔을 때, D(G(z))는 위조지폐이기 때문에 0, 실제 지폐는 D(x)는 1을 출력하게 된다.
이렇게 한번 경찰이 해당 지폐들을 구분한 게 한 번의 epoch 가 된다. 첫 번째 도전에서 경찰이 위조지폐와 진짜 지폐를 잘 구분할지라도, 점차 위조 지폐 범은 더욱 비슷하게 생긴 위조지폐를 만들려고 노력할 것이고 경찰도 점차 위조지폐를 더 잘 구분하기 위해 노력할 것이다. 그러다가 어느 순간 너무나도 완벽한 위조지폐가 탄생한다면, 경찰은 결국 해당 지폐를 구분하지 못하기 때문에 이게 진짜인지 가짜인지 찍기 시작할 것이다. 확률은 둘 중 하나일 테니 결국 50%로 가 될 것이고, 그 순간 학습이 끝나게 된다.
Generator와 Discriminator
Generator
- Unsupervised Learning
- MLP (multilayer perceptron)
- 어떤 latent code를 가지고 training 데이터가 되도록 학습하는 과정을 말한다.
- 실제 데이터의 확률 분포와 유사한 모델을 제작하려 한다.
- D(G(z))가 1에 가까워지도록 하는 게 목표
Discriminator
- Supervised Learning
- MLP (multilayer perceptron)
- 일종의 binary classifier
- styleGAN2-ADA의 경우 ResNet을 사용했다.
- 어떠한 input 데이터가 들어갔을 때, 해당 input 값이 어떤 것인지 Classify 한다. = output이 0 혹은 1
-
classify할 때 sigmoid function을 이용한다.
수식의 의미
\[\underset{G}{min} \, \underset{D}{max} \, V(D,G)=\operatorname{E}_{x⁓Pdata(x)}[logD(x)]+\operatorname{E}_{z⁓Pz(z)}[log(1-D(G(z)))]\]- $V(D,G)$ : value function (= utility ftn. = objective ftn. = loss ftn.)
- generator 입장에선 $V(D,G)$를 minimize, discriminator 입장에선 $V(D,G)$를 maximize하려 한다.
Discriminator 입장
- latent code : 데이터에서 추출된 특징을 특정 값으로 mapping한 것
- latent space : 대상을 잘 기술할 수 있는 feature들의 분포 공간