안녕하세요!
오늘 소개드릴 모델은 많이 들어보셨을 GAN(Generative Adversarial Network)입니다!
현재 GAN을 사용한 논문들이 이미 많이 나온 상황이라 여러 편에 나눠서 설명하려 합니다.
이번 포스팅에서는 수식 없이 직관적 이해를 목표로 진행해 보려 합니다~
GAN을 설명하기 위해 항상 나오는 예제가 있습니다.
그건 바로 위조지폐범과 경찰의 예 인데요.
위조지폐범은 위조지폐를 만드는 역할, 경찰은 위조지폐와 진짜 지폐를 구분하는 역할을 한다고 해봅시다.
위조지폐범은 경찰의 눈을 속일 최대한 진짜 같은 지폐를 만들려 할 것이고 경찰은 위조지폐와 진짜 지폐를 더 잘 구분하려고 노력할 것입니다.
GAN에서는 Generator(G)와 Descriminator(D)라는 개념이 등장하는데요.
G가 위조지폐범 역할을 하고 D가 경찰 역할을 한다고 생각하면 됩니다.
GAN의 기본적인 아이디어는 이렇습니다.
먼저 G(위조지폐범)이 위조지폐를 만들어 내면 그 위조지폐와 진짜 지폐를 랜덤으로 D(경찰)에게 보여준 후 진짜 지폐인지 아닌지 판단하게 합니다.
가짜 지폐를 진짜 지폐라고 했으면 G(위조지폐범)가 잘 만들어 낸 것이고 D(경찰)이 잘못 판단한 것이기 때문에 D(경찰)이 더 잘 판단하려고 노력할 것이고(학습), 가짜 지폐를 가짜 지폐라고 했을 경우 G(위조지폐범)가 덜 정교하게 만든 것이기 때문에 G(위조지폐범)가 더 진짜처럼 만들려고 노력(학습)할 것입니다.
이러한 과정들이 반복되면서 G, D가 적대적으로 성장하게 되는 것입니다.
위 그림은 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의 수식적 이해를 주제로 포스팅 해보려 합니다.
감사합니다!
'논문 정리' 카테고리의 다른 글
[CAM] Learning Deep Features for Discriminative Localization (1) | 2020.01.25 |
---|---|
[DeepLabv3+] Encoder-Decoder with Atrous Separable Convolution for Semantic Image Segmentation (1) | 2020.01.21 |