BEGAN
15 Nov 2017 | ml generative model참조(여기는 v1논문, 내가 본건 v4논문… condition이 좀 많이 다르다.)
W-distance 설명!! 요걸 기반으로 좀 더 공부해야할 듯..함!
W-gan의 세줄다섯줄 요약!
- distance metric을 통해 probability를 최소화시키고싶음
- KL-divergence를 보통 썼는데… 얘는 불연속에 불편함이 많아서 w_dist를 써보자!
- 얘는 1-lipschitz함수로 sup을 찾는것과 같다.
- 그래서 θ 그대로 놓고 f를 업데이트하고(여러번) 그 f로 θ 업데이트
- Improving W-gan에서는 이것자체도 loss에 넣어버림
Introduction
- GAN의 단점
- 학습이 어려움
- Hyper parameter 잘골라야…
- training을 위한 trick도 많아…
- D, G사이의 밸런스도 맞추기 힘들어…
- Model collapse
- discriminator를 속이는 한 예제만 죽어라 파는 것..
- 학습이 어려움
- 이 논문의 contribution
- 간단하고, 강인한 구조로 빠르고 stable한 수렴을 이룸
- Discriminator와 Generator간의 밸런스를 맞추는 equilibrium concept를 제안함 -> γ
- image의 diversity와 quality간의 trade-off를 조정하는 방법을 제시
- convergence에 대한 approximate measure를 제안함.
Related Work
- DCGAN - CNN으로 트레이닝하는 방법을 제안
- EBGAN - Discriminator를 AutoEncoder(AE)로 제안(사실 Energy based라는데… 그냥 AE가 맞는 듯)
- WGAN - JSD->wasserstein dist로 바꿔서 구현 간소화
- 사실 잘 모르겠다…
Proposed Method(Equilibrium 없이..)
먼저 Equilibrium이 없이 설명한다. 이 이후에 나오니까 걱정 ㄴㄴ
- 기존 GAN은 sample들의 distribution이 잘 matching되도록 트레이닝
- 이를 sample들의 AE-loss의 distribution을 matching하도록 바꿈
- 그리고는 이 loss의 Wasserstein distance의 lower bound를 계산하고,
- 이를 최대화하는 것이 D의 역할
- 반대가 G의 역할
AE-loss 정의
- L:RNx↦R+
그냥 단순히 AE를 거친 input과 output의 pixel별 로스를 구해서 l-1,l-2 norm중에 하나를 취한다.
W-distance
먼저 μ1을 real-image에서의 AE-loss의 distribution, μ2를 generation한 image의 AE-loss의 distribution이라 하자.
W1(μ1,μ2)=infγ∈Γ(μ1,μ2)E(x1,x2)∼γ[|x1−x2|]
- Γ(μ1,μ2): marginal distribution이 μ1,μ2인 모든 joint distribution. (어떤 녀석인지 직감적으로 안와닿는다.. 다음 섹션 참조!)
위 수식이 W-distance라는데 먼저 γ에 대해서 생각해보자.
- γ(x1,x2)∈Γ: transportaion plan
- x1 에서 x2로 얼마나 옮겨야 pu1에서 pu2가 되는지..
- 그 가능한 셋 중에서 한 계획이라 보면 된다.
- 다음 섹션의 첫번째 table을 참조해서 보자. x1=0인 부분에서 0으로 1/6, 1로 2/6을 이동시키고, x1=1인 부분에서 0으로 1/6, 1로 2/6을 이동시키면 최종적으로 pμ2가 된다.
이제 w-distance를 쉽게 정의할 수 있다.
- x1에서 x2로 옮기는 데, 거리를 |x1−x2|로 생각한거지..
- mass * distance를 cost로 보아서..
- 즉 pμ1에서 pμ2로 distance를 만드는데 필요한 가장 적은 cost를 구한 것!
여기에 jensen’s inequality를 쓰면 lower bound를 구할 수 있다.
거창하게 말고… ∑|a|≥|∑a|요렇게만 봐도 쉽지.
W1(μ1,μ2)=infE[|x1−x2|]≥inf|E [x1−x2] | =|m1−m2|(1)
- mn: μn의 mean
이제 이후에는 이 W-distance의 lower bound를 최적화한다
marginal distribution은 같지만 다른 joint distribution의 예
- μ1,μ2가 평균이 1/2, 2/3인 bernoulli distribution을 따른다고 가정해보자
- Γ(μ1,μ2)에는 이런 녀석들이 가능
0 | 1 | pμ1(x1) | |
---|---|---|---|
0 | 16 | 26 | 12 |
1 | 16 | 26 | 12 |
pμ2(x2) | 13 | 23 |
0 | 1 | pμ1(x1) | |
---|---|---|---|
0 | 29 | 518 | 12 |
1 | 19 | 718 | 12 |
pμ2(x2) | 13 | 23 |
GAN objective
드디어 GAN을 어떻게 만들까가 나온다..
- z∈[−1,1]Nz: uniform random samples
- G:RNz→RNx generator
- Discriminator는 (1)번 식을 maximize해야한다.
- |m1−m2|를 maximize
- W1(μ1,μ2)≥m2−m1
- m1→0
- m2→∞
위 내용을 파라미터를 넣은 수식으로 다시쓰면
- θD: Discriminator의 파라미터
- θG: Generator의 파라미터
일 때
- LD=L(x;θD)−L(G(zD;θG);θD)
- Discriminator의 loss는 작게, Generator의 loss는 크게..(GAN이 맨날 그렇지..)
- LG=−LD
이렇게 만들어서 WGAN에서의 한계인 K-Lipschitz 컨디션이 필요없다고 하는데 이건 나중에 시간나면 알아보자.
그리고, 요렇게 만들었는데 여느때와 같이 D가 G를 압도해버리는 문제가 생겼다. 그래서 Equilibrium을 도입한다.
Proposed Method(Final)
E[L(x)]=E[L(G(z))]위의 식이 평형상태라고 본다. 당연히… fake data나 real data나 AE의 loss가 비슷하면 평형이다. 근데 좀 더 condition을 relax해보자.
γ=E[L(G(z))]E[L(x)]BEGAN에서 Discriminator는 두가지 목적을 가진다.
- 진짜 이미지를 잘 AE로 loss 적게 만들기
- G에서 나온 것은 loss를 크게 구분해주기
γ를 작게 세팅하면 진짜 이미지를 잘 decoding하는 것이 목적이며, 따라서 이를 diversity ratio라고 명명했다.
이제 Equilibrium을 넣은 BEGAN의 objective는
LD=L(x)−ktL(G(zD))for θDLG=L(G(zG))for θGkt+1=kt+λk(γL(x)−L(G(zG)))가 된다.
- 맨 처음식
- kt는 0부터 시작한다.
- generator의 loss를 얼마나 discriminator에 반영할지 정한다.
- 두번째 식
- Generator가 처음에 뱉는 것이 더 reconstruction이 잘됨 -> loss 적음
- 세번째 식
- λk : 0.001부터 시작
- proportional control theory에서 왔단다.
- 두려워하지말고 차근차근 뜯어보다…
- 먼저 처음식에서 k가 커지면 discriminator는 generator가 loss를 크게하도록 최적화하는데 가중치를 둔다.
- 이제 세번째 식을 보면 실제 이미지의 loss의 감마배보다 fake 이미지의 loss가 크다면
- 즉 Generator가 잘 못할 것 같으면 -> k값을 줄여서 discriminator가 자기 loss 줄이는데 더 초점을 두도록..
- fake image의 loss가 작으면, (G가 잘하면) -> k값을 늘려서 g를 견제하도록 해준다.
training을 D와 G에 대해 병렬로 수행할 수 있었으며, pretrained된 D에 대해서도 잘 학습이 됐다!(EQ가 잘됨)
Convergence measure
GAN이 학습이 잘됐는지 끝난건지 measure가 없어서 만들어봄!
Mglobal=L(x)+|γL(x)−L(G(z))|- 앞에꺼
- real-image를 얼마나 잘 decoding 하나
- 뒤에꺼
- proportional control error라는데…
요걸 loss처럼 사용해보면 이렇게 잘 된다고 함
마지막으로 모델 사진
나의 생각
- EBGAN에서 AE를 써서 generator의 gradient를 좀 더 세부적으로 조정이 가능했을 것이다.
- loss의 distriution 매칭을 강조했는데 이건 EBGAN을 봐야 알겠다..
- WGAN의 w-distance를 좀 더 파봐야함.
- 다음엔 unrolled-gan을 볼까 생각이 든다. (이유는 아래 코드 구현에…)
code
- 내 깃헙에 BEGAN 코드를 만들어 올렸다.
- mode collapse 문제를 제대로 해결 못했는데 celebA가 다 얼굴이라 피해간 것으로 보이지 않을까 싶다.
- 그래서 fashion-mnist를 가지고 실험했는데 신발만 학습하거나, 옷만 학습하더라…
update
: celebA의 데이터는 얼굴 사이사이의 data가 존재(data distribution이 훨씬 더 continuous)하기 때문에 더 잘되는 것으로 결론냄- 그렇다면 mnist같이 여러개의 class를 가지고 실험하는 경우는 class별로 separable하니까 하나만 학습될 가능성이 높아짐