Deep Learning/GAN

GAN(Generative Adversarial Network) 개요

Xylene 2020. 8. 24. 18:54

 GAN은 최근 가장 각광받고있는 모델이다. GAN은 아주 다양한 분야에 응용될 수 있고 굉장히 다양한 변형 GAN들이 나타나고 있다. 각각의 모델들의 구조와 구현은 따로 글을 포스팅할 것이고 각각의 GAN에 대한 전체적인 설명을 하고자 한다.

 

GAN의 목표

 우선 GAN이 무엇을 하는 모델인지부터 알아보자. 가장 처음 등장한 GAN은 두 개의 network를 가지며 각각 Generator와 Discriminator라고 한다. GAN의 목표는 원래의 data의 분포를 학습하여 그 분포를 따라 새로 만들어내는(Generate) 것이 목적이다. Generator는 실제로 새로운 data를 만들어내는 일을 하게 되고 Discriminator는 실제 data와 만들어 낸 가짜 data를 Classification하게 되며 Generator가 실제 data와 유사한 data를 만들어내도록, Discriminator가 Generator의 가짜 data를 진짜로 구분하게끔 학습하게 된다. 따라서 두 network는 서로 적대적인(Adversarial) 관계를 가지게 되고 Generative Adversarial Network로 불리게 되었다. 위에서 알 수 있듯이 GAN은 비지도학습의 분류에 들어가지만 다양한 GAN의 변형들은 이를 구분하기 모호한 경우도 많으며 준지도학습에 포함되는 경우도 있다.

 간단한 예시를 통해 이해해보자. MNIST data를 이용하여 숫자 손글씨를 만들어내는 GAN을 만든다고 하자. input으로는 28×28 크기의 Tensor가 0에서 255의 값을 가지고 있을 것이다. 하지만 28×28 크기의 Tensor에 0에서 255의 난수를 넣는다고 우리가 이를 숫자로 인식하지는 않을 것이다. 이로부터 알 수 있듯이 숫자로 보이는 data들의 특정한 분포가 있을 것이고 GAN은 그 분포를 흉내 내고자 할 것이다. 그 분포를 흉내 낸다는 것은 숫자처럼 보이는 data를 만들어낸다는 것을 의미한다. 꼭 이미지에만 한정된 것은 아니지만 현재 이미지와 관련된 GAN이 활발하게 연구되고 있고 이 부분에서 좋은 성능을 보여주고 있다.

 

GAN의 구조

 기본적인 GAN의 구조를 그림으로 나타내면 다음과 같이 나타낼 수 있다.

GAN의 구조

 하나의 데이터에 대해 Generator는 Random vector를 입력으로 받아 새로운 데이터를 생성하게 된다. Discriminator는 Generator가 만들어낸 Fake data를 Fake로 분류하도록, Real data를 Real로 분류하도록 backpropagation을 이용하여 Discriminator의 파라미터를 학습하게 된다. 그 다음 Generator는 다시 새로운 데이터를 생성하게 되고 이를 Discriminator를 통과하며 Real과의 loss를 통해 Generator의 파라미터를 학습하게 된다. 실제로는 이 과정이 하나의 데이터에 대해 이루어지는 것은 아니고 하나의 mini-batch 단위로 이루어진다.

 

 실제로는 엄밀한 설명은 아니고 어떤 minimax 방정식을 해결하는 과정이며 그 해가 실제 data의 분포를 따른다는 것이 수학적으로 증명되었지만 개요에서는 다루지 않고 추후 다음 글에서 다룰 것이다.

 다음 글 https://rython.tistory.com/12

GAN의 한계

 GAN이 활발하게 연구되고 있지만 아직 몇몇 문제들이 존재한다. 아래 크게 4가지로 나누어 설명할 것이다. 아래의 2, 3, 4는 서로 연관되어있는 문제들이기도 하다.

1. 평가 지표

 아직 GAN 모델이 잘 학습하였는를 수치화하여 제시할 평가지표가 존재하지 않는다. 최근 이와 관련한 연구인 BEGAN이 나오기도 하였으나 아직 일반적으로 적용될 수 있는 평가 지표는 존재하지 않고 이미지와 같은 경우 인간이 직접 보며 정성적으로 평가하는 방법을 사용하고 있다.

2. 균형

 GAN은 두 개의 network가 서로 경쟁을 하는 구조를 가지고 있다. 일반적으로 Generator는 Discriminator보다 학습 속도가 느린데 이 둘 사이의 균형이 잘 맞지 않는다면 잘 학습하기 어렵다는 문제를 가지고 있다. 이를 해결하기 위해 BEGAN, LSGAN이나 EBGAN과 같은 다양한 방법을 통해 이를 해결하는 연구가 나오기도 하였다.

3. 모드 붕괴(Mode collapse)

 위의 MNIST data와 같이 data의 분포가 여러 개 섞여 있는 경우(0의 분포, 1의 분포 등) 일어나는 문제이다. Generator는 Discriminator가 진짜인지 판별하는 것으로 학습하게 된다. 그렇기 때문에 MNIST data에서 Generator가 0의 data만을 생성한다고 해도 Discriminator가 진짜로 판별하기만 한다면 문제가 되지 않는다. 하지만 이런 모델이 원래 data의 분포를 잘 따라했다고 보기는 힘들다.

이를 해결하기 위한 방법으로는 각각의 mini-batch마다 실제 이미지와 만들어낸 이미지의 유사도를 학습에 반영하는 등의 방법이 있을 수 있고 unrolled GAN과 같이 다른 방법들도 연구되고 있다.

위 그림은 CelebA data를 GAN으로 어떤 일을 하다가 모드 붕괴가 일어난 이미지이다.

 

4. 진동(Oscillation)

이는 모델이 학습하며 parameter들이 수렴하지 않고 진동하는 문제이다. Discriminator와 Generator가 가위바위보와 같은 게임에서 loss를 줄이기 위해 계속해서 순환하는 것과 유사하다. 2, 3, 4가 서로 연결된 문제인 만큼 다른 문제와 함께 해결되기도 한다.

 

Written by Xylene