Unsupervised representation learning with DCGAN (2016) : 논문 리뷰

 

Supervised learning 문제에서 매우 효과적이었던 CNN을 이용해서  unsupervised learning을 진행해보려 했다. 우리는 Deep convolutional adversarial pair가 이미지에서 오브젝트의 작은 부분에서 scene전체에 이르는 hierarchy를 학습했다는 것을 보였다. 또한 우리는 이렇게 학습한 feature를 새로운 task에 적용해봄으로써, general한  image representation이 될 수 있음을 보였다.

 

1_ Introduction 

  • Convolutional GAN의 architectural topology에 constraint를 설정하고 평가한다. (이 constraint들은 학습을 stable하게 해주도록 설정된 것.) : 이런 architecture를 Deep Convolutional GAN이라고 명명하겠다.
  • 학습된 discriminator를 사용해서 image classification task를 수행한 뒤, 다른 unsupervised algorithm에 대한 비교우위를 보이겠다.
  • GAN 으로 학습된 filter를 시각화해서 특정 filter들이 특정 오브젝트를 그리도록 학습되었다는 것을 보이겠다.
  • Generator들이 벡터 연산에 관한 흥미로운 특성을 보인다는 것을 발견했다. 이는 Sample generation에 semantic한 quality를 조종할 수 있는 특성이다.

 

2_ Related work

많은 연구가 있었다. 일단 스킵.

 

3_Approach and model architecture

GAN에 CNN을 활용하는 방식은 원래 성공적이지 못했다.

하지만 우리는 CNN architecture에 관한 최근의(2016년) 3가지 성공적인 변화를 도입했다.

 

(1) All convolutional net :

  • deterministic한 spatial pooling function(maxpooling같은) 를 strided convolution으로 대체 -> 네트워크가 알아서 spatial한 down sampling을 학습하도록 함.
  • 우리는 이것을 generator에도 적용해서 스스로 spatial한 upsampling을 학습하도록 함.

 

(2) Convolutional feature 위에 fully connected layer를 제거하는 방식. :

  • 이에 대한 대표적인 예는 image classification의 state-of-the-art 모델들에서 사용된 global average pooling 방식이다.
  • 우리는 global average pooling이 stability는 증가시켜줬지만, convergence 속도는 감소시켰다는 것을 발견했다.
  • 마지막 convolutional feature를 직접 generator와 discriminator의 input과 output에 각각 연결하는 방식 (중도적인 방식)이 좋은 결과를 가져다 주었다.
  • GAN의 첫 레이어(uniform distribution에서의 noise z를 인풋으로 받는)가 fully connected layer라고 여겨질 수 있다. (just 행렬곱이기 때문에) 하지만 결과값은 4-dimensional tensor로 reshape되고, convolution task의 출발지점으로 사용된다.

  • Discriminator에서는, 마지막 convolution 레이어가 flatten되고 하나의 sigmoid output에 넣어진다.

 

(3) Batch normalization :

  • 네트워크의 각 유닛에 들어가는 input을 normalize해서 0 mean / unit variance를 갖게 하는 방식. -> 학습을 stabilize하는 효과
  • Initialization이 잘 되지 않은 경우에도 학습이 잘 이루어지도록 돕는다.
  • Deep한 모델에서도 gradient flow가 잘 이루어지도록 돕는다.
  • 이 방법이 deep generator가 제대로 작동하도록 하는데 핵심 역할을 했다. 보통 GAN모델에서 많이 일어나는 문제 – generate된 샘플들이 한 point에만 집중되어 나타나는 문제 – 를 방지해주는 역할을 했다.
  • 모든 레이어에 batch normalization을 바로 적용하는 것은 ‘sample oscillation’문제와 불안정성을 야기했다. 하지만 generator의 output과 discriminator의 input에만 batch normalization을 적용하면 이런 문제가 일어나지 않았다.

(4) ReLU activation

  • 그 외, 최종 아웃풋 레이어 (Tanh function 사용)를 제외하고는  ReLU activation을 사용했다.
  • Bounded activation을 사용하는 것은 training distribution의 color space를 모두 커버하고 saturate하도록 더 빨리 학습하게 한다는 것을 발견했다.
  • Discriminator에서 leaky ReLU를 사용했는데, 특히 resolution이 높은 모델에 더 효과적이었다.
  • 참고로 original GAN에서는 maxout activation을 사용했다.

 

<Architecture guidelines for stable Deep Convolutional GANs>

  • Replace any pooling layers with strided convolutions (discriminator) and fractional-strided convolutions (generator).
  • Use batchnorm in both the generator and the discriminator.
  • Remove fully connected hidden layers for deeper architectures.
  • Use ReLU activation in generator for all layers except for the output, which uses Tanh.
  • Use LeakyReLU activation in the discriminator for all layers.

 

 

Screen Shot 2017-06-03 at 3.52.10 PM.png

 

 

4_ Details of adversarial training 

우리는 LSUN, Imagenet-1k, 그리고 우리가 만든 Faces dataset, 이렇게 세가지 데이터에 대해서 DCGAN을 학습해보았다.

  • 이미지들에 대해 tanh activation의 range인 [-1, 1]로 스케일링했다. 그 외에는 pre-processing 작업은 하지 않았다.
  • 모든 모델은 mini-batch (128개씩) SGD(stochastic grandient descent)으로 학습하였다.
  • 모든 weight값들은 Normal distribution (zero-centered/sd=0.02)으로 초기화하였다.
  • Leaky ReLU의 leak 부분의 slope은 0.2로 설정하였다.
  • 기존 GAN은 momentum을 사용해서 학습속도를 높였지만, 우리는 Adam optimizer를 사용하였다.
  • Learning rate는 기존에 사용되던 0.001이 너무 높았기 때문에 0.0002로 사용하였다.
  • Momentum term β1를 0.9 값으로 두는 것이 oscillation과 instability를 초래한다는 것을 발견했고, 0.5로 낮추는 것이 더 나은 학습을 가능하게 했다.

 

4_1 LSUN 에 대한 학습

GAN을 사용해서 generated sample의 시각적인 퀄리티는 높아졌지만, overfitting과 memorization 문제가 제기되었다.

우리의 모델이 더 많은 데이터와 높은 resolution에 대응할 수 있다는 것을 보이기 위해, 우리는 약 3백만개의 training example로 구성된 LSUN의 침대 dataset을 사용해서 학습했다.

최근 모델이 얼마나 빨리 학습하느냐와 얼마나 generalization이 좋으냐에 대한 상관관계에 대한 연구가 이루어졌다. (Train faster, generalize better: Stability of stochastic gradient descent, https://arxiv.org/abs/1509.01240) 우리는 한 epoch의 학습으로 얻은 sample들(online 학습처럼)과, converge한 모델에서 얻은 sample들을 비교해보았다.

Screen Shot 2017-06-03 at 5.01.07 PM.png

: 한 epoch 이후에 generate한 sample들. 이론적으로는 모델이 training example을 memorize하도록 학습이 될 수도 있다. 하지만 작은 learning rate로 mini-batch SGD 학습을 진행한 결과 그렇지 않음을 알 수 있었다. 우리는 작은 learning rate의 mini-batch SGD방식이 memorization라는 어떤 증거도 보여주지 않는다는 어떤 사전 경험적 증거도 알지 못한다.

Screen Shot 2017-06-03 at 5.01.16 PM.png

: 5 epoch 이후에(converge 후에) generate한 sample들. 여러 샘플들에서 반복적으로 노이즈가 있음을 볼 수 있다. 이는 시각적으로 under-fitting의 증거가 된다.

 

이를 비교해볼 때, 우리 모델이 overfitting이나 memorizing을 통해서 좋은 결과를 내는 것이 아님을 알 수 있다. 이미지에는 아무런 data augmentation을 적용하지 않았다.

 

4_1_1 Deduplication 

Generator가 input example을 memorize할 likelihood를 더 감소시키기 위해, 우리는 간단한 image de-duplication process를 적용했다.

우리는 3072-128-3072 de-noising dropout regularized ReLU autoencoder를 32 x 32 downsampled center-crop 부분들에 적용했다. (즉, center crop부분을 unsupervised learning으로 generate해서 어느정도 generalize 했다는 뜻. 그건 그렇고 이게 간단한 거냐..) 그리고 이 결과값인 code layer activation에 대해 ReLU activation에 threshold를 둠으로써 이진화했다. : 이 방식은 information을 보존하는 효과적인 방법 (Understanding Locally Competitive Networks, https://arxiv.org/abs/1410.1165) 이고, semantic-hashing을 하는 편리한 form을 제공함으로써 linear time으로 de-duplication을 가능하게 해준다.

Hash collision에 대한 시각적 관찰을 해보면 100개중 1개 정도의 false positive를 보이는 높은 precision을 볼 수 있다.

추가적으로, 이 방법은 약 275,000개의 duplicate를 발견해서 제거하였고, 이는 높은 recall값을 보여준다고 할 수 있다.

 

4_2 Faces

우리는 자체적으로 face 데이터셋을 만들었다. 웹에서 스크랩한 이미지에서 OpenCV를 사용해 얼굴 부분만을(box) 얻어낸 350,000개의 데이터를 확보했다. 이 역시 data augmentation은 전혀 사용하지 않았다.

 

4_3 Imagenet 1-k

Imagenet 1-k 데이터셋도 사용했다. (http://image-net.org/about-publication) 우리는 32 x 32로 min-resize한 center-crop을 사용했다.  data augmentation은 전혀 사용하지 않았다.

 

 

5_ Empirical validataion of DCGANs capabilities

 

5_1 GAN을 feature extractor로 사용해서 CIFAR-10에 대한 classification 문제 수행

Unsupervised learning의 퀄리티를 측정하는 일반적인 방법은 이를 feature extractor로 사용해서 supervised learning의 결과값을 평가해보는 것이다.

CIFAR-10 dataset 문제에 대해 제일 기본이 되는 방법은 K-means 방법으로 feature를 뽑아내는 single layer를 사용하는 방법이다. 4800개 정도의 큰 feature map을 사용하면 80.6%의 정확도를 얻을 수 있다. Multi-layer로 feature extraction을 수행하면 82.0%까지 올릴 수 있다.

DCGAN으로 학습한 representation들의 퀄리티를 평가하기 위해, 우리는 Imagenet 1-k에 대해 학습시킨 후에 discriminator의 모든 레이어에서의 convolutional feature를 사용했다. 각 레이어의 representation을 maxpooling해서 4 x 4 spatial grid를 뽑아냈다. 이 feature들을 flatten / concatenate해서 28672 dimension의 벡터를 만들었고, regularized linear L2-SVM 모델을 그 위에다가 적용했다. 이 모델은 82.8%의 정확도를 보임으로써 K-means방식을 사용한 모델들을 모두 이겼다.

주목할 만한 것은, discriminator는 훨씬 적은 수의 feature map을 사용했다는 것인데(가장 많은 레이어가 512개), 사실 총 feature vector 크기는 훨씬 커진다. (4 x 4 spatial 영역을 보는 여러개의 레이어로 이루어져 있으므로)

DCGAN을 사용한 방법은 사실 Exemplar CNN보다는 더 낮은 결과치를 보여준다. (Discriminative unsupervised feature learning with exemplar convolutional neural networks) 이 테크닉은 평범한 discriminator CNN을 unsupervised 방식으로 학습시켜서 exemplar sample을(특별히 골라서 매우 augment시킨 sample들) source dataset과 구분하는 방법이다.

Discriminator의 representation들을 finetuning함으로써 더 나은 결과를 얻을 수도 있지만 나중에 해보겠다. (..)

추가적으로 우리 DCGAN 모델은 CIFAR-10 dataset으로 학습시킨 것이 아니기 때문에, 학습된 feature들이 domain robust한 녀석들이라는 것도 알 수 있다.

 

5_2 GAN을 feature extractor로 사용해서 SVHN digit classification 문제 수행

Label된 데이터가 부족한 편인 SVHN (Street View House Number) 문제에도 적용해보았다. CIFAR-10때와 비슷한 방식으로 데이터를 준비했다. 10,000 example을 validation set으로 나누어서 이를 여러 hyperparameter와 model selection을 위해 사용했다.

1000개의 (class가 uniform하게 distribute된) 데이터를 무작위로 선택해서 regularized linear L2-SVM 모델을 적용했는데, 여기에 우리의 feature exractor pipeline을 마찬가지로 적용했다.

이 모델은 state of the art성능을 보여주었다. (22.48% text error) 또다른 모델 (CNN의 변형을 사용해서 unlabeled data의 영향력을 올려주는 모델)보다 나은 성능을 보였다.

추가적으로 우리는 같은 architecture의 purely supervised CNN모델을 만들어서(64개의 hyperparameter set을 랜덤하게 적용해서 optimize해봄.) 비교함으로써, DCGAN에서 사용한 CNN의 architecture가 성능 개선의 핵심 역할을 하는 게 아님을 보였다. 우리 모델이 28.87%라는 훨씬 나은 성능을 보였다.

 

6_ 네트워크 내부에 대한 조사와 시각화

학습된 generator와 discriminator의 내부를 여러가지 방식으로 조사해보았다. Training set에 대해서 nearest neighbor search는 수행하지 않았다. 픽셀값이나 feature space에서 nearest neighbor 방식은 A note on the evaluation of generative models 논문에 따르면  (https://arxiv.org/abs/1511.01844) 보통 작은 image transform이 일어나기 때문에 부정확한 결과를 내어준다.

마찬가지로 log-likelihood metric로도 모델을 정량평가하지 않았다. (같은 논문에서 이것이 큰 의미 없다고 나와있음.)

 

6_1 Latent space를 따라 걸어가보자.

먼저 우리는 latent space의 지형이 어떻게 구성되어 있는지 이해해보고자 했다.(따라 걸어보자..) 보통 학습된 부분에 대해 다면적으로 ‘따라 걸어보면’  memorization 여부를 알 수 있다. (sharp한 transition이 있으면 memorization이 이루어졌다는 의미) 또한 space가 계층적으로  collapsed된 방식에 대해서도 알 수 있다.

Latent space를 따라 걷는 것이 image generation에 있어서 semantic한 변화를 보여준다면,(semantic하다는 것은 특정 object가 추가되거나 제거된다던지 하는 류의 변화) 우리는 모델이 실제적으로 이미지 생성에 관련되고 흥미로운 representation을 학습했다고 여길 수 있는 것이다. 다음 이미지를 통해 확인해보자.

Screen Shot 2017-06-04 at 4.49.22 PM.png Latent space Z에서 랜덤한 포인트 10개를 뽑아서 그 사이에 9번의 interpolation을 수행한 결과. 이는 네트워크가 smooth한 transition을 학습했다는 것을 보여준다. (interpolation 사이의 각 이미지는 충분히 침실처럼 보인다.)

예를 들어 6번째 row를 보면, 창문이 없는 방이 천천히 큰 창문이 있는 방으로 변해가는 과정을 볼 수 있다. 10번째 row를 보면, TV처럼 보이는 물체가 창문으로 점차 변화하는 것도 볼 수 있다.

 

6_2 Discriminator의 feature에 대한 시각화

Visualizing and Understanding Convolutional Networks 논문을 보면, 큰 이미지 데이터셋에 대해 학습한(unsupervised learning) CNN이 매우 강력한 feature를 보여줌을 알 수 있다. (https://arxiv.org/abs/1311.2901)

또한, scene classification에 대해 학습한(supervised) CNN은 object detector를 학습했음을 알 수 있다. (Learning and transferring mid-level image representations using convolutional neural networks, http://lear.inrialpes.fr/workshop/allegro/slides/oquab.pdf)

우리는 큰 이미지 데이터셋에 대해 unsupervised 학습한 DCGAN 또한 매우 흥미로운 feature의 계층구조를 학습했음을 발견했다. Guided backpropagation을 사용해서 우리는 discriminator를 시각화했는데, 침실의 특정 부분(침대나 창문 같은)에서 activate되는 feature를 볼 수 있었다.  다음 이미지를 보자. (비교를 위해, 우리는 같은 이미지에 대해서 random하게 intialize한 feature의 activation값들도 같이 첨부했다. )

Screen Shot 2017-06-04 at 5.12.26 PM.png

 

Guided backpropagation을 사용한 시각화. : Discriminator의 마지막 레이어에서 첫 6개의 convolutional feature에 대해 maximal axis-aligned response를 시각화한 것.

LSUN 침실 데이터셋에서 중심이 되는 오브젝트인 침대에 대해서 반응하는 특정한 소수의 feature들이 있음을 볼 수 있다.

(참고로 왼쪽의 랜덤하게 초기화한 feature에서는 어떤 구분을 하기 위한 feature response를 보이지 않는다.)

 

 

6_3 Generator representation을 가지고 이상한 짓을 해보자.

 

6_3_1 특정 오브젝트를 그리는 것을 잊어버리도록 해보자.

지금까지 discriminator가 학습한 representation을 봤다. 그럼 generator는 어떤 것을 학습했을까. Generate된 샘플의 퀄리티를 보면 generator가 scene에서 중요한 오브젝트들(침대, 창문, 램프, 문, 가구 등)에 대한 representation을 학습했다는 것을 알 수 있다.

이 representation들이 학습된 구조를 파헤쳐보기 위해, 우리는 generator에서 창문을 제거하는 시도를 해보았다.

우리는 150 개의 샘플에서 52개의 창문에 대한 bounding box를 직접 그려넣었다.

그리고는 두번째로 높은 convolution 레이어 feature에서, logistic regression(창문에 대한 feature activation이 일어났는지 여부에 대한 regression)을 fit했다.

: 우리가 그려넣은 bounding box 내부에서는 activation값이 positive하고 같은 이미지에서 random한 샘플들은 negative하도록 학습시켰다.

이런 간단한(?) 모델을 통해서, 0보다 큰 weight값들로 이루어진 feature map들은(전부 200개였다.) 모두 drop하였다. (모든 spatial location에서)

그리고 난 후, 새로 랜덤한 sample을 generate해보았다. (feature map을 제거한 버전 / 제거하지 않은 버전 둘다 해보았다.)

 

Window dropout을 적용한 / 적용하지 않은 generated image는 다음 그림에서 비교해볼 수 있다.

Screen Shot 2017-06-04 at 5.33.39 PM.png

흥미롭게도, 네트워크는 창문을 그리는 것을 잊어버리고, 그 위치에 다른 오브젝트로 채워 넣었다!

 

6_3_2 Face sample에 대한 vector arithmetic 연산

Distributed representations of words and phrases and their compositionality. (https://arxiv.org/abs/1310.4546) 논문에서는 representation space에서 매우 풍부한 linear structure를 발견했다. (이 space에서 간단한 arithmetic 연산을 수행함으로써) 대표적인 예로, vectore(“King”)에서 vector(“Man”)을 뺀 후 vector(“Woman”)을 더한 값은 nearest neighbor가 vector(“Queen”)이 되는 것을 보였다.

우리는 이런 structure가 우리의 generator의 Z representation에서도 보이는지 확인해보았다. 우리는 비슷한 arithmetic 연산을 특정 visual concept에서의 대표적인 샘플들에서 수행해보았다.

하나의 concept에 대해서 하나의 샘플에 대해 실험해보았을 경우에는 잘 동작하지 않았지만, 3개의 샘플에 대한 Z vector의 average값에 대해서 수행했을 때는 매우 안정적으로 결과값을 얻을 수 있었다. (arithmetic 연산에 대해 semantic한 결과값을 얻을 수 있었음.)

Screen Shot 2017-06-04 at 5.55.54 PM.png

이에 더해서, 우리는 face pose또한 Z space에서 모델링 될 수 있음을 보였다.

Screen Shot 2017-06-04 at 5.56.24 PM.png

이러한 예시들을 통해 우리는 재미있는 application을 시도해볼 수 있는 가능성을 볼 수 있다.

이전에 Learning to generate chairs with convolutional neural networks 논문에서는 (https://arxiv.org/abs/1411.5928) conditional generative model이 오브젝트의 scale, rotation, position 등과 같은 attribute들을 학습할 수 있다는 것을 보였다.

하지만 우리가 아는 바에 의하면 pure unsupervised learning에서 이런 attribute를 학습할 수 있음을 보인 것은 우리가 처음이다. 음하하.

이런 vector arithmetic 연산의 특성에 대해 더 연구를 한다면, 복잡한 이미지에 대한conditional generative 모델 학습에 필요한 데이터의 양을 매우 매우 줄일 수 있을 것이다.

 

7_ 결론 및 향후 과제

우리는 멋진 모델에 대한 architecture를 만들었다. 하지만 모델의 불안정한 부분들이 아직 남아 있다.

모델을 너무 오래 학습시키면, 때때로 몇몇 필터들이 하나의 oscillating mode에 빠지는 것을 볼 수 있었다. 이러한 불안정함을 해결해야 한다.

우리는 이 framework을 비디오(frame prediction)나 오디오(speech synthesis를 위한 pre-trained feature) 생성 모델 도메인으로 확장하는 것이 매우 흥미로울 것으로 생각한다.

또한 latent space의 특성에 대한 더 깊이 있는 조사도 흥미로운 연구주제일 것이다.

 

 

 

 

 

 

 

 

Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s