정의 : 실존하지는 않지만 있을 법한 이미지를 생성할 수 있는 모델
목표
Discriminator 모델은 Supervised Learning이며, Generator 모델은 Unsupervised Learning
Discriminator 모델은 어떠한 input 데이터가 들어갔을 때, 해당 input 값이 어떤 것인지 Classify 하고, Generator 모델은 어떤 latent code(잠재적인 코드)를 가지고 해당 데이터를 가지고 training 데이터가 되도록 학습
즉, Discriminator 은 위조지폐와 진짜 지폐가 input으로 들어갔을 때 이게 진짜(1)인지 가짜(0) 인지를 output으로 주면서 즉 카테고리를 classifying 한다. Generator 모델은 데이터가 흩뿌려져있는 걸 보고 이 데이터가 특정 Training 데이터가 되도록 스스로 변화하며 학습하는 과정
GAN에서는 먼저 Discriminator 모델이 진짜 이미지와, 가짜 이미지를 가지고 진짜 가짜 여부를 구분하도록 학습시킨다.
따라서 들어가는 input은 G(z) 와 x의 차원은 이미지의 경우(64 x 64 x 3) 과 같은 고차원 vetor가 들어가더라도 나오는 값은 0과 1의 값을 가지게 된다.
여기서 0과 1의 값으로 분류할 때는 sigmoid 함수를 써서 0.5를 기준으로 0과 1을 구분하게 된다.
Generator는 Discriminator 가 진짜 이미지를 잘 맞추는지 못 맞추는지에 대해서 관심이 없다. 그냥 본인이 만든 이미지가 얼마나 Discriminator를 속일 수 있냐가 중요하다. Generator 목적은 D(G(z)) 가 1이 되도록 하는 것뿐!
왼쪽에서 G는 V(D, G) 가 최소(min) 가 되려 하고, D는 V(D, G) 최대(max) 가 되려고 함. (log(1) = 0, log(0) = -infinity)
V(D, G) 은 GAN의 Loss 함수, Objective 함수
D가 가장 원하는 상황
D(x)가 1이 되는 게 D의 목표인데 logD(1)을 하면 0 이다.
⇒ log(1) = 0 이 나오는 게 해당 logD(x) 가 뽑아낼 수 있는 그나마 가장 큰 값!
z = Gaussian Distribution
z는 주로 두 가지 분포에 따른 랜덤 값을 가진다. 위 그림처럼 Gaussian Distribution 또는 Uniform Distribution 을 따른다.
D(G(z))의 경우에도 마찬가지로 0이 되려고 하고, log(1-0), 즉 0이 되는 값이 되려고 한다.
따라서 전체적으로 본다면 그냥 0+0 같은 값이 되지만, 이는 상대적으로 볼 때 D가 V(D, G)를 최대화하기 위해 노력한 값을 말한다.
⇒ D가 원하는 최적의 상황은 전부 0이 되는 것!(0보다 작은 수보다는 낫기 때문)
G의 목적은 V(D, G) 가 최소가 되도록 하는 것
G가 원하는 상황은 다음과 같다. 앞에서 D가 어떻게 하는지는 상관이 없다. 다만 뒤에서 D(G(z))가 1이 되게 해야 한다.
log(1-1)으로 인해 log 0 이 된다면 해당 값은 -infinity를 향하게 된다. 이는 0보다 매우 작은 무한대의 음수로, 결국 G의 목표는 엄청 엄청 작은 0 보다 작은 음의 무한대를 향하는 것이 목적
⇒ 따라서 G가 원하는 최적의 상황은 매우 매우 작은 음의 무한대가 방향이 되는 것이다.
Markov chains이 필요없고 역전파만 있으면 된다. G는 data로 부터 직접 업데이트되지 않고 D로 업데이트된다.(input이 직접적으로 G의 파라미터로 copy되지 않는다. 아마 기억에 의한 이미지 생성이 아니라는 의미 같음) 이전의 Markov모델들 보다 sharp한 특징을 잡아낼 수 있다.