본문 바로가기

머신러닝 읽어주는 남자

Autoencoder, Variational Autoencoder 정의와 차이

반응형

AutoEncoder


대표적인 unsupervised 학습이자, dimension reduction 방법이다.

입력 A=> Encoder => 차원이 줄은 어떤 임베딩 이 나오고

차원이 줄은 임베딩 => Decoder => 입력 A 이 나오게하는 방법이다.

이는 말 그대로 그냥 dimension을 줄이는 것이 목표이기 때문에 데이터가 생성된 확률 분포에는 관심이 전혀없다.

그냥 앞뒤로 본인을 집어넣고 중간에 디맨젼이 줄은 값을 꺼내쓰는 방식이다. 

요약하면 autoencoder는 한 점을 만들어내고 그 점에서 다시 본인을 만들어내는 시스템이다


Variational Autoencoder


얼추보면 autoencoder랑 동일해보이나 가장 큰 차이는 데이터의 확률 분포를 찾는 것이다.

autoencoder는 한점을 만들지만 VAE는 확률 분포를 만들어 내고, 거기서 샘플을 하여 decoder를 통과 시켜 데이터를 다시 만들어낸다. 

완벽하게 비슷한 데이터를 만들기에는 불리할지 몰라도, 대신 비슷하고 다양한 데이터를 새롭게 생성할 수 있다.

참고로 위의 그림에서는 데이터가 만들어지는 확률 분포는 가우시안으로 가정하였다.


요약

AE: 데이터를 그냥 하나의 벡터로 재탄생 (주목적: dimension reduction)

VAE: 데이터가 만들어지는 확률 분포 찾기(주목적: 비슷한 데이터 생성, latent distribution 찾기 등등)


추가, Variational 이란?

Variational inference가 사용됐다는 말이다.

VI는 일반적으로 우리가 강연같은 곳에서 많이 볼 수 있다. 청중이 강연자에게 아주아주 어려운 질문했다고 생각해보자. 심지어 답을 하기 어려울 거 같은 질문 말이다. 그렇다고 답을 못 하면 조금 쪽팔리니 강연자는 능청스럽게 질문을 조금 쉽고 단순하게 변형한 이후 이 변형된 질문에 대해서 정확하게 답변을 해준다.


한 줄로 쉽게 말하면, posterior 분포를 바로 구하기 어려워, 이를 가우시안과 같은 다른 분포로 모사하는 것이다. 


이처럼 일반적으로 posterior를 단박에 구하고 싶지만, 그게 쉽지가 않다. X라는 데이터가 Z라는 latent variable로 부터 나왔다고 하면 우리가 궁금한건 바로 posterior인 P(Z|X)이다. 굳이 써보자면 




하지만 분모계산이 빡세다...ㅠ 이를 위해 MCMC를 많이쓰지만 파라미터가 많으면 너무 느려진다. 이럴 때는 Variational inference를 사용한다. VI는 variational distribution으로 posterior를 approximate하게된다. 
 

P(Z|X)Q(Z|V)=Q(Zi|Vi)

여기서 V는 variational distribution의 파라미터이다.  


일반적으로 실제 posterior 분포에서는 데이터가 주어졌을때 latent variable이 독립적이지 않아서 엘레먼트별로 곱셈으로 표현 불가능했지만, 각각의 latent variable이 각각의 분포에서 나온다고 생각하면 이를 곱셈으로 위와 같이 나타낼수 있다. 


여튼 이제는 목표는 실제 분포를 모사할 variational distribution이 최대한 실체 분포와 비슷해질수 있도록, KL이 최소화 되도록 이들의 분포의 파라미터를 학습하게 된다.


V=argminKL(Q(Z|V)||P(Z|X)

반응형

'머신러닝 읽어주는 남자' 카테고리의 다른 글

Adversarial examples  (0) 2019.01.15
NLP 관련 용어 총정리-1  (1) 2018.11.08
Zero shot Learning  (0) 2018.05.15
From AI to neuroscience  (0) 2018.05.12
Learning to rank  (0) 2018.05.02