딥러닝 이야기 / Deep Convolutional Generative Adversarial Network (DCGAN) / 1. Deep Convolutional Generative Adversarial Network (DCGAN)

Deep Convolutional Generative Adversarial Network (DCGAN)

작성자: 여행 초짜
작성일: 2022.04.16

시작하기 앞서 틀린 부분이 있을 수 있으니, 틀린 부분이 있다면 지적해주시면 감사하겠습니다.

딥러닝 이야기의 네 번째 주제는 Deep Convolutional Generative Adversarial Network (DCGAN) 입니다. DCGAN은 생성 모델(gerative model) 중 가장 유명한 Generative Adversarial Network (GAN)의 문제점을 해결하고자 하였으며, 이외에도 비전 분야 뿐 아니라 unsupervised learning에도 많은 기여를 한 모델입니다. 혹시 GAN이 어떤 모델인지 모르시는 분은 이전 GAN 글을 참고하시기 바랍니다.

이 글에서는 수식적인 측면보다는 DCGAN이 기여한 부분과 어떻게 GAN의 문제점을 해결하려고 하였는지 살펴보겠습니다. 그리고 DCGAN은 linear layer를 사용한 대신에 convolutional layer를 사용한 CNN 기반으로 구성되어있습니다. 따라서 CNN에 대해 잘 모르신다면 CNN 글을 참고하시기 바랍니다.

오늘의 컨텐츠입니다.

  1. 생성 모델
  2. DCGAN의 목적
  3. DCGAN의 의의

Deep Convolutional Generative Adversarial Network (DCGAN)

생성 모델
Generative Model

위에서 잠깐 GAN은 생성 모델(generative model)이라고 하였습니다. 그럼 생성 모델은 무엇일까요? 생성 모델은 말 그대로 데이터를 생성할 수 있는 모델을 뜻합니다. 즉 학습한 데이터를 똑같이 복사하는 것이 아니라, 학습한 데이터를 바탕으로 실제로 있을 것 같은 데이터를 스스로 생성하는 모델입니다. 생성 모델의 가장 중요한 목적 중 하나가 바로 학습 데이터를 통해 학습 데이터가 존재하는 데이터 분포를 찾는 것입니다. 단순히 학습 데이터를 복사 붙여넣기 하여 생성하는 모델이 아니라는 뜻입니다.

생성 모델 관련 더 자세한 내용은 이전 VAE 글GAN 글에 나와있으니 참고하시기 바랍니다.

DCGAN의 목적

GAN의 불안정성 해소
본 논문은 vanilla GAN의 불안정성을 문제점으로 지적합니다. 따라서 논문에서는 기존 vanilla GAN이 보여주던 모델의 불안정성을 convolutional layer와 batch normalization 등의 기법을 사용하여 GAN이 가지던 불안정성을 해소합니다.


Black-box 모델 반박
본 논문에서는 CNN이 black-box 모델이라는 것을 학습하면서 활성화된 filter를 보여줌으로써 딥러닝 모델의 필터들이 스스로 이미지의 특징을 잘 파악하여 학습한다는 것을 보여줍니다.


Walking in the latent space (잠재 공간)
본 논문에서는 generator의 결과가 연속적으로 보여져야한다고 주장합니다(VAE 글 참고). 따라서 논문에서는 잠재 공간이 부드럽게 변화하는 walking latent space의 예시를 보여주면서 모델이 이미지의 좌, 우, 배경 등 semantic (의미론적) level을 잘 학습할 수 있다는 것을 보여줍니다.


CNN을 이용한 Supervised Learning과 Unsupervised Learning 간극 해소
CNN은 많은 supervised learning에 유용하고, 성능이 좋은 모델로 알려져있습니다. 예를 들어 ImageNet 같은 경우의 많은 모델들이 CNN을 사용하였고, 이미지 처리를 하는 computer vision 분야에서는 CNN은 필수입니다. 하지만 unsupervised learning과 CNN은 많은 간극이 있습니다. 그리고 CNN은 unspervised learning에 있어서 많은 주목을 받지 못하고 있는 것도 사실입니다. 따라서 본 논문은 CNN이 unsupervised learning에 충분히 사용될 수 있으며, CNN이 이미지의 어떠한 특징을 가지고 학습하는지 보여주면서 black-box 모델이라고 주장하는 것에 대해 반박합니다. 결론적으로 본 논문에서는 CNN을 사용함으로써, unsupervised learning에 CNN이 충분히 사용할 수 있음을 주장합니다.


생성 모델이 데이터를 기억하지 않는다는 것을 증명
첫 학습 epoch에서 생성된 이미지를 바탕으로 모델이 overfitting (과적합) 되지 않았다는 것을 증명합니다.

DCGAN의 의의

이제 DCGAN이 공한한 점에 대해서 알아보기 전에, DCGAN이 GAN과 어떻게 다른지 혹은 어떤 모델인지 간단하게 살펴보겠습니다. GAN이 어떤 모델인지 잘 모른다면 이전 GAN 글을 먼저 본 후, DCGAN을 보는 것을 추천합니다. 그럼 DCGAN은 어떤 모델일까요? 단순하게 말하자면 GAN 모델을 직접적으로 확장한 모델이라고 볼 수 있습니다. 하지만 GAN에서 linear layer로 구성된 discriminator와 generator를 각각 convolutional layer와 convolutional transpose layer를 사용했다는 점이 vanilla GAN과 다른점입니다. 그리고 모델에 batch normalization을 적용한 것도 이유가 있지만, 이는 조금 이후에 설명하도록 하겠습니다. 좀 더 자세히 살펴보겠습니다.

  • Discriminator: Convolutional layer를 사용하였으며, batch norm layer, leaky relu 활성화 함수로 이루어집니다. 그리고 마지막 sigmoid 함수를 통과하여 이미지가 진짜인지 가짜인지 score를 내어줍니다.
  • Generator: Convolutional transpose layer, batch norm layer, relu 활성화 함수로 이루어집니다. 그리고 잠재 변수(latent vector) z의 가우시안 노이즈가 인풋으로 들어갑니다.


아래 그림은 DCGAN의 전체적인 구조를 나타낸 그림입니다.

DCGAN의 전체적인 구조


DCGAN이 어떠한 레이어와 함수를 썼는지 간단하게 살펴보았으니, 본격적으로 DCGAN이 어떠한 의의를 가지고 기여를 했는지 DCGAN의 결과와 함께 자세하게 살펴보겠습니다.



GAN의 불안정성 해소
이전글에서 vanilla GAN은 mode collapse, oscillate 등과 같은 문제점이 나타난다고 이야기를 했었습니다. DCGAN은 이러한 GAN의 불안정성을 해소하기 위해 아래와 같은 방법을 써서 해결하려 하였습니다.

  • Batch normalization 및 convolutional layer 사용, pooling layer 배제: Pooling layer는 CNN의 결과의 크기를 줄여주는 역할을 합니다. 즉 모델의 결과가 너무 크기 때문에 그 크기를 줄이기 위해서 필요없는 parameter들은 지우고 정말 필요한 특징들만 남겨두기 위한 레이어입니다. 하지만 사람 얼굴 이미지 생성을 예를 든다면, 데이터를 생성하는 데 있어서 사람 얼굴의 주요 부위인 눈, 코 입 등도 중요하지만 각각의 위치도 이미지를 생성하는 데 있어서 아주 중요하게 작용합니다. 따라서 이러한 정보 손실을 최소화하기 위해 batch normalization을 사용했으며, linear layer 대신 convolutional layer를 사용한 것입니다. 그리고 같은 이유로 pooling layer를 최소화 한 것입니다.
  • Hyperparameter 제안: 추가로 DCGAN 논문에서는 안정적인 GAN 학습을 위해 새로운 hyperparameter 조건을 제안합니다.



Black-box 모델 반박
CNN은 비전 분야에서 이미지를 처리하는 데 효과적인 알고리즘이지만, 어떻게 작동하는지 그 원리를 알 수 없는 black-box 모델이라고 지적을 받아왔습니다. 하지만 본 논문에서는 DCGAN이 학습할 때 활성화된 filter를 보여줌으로써, 특정 filter가 이미지의 특정 특징을 스스로 잘 캐치하여 학습하는 것을 증명하였습니다. 아래 그림에서 보면 오른쪽은 학습하기 전에 랜덤으로 활성화된 필터의 모습입니다. 랜덤으로 활성화된 필터는 이미지의 특징을 잡는 것이 아니라 모든 이미지를 잡는 것을 확이할 수 있습니다. 하지만 학습하고난 후 필터는 침대의 모서리, 창문의 모서리, 침대의 대략적인 틀 등 스스로 중요한 특징들을 이해하고 역할을 잘 나누어서 학습하는 것을 볼 수 있습니다.

DCGAN의 활성화 된 필터


그리고 논문에서는 정말로 이 필터들이 캐치한 데이터의 특징을 바탕으로 generator가 새로운 데이터를 생성하는 건지 증명하기 위해 재미있는 실험을 하나 진행합니다. 아래 그림의 위의 줄은 LSUN 데이터를 바탕으로 학습한 generator가 생성한 방의 모습입니다. 그리고 아래 줄의 그림은 CNN의 필터 중, 창문의 특징을 학습한 필터를 비활성화 한 후 generator가 생성한 방의 모습입니다. 여기서 놀라운 사실은 아래 그림에서 원래 창문이 들어가야할 자리에 모델이 문, 벽 등 다른 특징으로 채워 넣기 위해 노력한 모습이 보입니다. 즉 여기서 알 수 있는 사실은 DCGAN 모델은 "learning" 뿐 아니라 "forgotten"도 가능하다는 사실입니다. 이로써 DCGAN, 더 나아가 CNN의 모델이 black-box가 아니라는 것을 반박한 셈입니다.

위: 창문 필터 유지한 후 생성한 데이터, 아래: 창문 필터 제외 후 생성한 데이터



Walking in the latent space (잠재 공간)
DCGAN 논문에서는 generator가 생성한 데이터가 연속적으로 생성 되어야한다고 얘기합니다. 즉 이 말은 잘 학습된 모델이라면, generator 맨 처음에 넣어주는 잠재 변수가 존재하는 공간이 특정 의미를 지닌 semantic level의 연산도 잘 할 것이라는 이야기가 됩니다. 예를 들어 우리는 "woman-queen", "man-king"의 쌍을 본다면 의미론적으로, 감각적으로 어떠한 규칙이 있는지 알 수 있습니다. 하지만 이런 의미론적인 것을 모델도 할 수 있다는 것인데요. 가장 유명한 예시는 자연어 처리 NLP 공부를 하신 분들이라면 word2vec을 아실 것입니다. Word2vec은 아래 그림처럼 모델도 단어의 의미를 잘 파악하여 벡터와같이 연산을 할 수 있는 모델입니다.

Word2vec 예시, 출처: Mikolov et al., NAACL HLT, 2013


즉 DCGAN으로도 저런 의미론적인 연산이 가능하다는 것인데, 아래 그림을 보면 그 예시를 확인할 수 있습니다. "안경 쓴 남자"를 생성하는 잠재 변수에 "안경을 쓰지 않는 남자"를 생성하는 잠재 변수를 빼줘서 나온 최종 잠재 변수를 generator에 넣으면, generator는 "안경을 쓴 여자"의 모습을 생성하는 것입니다. 여기서 계속 잠재 변수라고 하였지만, 사실은 잠재 변수는 Gaussian noise에 불과합니다. 대신 generator 모델이 잠재 변수의 어떤 특징을 잘 파악하여 특정 이미지로 mapping을 하는데, 이러한 함수가 의미론 적인 것을 잘 파악하고 mapping 하고 있다는 사실이 중요한 것입니다.

DCGAN의 semantic 연산


추가로 DCGAN은 저러한 연산 뿐만이 아니라 구체적인 의미도 이해를 한 것을 보여줍니다. 아래 그림은 DCGAN은 "turing"의 의미도 안다는 것을 보여줍니다. "오른쪽을 보는 사람 얼굴"을 생성하는 잠재 변수와 "왼쪽을 보는 사람 얼굴"을 생성하는 잠재 변수를 interpolate 하여 나온 잠재 변수 결과를 바탕으로 generator에 넣었을 때, 회전하는 모습의 데이터를 순차적으로 생성하는 것을 보여줍니다. 즉 DCGAN 모델이 의미론 적인 부분을 잘 이해한다는 것을 뒷받침 해주고 있습니다.

"Turning"을 이해한 DCGAN


그리고 위의 그림의 예시와 비슷하지만, 특정 잠재 변수 두 개를 선택하여 interpolate 하여 생성한 그 사이의 잠재 변수를 generator에 넣어준다면, 생성되는 이미지는 순차적으로 변해야 한다고 주장합니다. 위의 그림도 오른쪽에서 왼쪽으로 서서히 변하는 모습을 보여주고, 아래 그림에서도 특정 방을 내어주는 두 개의 잠재 변수를 그 사이에서 서서히 변화시켰을 때, 서로 다른 두 방의 모습이 서서히 변하는 것을 볼 수 있습니다. 논문에서는 이러한 현상을 walking in the latent space라고 표하고, 이는 모델이 데이터를 기억하고 있지 않다는 것을 방증합니다.

Walking in the latent space



Unsupervised Learning 적용 및 성능 비교
그리고 DCGAN은 unsupervised learning에 있어서도 상당한 성능을 보여주었습니다. 아래 그림은 10가지의 카테고리의 데이터를 가지는 CIFAR10 dataset에 대한 결과입니다. DCGAN을 CIFAR10의 특징 추출기로 사용하여 그 결과를 pretrained 분류기에 적용을 하였는데, 83 %에 가까운 성능이라는 놀라운 결과를 보여줍니다. 여기서 더 중요한 점은, DCGAN은 CIFAR10을 훈련하지 않았으며, ImageNet dataset으로만 학습하였다는 점입니다. 즉 보지도 않은 데이터의 특징을 추출하여 사전 훈련된 분류 모델에 넣었을 때 상당한 결과가 나온 것에 의의를 두면서, CNN이 unsupervised learning에도 상당한 경쟁력이 있다는 것을 증명합니다.

Unsupervised 분류 결과



생성 모델이 데이터를 기억하지 않는다는 것을 증명
아래에서 DCGAN의 1 epoch 때 생성한 결과를 보면 방의 모습과 흡사한 것을 볼 수 있습니다. 1 epoch 임에도 불구하고 방과 흡사한 모습을 생성한 것을 증거로 모델이 overfitting (과적합) 되지 않았으며, 데이터를 기억하지 않는다는 것을 증명합니다.

DCGAN의 LSUN 데이터 생성 결과




아래는 DCGAN 논문입니다.



DCGAN은 GAN의 불안정성을 어느정도 해소하였고, 모델이 semantic한 부분을 이해하고 생성한다는 것을 증명한 데 있어 매우 큰 의의를 가지는 연구입니다. 다음에는 이러한 DCGAN 구현을 해보겠습니다.

태그 #DCGAN #Semantic #생성모델
다음글 ⟩
Deep Convolutional Generative Adversarial Network (DCGAN) 구현 및 CelebA 생성