안녕하세요.
새롭게 (paper + code) review라는 항목을 만들었고, 여기에 하나하나 글을 채워나갈 예정입니다.
블로그 글에는 논문의 내용을 조금 더 디테일하게 정리하면서 나름대로 저의 생각을 얹어서 정리할 예정이고
그와 동시에 code의 세부적인 사항들도 함께 review하면서 논문 정리 글 + 해당 논문 코드 review로 해서
논문 내용과 코드를 하나의 set로 작성하는 식의 포멧을 이용해 논문을 정리해볼 예정입니다.
그래서 게시판의 이름을 (paper + code) review 라고 짓게 되었습니다.
물론 최신 논문들을 다루는 것도 좋지만, 개인적인 생각으로는 최근 모델은 대부분 과거의 모델을 기반으로 이를 더 좋게 향상한 것이므로
오히려 뿌리, 근본에 해당하는 모델들에 대해서 디테일하게 정리를 하는 것이 중요하지 않나 라는 생각을 했습니다.
물론 너무나도 유명한 모델들은 저 또한 이 모델이 어떤 컨셉이고 어떻게 쓰이는지 등의 개략적인 내용은 알고 있지만
단순히 모델만 아는 것 외에 논문을 자세히 들여다보고 코드를 세세히 보는 것을 통해 얻을 수 있는
또 다른 insight가 존재한다고 생각합니다. 그래서 개인적으로는 논문을 조금 디테일하게 다루는 걸 좋아하는 편이고요.
이번 글에서는 너무나도 잘 알려진 모델인 Generative Adversarial Nets(GAN)을 정리해봅니다.
아무래도 2014년에 나온 논문이고 하다 보니, 그 이전에 사용되던 모델들이 나오고 해서 모든 것을 100% 소화하기가
사실은 조금 어려운 논문이라는 생각이 들었습니다. 하지만 조금이라도 더 완벽하게 이해하려고 노력을 해봤습니다.
논문 주소: arxiv.org/abs/1406.2661
Abstract
이번 논문에서는 데이터 분포를 포착하는(capture) 생성 모델(generative model)인 $G$와 샘플이 $G$에서 나왔다기보다는 학습 데이터로부터 나왔을 가능성을 추정하는 식별 모델(discriminative model) $D$의 두 모델을 동시에 학습하는 adversarial process를 통해 생성 모델을 추정하는 새로운 framework를 제안한다.
$G$에 대한 학습 절차는 $D$의 확률이 실수를 만들어낼 확률을 최대화하는 것을 통해 이루어진다.
이러한 framework는 minimax two-player game에 대응된다. 임의의 함수 $G$와 $D$의 공간에서 유일한 해는 존재하며 이때 $G$는 학습 데이터 분포를 회복하고(recover) $D$는 모든 곳에서 $1/2$이다.
$G$와 $D$가 multilayer perceptron으로 정의될 때, 전체 시스템은 backpropagation을 가지고 학습될 수 있다.
학습할 때나 샘플을 만드는 동안에는 Markov chains이나 unrolled approximate inference network를 필요로 하지 않는다.
실험에서는 생성된 샘플에 대한 정량적, 정성적 평가를 통해 framework의 잠재력을 검증하였다.
1. Introduction
딥러닝의 가능성은 자연스러운 이미지, speech를 포함하고 있는 오디오 파동, 자연어 말뭉치에서의 symbol과 같은 인공지능 어플리케이션에서 마주할 수 있는 다양한 데이터들에 대해서 확률 분포를 나타낼 수 있는 풍부하고 계층적인 모델을 발견하는 것이다.
지금까지, 딥러닝에서의 가장 현저한 성공은 discriminative model과 관련되어 있어 왔으며, 보통 고차원의, 풍부한 센서 input을 class label로 mapping 하는 모델들이다. (흔히 얘기하는 분류 모델을 생각하시면 편합니다.)
이러한 현저한 성공은 주로 backpropagation과 dropout 알고리즘에 기반해왔으며, 특히 잘 작동하는(well-behaved) gradient를 가지는 piecewise linear units을 사용했다. (piecewise linear unit은 구간이 나눠져 있는 선형 함수, 대표적으로 RELU와 같은 함수를 의미합니다.)
Deep generative models은 적은 영향력을 가지고 있었는데, 이는 최대 우도 추정(maximum likelihood estimation)과 이와 관련된 전략에서 발생하는 다루기 곤란한 확률적 computation을 근사하는 것이 어려웠기 때문이며 piecewise linear units의 이점을 generative context에서 활용하기가 어려웠기 때문이다.
우리는 이러한 어려움들을 회피하는 새로운 생성 모델 추정 절차를 제안한다.
제안된 adversarial nets framework에서, generative model은 적(adversary)에 대해서 pitting 된다.
discriminative model은 샘플이 모델 분포에서 왔는지, 혹은 데이터 분포에서 왔는지를 결정하도록 학습한다.
generative model은 위조지폐를 만드려고 노력하고 이를 들키지 않고 사용하는 위조범과 비슷하다고 생각되어질 수 있으며
discriminative model은 위조 지폐를 발견하려고 노력하는 경찰과 비슷하다.
이 게임에서의 경쟁은 위조범과 경찰 모두 가짜가 진짜 지폐와 구별될 수 없을 때까지 각자의 방법을 향상한다.
이 framework는 많은 종류의 모델과 최적화 알고리즘을 위한 구체적인 학습 알고리즘을 만들어낼 수 있다.
이번 논문에서, 우리는 generative model에 random noise를 통과시켰을 때 multilayer perceptron을 통해 샘플들을 생성해내는 특별한 케이스에 대해서 탐구하며, discriminative model 또한 multilayer perceptron이다.
우리는 이러한 특별 케이스를 adversarial nets라고 부른다.
이런 경우에, 우리는 양쪽 모델을 매우 성공적인 backpropagation과 dropout algorithm만을 사용하여 학습할 수 있으며, generative model로부터 forward propagation만 사용하여 샘플을 만들 수 있다. (forward propagation이란 한국어로는 순전파라고 부르는데, input에 어떤 것을 투입하여 layer들을 거쳐 output을 뽑아내는 것을 의미한다고 이해하시면 됩니다.)
approximate inference나 Markov chain이 필요하지 않다.
2. Related work
잠재 변수를 이용한 directed graphical model에 대한 대안은 restricted Boltzmann machines(RBMs)나 deep Boltzmann machines (DBMs) 및 수많은 변형들과 같은 잠재 변수를 이용한 undirected graphical model이다.
이러한 모델들 내에서의 상호작용은 unnormalized potential function의 곱으로 제시되며, 랜덤 변수들의 가능한 상태에 대한 전역 합이나 전역 적분에 의해서 정규화된다. (확실하진 않지만, Bayes' theorem에서 분모가 normalize 하는 역할을 해주는 것과 유사한 의미인 것 같습니다...)
이 양(partition function)과 이에 대한 gradient는 가장 trivial instance 외에는 모두 intractable이며, 그들은 Markov chain Monte Carlo (MCMC) method에 의해서 추정될 수 있다. Mixing은 MCMC에 의존하는 학습 알고리즘에 중요한 문제를 제기한다.
Deep belief networks (DBNs)는 하나의 undirected layer와 여러 개의 directed layers를 포함하고 있는 하이브리드 모델이다. Fast approximate layer-wise 학습 기준이 존재하긴 하지만, DBN는 undirected model과 directed model 모두와 연관된 연산적 어려움을 초래한다.
Score matching이나 noise-contrastive estimation (NCE)와 같이 log-likelihood의 한계치를 정하지 않거나 근사하지 않는 대안적 기준 또한 제안되어 왔다. 두 가지 모두 정규화 상수까지 학습된 확률 밀도를 분석적으로 지정해야 한다.
DBNs나 DBMs처럼 여러 층의 잠재 변수를 가지고 있는 다양한 흥미로운 generative models에서, 계산 가능한 unnormalized 확률 밀도를 끌어내는 것은 불가능하다.
Denoising auto-encoders나 contractive autoencoder와 같은 어떤 모델들은 RBMs에 적용된 score matching과 매우 유사한 학습 규칙을 가지고 있다.
NCE에서는, 이번 연구처럼 discriminative 학습 기준은 generative model을 fitting 하기 위해서 사용된다.
하지만, 별도의 discriminative model을 fitting 시키기보다는, generative model 자체가 고정된 노이즈 분포로부터 나온 샘플을 구별하는 데 사용된다.
NCE는 고정된 노이즈 분포를 사용하기 때문에, 모델이 관측 변수의 작은 부분 집합에 대해 근사적으로 올바른 분포를 학습한 후에는 학습 속도가 크게 느려진다.
마지막으로, 몇몇 기법들은 확률 분포를 명시적으로 정의하는 것을 포함하는 게 아니라 오히려 희망하는 분포로부터 샘플을 뽑기 위해 generative machine을 학습시킨다.
이 접근법은 이러한 machine들이 backpropagation에 의해서 학습되도록 설계될 수 있다는 이점을 가지고 있다.
이러한 분야에서의 저명한 최근 연구는 generative stochastic network (GSN) framework를 포함하며, 이는 generalized denoising auto-encoder를 확장하는 것이다.
둘 다 parameterized Markov chain을 정의하는 것으로 볼 수 있으며, 이는 즉 generative Markov chain의 한 단계를 수행하는 machine의 파라미터들을 학습한다.
GSNs와 비교했을 때, adversarial nets framework는 샘플링을 위해 Markov chain을 필요로 하지 않는다.
Adversarial nets가 생성하는 동안에 feedback loop를 필요로 하지 않기 때문에, 이들은 더더욱 piecewise linear units을 더 잘 활용할 수 있으며 이는 backpropagation의 성능을 향상하지만 feedback loop 안에서 사용되었을 때는 unbounded activation의 문제점을 가지게 된다.
Back-propagation을 이용해서 generative machine을 학습시키는 더 최근의 예시들은 auto-encoding variational Bayes와 stochastic backpropagation의 최근 연구들을 포함한다.
(개인적인 생각으로는, 워낙 예전 모델들에 대한 설명이라서 모든 걸 다 이해하기는 어려운 것 같습니다. )
3. Adversarial nets
Adversarial modeling framework는 모델들이 둘 다 multilayer perceptron이면 적용하기에 더욱 직관적이다.
Generator의 분포 $p_g$를 데이터 $x$에 대해서 학습하기 위해서, input noise variables $p_z(z)$에 prior를 정의하고 data space로의 mapping을 $G(z; \theta_g)$로 표현하며 $G$는 parameter $\theta_g$를 가지는 multilayer perceptron으로 표현되는 미분 가능한 함수이다.
그다음으로 single scalar를 결과로 내는 두 번째 multilayer perceptron $D(x; \theta_d)$를 정의한다.
$D(x)$는 $x$가 $p_g$보다 data로부터 나왔을 가능성을 나타낸다.
우리는 $D$를 training examples와 $G$로부터 나온 샘플 모두에게 올바른 label을 할당할 확률을 최대화하기 위해 훈련한다.
동시에 $G$가 $log(1-D(G(z)))$를 최소화하도록 학습한다.
다시 말해서, $D$와 $G$는 다음의 two-player minimax game을 가치 함수 $V(G, D)$를 가지고 진행하게 된다.
다음 논문의 내용을 전개하기 전에, 먼저 GAN의 가치 함수 $V(D, G)$에 대해서 정리를 하고 넘어가겠습니다.
결국 이 가치 함수가 $D$와 $G$ 관점에서 지향하는 방향성이 무엇인지를 파악하는 것이 해당 논문의 가장 핵심이라고 생각합니다.
먼저 $G$ 관점에서 살펴보겠습니다.
$G$ 관점에서는 해당 가치 함수를 minimize 하는 것이 목표이며, Equation 1에서 존재하는 두 항 중에서 실제로 $G$와 관련이 있는 항은 두 번째 항이므로, 두 번째 항을 통해서 $G$가 지향하는 목표가 무엇인지 확인해보겠습니다.
먼저, $E$의 아래 첨자로 들어가는 $z$는 noise입니다. $E$를 표시했으므로, noise 분포인 $p_z(z)$에서 나온 noise $z$에 대해서 해당 값의 기댓값을 계산하겠다는 의미입니다.
다음으로, log 안쪽의 식을 보겠습니다.
$log(1-D(G(z)))$라고 적혀 있는데, $D(G(z))$를 $x$로 치환한다고 하면 결국 이 식은 $log(1-x)$가 되는 것이죠?
즉 $log(1-x)$를 최소화하는 것이 목표라는 것입니다. $log(1-x)$라고 했을 때 바로 그래프가 떠오르시는 분도 계시겠지만, 기억이 안 날 수 있으니 그래프를 들고 와 보겠습니다.
해당 그래프에서 함숫값이 가장 작아지려면 어떻게 되어야 할까요?
$x$가 1에 가까워지면 함숫값이 매우 작아지게 됩니다. 즉, $D(G(z))$가 1이 되어야 합니다.
$D(x)$는 앞에서도 언급했지만, $D(x)$는 $x$가 $p_g$보다 data로부터 나왔을 가능성을 나타냅니다.
즉, $D(G(z))$는 noise $z$를 입력으로 받아서 $G$를 통해 나오게 된 결과를 입력으로 받았을 때, 이것이 $p_g$보다 data로부터 나왔을 가능성을 나타냅니다.
$D(G(z))$가 1이 된다는 것은, $D$가 해당 데이터를 data로부터 나왔다고 판단할 수 있을 정도로 $G$가 정말 감쪽같은 결과를 만드는 것을 의미합니다.
맨 처음의 예시에서 $G$는 위조지폐범이였고, $D$는 위조지폐를 발견하려고 노력하는 경찰이라고 비유했었는데 $D(G(z))$가 1이 된다는 것은 경찰이 완전히 속을 정도로 위조 지폐범이 완벽한 위조 지폐를 만들었음을 의미합니다.
다음으로는 $D$ 관점에서 보겠습니다.
$D$는 가치 함수 $V(D, G)$의 두 항에 모두 포함되어 있으므로, 두 항을 모두 살펴보겠습니다.
$D$는 가치 함수 $V(D, G)$를 최대화하는 것을 목표로 하고 있으며, 두 항의 합이 최대가 되려면 결국 각 항들이 최댓값을 가져야 합니다.
방금 봤었던 두 번째 항을 먼저 살펴보겠습니다.
$log(1-D(G(z)))$에서 $D(G(z))$를 $x$로 치환한다면, 아까와 동일하게 결국 $log(1-x)$를 다루는 문제가 됩니다.
따라서, $D$ 입장에서는 해당 식을 최대로 하고 싶어 합니다.
그렇다면 어떻게 해야 $log(1-x)$가 최댓값을 갖게 될까요? 당연히 $x$의 값을 최대한으로 낮춰주면 됩니다. (위의 그래프 참고)
하지만, $x$는 $D(G(z))$로, 어떤 input값이 어떤 분포로부터 나왔는지를 판단한 값으로, 해당 값은 0부터 1 사이의 값을 갖게 됩니다. 따라서, $log(1-x)$의 그래프에서 정의역이 [0, 1]인 상황을 생각해야 된다는 것이죠.
이렇게 된다면, $x$가 0이 되었을 때, $log(1-x)$가 최댓값을 갖게 되며 이는 $D(G(z))$가 0이 되는 것을 의미합니다.
$D(G(z))$가 0이 된다는 것은, noise $z$를 입력으로 받아서 $G$가 만들어낸 결과를 $D$ 입장에서 판단했을 때 이것이 $p_g$에서 나왔다고 정확하게 판단함을 의미합니다.
앞의 비유를 가지고 생각해보자면, 위조지폐범이 만들어낸 위조지폐를 보고 경찰이 이것은 100%로 위조지폐다!라고 완벽하게 판단하는 경우를 의미합니다.
다음으로는, 가치 함수의 첫 번째 항을 살펴보겠습니다.
$E$의 아래 첨자로 들어간 $x$는 우리가 가지고 있는 실제 데이터를 의미합니다.
다음으로, 최대로 만들고 싶은 식이 바로 $logD(x)$인데요, 이번에는 $logx$ 그래프를 보겠습니다.
아까 얘기했지만, $D(x)$ 값은 [0, 1]에서 값을 갖게 됩니다. 따라서, $logx$ 그래프에서 정의역이 [0, 1]인 경우를 의미하는 것이죠.
이는 $x$가 1일 때 최댓값을 가지게 되며, 이는 $D(x)$가 1이 됨을 의미합니다.
앞의 비유를 이용해서 설명해보자면, 실제 지폐를 보고 경찰이 정확하게 이 지폐가 실제 지폐임을 알아맞히는 것을 의미하는 것이죠.
지금까지 설명한 내용을 정리하자면, 가치 함수를 통해서 알 수 있는 사실은
$G$의 목표는 위조지폐를 감별하는 경찰이 못 맞출 정도로 매우 정교한 위조 지폐를 만들어내는 것을 목표로 한다.
즉, $D(G(z))$가 1이 되도록 학습하는 것이 $G$의 목표가 된다.
$D$의 목표는 위조지폐는 위조지폐라고 감별하고, 실제 지폐는 실제 지폐라고 정확히 분류하는 것을 목표로 한다.
즉, $D(x)$는 1이 되도록, $D(G(z))$는 0이 되도록 학습하는 것이 $D$의 목표가 된다.
다음 section에서는 adversarial nets에 대한 이론적인 분석을 제시하며, 기본적으로 non-parametric limit에서 $G$와 $D$가 충분한 capacity를 제공받기 때문에 학습 기준이 adversarial nets가 data generating distribution을 복구하도록 허용함을 보여준다.
해당 접근법에 대한 덜 공식적이지만 더욱 교육학적인 설명인 Figure 1을 참고하자.
실제로, 우리는 이 게임을 반복적이고 수학적인 접근법을 사용하여 실행해야 한다.
$D$를 학습 내부 loop에서 완성에 가까이 최적화하는 것이 computationally prohibitive 하며, 유한한 데이터셋에서는 과적합을 야기하게 된다.
그 대신에, 우리는 $D$를 최적화하는 $k$단계와 $G$를 최적화하는 1단계를 번갈아 진행한다.
이는 $D$가 이것의 최적해 근처에 있도록 유지되는 결과를 만들며, 그동안 $G$는 충분히 느리게 변화한다.
이러한 전략은 학습의 내부 loop의 일부분으로써 Markov chain에서 burning 하는 것을 회피하기 위해 SML/PCD 학습이 one learning step에서부터 다음 learning step까지 Markov chain으로부터의 샘플을 유지하는 방법과 유사하다. (아무리 봐도 여기서 burning의 의미를 알 수가 없네요...)
해당 절차는 Algorithm 1에 나와있다.
실제로, Equation 1은 아마 $G$가 잘 학습하기 위해 충분한 gradient를 제공하지 못한다.
학습 초기에, $G$가 잘 못할 때, 생성된 샘플들이 training data와 분명하게 다르기 때문에 $D$는 높은 confidence로 샘플들을 거절할 수 있다.
이러한 경우에, $log(1-D(G(z)))$는 saturate 된다.
$log(1-D(G(z)))$를 최소화하기 위해 $G$를 학습하는 것 대신에, $logD(G(z))$를 최대화하도록 $G$를 학습할 수 있다.
이러한 목적 함수는 $G$와 $D$의 dynamics의 동일한 고정된 지점의 결과를 낳지만, 학습 초기에 더욱 강력한 gradient를 제공한다.
위 단락에서 설명한 내용은 다음과 같은 그림으로 이해해볼 수 있습니다.
학습 초기에는, $G$가 누가 봐도 위조지폐처럼 생긴 샘플들을 만들기 때문에 $D(G(z))$가 매우 작은 값이 나오게 됩니다.
따라서, 기존 가치 함수처럼 $log(1-D(G(z)))$를 최소화하도록 한다고 가정하면 오른쪽에 있는 그림처럼 Gradient의 값이 매우 작은 값을 갖게 됩니다. (접선의 기울기가 gradient라고 생각해주시면 이 값이 매우 작음을 알 수 있습니다. 해당 그래프에서의 $x$는 $D(G(z))$이며, 이 값이 0.1라고 생각하고 접선을 오른쪽과 왼쪽 그래프에 만들었습니다.)
하지만 이를 $log(D(G(z)))$를 최대화하는 것으로 만들게 되면, 왼쪽 그림에서 보이듯이 $D(G(z))$가 작은 값을 가질 때도 Gradient의 값이 매우 큰 값을 가지는 것을 알 수 있습니다.
이러한 방법을 통해 $G$가 학습 초기 단계에서 좋지 못한 샘플을 만들 때도 원활하게 학습이 이루어질 수 있도록 할 수 있습니다.
위의 Figure 1은 Generative adversarial nets가 학습되는 과정을 나타내고 있습니다.
Generative adversarial nets는 데이터 생성 분포(검은색 점선) $p_x$에서 나온 샘플을 generative distribution $p_g(G)$ (녹색 실선)에서 나온 샘플로부터 구별하기 위해 discriminative distribution($D$, 파란색 선)을 동시에 업데이트시키면서 학습하게 된다.
아래쪽 수평선은 $z$가 샘플링된 domain이며, 이 경우에서는 uniform이다.
위쪽 수평선은 $x$ domain의 일부이다.
위쪽을 향한 화살표들은 어떻게 mapping $x = G(z)$가 non-uniform distribution $p_g$를 변형된 샘플에 도입하는지를 나타낸다.
$G$는 $p_g$의 높은 밀도의 영역에서 수축하고 $p_g$의 낮은 밀도의 영역에서 확장된다.
(a) adversarial pair가 수렴에 가까워졌다고 생각하자. 이때, $p_g$는 $p_{data}$과 유사하며 $D$는 부분적으로 정확한 분류기이다. ($G$가 아직 실제 데이터 분포와 많이 다르고, discriminative distribution도 아직은 많이 부정확한 상태)
(b) algorithm의 inner loop에서 $D$는 데이터로부터의 샘플을 구별하도록 학습되며, $D^*(x) = \frac{p_{data}(x)}{p_{data}(x)+p_g(x)}$에 수렴한다. ($D$는 정확하게 분류할 수 있는 최적의 분류기가 된 상태)
(c) $G$가 업데이트된 후, $D$의 gradient는 $G(z)$가 데이터로 분류될 가능성이 더욱 높은 지역으로 흘러가도록 안내한다. ($G$가 점점 실제 데이터 분포에 가까워지고 있는 상태)
(d) 여러 단계의 학습 후에, $G$와 $D$가 충분한 용량을 가진다면, 이들은 더욱 향상될 수 없는 지점에 도달하게 되는데 이는 $p_g = p_{data}$이기 때문이다. Discriminator는 두 분포 사이를 구분할 수 없게 되며 즉, $D(x) = \frac {1}{2}$가 된다. ($G$가 실제 지폐와 거의 똑같은 위조지폐를 만들게 되어 경찰이 위조지폐와 실제 지폐를 구분할 수 없는 상태가 되어버림.)
4. Theoretical Results
Generator $G$는 $z$가 $p_z$에서 얻어졌을 때 샘플 $G(z)$의 분포로써 확률 분포 $p_g$를 암시적으로 정의한다.
그러므로, 충분한 capacity와 학습 시간이 주어졌을 때 Algorithm 1이 $p_{data}$의 좋은 estimator로 수렴하기를 원한다.
이번 section의 결과는 non-parametric setting으로 이루어졌으며, 이는 확률 밀도 함수의 공간에서 수렴을 학습하는 과정을 통해 무한한 capacity를 가지는 모델을 표현한다는 의미이다.
section 4.1에서는 해당 minimax game이 global optimum을 $p_g = p_{data}$에서 가짐을 보일 것이다.
다음으로 section 4.2에서는 Algorithm 1이 Equation 1을 최적화하여 원하는 결과를 얻음을 보일 것이다.
Algorithm 1은 adversarial nets의 minibatch stochastic gradient descent training을 나타내고 있다. Discriminator에 적용되는 step의 수인 $k$는 hyperparameter이다. 실제 실험에서는 실험에서 가장 저렴한 option인 $k$ = 1로 설정하였다. (연산량 관점에서 가장 부담이 없다는 의미라고 보시면 됩니다.)
해당 알고리즘은 크게 두 부분으로 나눠져 있는데, 가볍게 짚고 넘어가 보겠습니다.
첫 번째 단계는 noise prior $p_g(z)$에서 $m$개의 샘플을, 데이터 생성 분포 $p_{data}(x)$에서 $m$개의 샘플을 추출하여 이전에 논의해본 가치 함수를 discriminator 관점에서 최대화하는 방향으로 업데이트합니다.
일반적으로 딥러닝 library들은 Gradient Descent를 지원하기 때문에, 실제 코드에서 구현할 때는 해당 가치 함수에 음수를 취하여 Gradient Descent를 적용하면 결론적으로는 Gradient Ascent를 구현할 수 있을 것입니다.
앞에서 언급했지만, discriminator의 목표는 실제 지폐를 실제 지폐로 정확히 분류하고, 위조지폐를 위조지폐로 정확히 분류하는 것을 목표로 합니다.
여기서는 $k$ step 동안 진행하도록 for문으로 구성되어 있는데, 실제 실험에서는 $k = 1$로 진행했다고 합니다.
두 번째 단계는 noise prior $p_g(z)$에서 $m$개의 noise sample을 샘플링해서 이를 통해 generator를 업데이트하는 과정입니다.
Generator는 해당 식을 최소화 하는 것을 목표로 하기 때문에, gradient descent를 그대로 진행해주면 됩니다.
앞에서 언급했지만, Generator는 경찰이 구별하기 어려울 정도로 정교한 위조지폐를 만드는 것을 목표로 합니다.
4.1 Global Optimality of $p_g = p_{data}$
주어진 generator $G$에 대해서 최적의 discriminator $D$를 먼저 고려해보자.
Proposition 1. $G$가 고정되어 있을 때, 최적의 discriminator $D$는 다음과 같다.
Proof. 어떤 generator $G$가 주어졌을 때 Discriminator $D$에 대한 학습 기준은 $V(G, D)$를 최대화하는 것이다.
(앞에서 언급되었던 $V(G, D)$와 모양이 살짝 다른데, 이는 Expectation 형태로 되어 있던 식을 integral 형태로 변환한 것입니다. 따라서, 식의 모양만 달라진 것이라고 보시면 되겠습니다.)
(첫 번째 줄의 두 번째 항이 두 번째 줄로 넘어가는 이유는, 어떤 generator $G$가 주어졌다고 가정하기 때문에 $z$를 $x$로 변환했다고 생각하시면 되겠습니다.)
(0, 0)이 아닌 $(a, b) \in R^2$에 대해서, 함수 $y -> alog(y) + blog(1-y)$는 [0, 1]에서 $\frac{a}{a+b}$에서 최댓값을 갖게 된다. Discriminator는 $Supp(p_{data}) \cup Supp(p_g)$의 외부에서 정의될 필요가 없다.
(여기서 Supp은 한국어로 지지 집합이라는 개념인데, 함수값이 0이 되지 않는 점들의 집합정도로 이해하면 되는 것 같습니다. (a, b)가 (0, 0)이 아니라고 했기 때문에, 지지집합 외부에서 따로 정의할 필요가 없다고 말하는 것 같습니다.
함수 $y -> alog(y) + blog(1-y)$가 갑자기 나온 이유는, 위의 (3) 식에서 $p_{data}(x)log(D(x)) + p_g(x)log(1-D(x))$를 이와 같은 형태로 만들 수 있기 때문입니다. 즉, $a = p_{data}(x), y = D(x), b = p_g(x)$로 치환하면 형태가 딱 맞습니다.
$alog(y) + blog(1-y)$를 $y$에 대해서 미분해보시면, $\frac{a}{a+b}$에서 최댓값을 가짐을 확인할 수 있습니다.)
$D$에 대한 학습 목적 함수는 $Y$가 나타내는 것이 $x$가 $p_{data}$로부터 왔는지($y=1$) 아니면 $p_g$에서 왔는지($y=0$)일 때, 조건부 확률 $P(Y = y | x)$을 추정하는 log-likelihood를 최대화하는 것으로 해석될 수 있다.
Equation 1에서의 minimax game은 다음과 같이 다시 쓰일 수 있다.
Theorem 1. 가상의 학습 기준 $C(G)$의 전역 최솟값은 $p_g = p_{data}$일 때 얻어질 수 있다. 해당 지점에서, $C(G)$는 $-log4$의 값을 가진다.
Proof. $p_g = p_{data}$일 때, $D^*_G(x) = \frac{1}{2}$이다. (Equation 2.를 고려해보자.) 이러한 이유로, $D^*_G(x) = \frac{1}{2}$에서 Eq.4를 확인해봤을 때, $C(G) = log(1/2) + log(1/2) = -log4$임을 알 수 있다. 이 값이 $C(G)$의 가능한 가장 좋은 값임을 확인하기 위해서, $p_g = p_{data}$에 도달했을 때 다음을 확인할 수 있다.
그리고 $C(G) = V(D^*_G, G)$에서 해당 식을 뺐을 때, 다음을 얻게 된다.
중간 과정이 다 빠진 상태로 바로 (5) 식이 나오게 되는데, 이 과정을 조금 더 상세하게 적어드리겠습니다.
처음 줄은 (4)의 가장 마지막 줄의 식부터 시작합니다. $E$ 형식으로 적힌 식을 먼저 integral 형태로 변환해줍니다.
다음으로는, 식에 log4를 빼주고, 원래 식과 동일해야 하므로 다시 log4을 더해줍니다.
$log4$ = $2log2$ 이므로 이와 같이 표시해줬으며, 그다음 줄에서는 $log2$를 각 integral 식에 분배해줘서 integral 식에 log 2가 하나씩 들어갔습니다. log에서의 합은 안에서의 곱이 되므로, 2 * $p_{data}(x)$와 2 * $p_g(x)$가 된 것이라고 보시면 되겠습니다.
그다음으로는 KL이라는 식이 나오게 되는데, 이는 Kullback-Leibler divergence라는 것으로 두 분포의 차이를 나타낼 때 사용됩니다. $KL(p \parallel q)$ = $\int_x plog \frac{p}{q} dx$가 성립합니다. 따라서 (5) 식 상세 과정의 마지막 두 번째 줄에서 KL로 표시가 된 것이라고 보시면 됩니다. KL divergence까지 다루면 글이 너무 길어질 것 같아, KL divergence에 대한 상세한 내용은 생략하겠습니다.
이 식을 다시 한번 정리해서 Jensen-Shannon divergence로 바꿀 수 있습니다.
JSD는 Jensen-Shannon divergence인데, 이는 다음을 만족합니다.
따라서, $2 * JSD(p_{data} \parallel p_g)$로 표현될 수 있는 것입니다.
두 분포 사이의 JSD는 항상 non-negative이며 두 분포가 동일할 때만 0이므로, $C^* = -log4$가 $C(G)$의 전역 최솟값임을 알 수 있다. 이때 유일해는 $p_g = p_{data}$이다. 즉, 생성 모델이 데이터 생성 과정을 완벽하게 복제하는 상황이다.
4.2 Convergence of Algorithm 1
Proposition 2. $G$와 $D$가 충분한 capacity를 가진다면, 그리고 Algorithm 1의 각 단계에서, discriminator는 $G$가 주어졌을 때 discriminator의 최적 값에 도달하도록 허용되며, 해당 기준을 향상하기 위해 $p_g$는 업데이트된다.
그러고 나서 $p_g$는 $p_{data}$에 수렴한다.
Proof. $V(G, D) = U(p_g, D)$가 위의 기준에서 이루어지는 $p_g$의 함수라고 하자. $U(p_g, D)$는 $p_g$에서 convex이다. Convex function의 상한에 대한 하위 미분은 최댓값이 얻어지는 지점에서의 함수의 미분 값을 포함한다.
다르게 얘기해서, 만약 $f(x) = sup_{a \in A} f_\alpha(x)$이고 $f_\alpha (x)$가 모든 $\alpha$에 대해서 $x$에서 convex라면, $\beta = argsup_{a \in A} f_\alpha (x)$일 때 $\partial f_\beta(x) \in \partial f$이다.
이는 최적의 $D$에서 이와 대응되는 $G$가 주어졌을 때 $p_g$에 대해 gradient descent update를 계산하는 것과 동일하다.
$sup_D U(p_g, D)$는 Theorem 1에서 증명된 것처럼 유일한 전역 최적 값을 가질 때 $p_g$에서 convex이며, 그러므로 $p_g$의 충분히 작은 업데이트만을 가지고도 $p_g$는 $p_x$에 수렴할 수 있다.
(위의 내용이 워낙 수학적인 내용이 많아, 100% 이해를 할 수는 없었지만 대략 우리가 생각하는 가치 함수인 $V(G, D)$가 $p_g$의 함수이며 convex 함수이기 때문에 gradient descent update를 계산하는 것과 동일한 과정을 통해서 결국 몇 번의 업데이트를 통해 $p_g$가 최적 값인 $p_x$에 수렴할 수 있다는 그런 내용으로 보입니다.)
실제로, adversarial nets은 함수 $G(z;\theta_g)$를 통해서 $p_g$ 분포의 제한된 부분만 표현할 수 있으며, 따라서 $p_g$ 자체를 최적화하기보다는 $\theta_g$를 최적화한다.
$G$를 정의하기 위해서 multilayer perceptron을 사용하는 것은 parameter 공간에서 여러 개의 중요한 문제들을 만든다.
하지만, 실전에서 multilayer perceptron가 훌륭한 성능을 가지고 있기 때문에 그들의 이론적 보증이 부족함에도 불구하고 이를 사용하는 것이 합리적이다.
5. Experiments
MNIST, Toronto Face Database (TFD), CIFAR-10을 포함하는 여러 개의 데이터셋에 adversarial nets을 학습시켰다.
Generator nets는 RELU와 sigmoid activation을 사용하였으며, discriminator net은 maxout activation을 사용하였다.
Dropout은 discriminator net을 학습할 때 적용되었다.
비록 우리의 이론적인 framework가 dropout의 사용과 generator의 중간 layer에서의 다른 노이즈를 허용하지만, generator network의 맨 아래 layer의 input으로만 노이즈를 사용했다.
Gaussian Parzen window를 $G$에 의해 생성된 샘플에 fitting 하고, 이 분포 하에서 log-likelihood를 보고하는 것을 통해 $p_g$하에서의 test set data의 확률을 추정하였다.
Gaussian의 $\sigma$ parameter는 validation set에 cross validation을 통해 얻었다.
이 절차는 Breuleux et al.에 의해 도입되었으며, 정확한 가능도를 계산할 수 없는 여러 가지 생성 모델에 대해서 사용되었다.
결과는 Table 1에 나타나 있다.
가능도를 추정하는 이 방식은 어쨌든 높은 분산을 가지고 있으며, 고차원 공간에서 잘 작동하지 않으나 현재 우리 지식에서는 최선의 방법이다.
샘플링은 할 수 있지만 가능도를 직접적으로 추정할 수 없는 생성 모델에서의 진보는 어떻게 이러한 모델들을 평가할 수 있는지에 대한 추후 연구에 동기부여를 제공한다.
(아마 이 시기에는 생성 모델들이 많지 않아서 어떤 기준으로 평가해야 되는지 몰라 이러한 방식으로 평가한 것 같습니다.)
Figure 2와 3에서는 학습이 끝난 후의 generator net에서 나온 샘플을 보여준다.
우리가 기존 방법들에 의해서 만들어진 샘플보다 여기 나온 샘플들이 더 좋다고 단언할 수는 없지만, 여기 나온 샘플들이 다른 연구에서 나타나는 더 좋은 생성 모델과 적어도 경쟁할 수 있으며 adversarial framework의 잠재력을 강조할 수 있을 것이라고 생각한다.
6. Advantages and disadvantages
우리가 제안하는 새로운 framework는 기존의 modeling framework와 비교했을 때 유리한 점과 불리한 점이 존재한다.
불리한 점들은 주로 $p_g(x)$에 대한 명시적인 representation이 없다는 것이며, 학습하는 동안에 $D$가 반드시 $G$와 동시에 움직여야 한다는 점이다. (특히, $G$는 $D$가 업데이트되는 것 없이 너무 많이 학습되어서는 안 되며, 이는 $G$가 너무 많은 $z$값들을 같은 값의 $x$로 붕괴(collapse)되는 "Helvetica scenario"를 피하고 모델이 충분한 다양성을 가지도록 하기 위함이다.) => 일반적으로 'Mode collapse'라고 하는 현상을 이렇게 부르는 것 같습니다. 즉 Generator가 다양한 모습을 만들어내지 못하는 상황을 의미하는 것 같습니다.
이는 Boltzmann machine의 negative chain이 학습 단계 동안에 반드시 최신으로 유지되어야 하는 것과 같다.
유리한 점은 Markov chains이 결코 필요하지 않다는 점이며, gradient를 얻기 위해 오직 backpropagation만 사용되고 학습 동안에 inference가 필요하지 않으며 매우 다양한 함수들이 모델에 포함될 수 있다.
Table 2는 다른 생성 모델 접근법들과 generative adversarial nets와의 비교를 요약한다.
앞에서 서술한 유리한 점은 주로 연산적인 부분이다. Adversarial model들은 또한 데이터 예시를 통해 직접적으로 generator network를 업데이트해주지 않아도 된다는 점에서 어떠한 통계적 이점을 얻을 수 있으며, 또한 gradient가 discriminator를 통해서 흐른다는 이점이 있다.
이는 input의 요소들이 직접 generator의 parameter들로 복사되지 않는다는 것을 의미한다.
Adversarial networks의 또 다른 이점은 이들이 매우 날카롭고 심지어 퇴보적인 분포를 나타낼 수 있지만, Markov chains를 기반으로 하는 방법들은 체인이 모드 간에 혼합이 될 수 있도록 분포가 다소 blurry 해야 함을 필요로 한다.
7. Conclusions and future work
해당 framework는 많은 단순한 확장이 가능하다.
1. 조건부 생성 모델(conditional generative model) $p(x | c)$를 $G$와 $D$에 $c$를 input으로 추가함으로써 얻을 수 있다.
2. $x$가 주어졌을 때 $z$를 예측하는 보조적인 네트워크를 학습하는 것을 통해 Learned approximate inference가 수행될 수 있다.
이는 wake-sleep algorithm으로 학습된 inference net과 유사하지만, generator net가 학습을 끝낸 후 고정된 generator net에 대해서 inference net을 학습시킬 수 있다는 이점이 있다.
3. 파라미터들을 공유하는 조건부 모델들의 family를 학습시키는 것을 통해 $S$가 $x$의 인덱스의 부분집합일 때 해당 모델은 모든 조건부 확률
을 근사적으로 모델링할 수 있다. (아무리 찾아봐도 저 표기를 직접 타이핑할 수 없어서 그림으로 대체합니다.)
본질적으로, deterministic MP-DBM의 stochastic exntension을 실행하기 위해서 adversarial nets을 사용할 수 있다.
4. Semi-supervised learning: discriminator나 inference net의 features는 제한된 labeled data만 이용 가능할 때 classifier의 성능을 향상할 수 있다.
5. Efficiency improvements: $G$와 $D$를 조정하기 위한 더 나은 방법을 분할하거나, 훈련 중에 샘플 $z$에 대한 더 나은 분포를 결정한다면 학습이 크게 가속화될 수 있다. (Generator와 Discriminator를 학습하는 방법을 개발하거나, 혹은 $z$에 대한 prior 분포를 다르게 결정하면 학습에 도움이 될 수 있다는 말인 것 같습니다.)
이번 논문은 adversarial modeling framework의 실행 가능성을 검증하였으며, 이러한 연구 방향이 유용하다는 것을 검증할 수 있다고 주장한다.
드디어 논문의 내용을 모두 다뤄보았습니다.
일부 내용들은 심도 있게 다루지 않았음에도 생각보다 작성하는데 들어가는 시간이 꽤 오래 걸리네요.
다음 글에서는 해당 논문을 코드로 어떻게 구현할 수 있는지를 살펴보겠습니다.
'(paper + code) review' 카테고리의 다른 글
3. Adversarial Autoencoders(AAE) - code review (0) | 2021.03.22 |
---|---|
3. Adversarial Autoencoders(AAE) - paper review (0) | 2021.03.21 |
2. Auto-Encoding Variational Bayes(VAE) - code review (3) | 2021.03.15 |
2. Auto-Encoding Variational Bayes (VAE) - paper review (0) | 2021.03.15 |
1. Generative Adversarial Nets(GAN) - code review (0) | 2021.03.09 |