논문 정리

[ GAN ]쉽게 이해하는 GAN(Generative Adversarial Network) (1)

강담비 2020. 1. 9. 13:03
반응형

 

 

 

안녕하세요!

오늘 소개드릴 모델은 많이 들어보셨을 GAN(Generative Adversarial Network)입니다!

현재 GAN을 사용한 논문들이 이미 많이 나온 상황이라 여러 편에 나눠서 설명하려 합니다.

 

 

 

이번 포스팅에서는 수식 없이 직관적 이해를 목표로 진행해 보려 합니다~

 

 

 

GAN을 설명하기 위해 항상 나오는 예제가 있습니다. 

그건 바로 위조지폐범과 경찰의 예 인데요.

 

 

 

위조지폐범은 위조지폐를 만드는 역할, 경찰은 위조지폐와 진짜 지폐를 구분하는 역할을 한다고 해봅시다.

 

 

위조지폐범은 경찰의 눈을 속일 최대한 진짜 같은 지폐를 만들려 할 것이고 경찰은 위조지폐와 진짜 지폐를 더 잘 구분하려고 노력할 것입니다. 

 

 

 

GAN에서는 Generator(G)Descriminator(D)라는 개념이 등장하는데요.

 

G가 위조지폐범 역할을 하고 D가 경찰 역할을 한다고 생각하면 됩니다.

 

 

 

GAN의 기본적인 아이디어는 이렇습니다.

 

 

 

먼저 G(위조지폐범)이 위조지폐를 만들어 내면 그 위조지폐와 진짜 지폐를 랜덤으로 D(경찰)에게 보여준 후 진짜 지폐인지 아닌지 판단하게 합니다. 

 

가짜 지폐를 진짜 지폐라고 했으면 G(위조지폐범)가 잘 만들어 낸 것이고 D(경찰)이 잘못 판단한 것이기 때문에 D(경찰)이 더 잘 판단하려고 노력할 것이고(학습), 가짜 지폐를 가짜 지폐라고 했을 경우 G(위조지폐범)가 덜 정교하게 만든 것이기 때문에 G(위조지폐범)가 더 진짜처럼 만들려고 노력(학습)할 것입니다.

 

 

 

이러한 과정들이 반복되면서 G, D가 적대적으로 성장하게 되는 것입니다. 

 

 

출처 : https://www.freecodecamp.org/news/an-intuitive-introduction-to-generative-adversarial-networks-gans-7a2264a81394/

 

위 그림은 MNIST dataset으로 한 그림인데요.

 

마찬가지로 위처럼 랜덤 노이즈를 생성해서 G에 넣어주면  G는 MNIST처럼 가짜 이미지를 만들어 내고 D에 만들어낸 이미지와 진짜 이미지를 넣어서 진짜 이미지인지 가짜 이미지인지 판단하게 만듭니다.

그 결과로 나온 loss가 G, D에 전달되어 학습하게 됩니다.

 

제가 직접 MNIST를 돌려본 결과인데요.

 

 

처음에는 G가 만들어낸 결과가 별로 좋지 않다가 점점 epoch이 올라갈 수록 진짜 이미지처럼 잘 생설하는 것을 보실 수 있습니다.

 

 

 

실제 이미지와 비교해보면 

 

위가 실제 MNIST이미지 이고 밑에가 만들어 낸 이미지 입니다.

 

 

 

여전히 눈으로 구분 가능하지만 더 많은 데이터 혹은 더 많은 epoch를 돌리면 성능이 더 좋아질 것입니다.

 

 

 

이처럼 GAN을 활용하면 트레이닝에 사용된 데이터 셋 같은 이미지를 많이 만들어 낼 수 있습니다.

 

 

 

이 이미지들 모두가 GAN으로 실제 사람처럼 만들어낸 가짜 이미지들입니다.

 

 

 

사람도 판단하지 못할 정도로 진짜 사람 같죠?

 

 

 

여기 GAN의 paper입니다. 참고하세요!!

인용 횟수가 어마어마하네요!!

 

 

https://papers.nips.cc/paper/5423-generative-adversarial-nets.pdf

불러오는 중입니다...
Generative Adversarial Nets

 

다음 포스팅에서는 GAN을 활용한 다른 논문들 리뷰, GAN의 수식적 이해를 주제로 포스팅 해보려 합니다.

 

감사합니다!