2020. 3. 20. 23:06ㆍArtificial Intelligence
본 포스팅은 cs231n의 강좌를 정리한 글임을 서두에 밝힙니다.
캡쳐된 일부 강의 자료들은 CS231n에서 제공하는 PPT 슬라이드를 참조하였습니다.
Definition
GAN은 'Generative Adversarial Network' 의 줄임말로, 궁극적으로 실제 이미지와 유사한 가짜 이미지를 생성해 내기 위해 제안된 네트워크 모델입니다. 이 모델은 Ian Goodfellow가 2014년에 논문에서 제시한 모델로, 딥러닝 분야에서 최근 10년간 가장 혁신적인 아이디어로 평가받고 있습니다.
"Generative" 라는 용어에서 확인하실 수 있듯이, GAN은 '생성 모델'입니다. 생성모델이란, 그럴듯한 가짜 이미지를 생성해 내는 모델이라는 의미로, 실제로는 존재하지 않으나 그럴듯해 보이는 사람 얼굴 이미지 등을 생성해 내는 모델이 Generative Model의 예시가 될 수 있습니다.
"Adversarial" 은 GAN의 핵심적인 원리를 함축하고 있다고 말할 수 있습니다. GAN은 Generator(생성자)와 Discriminator(구분자)를 같이 학습시키는 방법을 사용합니다. Generator가 생성한 이미지를 Discriminator로 하여금 분류하게 하여 그 정확도를 가지고 서로에게 피드백을 주는 방식으로, Generator는 실제 이미지와 더 유사한 이미지를 생성해 낼 수 있도록 학습되고, Discriminator는 실제 이미지와 가짜 이미지를 더 잘 구분해낼 수 있는 것이죠
이 방법이 적대적('adversarial')하다고 하여 이와 같은 이름이 붙었습니다.
GAN의 이런 Adversarial한 속성 때문에 흔히 '위조지폐범과 경찰'의 관계에 비유되곤 합니다. 위조지폐범은 경찰을 속이기 위해 더 정교하게 지폐를 위조해가고, 경찰은 위조지폐범을 잡기 위해 위조지폐를 골라내는 능력이 점점더 좋아질 것입니다.
Generator를 위조 지폐범에, Discriminator를 경찰에 대응하여 생각해 본다면 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 |