GAN의 기본정보
GAN에서 다루고자하는 모든 데이터
→ 확률분포를 가지고 있는 RV(random variable)
→ 주어진 확률분포를 따르도록 데이터를 임의생성
→데이터는 확률분포를 구할 때 사용한 원데이터와 유사한 값을 가짐
(D는 더이상 분류해도 의미가 없는 0.5라는 확률값을 뱉어냄)
(0.5면 D가 의미가 없음)
G(생성자)
latent code(잠재적인 코드)를 가지고 해당 데이터를 가지고 training 데이터가 되도록 학습
특정 Training 데이터가 되도록 스스로 변화하며 학습
D(판별자)
input 데이터가 들어갔을 때, 해당 input 값이 어떤 것인지 Classify
진짜(1)인지 가짜(0) 인지를 output으로 줌
따라서 G의 목적은
D(G(z)) = 1 을 만족 시키는 것
(만든 데이터를 D에 넣었을 때 1(진짜)라고 결과가 나오는 것)
최적화를 통해 G와 D를 동시에 훈련
x = 진짜 데이터
z = 가짜 데이터 (G가 생성함)
손실 함수는 생성자의 손실 함수, 판별자의 손실 함수의 형태를 가짐.
→ 둘다 이진 크로스 엔드로피 손실 함수
G가 D가 구별해내지 못할 정도 잘 생성해야함
첫번째 항: D가 구별해내는 것에 대한 항, G의 성능에 의해 결정 X → 무시
두번째 항: G가 생성해낸 데이터 → D를 속일 수 있는 데이터라고 가정 → D(G(z)) = 1
pz(z)는 잠재 공간의 분포
z는 잠재 벡터(랜덤 노이즈)
Ez는 pz(z) 분포에서 가져온 잠재 벡터 z에 대한 기대값
G(z)는 생성자가 잠재 벡터 z를 입력으로 받아 생성한 가짜 데이터
D(G(z))는 판별자가 가짜 데이터 G(z)를 진짜로 정확히 판별하지 못하는 확률
두 번째 항은 생성자를 통해 생성된 가짜 데이터를 판별자가 가짜로 정확히 판별하도록 유도
G 입장에서 얻을 수 있는 이상적인 결과, 최솟값은 '마이너스 무한대'
→G의 목적은 D(G(z)) = 1 을 만족 시키는 것이기 때문에
D 입장에서 가장 이상적인 결과
반대로 D 입장에서 가장 이상적인 결과는 log(1-0)=log1=0
→ D가 모든 가짜 데이터를 구별한다면 D(G(z)) = 0
(+ 모든 진짜 데이터를 진짜라고 구별한다면 logD(x)=1)
( x는 진짜 데이터 )