Generative Adversarial Nets(GAN) 논문 리뷰 (1/2)
Ganerative Adversarial Nets
(Ian J. Goodfellow et al.)
이번 논문은 이미지 처리에서 2014년에 발표된 이후 아직까지도 굉장히 많이 연구되고 있는 GAN입니다. 이 논문은 CNN의 개념을 제시했던 얀 르쿤이라는 대가가 최근 10년간 머신러닝 분야에서 최고의 아이디어였다고 극찬할 만큼 획기적이기도 했습니다.
1. 개념소개(Abstract/Introduction)
논문에서 two-player game이라는 용어를 언급하며, 다음과 같은 개념을 제시한다. 쉽게 말해 두 시스템이 서로 싸우면서 같이 발전하는 개념인데,
첫번째는 G로 흔히 Generator라고 하는 데이터를 만들어내는 부분이 있다. "데이터 분포를 찾아낸다(captures the data distribution)"라고 표현하는데 이미지라고 생각한다면 이미지 데이터를 만들어내는 부분이다.
두번째는 D로 Discriminator라고 하는 진짜 가짜를 판별하는 부분이다. 이는 입력으로 들어온 것이 "진짜 사진데이터(sample)"인지 아니면 "G가 만들어낸 가짜 사진"인지를 구분하는 역할을 한다.
이 둘은 서로 싸우면서 발전하는데, 둘 다에겐 이상적인 값이 존재한다. 즉, G의 경우 sample에 있는 진짜사진의 데이터 분포와 굉장히 동일한 데이터를 만들어내서, D가 구분할 수 없을 정도로 정확한 데이터를 만들어내면 된다.
D의 경우에는 실재 사진은 진짜로(1) G를 통해 만든사진은 가짜로(0) 정확하게 구분해내면 되는 것이다.
이러한 개념을 경찰과 위조지폐범의 개념에 많이 비교를 하는데, 위조지폐범(G)은 경찰을 속이기 위해 가짜지폐를 만들고 경찰(D)은 이것을 구분하는 것이다. 위조지폐범(G)은 처음에는 부루마블 돈과 다를바 없는 형편없는 돈을 만들어 내겠지만 점점 트레이닝 하면서 돈과 아주 가까운 것을 만들어낼 것이다.
경찰(D)도 처음에는 색깔만 비슷해도 잘 구분을 못하다가 점점 정교한 지폐로 훈련이 되면서 나중에는 워터마크나 재질까지도 고려하면서 구분하는 능력이 상승할 것이다.
* 다만 여기서 맹점이 있는데 둘 다 형편없는 실력인 상태에서 훈련을 시작한다면 문제가 될 수 있다는 것이다. 애초에 경찰의 실력이 없어 부루마블 머니와 진짜 돈을 잘 구분하지 못한다면 위조지폐범은 자신의 능력이 충분하다고 생각할 수 있는 것이다. 즉, 위조지폐를 정교하게 만들려면 능력있는 경찰이 필수적이라는 것이다. 이를 위해 G를 1스텝 트레이닝 하는동안 D는 여러(k)스텝 트레이닝 하는 방법을 사용한다.
2. 알고리즘(Adversarial nets)
위의 개념으로 트레이닝을 하기 위해서는 loss function을 정의해야 한다.
x : 샘플이미지의 데이터 영역, Pdata(x) : 이미지 데이터들의 확률분포,
z : 제너레이터에 입력되는 노이즈 영역, Pz(z) : 노이즈의 확률분포
이 전체식을 maximize하면, Discriminator의 성능이 개선되는 신경망을 트레이닝 할 수 있다. 판별기가 완벽하게 트레이닝 되어 정확하게 구분을 한다면,
진짜 이미지가 D에 들어갔을 때는 진짜로 구분하고 D(x) = 1
가짜로 만들어진 이미지가 D에 들어갔을 때는 가짜로 구분해서 1 - D(G(z)) = 1
이 되어 이 함수가 max가 되었을 때 이상적으로 작동하는 것이다.
반면 log(1-D(G(z)))부분을 minimize하면 즉, D(G(z))를 1이 되도록 속이게 되면 Generator의 성능이 개선되게 트레이닝 할 수 있다. 결국 둘은 서로 싸우면서 자신의 정확도를 높이게 되고 그렇게 때문에 이를 적대적신경망이라 부르는 것이다.
z : Generator에 입력으로 들어가는 노이즈 영역
x : 진짜 이미지의 데이터 역역
파란점선 : 데이터에 따라 Discriminator가 판단하는 결과(진짜면 1, 가짜면0)
검정점선 : sample 이미지들의 데이터분포
녹색실선 : G에서 만들어진 가짜 이미지들의 데이터 분포
위의 그래프는 트레이닝 과정을 보여주는 것이다. Generator가 z영역의 데이터를 x영역 어딘가로 맵핑하게 되는데, 처음에는 (a)에서 처럼 샘플과는 동떨어진 위치로 맵핑할 것이다. 이때는 Discriminator도 정확하지 않다.
트레이닝을 진행함에 따라 (b), (c)에서 처럼 Generator는 x영역중에 샘플이 있는 영역으로 점점 가까이 맵핑 할 것이고 이 때 Discriminator는 샘플과 생성이미지의 영역을 비교정 정확하게 알고 이를 1과 0으로 구분할 수 있다.
Generator가 이상적인 상태까지 도달한다면, 샘플이미지가 존재하는 영역과 일치하게 되고 Discriminator는 둘을 구분하지 못하고 모든영역에서 1/2로 판별하게 된다.
3. 예시
이를 Fashion-MNIST를 통해 구현해보면, 트레이닝 단계에 따라 Generator의 성능이 다음과 같이 개선되는 것을 확인할 수 있다.
여기까지 이해하셨다면 GAN의 접근 개념에 대해서는 이해를 끝내신 것 입니다. 코딩을 해서 적용하는데 개념적인 부분에서는 어려움이 었을 것 입니다. 이번 1편에서 개념적 부분을 다루었다면 이어지는 "Generative Adversarial Nets(GAN) 논문 리뷰 (2/2)"에서는 이론적 부분인 Theoretical Results에 대해 다루어보겠습니다.