Generative Adversarial Network(GAN)

2020. 3. 20. 23:06Artificial Intelligence

본 포스팅은 cs231n의 강좌를 정리한 글임을 서두에 밝힙니다.
캡쳐된 일부 강의 자료들은 CS231n에서 제공하는 PPT 슬라이드를 참조하였습니다.

 

Definition

 

GAN은 'Generative Adversarial Network' 의 줄임말로, 궁극적으로 실제 이미지와 유사한 가짜 이미지를 생성해 내기 위해 제안된 네트워크 모델입니다. 이 모델은 Ian Goodfellow가 2014년에 논문에서 제시한 모델로, 딥러닝 분야에서 최근 10년간 가장 혁신적인 아이디어로 평가받고 있습니다.

 

"Generative" 라는 용어에서 확인하실 수 있듯이, GAN은 '생성 모델'입니다. 생성모델이란, 그럴듯한 가짜 이미지를 생성해 내는 모델이라는 의미로, 실제로는 존재하지 않으나 그럴듯해 보이는 사람 얼굴 이미지 등을 생성해 내는 모델이 Generative Model의 예시가 될 수 있습니다.

 

 

생성 모델을 통해 만들어낸 이미지 (출처: topbots.com https://www.topbots.com/ai-research-generative-adversarial-network-images/)

 

 

"Adversarial" 은 GAN의 핵심적인 원리를 함축하고 있다고 말할 수 있습니다. GAN은 Generator(생성자)와 Discriminator(구분자)를 같이 학습시키는 방법을 사용합니다.  Generator가 생성한 이미지를 Discriminator로 하여금 분류하게 하여 그 정확도를 가지고 서로에게 피드백을 주는 방식으로, Generator는 실제 이미지와 더 유사한 이미지를 생성해 낼 수 있도록 학습되고, Discriminator는 실제 이미지와 가짜 이미지를 더 잘 구분해낼 수 있는 것이죠

이 방법이 적대적('adversarial')하다고 하여 이와 같은 이름이 붙었습니다.

 

 

GAN의 이런 Adversarial한 속성 때문에 흔히 '위조지폐범과 경찰'의 관계에 비유되곤 합니다. 위조지폐범은 경찰을 속이기 위해 더 정교하게 지폐를 위조해가고, 경찰은 위조지폐범을 잡기 위해 위조지폐를 골라내는 능력이 점점더 좋아질 것입니다.

Generator를 위조 지폐범에, Discriminator를 경찰에 대응하여 생각해 본다면 GAN이 가고자 하는 방향에 대해 감을 잡으실 수 있을 것입니다.

 

GAN을 설명하는 가장 유명한 그림

 

 

Concepts

 

GAN의 정의에 대해 알아보았으니 이제 본격적으로 GAN이 어떻게 구성되고, 어떤 과정을 통해 Generator와 Discriminator가 학습이 되는지 알아보도록 하겠습니다. 우선 생성 모델이 무엇을 생성할 것인지에 대한 이해가 필요합니다.

 

" 생성 모델이 실제와 유사한 사람 얼굴 이미지를 생성해 낸다고 할 때

실제로 모델이 생성해내는 것, 즉 학습하는 것은 무엇인가? "

 

수학적으로 어떤 두 사람의 얼굴 사진이 '비슷하다'라고 할 때, 더 나아가서 어떤 데이터가 다른 데이터와 비슷하다고 할 때는 두 데이터의 '분포'가 유사하다는 것을 의미합니다. 즉 두 사람의 얼굴 사진이 비슷하다는 의미는, 각각의 이미지를 이루고 있는 픽셀값들의 분포가 유사하다는 것입니다. 생성모델이 학습하게 되는 것도 바로 이 '분포'에 대한 정보입니다.

 

정리하자면, 생성모델은 실제 데이터가 어떠한 분포를 가지고 있는지를 통해 생성된 데이터가 실제 데이터의 분포와 유사한 분포를 갖도록 학습해 나가는 모델이라고 할 수 있습니다. 

 

 

논문에 제시된 GAN의 목적함수는 다음과 같습니다.

 

$$\underset{G}{\text{minimize}}\; \underset{D}{\text{maximize}}\; \mathbb{E}_{x \sim p_\text{data}}\left[\log D(x)\right] + \mathbb{E}_{z \sim p(z)}\left[\log \left(1-D(G(z))\right)\right]$$

 

이는 게임이론 타입의 함수로 Generator와 Discriminator가 서로 균형점(Nash 균형)을 이룰때까지 서로의 값을 조정해 나가도록 합니다.

 

목적함수에 따라 각각의 변수들이 어떤 식으로 학습되는 지를 살펴보면 다음과 같습니다. 

 

Disgriminator($D$)는 실제 데이터를 입력하면 높은 확률이 나와야 하고, 생성자가 생성한 가짜 데이터를 입력했을 때는 확률이 낮게 나와야 하므로 $D(G(z))$를 높이는 방향으로 학습을 진행하게 됩니다.

 

반대로 Generator($G$)는 임의의 값(보통 zero-mean gaussian을 사용)으로 생성된 데이터(G(z)) 를 $D$에 넣었을 때, 목적 함수가 최소가 되기를 바라기 때문에 $D(G(z))$를 낮추는 방향으로 학습을 진행하게 됩니다. 다시 말해 생성된 데이터 $G(z)$를 Discriminator가 제대로 구분하지 못하기를 바라는 방향으로 학습을 진행하는 것이죠.

 

이 목적함수를 두고 D를 학습시키고, 그 후에 다시 G를 학습시키고 하는 방식으로 순차적으로 GAN 네트워크의 학습을 진행하게 됩니다.

 

 

Code

코드는 CS231n강의의 Assignment3을 바탕으로 작성되었으며, 제 Github Repository에 GAN을 구현한 자세한 코드가 작성되어 있습니다. 아래 링크를 통해 자세한 코드를 확인해 주세요.

https://github.com/sckimynwa/ComputerVision_CS231/tree/master/assignment3

반응형

'Artificial Intelligence' 카테고리의 다른 글

Reinforcement Learning  (0) 2020.03.23
Probability For Deep Learning  (0) 2020.03.21
Image Style Transfer Using Convolutional Neural Networks  (0) 2020.03.17
Gradient Ascent  (0) 2020.03.15
Saliency Map  (3) 2020.03.15