Genrative Adversarial Networks
Generative
- CNN과 다르게 가상의 이미지를 생성
- CNN은 input에 비해 output은 dimension이 작다.
- GAN은 input dimention은 작고, 점점 커져서 output은 크다.
- 특정 condition. 작은 사이즈의 벡터. Random noise로 새로운 것을 창조
- Input data를 보고 최대한 비슷하지만 새로운 것을 만들어 냄
Adversarial
- 두 네트워크가 서로 경쟁하며 성능을 높임
- Generator, Discriminator 두 가지를 학습시킨다.
- 둘 다 처음엔 성능이 안 좋은데 backpropagation 두 번하여 점차 향상됨
- 최종적으로, Generaetor는 real 같은 fake를 만듦
- Discriminator는 구분을 잘 못함.
- 이때까지 학습시킨다.
Generator
: Generation of new data
Discriminator
: Discrimination of real and fake data
GAN's architecture
- z is some random noise. 근데 사실 random이 아니라 학습시킬 수록 의미를 갖는다.
- Discriminator는 기존 CNN 아키텍처처럼 classification
- Real은 최대한 real, fake는 최대한 fake로 backpropagation
-> Discriminator 업데이트
- Discriminator 고정 후, fake 데이터를 최대한 real로 출력할 수 있도록 loss를 반전한다.
-> Generator 업데이트
- 위 과정을 번갈아가며 진행
How to train two networks
- Discriminator가 x에 대해 y로 output 출력 (x > y)
1. real > real
discriminator가 잘 동작. generator를 더 학습시켜야 한다.
2. real > fake
generator가 잘 동작. discriminator를 더 학습시켜야 한다.
3. fake > real
generaotr가 잘 동작. discriminator를 더 학습시켜야 한다.
4. fake > fake
discriminator가 잘 동작. generator를 더 학습시켜야 한다.
GAN training
Step 1
- G를 고정하고 D만 backprop해서 업데이트
Step 2
- D를 고정하고 G 업데이트
- 둘 다 max 형태로 식을 통일하기 위해.
Conditional GAN
- 조건을 줘서 내가 원하는형태로.
- Give meaning to the noise vector
- GAN이 그 input에 대응해서 학습되도록
- 더하고 빼고, condition을 연산할 수 있다.
Pix2Pix
- pixel를 새로운 pixel로 변환. Domain 변환
- Training set은 pair여야 한다.
Cycle GAN
- Paired image가 필요 없다.
- Network, Loss가 각각 존재
Implementation
Requirements
Generator
- Input dimension: random vector length
- Output dimentsion: image size
- Model: FC
Discriminator
- Input dimension: image size
- Output dimension: 1
- Model: FC
Source code