정확히 논문에서 사용한 표현과 기저 생각들이 궁금했다.
Abstract
동시에 두개의 모델을 학습하는 adverserial 방식을 통해 generative model을 만드는 새로운 프레임워크를 제안한다.
generative model G는 데이터 분포를 측정한다. discriminative model D는 입력 샘플이 학습 데이터가 아닌 G로부터 나왔을 확률을 측정한다.
G의 학습 목적은 D가 잘못 판단할 확률을 최대화 하는 것이다. D가 항상 0.5를 뱉게된다면 완벽한 solution이다.
G와 D가 MLP일 때 전체를 back prop으로 학습가능하다. 마르코프 체인이나 근사 추론 네트워크가 학습이나 생성에 필요하지 않다.
여태까지 딥러닝의 가장 큰 성공이 발생한건 고차원 데이터를 class label로 매핑하는 discriminative model이었다.
Deep generative model은 그보다 덜했는데 maximum likelihood 측정의 intractable한 확률적 계산을 모델링하는게 어렵기 때문 + piecewise linear unit을 최대한 활용하는게 어려웠기 때문
비선형성이라는 특성을 극대화해서 생성 모델을 만드는게 어려웠던 것 같다.
본 프레임워크는 다양한 종류의 모델과 최적화 알고리즘에 맞는 학습 알고리즘을 만들어낼 수 있다. 여기서는 random noise를 MLP에 통과시켜 샘플을 생성하는 케이스만 탐색하겠다. D도 MLP인! → adversarial nets (억지로 근사하는 것보다 딥러닝의 힘을 극도로 활용하는게 GAN이라고 볼 수 있지 않을까)
Related work
많은 연구들을 얘기하지만
- 생성 모델이 데이터 확률 분포를 모델링하도록 하고 싶은데(= 가장 high-level의 목표), 이걸 위해서 변화하는 파라미터에 따른 정규화 상수를 계산하는게 매우 어렵다.
(정규화 상수는 모델링된 확률분포의 전체 적분 값이 1이 되도록 하기위한 것!)
그래서 직접 확률 분포를 모델링해서 데이터가 샘플링되도록하는게 아니라, MCMC 샘플링 방법으로 얻어지도록해서 뭔가 학습하는 연구도 있다
- 이런 문제를 해결하기 위해 log-likelihood를 직접 계산하지 않고, 근사하는 방법들이 나왔다(대표적으로 score matching)
근데 얘네들도 복잡한 분포에 대해 정확한 PD를 구하는게 어려우며 속도나 성능 문제가 있다 → 왜?
기존 모델들의 표현력이 낮다. 충분히 비선형성을 제공하지 못하거나, 복잡한 분포의 기울기 계산이 어려워서.
Adverserial nets
generator의 분포 가 데이터 x에 대한 분포를 모델링하도록 하기 위해, 우리는 입력 noise 변수 의 prior를 정의했다.
그리고 로 z를 데이터 공간으로 매핑하는걸 표현한다.
그리고 단일 스칼라값을 뱉는 ) 도 정의한다. D(x)는 x가 분포가 아닌 실제 데이터 분포에서 왔을 확률을 나타낸다.
D는 학습데이터와 G의 샘플 두개 모두로 학습해서 정답 label을 뱉도록 학습하고, G는 자기가 생성한 샘플의 D에 의한 출력값이 1이 되도록 학습한다.
동일한 value를 하나는 최대화하려고하고 하나는 최소화하려고 한다고 볼 수 있다.
하지만 GAN은 훈련 최적화가 어렵다.. 애초에 수식적으로 전개해서 접근하는게 아니다보니 일단 해봤을 때 딥러닝 blackbox가 동작하는걸 보고 뭔가 해야하는게 많은 듯 하다.
- 어느정도 학습된 G가 있다고 하자. 다음 학습 loop로 갔을 때 만약 G가 뱉는 값에 대해서 D가 전혀 구분하지 못한다면, 어짜피 여기에 대해 G를 최적화하는건 큰 의미가 없다.
다시말해 우선 현재의 G의 출력값과 실제 데이터 출력값을 어느정도 구분하는 D가 있어야, 얘가 헷갈리도록 하기위해 G가 유의미하게 학습될 수 있다.
다시 말해 loop안에서 G를 학습하기 앞서 D가 우선적으로 어느정도 학습되어야한다.
그렇다고 완전히 D를 학습하고 G로 넘어가는건 연산이 많이 들고 오버피팅이 발생할 수 있으니 k번 만큼만 Loop를 돌려서 학습하고 G를 학습하도록 한다.
- In practice, 위의 식은 G가 학습할 충분한 Gradient를 제공하지 못한 가능성이 높다.
학습의 초기 단계에서 G가 성능이 별로일 때 Fake와 Real이 완전 다르게 생겼을 것이기 때문에 D는 둘을 매우 잘 구별할 수 있다. 근데 이러면 log(1-D(G(z))) 값이 log1 = 0에 매우 가까워져서 전달할 loss가 너무 작아 학습이 안된다.
그래서 학습의 초기 단계에는 logD(G(z))를 최대화하는 objective를 줘서 더 Gradient를 강하게 주도록 할 수 있다.
이론적으로 접근해보자
4.1 Globla Optimality of
어떤 G가 오든 D의 글로벌 옵티마가 달성되는 조건이 일 때라는걸 설명하면서, 이 학습 방식이 잘될 수 밖에 없는 이유를 말한다(데이터 분포를 모델링하는게 궁극적 목표니까)
C(G)의 global minimum이 달성되기위한 필요충분조건은 Pg = Pdata 이다. 이 때 -log4이다.
4.2 Convergence of Algorithm1
In practice, (또 나왔다)
Pg를 최적화한다고는 하지만 실제로는 G의 파라미터 를 최적화하는 것이다. 따라서 기울기가 0인 Local optima에 빠져서 Pg를 최적화하지 않는 상황이 있을 수도 있다. 근데 그럼 어때? 잘되는데
애초에 논문에서도 “However, the excellent performance of multilayer perceptrons in practice suggests that they are a reasonable model to use despite their lack of theoretical guarantees.”라고 말한다.
Advantages and disadvantages
이 분석이 꽤 중요할 듯 하다. 접근 자체가 새로운 프레임워크이기 때문에, 이전의 방법들과 비교해서 어떤 장단점이 있는지.
단점
explicit하게 를 학습하지 않고, D를 속이도록 학습하는 것이기 때문에 D의 업데이트없이 G를 너무 지나치게 학습하면 어떤 z던 간데 같은 x(D를 속이기만 하면 되니)로 매핑해버리는 문제가 있을 수 있다. = collapse
학습 자체가 이상해진다.
장점
- Markov chain이 필요하지 않고 오직 backprop만 기울기를 얻기 위해 적용된다. 훨씬 속도가 빠르다.
- 데이터셋이 직접적으로 Generator의 업데이트에 사용되지 않고 discriminator를 통해서 나온 값을 사용하기 때문에 통계적인 장점을 얻는다.
입력데이터 분포를 그대로 따라하는 방식으로 학습될 위험(일종의 오버피팅)이 적다는 뜻인 듯 하다.
- GAN은 매우 날카로운 분포도 표현할 수 있다. 마르코프 체인은 분포가 blurry해야 다음 분포로 넘어가기 쉽기 때문에, 좀 뭉툭해야한다.
Share article
Subscribe to our newsletter