NIPS 2016 : Generative Adversarial Networks 논문 요약 - (1)
Chapter 1은 스킵
Chapter 2 : How do generative models work? How do GANs compare to others?
Maximum likelihood estimation
GAN은 기본적으로 maximum likelihood 원리에 의해서 돌아간다. 모든 모델이 이것을 사용하는 것은 아니지만, 그렇지않은 모델을 maximum likelihood를 사용하게 바꿀 수도 있다.
maximum likelihood 의 기본 아이디어는
“파라미터 θ를 사용하여 확률 분포를 예측하는 모델을 정의하는 것이다.”
여기서 likelihood는 학습데이터에 모델이 할당하는 확률값 을 말하며 이는 이렇게 정의한다.
$\prod_{i=1}^m\ p_{model}\left(x^{\left(i\right)};\ \theta \right)$
은 학습데이터 x의 개수이다.
maximum likelihood는 쉽게 말하면 학습데이터의 likelihood를 최대화하는 모델의 파라미터를 고르는 것이다.
여기서 확률의 곱은 로그를 취해서 summation으로 나타낼 수 있다. 이렇게 바꾸면 컴퓨팅 연산에 더 좋고 언더플로우를 방지할 수 있음.
이렇게 해서 최대값을 가지는 파라미터 세타를 구할 수도 있지만 또다른 방법이 있다.
바로 KL-divergence이다.
KL divergence는 p_data(x)와 p_model(x;theta) 두 분포의 차이를 나타내는 식인데, 이를 최소화 시키는 것이 목적이다.
p_data는 데이터 생성 분포이고 이 분포가 p_model의 family(정확히 무슨뜻인지 모르겠는데 파생된 분포정도라고 해석했음)이면, KL divergence를 최소화했을때 모델분포가 정확히 p_data와 일치하게 된다.
그러나 우리는 실제로 데이터의 실제분포는 알 수 없다. 따라서 이를 예측한 p_hat_data를 사용하게 된다.
p_hat_data는 m개의 데이터를 사용해서 p_data를 예측한 empirical distribution이다.
정리하자면, unknown data generating distribution인 p_data로부터 도출된 m개의 training examples가 있을때, 그 examples를 이용하여 p_hat_data를 추정한다.
그리고 training data의 likelihood를 maximize하기 위해 모델이 해당 points에 할당한 확률을 높이는 것이 바로 maximum likelihood process이다.
(위 그림을 보면 파란 점, 즉 training data에 할당된 확률을 높이는 것을 표현하고 있다.)
A taxonomy of deep generative models
생성형 모델은 다음과 같이 분류될 수 있다.
Explicit (tractable) density models
명시적으로 p_model이 정의된 모델을 말한다. 이런 모델의 maximum likelihood(앞으로 편의상 max_l이라고 부르겠음)은 그냥 단순함. 그냥 모델분포를 likelihood로 표현하고 이것의 gradient가 상승하는 방향을 따라가면됨. 다만 이런 모델의 문제점은 computational tractability(컴퓨팅연산의 실행가능성)를 유지하면서 data의 복잡성을 다 캐치하는 모델이어야 된다는 것이다. 그런 챌린지를 극복하기 위해서 쓰는 두가지 전략이 있다.
-
tractability를 보장하면서 모델을 설계하는 방법
-
tractable approximations을 수용한 모델(?)
자세한 설명을 하겠다.
먼저 첫번째 전략을 따르는 모델을 Tractable explicit models라고 한다.
이러한 모델에는 대표적으로 Fully visible belief Networks(FVBN) 과 nonlinear independent components analysis 가 있음.
FVBN모델은 chain rule을 사용하여 n차원의 벡터 x의 확률분포를 1차원 확률분포로 분해시켜준다.
요렇게..해줌
파이안에 들은 수식을 말로 풀자면 모든 이전 data가 주어졌을때의 x_i의 확률을 말한다.
근데 문제는 이 방법은 x1,x2…,xn이렇게 차례차례 데이터가 들어와야되기 때문에 시간복잡도가 O(n)이나 되고 병렬연산도 불가능하다.
반면에 GAN은 연산을 병렬로 수행할 수 있어서 속도가 빠르다. 그것이 FVBN과 GAN의 차이점이라고 할 수 있다.
이번에는 Nonlinear independent componests analysis를 살펴보자.
이 개념은 두 다른 공간 사이의 연속적이고 비선형적인 transformations을 정의하는 것에서부터 왔다.
예를들면 latent variable z가 있을때,
연속적이고, 미분가능하고, 역행렬이있는(invertible) transformation g가 있다면
g(z)는 x space에 있는 샘플을 만들 수 있다.
분포 p_x는 p_z와 g_(-1)의 자코비안이 tractable하다면 tractable하다.
정리하자면 transformation g가 있으면 z의 분포는 x 분포로 변형될 수 있다.
근데 문제는 이 방법은 function g의 선택에 제약이 존재한다. 특히 z와 x가 같은 차원이어야 된다.
반면에 GAN은 그런 요구사항같은게 거의 없다는 것이 장점이다.
결론 : Explicit tractable density는 효율적이고 optimization algorithm을 바로 데이터에 적용할 수 있어서 좋은데 tractable density에 제약이 존재한다.
Explicit models requiring approximations
tractable density function에 제약(혹은 요구사항)을 해결하기 위해서, intractable하지만 approximation을 할 수 있는 함수를 찾아본다. 크게 두가지가 있다.
-
deterministic approximations : variational methods
-
stochasitc approximations : Markov chain Monte Carlo Methods
- variational methods
이 방법은 하한선인 L을 정의하는 방법이다.
L을 최대화 하는 것은 결국 log likelihood를 크게만드는 것을 의미한다.
왜냐하면 L을 구하는건 쉬운데 log-likelihood를 구하는것은 그렇지 않기 때문에 이런 방법을 사용하게 된다.
(이 방법을 사용하는 대표적인 모델이 VAE)
근데 이 방법에도 문제점이 있다.
바로 사전확률분포나 사후확률분포가 weak하다면(weak하다는게 사전,사후분포가 많이 다른 경우를 말함)
encoder가 L과 likelihood와의 차이가 오히려 p_data에 대한 것이 아닌 다른 것을 학습하게 만들 수 도 있다.
반면에 GAN은 Nash Equilibrium(내시 균형) 덕분에 정확히 p_data를 복원한다고 한다.
내시균형은 찾아보니까 게임이론 관련된 이야기 인거같다.
결론적으로는 이방법은 good likelihood를 얻을 수 있지만 좋은 퀄리티의 샘플을 얻지 못한다. 그리고 optimize하기도 힘들다고 한다. 여러면에서 GAN이 더 낫다고 하고 있음.
- Markov chain approximations
이미 많은 딥러닝 알고리즘들이 stochastic approximation을 사용중이다.
주로 샘플링연산이 저렴하거나 샘플간의 variance가 크지않으면 sampling based approximations이 잘 적용된다.
그러나 Markov chain 을 사용하면 더 expensive한 샘플링이 가능하다.
마르코프 체인을 말로 설명하자면 이거다.
x’ ~ q(x’ | x) 분포에서 x’를 반복적으로 샘플링한다. q는 transition operator이다. |
이것을 반복하다보면 언젠가는 x가 p_model(x)의 샘플 형태로 수렴하게 된다.
하지만! 이방법은 너무나 느리고..잘 수렴되었는지를 검증할 명확한 방법이 없다. 그리고 고차원공간에서는 효율적이지 못하다.
따라서 원래 Boltzmann machine(생성형모델인데 마르코프 체인을 쓰는 모델)이 딥러닝 초창기 시대때는 성행했지만, 이제 Imagenet generation task와는 맞지않기 때문에 잘 사용되지 않고 있다. 그리고 markov chain은 학습은 잘 되는데 이미지를 생성하려면 multi-step markov chains를 써야된다 근데 이건 또 계산량이 어마어마함.
그래서 결국에는 GAN은 이 방법을 채택하지 않았음.
Implicit density models
어떤 모델들은 명확하게 density 함수를 정의하지 않아도 학습될 수 있다.
그대신 간접적으로 p_model과 interact하여 학습한다.(주로는 여기서 샘플링하는 방법)
그리고 이와같은 모델 중에서도 마르코프 체인을 사용하는 모델이 있는데 대표적으로는 generative stochastic network이다. 그러나 위에서 언급한 마르코프 체인의 단점때문에 안쓴다.
결론적으로 다른 생성형 모델과 GAN의 차이점은 아래와 같다. 한번 읽어보자
Chapter 3 : How do GANs work?
GAN framework
GAN은 두 플레이어 간의 게임이라고 할 수 있다.
한 명은 Generator이다. 제너레이터는 학습 데이터의 분포에서 온 것 같은 샘플을 생성한다.
또다른 한명은 Discriminator이다. 디스크리미네이터는 들어온 샘플이 진짜인지 가짜인지를 구별한다.
GAN은 structured probabilistic model(구조적 확률모델)이다.
위 그림과 같이 latent variable z와 observed variable x로 이루어져있다.
저 화살표는 각 노드들간의 상호작용을 나타내는데, 즉 잠재변수 z와 관측변수 x 간의 관계가 명확하게 정의되어 있다는 뜻이다.
discriminator의 함수를 D라고 하고, 이 함수는 x를 인풋으로 한다. 그리고 θ_D라는 파라미터가 사용된다.
generator의 함수를 G라고 하고, 이 함수는 z를 인풋으로 한다. 그리고 θ_G라는 파라미터가 사용된다.
두 플레이어의 각각의 cost function J가 있는데,
discriminator는 θ_D만을 컨트롤하여 J_D(θ_D, θ_G) 를 최소화시키려고 할 것이고,
generator는 θ_G만을 컨트롤하여 J_G(θ_D, θ_G) 를 최소화시키려고 할 것이다.
GAN이 게임같다는 소리가 바로 여기서 나온 것인데, 그 이유는 각 플레이어의 cost는 다른 플레이어의 파라미터에 의존적인 상태이지만, 각 플레이어는 다른 플레이어의 파라미터를 통제할 수 없기 때문이다. 따라서 최적화보다, Nash Equilibrium을 solution으로 채택하게 된다.
(Nash Equilibrium : GAN에서는, 만약 D와 G가 둘다 충분한 능력을 갖게 되었을때 발생하는 현상을 말한다. 즉 G는 traning data distribution을 갖게 되고, 모든 x에 대해 D(x)=0.5가 된다.)
※ 내쉬 균형에 관한 설명은 이 블로그를 참조하자
Generator
미분가능한 함수 G는 어떤 심플한 분포로부터 샘플링된 z를 인풋으로 받아서, sample x를 생성한다.
여기서 핵심은 G의 인풋은 꼭 첫번째 레이어의 input으로 들어가야되는 것은 아니다.(인풋은 G 네트워크에 어느 지점에서나 들어갈 수 있음)
예를들면 z라는 벡터를 z1,z2로 분해한 뒤, z1은 첫번째 레이어에서 넣어주고 z2는 마지막 레이어에 넣어줘도 된다.
이게 중요한 이유는 이렇게 되면 다양한 형태의 input을 넣어줄 수 있다. 뭐 hidden layer에 노이즈를 넣어준다던지, 가우시안 입력을 넣어준다던지 그런식으로 말이다. 그래서 GAN설계에 있어서 제약이 많이 사라진다.
그리고 nonlinear ICA로 학습된 모델은 GAN이 될 수 있다.
VAE가 학습할 수 없던 것은 GAN이 학습시킬 수 있고, 반대로 GAN이 학습시킬수없는 것은 VAE가 학습시킬수는 있다. 그리고 또 중요한 점은, 만약 backprop을 사용할때, VAE는 discrete variable을 generator의 인풋으로 사용할 수 없지만 GAN은 discrete variable을 generator의 아웃풋으로 할 수 없다.
Training process
학습할때는 simulateneous(동시적인) SGD가 사용된다.
각 스텝마다, 학습 데이터셋으로부터 샘플링한 x의 미니배치와 latent space에서 샘플링된 z의 미니배치 두개를 준비한다. 그리고 gradient step은 동시에 이루어진다.
1. J_D를 줄이기 위해 θ_D를 갱신.
2. J_G를 줄이기 위해 θ_G를 갱신.
보통은 Adam optimizer로 최적화를 진행함.
Cost Functions
주로 GAN에 대해 고안된 게임들은 discriminator의 cost 함수는 같고, generator의 cost함수만 달라진다.
discriminator의 cost함수는 다음과 같다.
이것은 그냥 일반적인 cross entropy 방법인데 차이점이 있다면 two minibatches를 사용한다는 것이다.
하나는 데이터셋에서 온 것(x, label = 1),
또 하나는 제너레이터에서 온 것(G(z), label=0)
결국은 저 식을 minimize하는 것이 discriminator의 목적이라 하겠다.
또 하나 중요한 것은, discriminator를 학습하므로써, 각 포인트 x마다 해당 비율을 얻을 수 있다.
$\frac{p_{data}\left(x\right)}{p_{model}\left(x\right)}$
이 비율을 예측하는 것이 중요한 이유는 다양한 divergences와 gradients를 계산할 수 있기 때문이다.
그리고 이 비율예측방법은 볼츠만머신과 VAE와는 다른 GAN의 특별한 방법이기도 하다.
또한 이 방법은 overfit/underfit 문제와 연관이 있기 때문에 좋은 최적화와 충분한 데이터만 있으면 이런 문제를 해결할 수도 있다.
Minimax
zero-sum game : 모든 플레이어의 cost가 0이 되는 것.
즉, GAN의 경우
$J^{\left(G\right)}\ =\ -J^{\left(D\right)}$J(G) = −J(D) 이말은 즉슨, G와 D가 비긴다는 소리이다.
이걸 D의 관점에서 나타낸 value function으로 나타내면 아래와 같다.
Zero-sum game은 minimax게임 이라고도 부른다. 즉 안쪽 루프는 최대화가 되어야되고 바깥루프는 최소화가 되어야된다.
그러나 딥러닝모델에서는 플레이어와 그 갱신이 모두 parameter space에서 일어나기 때문에 이 미니맥스 게임을 적용할 수 가 없다.(이 글에서는 parameter space가 아닌 function space내에서 플레이어 갱신이 되어야만 게임이 균형으로 수렴한다고 말하고 있다..)
Heuristic, non-saturating game
위에서 말했다시피, minimax game은 이론상으로는 가능하지만 실용성 부분에서는 떨어진다.
일반적인 딥러닝 분류모델에서, 타겟클래스와 classifier의 예측분포간의 cross entropy를 최소화하는 것은 매우매우 효율적이다. 그 이유는 분류기가 잘못된 결과를 뱉어내면 cost를 절대 수렴시키지 않는다. 반면에 분류기가 올바른 결과를 뱉어내면 cost는 0으로 수렴한다.
(cross entropy 계산 시 ground truth label을 곱해 해당되지않는 label의 스코어값은 cost에 포함하지않는 것을 말하는 것 같다.)
근데 미니맥스 게임에서 발생되는 문제는 뭐냐면, generator가 cross entropy를 최대화하려고할때
만약 D가 high confidence로 G(z)를 구별해버리면 generator의 gradient는 거의 0에 수렴하여 사라져버린다.
쉽게 말하면 학습 초기에, 1-D(G(z))가 너무 작아서 Generator가 초기부터 학습을 하기 힘들어진다.
따라서 J_G를 단순히 -J_D로 하는게 아니라 이렇게 식을 바꾼다.
그래서 정확히말하면 J_G도 minimize, J_D도 minimize해야ㅐ되는 것으로 바뀐다.
따라서 이제는 더이상 minmax, zero sum game이라고는 할수없다.
Maximum likelihood game
이 식을 식1 이라고 하자
GAN에서 max_l 하기위해서는 KL divergence를 최소화할수있다고 하였다.
위 식을 근사하기위한 여러방법 중, 저자인 굿펠로우가 선택한 방법은 아래와 같다.
이 식을 식2 라고 하자
σ는 sigmoid function이고, D가 optimal 하다면, 식2는 식1을 최소화 하는 것과 같다.
두 식이 같은 이유를 설명하자면 Expectation때문인데.
이것은 뒤에 다시 설명이 나오므로 우선은 넘어가자.
Is the choice of divergence a distinguishing feature of GANs?
GAN이 어떻게 작동하는지는 대충 알겠는데, 그런데 왜 GAN이 다른 VAE나 그런모델들과는 다르게 비교적 클리어한 이미지를 생성해낼수있는것일까?
이에 저자는, 처음에는 GAN이 KL divergence가 아닌 Jensen-Shannon divergence는 사용하기 때문이라고 추측하였다.
Jensen Shannon divergence
여기서 또 중요한 수학적인 이야기가 나온다..
KL divergence is NOT symmetric.
$\min D_{KL}\left(p_{data}\ \parallel\ p_{model}\right)\ \ne\ \min D_{KL}\left(p_{model}\ \parallel\ p_{data}\right)$
(여기서 좌측 항을 항1, 우측항을 항2라고 하자)
그 이유는 사실 KL divergence의 정의를 보면 알 수 있다.
여기서 p랑 q가 뒤바뀌면 당연히 식이 달라진다.
Maximum likelihood estimation은 항1에 가깝고, Jenshen-shannon은 항2와 비슷하다고 한다.
Jenshen-shannon이 항2와 비슷하다고 더 좋은 샘플을 만들 수 있다는 근거는 무엇일까?
엄청엄청 극단적인 예시를 들어보자.
p_data는 가우시안분포 두개를 이어붙힌 분포이다.
그리고 p_model은 초기에 single gaussian(그냥 일반가우시안분포) 분포를 가지고 있다.
그러면 single gaussian이 아무리 노력한들 two gaussian 분포가 될수있을까? 그것은 불가능하다.
하지만 어쨌든 divergence를 해나갈 것이다.
그때 항1의 경우 그 결과를 살펴보자.
p_model이 p_data를 근사해나가기 때문에 왼쪽과 같은 형태가 된다.
반면에 항2의 경우, p_data가 p_model을 근사해나가기 때문에 오른쪽과 같은 형태가 된다.
왼쪽그림은 data가 발생하는 곳이면 거의 _high probability_가 나온다.
오른쪽그림은 data가 발생하지 않는 곳이면 _low probability_가 나온다.
따라서 오른쪽 경우가 더 좋은 샘플링을 할 수 있는 이유가, 기존 데이터가 발생하는 확률를 거의 따라가기 때문에 unusual한 샘플를 생성하지 않게 된다.
(= 즉 all modes를 포함한 샘플생성보다 training distribution내의 modes만 포함한 샘플생성을 하게됨.)
그러나…다른 증거들이 이 의견이 틀렸다는 말을 하게된다. 그러니까 꼭 Jensen-shannon이 요인이 아니라는 것이다..
증거1 : 위에서 언급한대로 이제 GAN에서 maximum likelihood을 사용하는게 가능해졌는데 여전히 좋은 샘플을 뱉어냄..
증거2 : GAN은 가끔씩 엄청엄청 적은 modes로부터 샘플을 생성함(=mode collapse). 반면에 reverse KL은 모델이 할수있는한 최대로 많은 modes로부터 샘플을 생성함..reverse KL을 쓰는데 mode collapse가 발생하는것을 보면 그 외에도 다른 요인이 있을 것이다…
결론 ; GAN이 modes를 적게 생성하는 것은 학습과정에서의 결함때문이지 그것이 divergence때문은 아니라는 것.
Comparision of cost functions
Generator학습은 어떻게 보면 강화학습이랑 유사해보일 수 있다.
왜냐하면, J_G는 학습데이터를 직접적으로 참조하지않는다. 학습데이터에 대한 정보는 오직 discriminator가 배운것을 통해 간접적으로 얻을 수 있다.
이 학습과정과 전통적인 강화학습과 다른 점은 다음과 같다.
-
generator는 reward function output이 아닌 gradients를 관찰한다.
-
reward function is non-stationary (정지된상태) ; reward는 discriminator에 의해 결정되는데 discriminator는 generator의 policy의 변화를 학습한다.
결론적으로 generator의 reward는 D(G(z)) 인 single scalar value이다.
이것은 곧 cost와 같다.
일반적으로 generator자체에서는 cost가 D(G(z))에 대하여 단조감소하는데, 여러 게임 내에서는 다양한 형태로 cost가 더 빨리 감소될수있도록 하고있다. 아래 도표를 보자.
먼저 maximum likelihood와 minimax는 도표왼쪽에서 굉장히 flat한 것을 볼 수 있다. 이 문제가 바로 앞에서 언급했던 학습초기에 gradient가 0에 수렴하는 문제이다.(Heuristic, non-saturating game 여기서 설명함)
Non-saturating heuristic은 휴리스틱하게 이 문제를 해결하였기 때문에 문제가 없다.
그리고 Maximum likelihood는 도표오른쪽에서 갑자기 급격하게 기울기가 떨어지는 것을 볼 수 있다.
즉 거의 절반넘게는 flat한 상태이다가 뒷부분에서 갑자기 gradient가 발생하는 것이다. 이렇게 되면 앞부분의 minibatch는 학습에서 낭비되고 있다고 할 수 있다.
maximum likelihood는 high variance를 가지고 있다.
결론적으로는 variance를 낮추는 기술이 GAN에 성능에 꽤 중요한 영향을 미칠것이라는 것을 말하고 있다.
DCGAN architecture( = Deep, convolution GAN)
거의 오늘날의 모든 GAN은 DCGAN에서 파생되었다.
(DCGAN의 generator의 모습이다)
DCGAN의 특징은 다음과 같다.
- Discriminator와 generator의 거의 모든 레이어에서 batch normalization을 쓴다. 이때 discriminator에서 two minibatches는 서로 따로 normalized됨. 그리고 generator의 마지막 레이어와 discriminator의 첫번째 layer에서는 batch norm을 쓰고 있지않음. 그래야 data distribution의 올바른 mean,scale을 학습할 수 있음.
- 네트워크에서는 pool/unpool을 일절 쓰고있지않음. generator에서 activation map을 확장해야될때는 transposed convolution(=up conv)을 사용하고 있음.
- Adam optimizer 사용
그리고 진짜 generator가 latenet code를 의미있게 사용하는 법을 배우는 것인지를 확인하기 위해 latent space내에서 산술연산을 진행하였다.
선글라스 남자 - 선글라스안낀남자 + 선글라쓰 안낀 여자 = 선글라스낀 여자 가 나왔다.
즉 generator가 모든 representation vector를 어떤 클래스에 속해있는 것 같은 이미지로 올바르게 디코딩하였다는 것을 알수있다.
How do GANs relate to noise-contrastive estimation and maximum likelihood?
이 부분은 NCE가 정확하게 뭔지 잘 몰라서 우선 스킵한다.
Chapter 4 : Tips and Tricks
GAN 학습시 성능을 올릴 수 있는 여러가지 팁과 트릭을 알려준다.
Train with labels
한마디로 말하자면 레이블을 쓰면 생성되는 샘플의 “주관적” 퀄리티가 드라마틱하게 올라간다는 이야기이다.
그 이유는 명확하지는 않다. 아마도 최적화과정에서 유용한 클루를 제공해주기때문인것도 있고, 혹은 사람의 시각체계가 포커싱하는 성질들을 취하도록 뭔가 bias를 주는 것일 수도 있다.
One-sided label smoothing
GAN은 discriminator가 두 밀도간의 비율을 예측하도록하지만, deep neural net은 올바른 클래스에 해당하는 아웃풋 probability를 매우 극단적으로 뽑아내기도 쉽다.
특히 deep net이 adversarially contructed(예시, 분류기가 linear extrapolate하여 extremely confident한 예측을 하는 경향이 있을때) 그럴 수 있다.
즉 위 그림과 같이 어떤 데이터들의 분포의 outlier(파란점)가 모델에 들어올 경우, 모델이 이것을 잘 모른다고 하면 올바른 것인데 외려 그것에 대해 높은 confidence로 결정을 내릴 수 있다.
그래서 discriminator가 보다 soft한 확률을 예측하기 위해서 one-sided label smoothing이라는 걸 쓴다.
즉 일반적으로는 discriminator loss계산시 이렇게 된다면
one-sided smoothing시에는,
이렇게 된다.
즉 discriminator가 극단적으로 큰 로짓(ex. 1에 매우가까운)을 예측하려고 하면 패널티를 주어 다시 값을 낮추도록 하는 것이다.
여기서 중요한 것은 fake label은 스무딩하면 안된다.
(optimal Discriminator function)
만약 β !=0 이면, 이 함수형태가 좀 바뀔수 있다.
극단적인 예시를 들자면, p_data가 엄청 작은 값이고 p_model이 엄청 큰 값일때, D*는 p_model의 가짜 mode 근처에 최고점을 찍을 것이다. 그러면 discriminator가 generator를 이상한 방향으로 자극을 줄수가 있다.
즉 p_data값이 거의 0에 수렴하는 경우라도, 만약 βp_model값이 매우 클 경우, D*는 p_model의 분포로부터 데이터를 생성할 수도 있다.
이렇게 되면 안되는 것이다. 따라서 D*의 함수 형태에 p_model 텀이 남아있으면 이상하게 학습이 될 수 있다는것이 결론이다. 따라서 β는 0이어야함.
아무튼 label smoothing을 쓰면 adversarial examples의 취약성을 낮춰주는데 그것은 즉 discriminator가 generator의 공격으로부터 견디는 법을 효율적으로 배우게 해주기 때문이다.
Virtual batch normalization
batch norm을 사용하는 이유는 모델 optimization을 향상시키기 위함이다. 즉 각 feature의 mean/variance를 그 feature와 연관된 걸로 결정하므로써 모델을 reparameterizing하는 것이다.
그리고 batch norm은 모델의 일부 로써 backprop 단계의 gradient 계산 시 항상 normalized features를 사용할수있도록 한다.
그러나 GAN에서는 batch norm의 부작용이 있다.
normalization을 위한 mean/variance를 구하기 위해서 각각 다른 minibatch를 사용하는 게 결국엔 그러한 normalizing constants에 변동을 초래한다.
이게 무슨말이냐하면, 그림으로 설명하겠다.
이 그림은 generator에서 뽑은 두 미니배치의 샘플들이다.
지금보면 원래는 각 미니배치에 속한 데이터들은 서로 독립적이어야한다. 그런데 지금 같은 미니배치에 속해있다는것만으로도 뭔가 공통점이 생기고 말았다(위에꺼는 오렌지컬러, 아래꺼는 그린컬러).
즉 batch norm이 독립된 input사이에 correlation을 만들어버렸다는 말이 된다.
그말은, 지금 독립적인 latent z codes보다, 미니배치의 mean과 variance의 변동(fluctuations)이 각 이미지에 영향을 더더 끼치고 있다는 것이다.
이 현상은 특히 미니배치 사이즈가 작을 경우에 발생한다.
+) 여기서 부가설명을 추가한다. 미니배치 사이즈가 작을 경우 μ와 σ의 fluctuation이 심해진다고 했는데, 그 이유에 대해서 직관적으로 설명해보겠다.
오히려 반대의 경우인 배치사이즈가 큰 경우를 생각해보면, 한번에 살펴보는 데이터의 양이 늘어나기 때문에 다양한 데이터를 한번에 볼 수 있게 되고, 이때 생성되는 μ와 σ값은, 다른 배치와 비교하였을떄 엇비슷하게 형성이 될것이다.
배치사이즈가 작은 경우, 한번에 보게되는 데이터양이 적어 배치마다 생성되는 μ와 σ값이 다양할 것이고 그 현상을 ‘fluctuation’이 심해진다고 표현하고 있다.
이것의 해결책으로는 Reference batch normalization 이 있다.
Reference batch normalization은 네트워크를 두번 실행한다.
먼저, reference batch라고 학습 시작할때 그때 딱 한번 샘플링된 배치를 만든다.
이 배치를 입력으로 하여 네트워크가 한번 돌아간다.
그리고는 학습하려는 examples를 대상으로 네트워크가 한번 돌아간다.
이때 reference batch의 mean/variance를 normalization에 사용한다.
이 방법의 단점은 모델이 reference batch에 overfit될 수 있다는 것이다.
이것을 해결하기 위해 나온것이 virtual batch normalization이다.
이것은 위의 방식과 일치하지만 배치단위가 아닌 각각의 example 단위로 normalization이 일어난다.
이 두가지 방안은 미니배치 내의 모든 인풋들이 서로 독립적으로 처리될수있도록 해주고, generator로부터 생성되는 샘플들이 independent identically distributed(각각의 random variable이 독립&동일확률분포를 가지는것)하게 해준다.
Can one balance G and D?
이론상으로는 G와 D가 밸런싱이 되는 것이 좋다.하지만 현실은 그렇지 못하다.
GAN이 잘 돌아가려면 data density와 model density의 비율이 잘 예측되어야 되는데, discriminator가 optimal이라는 전제 하에 ratio가 올바르게 예측된다. 따라서 discriminator가 먼저 generator를 압도해야한다.
만약 discriminator가 너어무 정확해서 generator가 힘을 못핀다면? 그 경우는 앞에서 말했던 경우다. 그래서 휴리스틱하게 non-saturating하게 바꿔주었다.
( min(1-D(G(z))를 max D(G(z)로 바꿔줌)
이번에는 만약 generator가 오히려 힘이 너무 쎄다면?그말은 discriminator가 generator에서오는 샘플을 모두 real이라고 판단하는 경우이다. 이런 경우를 해결하기위한 방안이 바로 one-sided smoothing이었다.
결론적으로는 G가 한번 학습할때 D는 최소 2번 이상 학습이 되어야 D가 optimal이 된다는 전제를 달성할 수 있다.
그러나 현실은 그게 쉽지가 않다.
그래서 어떤 사람들은 모델사이즈를 바꿔보자고 제안한다. 보통은 D가 G보다 더 깊고 필터도 더 많이 쓴다.
근데 이러면 mode collapse 문제가 발생할 수도 있다.
generator가 자신의 풀 능력치를 사용하려하지않는것이 mode collapse인데, 이 상태에서 G의 사이즈까지 늘린다면…음..별로 좋을게 없어보인다.
만약 mode collapse문제가 완전히 해결된다면 G의 사이즈를 늘리는것도 고려해볼만하다.