GAN
1. 개요
- 서로 다른 기능을 하는 두 개의 신경망을 이용하여, 실제로는 존재하지 않지만 실제로 존재하는 것 같은 가상의 이미지를 생성하는 신경망을 만들 수 있다. (이 두 신경망의 기능이 서로 다르기 때문에 이러한 신경망을 GAN, generative adversarial network라 한다.) 2014년 처음 제시되었다.
- 구체적으로 다음과 같은 방식으로 생성한다.
(1) 일반적인 classification을 수행하는 알고리즘을 이용하여, 생성하고자 하는 특징을 지닌 실제 이미지들과 그렇지 않은 이미지들을 분별하는 신경망을 훈련시킨다. (이 신경망을 discriminator라 한다.)
(2) 어떤 노이즈를 입력으로 받으면 그에 대응되는 이미지를 생성하는 신경망을 만들고, 노이즈를 입력한 후 그에 대응되는 이미지를 discriminator로 실제 이미지와 유사한지 아닌지를 판별하여 그 여부를 통해 이 신경망을 훈련시킨다. (이 신경망을 generator라 한다.)
- generator에 입력이 되는 노이즈 벡터들과 이를 generator에 넣어 얻은 결과들은 서로 어느 정도 인과성이 있으며, 노이즈 벡터가 연속적으로 변화할 때 generator로 얻은 결과들 또한 연속적인 특징을 갖고 변해간다. (이러한 특징들이 입력 벡터가 있는 공간에 잠재되어 있다 하여 입력 벡터가 위치하는 공간을 latent space라 한다.) 따라서 generator로 얻은 결과 이미지가 예를 들어 남성성이 강한 외모를 갖는다거나 활짝 웃는 표정을 짓고 있다면, 그에 대응되는 입력 벡터들을 그러한 특징이 있거나 없는 노이즈 벡터에 더하거나 빼는 선형결합을 해 새로운 벡터를 만들 수 있으며, 그 새로운 벡터는 원래 노이즈 벡터에 더하거나 뺀 벡터가 갖는 특징이 새로 생기거나 제거된 이미지를 generator의 결과 이미지로 만들어낸다.
- GAN을 이용하여 domain adaptation(pre-trained model을 만든 데이터셋이 편향이 있어 다른 domain의 데이터에 대해 제대로 작업을 수행하지 못할 때, 그 domain에 대해서도 잘 처리하도록 하는 신경망을 추가하는 문제), style transfer(특정 이미지에 전체적으로 공통적으로 나타나는 특성을 추출하여 또 다른 이미지를 입력받아 앞서 추출한 특성을 그 이미지에 적용하는 문제) 등의 문제를 해결할 수 있다.
2. DCGAN
- 2014년 처음 제시된 GAN 알고리즘은 이론상으로는 획기적이었으나 실제 구현했을 때 성능은 부족한 점이 많았다. 그러나 2016년 제시된 DCGAN(deep convolutional GAN) 알고리즘은 여러 CNN 모델에서 제시된 기법들이 성공적으로 적용되어 상당히 뛰어난 성능을 보였고, 현재도 널리 쓰이는 많은 GAN 알고리즘에 많은 영향을 주었다.
- DCGAN의 구조는 주로 다음 특징을 갖는다.
-
pooling 연산을 완전히 없애고 convolution 연산으로 대체
-
은닉층에서 FC층을 완전히 제거
-
generator, discriminator에서 모두 batch normalization 사용(단 모든 층에 사용하진 않고, discriminator의 입력과 generator의 출력에도 미사용)
-
generator는 ReLU를, disciminiator는 leaky ReLU를 사용
- DCGAN의 경우 생성된 서로 다른 두 이미지 간 latent vector를 서서히 변경시키며 시각화를 하면 한쪽 이미지가 다른쪽 이미지로 부드럽게 변화(interpolation)하는 것을 볼 수 있다. 이런 부드러운 변화는 이 신경망이 어느 한 특징에 대해 과적합이 일어나지 않고 잘 학습이 이루어졌음을 뜻한다.
- DCGAN의 경우 latent vector간 산술연산을 함으로써 이미지를 생성하는 것이 가능한데, 이는 곧 신경망을 통해 이미지를 semantic하게 조정하는 것이 가능함을 뜻한다.
3. 그 밖의 개선 방안
- LSGAN: 기존 GAN은 손실함수로 sigmoid를 사용했는데, 이는 어떤 생성결과가 discriminator를 속이기만 했다면 그것이 실제와 크게 동떨어진 이미지라 하더라도 아무 페널티를 받지 않게 했다. LSGAN은 손실함수가 least squares를 갖게 했는데, 이는 생성 결과가 실제와 최대한 흡사해야 페널티를 받지 않도록 한다. 이처럼 손실함수를 구성한 LSGAN은 실제로 기존 GAN보다 뛰어난 성능을 보인다.
- WGAN: 기존 GAN은 서로 다른 데이터 분포 양상 간 차이값을 구하는 목적함수에 Jensen-Shannon divergence를 사용했는데, 이는 각 분포간 평균의 차이가 너무 커지면 거기서 약간 조정을 한다 하더라도 목적함수 기울기가 거의 바뀌지 않아(gradient vanishing) 학습이 잘 일어나지 않는다. WGAN은 목적함수가 Earth-Mover distance(=Wasserstein distance)를 갖게 했는데, 이는 분포 간 평균의 차이가 아무리 커도 gradient vanishing 문제가 발생하지 않는다. 이와 같이 목적함수를 구성한 모델은 이론상으로 기존 GAN보다 뛰어난 성능을 보일 것이나 실제로 구현에는 어려운 점이 많으며, 대신에 Kantorvich-Rubinstein duality를 사용하는 알고리즘으로 살짝 변형을 가했으면서도 Earth-Mover distance를 사용한 것과 유사한 결과를 내는 모델을 구현할 수 있다. 이 모델은 실제로 기존 GAN보다 뛰어난 성능을 보인다.