Processing math: 100%

BEGAN

|

참조(여기는 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:RNxR+
  • AE-loss.png 그냥 단순히 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)γ[|x1x2|]

  • Γ(μ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로 옮기는 데, 거리를 |x1x2|로 생각한거지..
    • mass * distance를 cost로 보아서..
    • pμ1에서 pμ2로 distance를 만드는데 필요한 가장 적은 cost를 구한 것!

여기에 jensen’s inequality를 쓰면 lower bound를 구할 수 있다.

거창하게 말고… |a||a|요렇게만 봐도 쉽지.

W1(μ1,μ2)=infE[|x1x2|]inf|E [x1x2] | =|m1m2|(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:RNzRNx generator
  • Discriminator는 (1)번 식을 maximize해야한다.
    • |m1m2|를 maximize
    • W1(μ1,μ2)m2m1
    • m10
    • 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는 두가지 목적을 가진다.

  1. 진짜 이미지를 잘 AE로 loss 적게 만들기
  2. 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처럼 사용해보면 이렇게 잘 된다고 함 gs.png


마지막으로 모델 사진

Model.png

나의 생각

  • 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하니까 하나만 학습될 가능성이 높아짐