Posts List

[머신러닝/딥러닝] 12-1. Deep Generative Models - Prescribed model

Deep Generative Models

지금까지 우리가 다룬 모델은 Data를 인식해서 Label을 예측하는 Discriminative Model 이었다.
(Recognizing data via discriminative models)

Generative Model은 그 반대다. 즉, Label 혹은 임의의 변수(latent variable)로부터 Data를 생성하는 기법이다.
(Creating data via generative models)

Generative model은 현재도 활발히 연구되고 있는 분야이며, 대표적인 High technique로 분류된다. 물론 아직은 이렇다할 commercial 활용 사례는 별로 없지만, 아래 분야에 적용할 수 있을 것으로 보인다.

  • Learning disentangled & interpretable representations
    : 단편의 이미지를 학습한 후 3D 차원의 이미지를 생성
    (ex. 표정, 각도, 조명에 따른 예측할 수 있는 Image 생성)
    (X. Chen et al(2016), "InfoGAN: Interpretable Representation Learning by Information Maximizing Generative Adversarial Nets," NIPS)

  • Image Generation
    : 이미지의 패턴을 학습하여 유사한 패턴을 가지는 새로운 이미지를 생성
    (Tero Karras et al. (2018), "Progressive growing of GANs for improved quality, stability, and variation," ICLR)

  • Image Inpainting
    : 손상/훼손된 이미지를 복원하거나, 저 해상도의 이미지의 고품질화
    (Raymond A. Yeh et al (2017), "Semantic Image Inpainting with Deep Generative Models," CVPR)

  • eCommerceGAN
    : Amazon은 대량 고객정보 분석을 위해 평소 고객정보와 유사한 가상의 고객데이터를 Generative model로 생성했다.
    (A. Kumar, A. Biawas, and S. Sanyal (2018), "eCommerceGAN: A Generative Adversarial Network for E-commerce," Preprint arXiv:1801.03244)

참고로 위에서 언급한 논문을 잘 보면 GAN(Generative Adversarial Net)이란 단어가 많이 보인다. 

다음 포스팅에서 자세하게 다룰 GAN은 실제로 2018년 10 Breakthrough Technologies에 선정될 만큼 획기적인 발견이었고, 지금도 활발한 연구가 진행되고 있다.

Prescribed models vs. Implicit models

Generative model의 목적은 분명하다.

모델이 만든 데이터(x)의 분포와 실제 데이터(x)의 분포가 최대한 똑같게 만드는 것이다. 

그리고 위 목적을 달성하기 위한 2가지 접근법이 있다.

1. Prescribed model

 - 모델과 데이터간 분포의 비유사성(KL-Divergence)를 최소화 하는 모델을 찾는다.
   (Parameterized Distribution)

※ 두 벡터의 비유사성을 '거리(Distance)'로 표현한다면, 두 분포의 비유사성은 KL-Divergence로 표현한다. Decision Tree의 Entropy에서 설명했음으로 자세한 설명은 생략한다.

 - ex. PixelRNN, PixelCNN, AutoEncoder(AE), Variational AutoEncoder(VAE)

2. Implicit model

 - Deterministic한 function을 학습하는 것이다. (Generator network)

 - Parameterized된 Distribution의 파라미터를 구하는 것이 아니라,

   예측된 데이터가 원본 데이터의 분포와 비슷하도록 모델 파라미터를 학습한다.

 - ex. GAN (Generative Adversarial Network)

이번 포스팅에서는 Prescribed model의 대표주자인 AE, VAE에 대해서 알아보자.


Autoencoder

Encoder-Decoder의 개념은 이제 익숙할 것이라 생각한다.

Encode는 암호(code)를 만드는 행위고 Decode는 암호를 해독하는 행위를 의미하는데,

위 그림처럼 input x를 잠재변수(latent variable) z로 암호화하고, z를 다시 reconstructed x로 만드는 모델 역시 Encoder-Decoder구조라 할 수 있으며, 

위 그림처럼 Encoding된 Feature를 Decoder가 학습해 Generation하는 모델을 Autoencoder라 한다.

물론 Encoder-Decoder 내부를 Conv+Sub-samping - DeConv+Up-sampling과 같이 자유롭게 구성할 수 있다.

이 때 Encoder와 Decoder는 reconstruction error를 최소화 하기 위해 학습되는데, 잘 살펴보면 label y가 없다. 단지 reconst. x가 원본 x를 얼마나 잘 표현했는지만 보고 Encoder / Decoder가 학습된다.

즉, Generative model은 대표적인 un-supervised learning model이라고 할 수 있다.

[Figure source: Joseph Rocca, 2019]

하지만 Autoencoder에도 분명한 한계가 존재하는데 위 그림이 아주 잘 설명하고 있다.

만약 Encoder에서 3개 도형을 잘 학습해서 latent variable z를 잘 뽑았는데, 만약에 3개 도형과는 조금 다른(보라색) 입력을 Decoder에 준다면 AE는 납득할 수 없는 형상을 Generation한다.

즉, AE는 무조건 원본 데이터의 분포만 잘 따르도록 학습되기 때문에 일반화(Generalization)가 필요하다.

그래서 AE는 보통 Generative model로써 사용하지 않고, Encoder만 분리해서 Input 데이터의 Feature를 추출할때 사용한다. (마치 PCA처럼)


Variational Autoencoder

(D. P. Kingma and M. Welling (2014), "Auto-encoding variational Bayes," NIPS)

그래서 고안된 것이 바로 Variational Autoencoder이다.

위 그림을 보면 Encoder는 바로 latent variable을 만드는 것이 아니라 Encoding 된 이미지의 평균과 분산을 학습하는 레이어가 추가 되었다.     
(그림에는 분산이 아니라 표준편차로 표현되어 있지만, 제곱하면 같은 뜻이니 신경쓰지 말자.)

즉, 데이터가 Gaussian 분포를 가질 것이란 것을 가정하고, 학습될 수 있는 parameterized 평균과 분산을 두었다. 그럼 학습을 반복할수록 원본 이미지의 평균과 분산을 잘 학습하게 될 것이다. 그래서 Probabilistic AE라고도 불린다.

그리고 평균과 분산이 적용된 latent variable을 Decoder가 학습하기 때문에, 

원본데이터와 다른 random variable을 입력으로 주더라도, 분포 내에서 합당한 데이터를 generation 할 수 있게 된다. 즉, AE의 일반화(Generalization)된 효과를 얻을 수 있다.

물론 평균과 분산 자체를 학습(미분이 필요하다.)할 순 없기 때문에 위와 같이 Reparameterization Trick을 통해 latent variable을 생성해준다. (z = 평균 + 표준편차 * noise)

그럼 VAE의 학습을 위한 목적함수를 알아보도록 하자. 

(굳이 수학적인 학습방법을 알고 싶지 않으면 넘어가도 좋다. 사실 이 포스팅에도 자세히 다루지 않는다.)

먼저 Encoder/Decoder 모델을 위와 같이 conditional distribution 확률 모델로 정의하자.

  • Gaussian 분포를 갖는 latent variable z를 통해 x를 생성하는 Decoder

  • Gaussian 분포를 갖는 원본 데이터 x를 통해 latent variable z를 생성하는 Encoder

우리의 목표는 데이터의 분포 p(x)에 모델을 적합시키는 것이다. (data likelihood) 

  • p(x)를 bayes rule로 전개하고,
  • 분자 분모에 q(z | x)를 곱해서 정리하면,
  • p(x)는 Evidence Lower BOund (ELBO)와 두 분포간의 거리로 나타낼 수 있다.

위 식에서 KL-divergence는 항상 0보다 크다. (두 분포간의 거리는 항상 > 0)

결국 ELBO항을 최적화 하는 문제로 변경된다.

앞의 수식과 ELBO항을 결합하여 해석해보자.

위식의 두 확률 분포사이의 거리는 항상 0이상임으로 앞의 2개 항을 최대화하는 최적화 문제로 풀 수 있다. (부호를 바꾸면 최소화 문제로 볼 수도 있다.)

그렇다고 한다.. 나중에 좀 더 알고싶으면 아래 블로그를 참고해서 더 공부하도록 하자.

1) Steve-Lee's Deep Insight

2) T E N S O R M S A

VEA를 마무리하기전에 정리하면,

  • VAE는 최적화 함수에서 볼 수 있듯, 평가 기준이 명확하기 때문에 GAN에 비해 학습이 안정적인 편이다.
  • 하지만 출력이 선명하지 않고, 평균값으로 표시되는 문제,
  • reparameterization trick을 모든 경우에 적용할 수 없다는 점이 단점이다.
    (데이터가 Gaussian 분포 가정을 많이 벗어나면 의미가 없다.)

※ VAE의 성능을 향상시키기 위해 아래와 같은 시도가 있으니 참고하도록 하자.

 - Conditional VAE

 - Regularized Autoencoder (RAE)

 - Noisy Gradients

 - Neural Statistician


댓글 쓰기

0 댓글