평범한 필기장

[평범한 학부생이 하는 논문 리뷰] Unsupervised Representation Learning with Deep Convolutional Generative Adversarial Networks 본문

AI/GAN

[평범한 학부생이 하는 논문 리뷰] Unsupervised Representation Learning with Deep Convolutional Generative Adversarial Networks

junseok-rh 2023. 3. 25. 16:33

기존 vanilla GAN이 가지는 한계점

  • 학습이 불안정적이다.

 불안정적으로 학습이 되다보니, Generator와 Discriminator사이의 힘의 균형이 깨져 한쪽이 계속 이겨버리는 상황이 발생한다. 그러다 보니 Generator가 종종 어처구니없는 이미지를 생성하게 된다. 결국 우리가 원하는 결과를 얻을 수 없게 된다.

  • mode collapse

 GAN에서 Generator는 Discriminator를 속이는 방향으로 학습이 되는데 그러다 보니 데이터가 많은 이미지만 계속해서 생성하게 된다. 이렇게 되면 Discriminator를 속이는 것은 맞지만 다양한 이미지를 생성하는 것과는 맞지 않게 된다.

  • Black-Box 방식

 왜 이런 결과가 나왔는지 알 수 없다. 어떤 특징 때문에 이런 이미지가 생성됐는지? 이와 같은 것들을 알 수 없다.

 

이러한 GAN의 한계점을 극복하기 위한 연구를 이 논문에서 했다!!!

 

이 논문에서 개발한 모델 아키텍쳐를 DCGAN이라 부르는데 이 DCGAN이 가지는 기여점 4가지를 논문에서 소개했다.

  1. convolution 구조를 가지고 기존 vanilla GAN의 한계점을 극복했다.
  2. 다른 unsupervised 알고리즘들과의 경쟁적인 성능을 보이기위해 이미지 분류 task들에 이용했다.
  3. 특정한 필터가 특정한 object를 그리도록 학습됐다는 것을 보였다. (black-box 문제점을 어느정도 해결??)
  4. generator가 vector arithmetic인 특징을 가지는 것을 보였다.

이러한 기여점들에 대한 자세한 설명은 뒤에 나옵니다!

 

모델 구조

 

 이전까지 GAN모델에 CNN구조를 적용한 것들은 실패를 해왔다. 그런데 저자들의 extensive한 모델 탐구 후에 다양한 데이터셋에서 안정적으로 학습되고 더 고해상도이고 더 deep한 생성모델이 가능해졌다고 한다!

 이러한 작업들을 가능하게한 DCGAN의 구조를 알아보자.

 

1. maxpooling과 같은 deterministic spatial pooling function들 대신 strided convolution layer들만 사용

LSUN 데이터셋에서 사용된 Generator의 구조를 시각화 한 이미지

  Generator에서는 own spatial upsampling을, Discriminator에서는 own spatial downsampling을 학습시키기 위해서 각각 fractionally - strided convolutions와 strided convolutions를 사용했다.

 

** 여기서 fractionally-strided convolutions 란??

 Transposed convolution이라고도 불리는데 upsampling하는 기법? 중에 하나라고 생각하면 된다.

계산하는 방식은 아래와 같다고 보면 될 것 같다.

제가 악필이라 그 점은 양해 바랍니다 ㅜㅜ

아래 두 이미지는 strided convolution 과 fractional strided convolution의 연산 과정을 그림으로 표현한 것이다.

strided convolution 계산 과정을 matrix 연산으로 바꾼 이미지
fractional strided convolution 계산을 matrix 연산으로 표현한 이미지

 strided convolution 의 행렬 연산에서 양 변 앞에 C.T를 행렬 곱을 해주면 fractional strided convolution 의 행렬 연산식과 같아 진다. 이러한 이유로 Transposed convolution이라고도 부른다.

 

2. fully connected layer를 제거

 

Generator에서 input layer를 제외하고는 모든 FC layer는 모두 제거 했다. Discriminator 또한 마지막 layer를 제외하고는 FC layer를 모두 제거했다.

 

3. Batch Normalization

 

 Batch Normalization을 Generator의 output layer와 Discriminator의 input layer를 제외하고는 모든 layer에 적용했다. 이 두 layer에만 적용을 안한 이유는 적용을 하게되면 모델 불안정성이 발생하게 된다고 한다.

 Batch Normalization을 적용함으로써 학습이 안정적이게 되고 더 deep한 모델에서 gradient flow에 도움을 준다고 한다. 그리고 GAN의 문제점이였던 mode collapse를 예방한다고도 한다.

(gradient flow에 도움을 준다는 얘기는 아마 역전파가 더 잘돼서 학습이 더 잘된다라고 이해를 했는데 맞는건지 모르겠네요;;)

 

4. ReLU 함수를 활성화 함수로 사용

 Generator의 output layer에서 Tanh함수를 사용한 것을 제외하고는 모든 layer에서 ReLU함수를 사용했고, Discriminator에서는 모든 layer에서 Leaky ReLU를 사용했다. GAN에서 maxout함수를 사용한 것과는 다른 점을 보인다.

 

논문에 나와 있는 DCGAN 구조의 가이드 라인

 

실험 결과

 

 논문에서 많은 실험을 했다는데 그러한 실험을 통해 나온 결과가 가진 의미를 요약해봤다.

 

1. LSUN

 LSUN 데이터를 통해 학습 시켰을 때 나온 결과 들이다. 아래의 그림은 학습을 1번 반복했을 때 나온 이미지들이다.

 작은 learning rate와 미니배치 SGD로 학습을 했고, 에포크도 1회이기 때문에 모델이 memorization을 통해 이미지를 생성하지 않았다고 볼 수 있다.

 아래의 이미지들은 에포크를 5회로 두고 학습시켜서 생성한 이미지들이다.

 여러 이미지들에서 반복되는 noise texture들이 보이기 때문에 아직까지 under-fitting됐다는 증거라고 합니다. LSUN 데이터를 통해 모델이 memorization으로 이미지를 생성하는 것이 아니라는 것을 보여줬네요.

 

1.1 Deduplication

(이 부분은 확실하게 이해하진 못했습니다 ㅜㅜ)

 논문에서 Generator가 input 이미지들을 기억할 가능성을 줄이기 위해 이미지 중복 제거 과정을 수행했다고 합니다. 그 방식으로는 hash-collision을 이용했다고 합니다. 그래서 hash-collision이 일어나면 중복된 이미지라 판단하고 제거하는 방식인 듯 합니다.

 

2. Classify CIFAR-10 using GANs as a feature extractors

 

 위 결과를 보면 DCGAN 모델이 CIFAR-10으로 학습된 적이 없는데 성능이 나쁘지 않게 나온 것을 볼 수가 있다. 이러한 결과로 DCGAN모델이 domain robustness of the learned features를 가졌다는 것을 보였다.

 

3. Classify SVHN digits using GANs as a feature extractors

  supervised CNN with the same architecture와의 결과를 비교하면 error가 더 낮은 것을 볼 수 있는데, 이 결과를 통해 DCGAN에 사용된 CNN 구조는 모델 성능을 결정하는 가장 중요한 요소는 아닌 것을 알 수 있다.

 

Investigating and Visualizing the internals of the networks

 

1. Walking  in the latent space

 'walking in the latent space'라는 표현 자체가 (좀 문학적??이라 해야하나 ㅎㅎ) 뭐지?라는 느낌이 드는 표현인 것 같다. 논문에 나온 내용을 내 식대로 이해를 하면 input인 random noise Z를 살짝씩 변화를 시키면 output이미지도 그에 맞게 자연스럽게 변한다라고 받아들였다. 만약에 모델이 memorization을 했다면 Z를 살짝 변화 시켜도 갑작스러운 (논문에서는 sharp transition이라고 표현했다) 변화를 가진 이미지를 output으로 내놨을 것이다. 이를 통해 DCGAN 모델은 relevant and interesting representations를 학습했다고 추론할 수 있다. 

6번째 줄의 이미지들을 보면 변화되면서 창문이 생기는 것을 볼 수 있고, 10번째 줄의 이미지를 보면 TV가 자연스럽게 창문으로 변화되는 것을 볼 수 있다.

2. Visualizing the Discriminator features

  특정 필터가 특정 부분을 활성화 시키는 것을 발견했다.

 

3. Manipulating the Generator representations

3.1 Forgetting to draw certain objects

 feature map에 Bounding Box regression을 적용해서 window를 활성화하는 feature map을 찾아 그 feature map을 제거해서 feature map이 제거된 Generator로 이미지를 생성해 feature map이 제거 되기 전의 Generator가 생성한 이미지와 비교해서 특정 object를 Generator가 잊는지를 보인 것 같다.

 아래의 그림에서 보이는 것과 같이 창문을 활성화 하는 feature map을 제거한 Generator는 어색하지만 창문 없는 이미지를 생성한다. 어떤 이미지들은 창문을 TV와 같은 다른 물체로 대체한 것을 볼 수 있다.

 

 3.2 Vector arithmetic on face samples

 DCGAN에서 vector arithmetic이 사용될 수 있다는 것을 보였다.

 Vector arithmetic이 뭔지를 간단히 예를 가지고 설명하면, vector('King')은 'King'이라는 단어를 나타나는 벡터라 하면

vector('King') - vector('Man') + vector('Woman') = vector('Queen')

라는 벡터 연산이라고 이해하면 쉽다.

이러한 연산이 DCGAN에서는 어떻게 적용되었는가를 살펴보면 웃는 여자를 생성하는 noise Z 벡터 3개의 평균 벡터에서 그냥 여자를 생성하는 Z 벡터 3개의 평균 벡터를 빼고 그냥 남자를 생성하는 Z 벡터 3개의 평균 벡터를 더한 벡터를 Generator에 넣어주면 그 결과로 웃는 남자의 이미지를 생성한다는 것으로 보였다.

 

 이미지를 회전시켜보는 작업도 수행해봤는데, 왼쪽을 보는 이미지들의 평균 벡터와 오른쪽을 보는 이미지들의 평균 벡터를 잇는 축으로 input 벡터들을 interpolate시켜서 이미지를 생성해보면 아래와 같이 얼굴이 회전하는 결과를 보였다. 

 이와 같은 vector arithmetic를 더 탐구하고 발전하면 복잡한 이미지 분포를 통한 생성모델의 학습에서 필요해지는 이미지셋의 양을 많이 줄일 수 있을 것이라는 기대를 가진다.

 

결론

 DCGAN도 여전히 불안정성과 mode collapse에 대한 문제점을 드러내고 있지만 앞에서 봤듯이 흥미로운 점들이 많았다. 현재 나와있는 여러 GAN모델들은 DCGAN을 기초로 하고있다고 한다.

 

 

 

 제가 공부하기 위해 정리한 글이지만 보시는 분들에게도 많은 도움이 됐으면 좋겠습니다. 앞으로도 종종 제가 읽은 논문들을 정리해서 올려보도록 하겠습니다.

 정리도 안됐고 긴 글이지만 읽어주셔서 감사합니다~

피드백은 언제나 환영입니다!