Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Generative Adversarial Nets #8

Open
chullhwan-song opened this issue Jun 28, 2018 · 1 comment
Open

Generative Adversarial Nets #8

chullhwan-song opened this issue Jun 28, 2018 · 1 comment
Labels

Comments

@chullhwan-song
Copy link
Owner

chullhwan-song commented Jun 28, 2018

@chullhwan-song
Copy link
Owner Author

chullhwan-song commented Oct 22, 2018

Adversarial nets

  • Generator의 기본개념은 Generator가 Real 데이터 x와같은(유사한) distribution Pg를 하도록 만드는것(learning)
  • 이를 다시, image 에서 image 으로 매핑되록 학습
    • z는 latent, noise data > Generator의 입력값.
    • G는 image를 가지는 neural network로 학습
  • 이렇게 발생된 Generator의 output를 입력값 또는 Real Data X를 번갈아가면서 입력값으로 받는 image, discriminator(판별자)를 학습한다.
    • D는 실제데이터와 Generator의 output을 판별하는 역할
    • D는 G와 마찬가지로 파라메터 image 를 가지는 neural net이다.
  • 정리해서, D는 Real Data x와 G사이를 판별하는데, D와 G사이는 minmax game 하는 image 정의한다.
  • 이는, 다음과 같은 수식으로 나타낸다.
    image
    • 이는 D와 G 사이에, D는 실제 데이터의 판결 결과가 image 가 높은 결과(image)가 나오길 원하고, G입장에서 판별기 D가 속아주길 바라는 결과(image)가 나오길 원한다는 의미 - 그래서, Adversarial(적대적, 대립적인.) 이란 단어(의미)가 나왔다.
    • 이를 설명하기 위해, 다음 그림이..
      image
      • 위에 설명한 내용을 아주 이해하기 좋게 잘 그려놓았는데 부연을 좀 하자면, 먼저 검은 점선이 orginal data distribution(real data, 위조가 아닌), 파란 점선이 D distribution(판별자), 녹색 선이 G distribution이다. 밑에 x와 z선은 각각 x와 z의 domain을 나타내며, 위로 뻗은 화살표가 x=G(z)의 mapping을 보여줌.
      • (a)와 같이 p_g가 p_data가 초기에 전혀 당연히 다르다는것을 보여줌.
      • 그 후, D가 두 distribution을 구별하기 위해 학습을 하면 (b)와 같이 좀 더 smooth하고 잘 구별하는 distribution 으로 학습
      • 이후 G가 현재 D에 의해 구별하기 어려운 방향으로 학습을 하면 (c)와 같이 좀 더 p_g가 p_data와 가까워지게 되고
      • 이런 식으로 쭉 학습을 반복하다 보면 결국에는 p_g=p_data가 되어 discriminator가 둘을 전혀 구별하지 못하게 된다. 즉, D는 결국, image = image 로 수렴되는 형태가 될꺼고, Generator가 100% 이기는 상황( image) 은 D(x)=1/2인 상태가 된다는 것.
      • 이미지 클릭 관련 동영상
        click video
  • 여기서 언급하것이 있는데, 초기에 G에서 생성된 이미지는 D가 판별하기에 너무 쉬우므로, 학습자체가 안되는 케이스 발생 이를 위해 G는 어느정도 학습하고 , D와 같이 재 학습하는 형태로.
  • 그래서 한눈에 보기 좋은 웹에서 그림들을 찾아봤다. 대충 다음 그림들이 들어왔다. 모두 같은 개념이다.
    image
    image
    image
    image
    image

Theoretical Results

  • 우리는 수식 1를 optimze하기 위해서 다음 알고리즘(back-pro)을 수행한다.
    image

Global Optimality of image

  • 실제 GAN의 목적은 D가 G를 위조라고 판별하도록 하는게 아니라, G가 D를 속일수 있도록 학습하는게 최종 목적이다.

  • 이 조건이 바로, image

  • 앞에서 잠깐 언급했떤거와 같이 이 조건이 만족하기위한 수식 이고 이는 1/2 값을 가진다.
    image

    • 참고로 위 수식은 다음과 같이 정리
      image
  • 이를 증명하는 것은 학습동안 주어진 G에 대해 D가 image를 maximize하는 것이다.
    image

    • G가 실제 Real Data처럼 만드는것.ㅎ
    • 두번째 수식에서, 위의 조건에서, image 가 real data x 가 되버린것을 볼수 있다.
  • 다시, 수식 1를 위의 개념( =G가 D를 속일수 있도록 학습) 으로 표현하면,
    image

  • 이제 다시 생각해보면, 어떤 데이터 셋 (도메인) X가 있고, 어떤 Z가 어떤 행위(G)를 통해 X와 비슷해지는 행위라 정의된다. 다시, X의 확률 분포와 G(Z)확률 분포가 비슷해지는 개념(?) > X의 분포와 유사한 확률분포를 찾는 What?/개념 > 이는 data(X)와 model(G(Z))사이의 KL divergence를 최소화하는 것을 의미 >
    보통 이런 개념에선 KL divergence 개념이.ㅎ

  • https://github.com/yjucho1/articles/edit/master/fromGANtoWGAN/readme.md 참고하여 설명.

    • KL(Kullback - Leibler) divergence : p 분포가 다른 분포 q와 얼마나 떨어져 있는지를 측정
      image
      • KL는 p(x)==q(x)일때 최소값 zero를 갖습니다. KL divergence는 비대칭적인 형태라는 점을 기억해두시길 바랍니다. 또한 p(x)가 0에 가깝고 q(x)가 non-zero일 경우, q의 효과는 무시됩니다. 이로 인해 두 분포를 동등하게 사용하여 유사도를 측정하고자 할때 잘못된 결과를 얻을수 있습니다.
    • JS(Jensen-Shannon) Divergence : 두 분포의 유사도를 특정하는 다른 메트릭을 이용하여 [0, 1] 사이값를 갖도록함. 이는 대칭적이어서 Smooth한 특징.
      image
  • 일단 위의 개념을 보고, ㅎ 100% 설명에 자신 없으므로 일단 업데이트 할때까지 논문을 발췌, 바로 위의 개념을 다음과 같이 표현가능하다.
    image

  • G와 D 모두 최적값일때, pg = pr이고, D*(x)=1/2가 되어 손실함수는 -2log2
    image

  • JS divergence를 적용하여 pr과 pg 사이의 JS divergence는 아래처럼 계산
    image

    • 즉, 핵심은 discriminator가 최적으로 학습되었을때 GAN의 손실함수는 데이터에 의해 생성된 분포 pg와 실제 샘플데이터의 분포 pr 사이의 유사도를 JS divergence로 정량화하는 것과 같습니다. 실데 데이터 분포를 모사하는 최적의 G*는 최소값으로 L(G*, D*) = -2 log2 가 됩니다.
    • GAN의 변형체 : 서로 다른 목적의 문제 상황을 풀기 위한 GAN의 다양한 변형체들이 존재합니다. 예를 들어 semi-supervised learning에서 discriminator가 fake (label : K)를 구분하는 것뿐만아니라 실제 클래스 라벨(label : 1, ..., K-1)를 구분하도록 학습시키는 구조가 있습니다. 이때 generator의 목적은 K보다 작은 값으로 분류되도록 하여 discriminator를 속이는 것
  • 위식을 다음과 같이 풀어본다.
    image

Convergence of Algorithm 1

image

  • 사실 개념은 p(x) == p(G(z)) 가 같아야 수렴된다는 건데 이전에 많이 언급되었음.
  • 실제 여기서 설명하려는 것은, 이 같은 개념이 실제(practical)적으로, 코딩하려면..ㅎ, 이 개념이 실제 neural network에서 가능하다란것..

실험

  • 많이들 알고 계시니 그림만..
    image
    image
    image

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

1 participant