GAN(Generative adversarial network)

2021. 5. 29. 22:38민공지능/논문

Generative Adversarial Networks

Proceedings of the 27th International Conference on Neural Information Processing Systems 2014 

Ian J. Goodfellow, Jean Pouget-Abadie, Mehdi Mirza, Bing Xu, David Warde-Farley, Sherjil Ozair, Aaron Courville, Yoshua Bengio 

 

 

https://ysbsb.github.io/gan/2020/10/07/Generative-Adversarial-Networks.html

 

GAN 논문 리뷰 - Generative Adversarial Networks (NIPS2014) | mocha's machine learning

안녕하세요. 모카의 머신러닝 입니다. 이번 포스팅은 GAN의 시초가 되는 Ian Goodfellow의 Generative Adversarial Networks 논문에 대해 리뷰합니다. 영어로 된 논문을 한글로 같이 해석하며 논문에서 의미하

ysbsb.github.io

 


<간단 설명>

https://developers.google.com/machine-learning/gan/discriminator

첫 번째 단계에서 Discriminator(판별자)를 훈련한다. train set에서 실제 이미지 배치를 샘플링하고 생성자에서 생성한 동일한 수의 가짜 이미지를 합친다. 가짜 이미지의 label은 0으로 세팅하고 진짜 이미지는 1로 세팅한다. 판별자는 binary(sigmoid) crossentropy를 사용해 한 step 동안 이렇게 label된 배치로 훈련한다. 이 단계에서 역전파는 판별자의 가중치만 최적화한다. 

https://developers.google.com/machine-learning/gan/generator

두 번째 단계에서 Generator(생성자)를 훈련한다. 먼저 생성자를 사용해 다른 가짜 이미지 배치를 만든다. 다시 판별자를 사용해 이미지가 진짜인지 가자인지 판별한다. 이번에는 배치에 진짜 이미지를 추가하지 않고 label을 모두 1(진짜)로 세팅한다. 이는 의도적으로 가짜 이미지를 진짜 이미지로 믿게 만드는 것이다. 이 단계 동안에는 판별자의 가중치를 동결하여 역전파는 생성자의 가중치에만 영향을 미치도록 한다.

 

생성자가 입력으로 받는 것은 판별자를 통해 전달되는 Gradient가 전부다. 판별자의 성능이 좋아질수록 간접 Gradient에 진짜 이미지의 정보가 많이 담겨 생성자의 성능이 크게 향상된다.  


Generator는 가짜 샘플을 생성하고 진짜 샘플과 구분할 수 없게 만들고 싶어 하며,

Discriminator는 진짜 샘플을 진짜로, 가짜 샘플을 가짜로 판별하고 싶어한다.

그래서 이 둘을 경쟁시키면서(Mini-max Game) 서로의 성능을 끌어올려

Generator가 진짜 샘플과 최대한 비슷한 결과물을 만들어내도록 한다.

 

D와 G는 value function V(G, D)라는 두 명의 플레이어가 있는 minmax game을 플레이한다.

https://dongsarchive.tistory.com/31

위의 수식을 G에서는 'min(최소화)'시키는 방향으로, D는 'max(최대화)'하는 방향으로 가게하는 것이다.

즉, D입장에서 위의 손실 함수는 큰 값을 가질수록 성능이 좋으며 G입장에서는 작은 값을 가질수록 성능이 좋다.

 

Discriminator

https://www.youtube.com/watch?v=odpjk7_tGY0

Generator

https://www.youtube.com/watch?v=odpjk7_tGY0

 


https://arxiv.org/pdf/1406.2661v1.pdf

처음 Generator가 생성한 결과물은 엉터리다. 이러한 엉터리 결과를 보고 Discriminator는 아주 쉽게 가짜라고 판별할 수 있다. 따라서, 학습 초기에 D(G(z))의 값은 0에 가깝다. (binary crossentropy를 사용해서 진짜면 1, 가짜면 0으로 판별)

 

https://www.slideshare.net/NaverEngineering/1-gangenerative-adversarial-network

log(1-x)에서 x에 0과 가까운 값을 대입하면 기울기의 절댓값이 생각보다 작다.

https://www.slideshare.net/NaverEngineering/1-gangenerative-adversarial-network

log(x)에서 x에 0에 가까운 값을 대입하면 기울기가 거의 무한대가 된다. 이는 Dicriminator가 초기에 가짜라고 확신하는 상황에서 최대한 빨리 벗어나게 해 주며 Dicriminator가 어느 정도는 헷갈리게 만든다. 

GAN의 loss 최적화 시 "미분값", 즉 기울기를 이용한 오차역전파 방법을 사용하여 log(1-x)를 최소화 하기 보다는 log(D(G(z))를 최대화하여 수렴이 빠르도록 해준다.

 

https://www.youtube.com/watch?v=AVvlDmhHgC4&t=695s

 

https://wegonnamakeit.tistory.com/54

 

 

 

참고한 링크 :

http://cs231n.stanford.edu/slides/2017/cs231n_2017_lecture13.pdf

https://dongsarchive.tistory.com/31

 

Generative Adversarial Nets (1)

Generative Adversarial Nets (1) paper download 오늘은 2014년에 Ian Goodfellow가 발표한 논문인 Generative Adversarial Network(이하 GAN)에 대해서 리뷰해보려 합니다. 기존의 생성모델들에 비해 월등한 성..

dongsarchive.tistory.com

 

 

 

* LSGAN

https://leechamin.tistory.com/227

 

[논문읽기] 09. LSGAN

< LSGAN : Least Squares Generative Adversarial Networks > " style="clear: both; font-size: 2.2em; margin: 0px 0px 1em; color: rgb(34, 34, 34); font-family: "Roboto Condensed", Tauri, "Hiragino Sans..

leechamin.tistory.com