(GAN)Generative Adversarial Nets
(GAN)Generative Adversarial Nets
Discriminative Model D(판별기) : 들어온 샘플이 G모델에서 온게 아니라 training data에서 왔을 확률을 추하는 모델
Generative Mode G(생성기) : 데이터 분포를 포착하는 모델
위 논문은 discriminatice model과 generative model을 동시에 학습하는 adversarial process를 만드는 새로운 framework를 제안한다.
discriminator는 진짜 이미지를 판단하고 generator는 discriminator를 속여서 가짜 이미지를 진짜 이미지로 속이도록 학습이 진행 되는데, 이 과정은 minmax two-player game과 유사하다.
저자는 임의의 함수 G와 D의 공간에서 G가 실제 데이터 분포를 잘 커버하고 D가 가짜와 진짜를 구분하지 못하는 unique solution이 존재한다고 한다.
딥러닝은 인공지능 영역에 마주하는 다양한 데이터들에 대한 확률분포를 타나내는 고차원적인 모델을 찾아내는 것이다. 지금까지 딥러닝에서의 성공은 고차원적이고 방대한 센서 인풋을 한 클래스에 맵핑하는 discriminative model에 연관되고있다. 이러한 성공은 well-behaved gradient를 갖는 선형 활성화 함수를 사용하는 backpropagation과 dropout을 기반으로 하고있다.
asd Deep generative mdel은 maximum likelihood estimation과 연관된 전략에서 발생하는 많은 다루기 어려운 확률계산을 근사하는데 어렵고 generative context에서는 활성화 함수의 이점을 사용할 수 없다는 어려움이 있어서 덜 임팩트가 있어왔다.
==> adversarial nets framwork에서 제안되는 generative model은 이러한 어려움에 대항할 수 있다.
두 모델의 학습 과정
Discriminator : real image가 들어갈 경우 real image라고 인식할 수 있게 학습을 진행하고, fake image가 들어갈 경우 fake image라고 인식할 수 있도록 학습을 진행한다. 이 학습에서는 real image와 fake image만 구별하면 됨으로 binary classification으로 진행되서 output의 차원은 1이다.
Generator : 임의의 이미지를 만들어서 discriminator를 속여 1을 출력할 수 있도록 학습을 진행한다. 학습이 진행될수록 실제와 비슷한 이미지을 만들어서 real과 fake를 구분하지 못하게 하는것이 목표이다.
이 논문에서 제시되는 adversarial nets 프레임워크는 '경쟁'을 컨샙으로, discriminative model을 경찰로 표현하고 generative model을 위조지폐범으로 표현한다. discriminative model은 화폐를 보고 진짜 화폐인지 가짜 화폐인지를 완벽하게 판별하는 것을 목표로 하고 generative model은 경찰이 자신이 만든 지폐를 진짜 지폐라고 생각할 수 있도록 학습을 진행한다. 이러한 경쟁을 계속 진행함으로 어느 순간 진짜 지폐와 가짜 지폐를 구분할 수 없는 즉, 50%로 수렴하게 된다. 이러한 경우가 Abstract에서 언급한 unique solution이다.
이러한 framework는 다양한 모델과 optimization algorithm을 위한 training algorithm을 유도하도록 확장될 수 있다. 이 논문에서 이 framework를 이용한 하나의 case로써 MLP로 구성된 generative model에 random noise를 흘려보냄으로 샘플을 생성하고, discriminative model 또한 MLP이다. 이러한 case를 저자는 adversarial nets라고 부른다.
generator의 분포 pg를 x에 대해 학습시키기 위해 input noise변수에 대한 prior(사전분포) pz(z) 정의한 뒤, 그 노이즈변수의 데이터 공간에 매핑을 G(Z;θg)로 나타낸다. 이때 G는 파라미터 θg를 갖는 미분가능한 MLP이다. 또한 scalar 값(확률)을 출력하는 또다른 MLP인 D(X;θd)를 정의한다. D(x)는 입력된 샘플이 pg가 아닌 실제 데이터 분포로부터 얻어졌을 확률을 계산한다.
D가 true 데이터와 생성데이터에 대해 적절한 label을 할당하도록 하는 확률을 최대화 하게끔하고 이와동시에 G가 log(1-D(G(z)))를 최소화하도록 훈련시킨다. 수식은 다음과 같다.
첫번째 항: real data x를 discriminator 에 넣었을 때 나오는 결과를 log취했을 때 얻는 기댓값
두번째 항: fake data z를 generator에 넣었을 때 나오는 결과를 discriminator에 넣었을 때 그 결과를 log(1-결과)했을 때 얻는 기댓값
이 방정식을 D의 입장, G의 입장에서 각각 이해해보자.
D의 입장 : 이 value function V(D,G)의 이상적인 결과를 생각해보면, D가 매우 뛰어난 성능으로 판별을 잘 해낸다고 했을 때, D가 판별하려는 데이터가 실제 데이터에서 온 샘플일 경우에는 D(x)가 1이 되어 첫번째 항은 0이 되어 사라지고 G(z)가 생성해낸 가짜 이미지를 구별해낼 수 있으므로 D(G(z))는 0이 되어 두번째 항은 log(1-0)=log1=0이 되어 전체 식 V(D,G) = 0이 된다. 즉 D의 입장에서 얻을 수 있는 이상적인 결과, '최댓값'은 0임을 확인 할 수 있다.
G의 입장 : 이 value function V(D,G)의 이상적인 결과를 생각해보면, G가 D가 구별못할만큼 진짜와 같은 데이터를 잘 생성해낸다고 했을 때, 첫번째 항은 D가 구별해내는 것에 대한 항으로 G의 성능에 의해 결정될 수 있는 항이 아니므로 신경을 쓰지 않는다. 두번째 항을 살펴보면 G가 생성해 낸 데이터는 D를 속일 수 있는 성능이라 가정했기 때문에 D가 G가 생성해낸 이미지를 가짜라고 인식하지 못하고 진짜라고 결정내버린다. 그러므로 D(G(z)) =1이 되고 log(1-1)=log0=마이너스무한대가 된다. 즉, G의 입장에서 얻을 수 있는 이상적인 결과, '최솟값'은 '마이너스무한대'임을 확인할 수 있다.
다시말해, D는 training data의 sample과 G의 sample에 진짜인지 가짜인지 올바른 라벨을 지정할 확률을 최대화하기 위해 학습하고, G는 log(1-D(G(z))를 최소화(D(G(z))를 최대화)하기 위해 학습을 한다.
D입장에서는 V(D,G)를 최대화시키려고, G입장에서는 V(D,G)를 최소화시키려고 하고, 논문에서는 D와 G를 V(G,D)를 갖는 two-player minmax game으로 표현을 하였다.
실제로 GAN을 training하다보면 generator가 학습을 위한 충분한 gradient를 얻지 못한다. 학습초기에 G가 생성하는 데이터 품질이 변변치못할때, D가 이것들을 실제 True 데이터와 비교하고 매우 강한 confidence로 기각하기 때문이다. (D의 출력은 0 ~ 1의 확률값인데, 판별기의 출력층 구현시에 시그모이드 함수를 사용하기 때문에, 시그모이드 함수 개형을 생각해보면 너무 구리거나 너무 실제같은 관측들에 대한 영역에서는 gradient가 0에 가깝게 saturate가 된다. -> 시그모이드 함수의 고질적인 문제.)
이 문제를 완화하기 위해 본 논문에서는 generator가 log(1-D(G(z)))를 최소화하도록 하지 않고 log(D(G(z)))를 최대화 하도록 목적을 재설정 한다고 한다. 이는 log(1-D(G(z)))함수와 log(D(G(z)))를 그려보면 알 수 있는데 log(1-D(G(z)))에서 D(G(z))가 0인 순간에 gradient는 -1이 된다 하지만 이는 데이터 품질이 변변치 못할 때 발생한다. 품질이 변변치 못할 때 빠르게 학습이 진행되지 않아서 log(1-D(G(z)))를 최소화 하지 않고 log(D(G(z)))를 최대화 하는 방향으로 재설정한다.
판별기(D)가 모델링하는 조건부확률 : 파란색 점선
생성기(G)가 모델링하는 pg : 녹색 실선
실제 데이터 생성분포 px : 검은 점선
하단의 수평선 : z가 균일하게 샘플링되는 도메인
상단의 수평선 : x의 도메인
위로 향하는 화살표 : x=G(z)의 매핑을 통과한 샘플들이 어떤식으로 non-uniform한 pg를 나타내도록 하는지 보여줌.
(a): 학습초기에는 real과 fake의 분포가 전혀 다름. D의 성능도 썩 좋지 않음
(b): D가 (a)처럼 들쑥날쑥하게 확률을 판단하지 않고, 흔들리지 않고 real과 fake를 분명하게 판별해내고 있음을 확인할 수 있다. 이는 D가 성능이 올라갔음을 확인가능
(c): 어느정도 D가 학습이 이루어지면, G는 실제 데이터의 분포를 모사하며 D가 구별하기 힘든 방향으로 학습을 함
(d): 이 과정의 반복의 결과로 real과 fake의 분포가 거의 비슷해져 구분할 수 없을 만큼 G가 학습을 하게되고 결국, D가 이 둘을 구분할 수 없게 되어 확률을 1/2로 계산하게 된다