이 글은 이활석님의 'AutoEncoder의 모든 것'에 대한 강의 자료를 바탕으로 학습을 하며 정리한 문서입니다. https://youtu.be/rNh2CrTFpm4
[Steve-Lee's Deep Insight:티스토리] https://deepinsight.tistory.com/127?category=842339 내용을 참고하였습니다.
Variational AutoEncoder
Generative Model이란?
- 새로운 data instance를 생성할 수 있다.
- Discriminative model은 data instance 종류에 따라 나눌 수 있다.
- Generative models는 확률분포를 포착한다.
- Data Instance를 생성하는 것이 아닌 Training data의 distribution을 근사하는 특성
예를 들어 고양이, 강아지의 이미지 데이터를 Generative Model의 입력으로 준다면 입력 데이터와 상당히 유사한 분포(distribution)를 갖는 새로운 이미지를 갖게 된다. 대표적인 Generative model로는 GAN이 있다.
고양이와 강아지를 구분하는 Discriminant Model과 달리 Generative model은 기존의 Sample과 유사한 새로운 Sample을 생성한다.
- 수학적으로 AutoEncoder와 Variatational AutoEncoder와는 전혀 관계가 없다.
- AutoEncoder의 목적은 Manifold Learning이다.
- AE는 네트워크의 앞단을 학습하기 위해 뒷단을 붙인 것
- 입력 데이터의 압축을 통해 의미 있는 manifold를 학습한다.
- Variational AutoEncoder는 Generative Model이다.
- 뒷단(Decoder, 생성)을 학습시키기 위해 앞단을 붙인 것
Viewpoint1: Generative Model
사후확률: z가 주어졌을 때 x가 나올 확률
사전확률: z
VAE가 최종적으로 원하는 것?
- 고양이와 강아지 데이터가 있다면 기존에 Training DB에 가지고 있던 고양이, 강아지와 유사한 샘플을 생성해 내는 것
- VAE 네트워크가 학습을 통해 출력하고자 하는 결과는 Training DB에 있는 데이터 x가 나올 확률을 구하는 것
- VAE 네트워크의 출력 값을 우리가 정한 모델에 대한 파라미터의 MLE(Maximum Likelihood Estimation) 값을 통해 구한다.
- 단순히 샘플을 생성하는 것이 아닌 컨트롤러(controller)로 생성된 이미지를 조정할 수 있다면?
- VAE 네트워크를 보면 Generator는 Latent Variable z로부터 샘플을 생성한다. 이때 마치 controller처럼 이미지를 조정하는 z vector를 추출할 수 있다면? (고양이에 귀여움을 조절하여 귀여운 고양이를 생성하는 상상 가능하지 않을까?)
- 이처럼 VAE 네트워크의 z vector(latent vector)는 controller 역할을 하게 된다.
Prior Distribution p(z)
기존 Training DB에 있던 샘플과 유사한 샘플을 생성하기 위해서 prior값을 활용
Q. 만약 prior값이 normal distribution값을 띈다고 가정하고 sampling 한다면 sampling된 값은 manifold를 대표하는 값을 가질 수 있을까?
A. YES. 학습을 수행하는 네트워크가 DNN이기 때문에 가능. Network의 앞 단에 있는 한, 두개의 layer는 manifold를 잘 찾기 위한 역할을 수행할 수 있다.
MLE를 direct로 사용하면 되지 않는 이유를 아는 것이 VAE를 이해하는 길
생성기(Generator)에 대한 확률 모델을 가우시안으로 할 경우, MSE 관점에서 더 가까운 것이 더 p(x)에 기여하는 바가 크다. MSE가 더 작은 이미지가 의미적으로는 더 가까운 경우가 아닌 이미지들이 많기 때문에 현실적으로 올바른 확률 값을 구하기는 어렵다.
-> 의미적으로는 (a) 와 (c)의 값이 더 유사하지만 MSE를 구하면 (a)와 (c)의 MSE값이 더 크다.이처럼 MSE가 더 작은 이미지가 의미적으로 더 가까운 경우가 아닌 이미지들이 많기 때문에 prior에서 sampling을 하게되면 문제가 발생하는 것
그냥 prior에서 학습하면 잘 안돼 –> prior에서 sampling 하는 것이 아닌 이상적인 sampling 함수를 생각해보자.
그래서 등장한 방법 Variational Inference
이제는 prior에서 sampling은 의미없는 sampling이 된다. 따라서 이상적인 sampling함수를 통해 sampling을 수행한다. 그리고 원하는 결과는 네트워크의 출력 값이 x와 가까워지는 것이다.
의미적으로 가까운 애들이 생성시키는 z, 그 z를 sampling 할 수 있는 이상적인 sampling함수= (p(z|x)) (prior가 아닌 x를 evidence) = x 를 보여줄테니 잘 generator되게 하는 z를 만들어봐 하는 이상적인 sampling 함수를 생각해보자.
이상적인 sampling 함수는 뭔지 몰라. 모르는 확률 분포를 추정할 때 Variational Inference 방법을 사용한다.
[Variational Inference 방법이란?]
모르지만 추정하고자 하는 True Posterior(p(z|x)) 있는데 다루기 쉬운 Approximation class(ex. Gaussian). Gaussian을 결정짓는 파라미터 μ, σ를 ϕ라고 한다면, ϕ를 바꿔가며 True posterior에 가깝게 만들어보자. 그러면 True posterior 대신에 approximation class가 정해진 qϕ(z|x) 함수를 가지고 sampling을 해보겠다. 그러면 x는 잘 나오겠지?
- 의미론적으로 가까운 sample들을 생성시키는 z정의
- z를 생성할 수 있는 이상적인 sampling 함수 정의
- x를 given으로 주어 학습을 수행
p(z|x)가 아닌 이상적인 sampling 함수인 qϕ(z|x)를 추정하고 이상적인 sampling함수가 정의되었다면 z vector로부터 input x와 유사한 데이터를 생성할 수 있다.
그러나 이상적인 sampling 함수를 모르기 때문에 Variational Inference(변분 추론)을 사용
Variational Inference +@
Variational Inference란 사후확률(posterior) 분포 p(z|x)를 다루기 쉬운 확률분포 q(z) 로 근사(approximation)하는 걸 말한다. 다음과 같은 경우를 말한다.
- marginal probability 즉, 사후확률의 분모인 pz(x) = Σp(x, z)를 계산하기 힘든경우
- likelihood, 즉, p(x|z) 를 더 복잡하게 모델링하고 싶은 경우
- prior, 즉, p(z)를 더 복잡하게 모델링하고 싶은 경우
사후확률 분포를 정규분포로 근사한 케이스
- True posterior: 우리가 추정하고자 하는 확률분포
- Approximation class: 우리가 다루기 쉬운 확률분포(Gaussian, Bernoulli)
- Gaussian일 경우 확률분포를 결정짓는 parameter μ와 σ를 추정
- ϕ를 잘 바꿔가며 True posterior를 추정(Approximation)
- 학습이 잘 될 경우, True posterior를 잘 approximation 하는 함수를 가지고 z생성
- 생성된 z를 통해 sample을 생성
- Term 정리
- True posterior: p(z|x) = how likely the latent variable is given the input
- prior: p(z) = how the latent variables are distributed without any - conditioning
- approximation function(sampling function): q(z|x)
Summary
- 학습이 잘 되기 위한 z sample을 잘 만들어 내는 함수가 있으면 좋겠다.
- Variational Inference 방법으로 확률 분포중에 Target Distribution을 잘 나타내는 Distribution을 찾는다.
- 확률분포를 Gaussian으로 정한다면 μ와 σ를 추정 -> 추정된 값을 통해 Approximation
- 잘 찾은 z로부터 Sampling을 해서 Generator를 생성하면 잘 될 것 같다.
'Study' 카테고리의 다른 글
[Study] 선형대수 용어 정리 (0) | 2024.04.20 |
---|---|
[Study] AutoEncoder의 모든 것 #2 (4) | 2023.06.06 |
[Study] AutoEncoder의 모든 것 #1 (1) | 2023.06.06 |
[Study] AutoEncoder의 모든 것 #0 (0) | 2023.06.06 |