[논문 분석] Generative Adversarial Nets, GAN (NIPS 2014)
들어가면서
이 논문을 읽기 전, 나는 GAN이라는 기술의 정의와 막연한 쓰임 정도만 알고 있었다.
GAN은 생성자와 구분자가 서로 적대적으로 대치를 거듭하며 모델의 성능 향상을 도모하는 방법이다.
도둑과 경찰의 예시에서, 도둑은 위조 지폐를 진짜처럼 만들어내는 ‘생성자’, 경찰은 위조 지폐를 위조라고 판별하는 구분자 역할을 이행한다.
도둑은 경찰의 눈을 속이기 위해 더 진짜같은 위조 지폐를 만들고자 할 것이고, 경찰은 그런 도둑의 꾀에 넘어가지 않기 위해 더욱 면밀하게 검사를 반복할 것이다.
이러한 일련의 과정 속에서, 모델의 성능은 괄목할만한 성장을 거듭하게 될 것이라는 것이 GAN의 핵심 이론이다.
하지만, 대학원 입시를 거치면서 NLP에 이어 컴퓨터 비전의 ‘이미지 생성’ 분야에 관심을 가지게 되면서, 수학적으로 GAN이라는 기술이 어떻게 구현되는지 탐구하고 싶어졌다.
이것은 1대1 턴제 게임 구현에 유용하게 사용되는 minimax 알고리즘과 매우 유사하게 동작한다.
배경
2015년, 분류 모델의 괄목할만한 성장과 반대로, 심층 생성 모델은 매개변수에 따라 가변적인 확률 분포를 처리하는데 애를 먹곤 했다.
매개변수가 다양하게 변함에 따라 우도 기울기 또한 예측하기 어려워졌고, 그에 따르는 수많은 기울기 근사값이 도출었다.
상기 문장이 이해가 어렵다면, 역전파 개념을 숙지하면 도움이 될 것이다!
이러한 배경에 착안하여, 뒤죽박죽인 데이터 분포에 존재하는 까다로운 우도 기울기를 명시적으로 다루는 것이 아닌, 원하는 분포에서만 데이터를 생성하자는 ‘생성 모델’이라는 것이 주목받기 시작했다.
그 해, ‘Generative Stochastic Networks (GSN)’라는 Marcov 모형에 기반한 생성 모델이 탄생하였고, 이후 GSN에서 Marcov 확률 모형의 개념을 제거하고 우리가 아는 요즘의 생성 모델 형태로 진화하게 되었다.
생성 모델: 실존하지 않으나 있을 법한 데이터를 생성할 수 있는 모델이다.
INTRODUCTION
GAN이 등장하기 앞서, 딥러닝은 깊고 풍부한 모델을 만드는 것에 초점이 맞춰져 있었고, 당시 최대 성과는 Dropout과 역전파에 기반한 분류 모델을 고안해낸 것이었다.
반면, 생성 모델은 역전파 과정에 포함되는 MLE 계산 과정의 까다로운 확률 연산때문에 연구 진척도가 매우 더딘 상태였다.
이러한 한계를 타파하고 등장한 것이 바로 GAN이다.
앞서 언급했던 것처럼, GAN에는 두 가지 요소가 존재한다; G(Generator)와 D(Discriminator).
G는 D가 실수할 확률을 최대로 만들어야 하고, D는 그런 G의 시도를 무력화해야 하며, 이러한 반복은 D가 G를 막는 것이 불가능해질 때까지 지속된다.
- G: 가짜 이미지를 진짜로 분류하도록 학습한다 (= 기존 데이터 분포를 잘 근사하도록 학습한다).
- D: 진짜 이미지는 진짜로, 가짜는 가짜로 잘 분류하도록 학습한다.
목적함수에서 D와 G는 서로에게 간접적으로 영향을 주면서 각자 학습을 이어간다 –> 충분한 capacity 有 –> 학습 성능 ↑
G와 D 모두 Multilayer 퍼셉트론을 가지고, 역전파를 통해 학습이 진행된다 (Markov 체인과 같은 확률론적 모형이 필요가 없다).
G는 순전파 과정에서 Multilayer 퍼셉트론에 무작위 noise를 방출하여 새로운 데이터를 생성한다.
- 학습 데이터 분포를 생성 모델이 잘 학습한 후(= 인풋 이미지와 유사하게 모델링 가능), 약간의 noise를 덧대면 다양한 사람 얼굴 사진을 만들어낼 수 있을 것이다.
만약 생성 모델이 학습 데이터(인간의 얼굴 이미지에 존재하는 여러 특성)를 잘 학습했다면, 그러한 학습 데이터 분포와 유사한 새로운 이미지를 잘 생성할 것이다.
여기서, ‘잘 학습했다면’이란 이미지 내에서 각 얼굴 특성(i.e., 코, 입술)을 잘 나타내는 픽셀들에 대한 가중치가 확률론적으로 각각 높게 잘 부여된 것을 의미한다 (= 통계적으로 평균적인 특징을 가지는 데이터를 쉽게 생성할 수 있다).
이후, 생성된 output은 qualitative과 quantitative 방법을 통해 평가가 치뤄진다.
GAN 수식
- V(D, G): 목적 함수(objective function)
- G는 목적함수를 낮추고, D는 높이는 것을 목표한다.
- D: [0, 1] 1에 가까울 수록 입력값이 Real하다.
: 원본 데이터 분포에서 샘플 하나 추출
: noise 분포에서 채취된 각각의 noise를 적용하여 생성한(G) 이미지가 얼마나 진짜같은지(D) 나타내는 척도의 기댓값
궁극적으로, 생성된 이미지가 원본 이미지와 차이가 없어져 D(G(z))은 1/2로 수렴하고, 생성 분포(G)는 기존 데이터 분포에 잘 근사할 것이다.
- 여기서, 1/2이란 0 fake도 아니고 1 real도 아닌 중간지점, 즉 D에 의해 구별 불가능한 상태의 G(z)를 의미한다
GAN 역전파
목적함수는 Convex 형태이기 때문에 역전파 과정에서 빠르게 global optimum에 도달할 수 있다.
[Discriminator]
[Geneator]
GAN 증명 - Global Optimality
순간마다 G와 D가 각각 어떤 순간에 global optima에 도달하는지 조사한다.
전제 1: 고정된 G에 대한 최적의 D
- 첫 째줄: 연속확률분포 공식
- 둘 째줄: dz –> dx 치환
연속확률분포 공식
이후, 목적함수에 미분을 취해서 최대값을 갖는 지점에 대한 x값은 하기와 같다.
- C(G): Convergence(G)로 G가 수렴하는 형태, 즉 최적의 D를 말한다.
해당 논문에서는 의 최댓값 지점의 x값은
이라는 점을 이용해서 상기와 같은 D 최적값을 도출한다.
전제 2: G의 global optimum = D의 global optimum
앞서 최적의 D를 구하는 과정을 통해, 우리는 최적의 G 또한 도출할 수 있다.
하기는 최적의 D를 활용해서 C(G)를 재정의한 모습이다.
For
,
KL Divergence는 단순히 서로 다른 두 확률 분포 간의 차이를 나타낼 뿐, Distance Metric으로써 활용할 수 없기 때문에 JSD를 활용한다.
- Distance Metric은 그 최소값을 0으로 갖는 것이 특징이다.
해당 가정에서는, 원본 분포와 생성 분포가 동일할 때, JSD은 0으로 수렴하고 목적함수의 값이 -log(4)가 되도록 학습한다.
이러한 지점이 바로 해당 논문에서 가르키는 global optimum이며, 이로써 global optimum이 존재함을 증명했다.
JSD
\[D_{JS}(p||q)=\frac{1}{2}D_{KL}(p||\frac{p+q}{2})+\frac{1}{2}D_{KL}(q||\frac{p+q}{2})\]
GAN 알고리즘
Pseudocode를 보면서 이해하는 것이 직관적일 것이다.
여기서, 생성자는 상기 알고리즘 부분에서만 업데이트가 발생하는 모습이다.
그 외 상기 모형에 자세한 설명이 나와있으니, 추가적인 설명은 생략한다.
결과
테스트를 위해 사용된 이미지들은 선별된 데이터들이 아닌 무작위로 뽑힌 것들이다.
노란색 박스가 기존 이미지이고, 그 옆으로 나란히 GAN이 생성한 이미지들이 나열되있다.
이 때, 해당 논문에서는 생성된 이미지들은 따로 모델이 사전에 외워두거나 학습한 것들이 아니라는 점을 강조한다.
또한, 상기 이미지처럼 생성모델이 noise을 덧대면서 latent vector 이미지 형태를 변형하여 아에 다른 숫자를 만들어내는 것도 가능한 모습을 확인할 수 있다.
결과적으로, GAN은 다른 생성모델에 비해 더 또렷한 이미지 생성 능력을 보여주었고, 이후 CycleGAN, StarGAN 등 다양한 확장 버전이 등장하게 되었다.
다음 시간에는 이러한 GAN 기술을 확장하여, 사진에서 사람 얼굴 표정 등을 바꾸는 image-to-image translation 작업을 처리하는 CycleGAN에 대하여 살펴보자.
댓글남기기