# AI 이론/DeepLearning

Variational AutoEncoder(VAE)

alz 2022. 5. 12. 14:30
오토인코더의 모든것(유튜브) - 이활석
Variational AutoEncoder(논문)
Variational AutoEncoder - reference

 

이번 포스트에서는 이활석님의 "오토인코더의 모든 것"의 강의를 참고하여 정리하고자 쓴글 입니다.

뒤에 나올 내용들은 수학적 배경지식이 많이 필요하기 때문에, 이글 을 읽고 오시는것이 좋습니다.

 

 

VAE를 설명하기전, AutoEncoder에 간단하게 설명 드리면,

 

 

오토인코더의 구조는 Encoder ,Decoder 부분으로 나누어져있습니다.

입력값 x에 대해서 특징을 추출해서, 입력의 정보를 Latent Variables(z)에 담은후,Latent Variables로 부터 자기자신을 다시 복호화하는 알고리즘 입니다.즉 X를 넣어서 X를 반환 하려고 하는 알고리즘이죠

 

 

Generative Model

 

저희가 살펴볼 VAE(Variational AutoEncoder)는 Generative Model 입니다.

 

여기서 Generative Model이란, 새로운 데이터 인스턴스를 생성해내는 모델이라고 합니다.※Generative models 은 labels이 존재하지 않는 데이터에 대해서는 확률 분포 P(X,Y),P(X)를 캡쳐합니다.

 

즉, 특성을 가지고 생성을 하는 모델입니다. 이때 생성되는 데이터는 훈련 데이터의 분포와 근사한 특성을 가지고 있습니다.

 

 

 

VAE

 

"VAE와 AE는 수학적으로 관계가 없다"

이말이 무슨말인가를 잠깐 살펴보겠습니다.

  • AutoEncoder는 Manifold Learning입니다.
    AE는 위의 그림에서 보았을때, 네트워크의 앞단을 학습하기 위해 뒷단을 붙인 것
    입력 데이터 압축을 통해 데이터의 의미있는 manifold를 추출

  • VAE는 Generative Model입니다.
    AutoEncoder는 앞단을 학습하는 용도지만, VAE는 뒷단을 학습하기위해 앞단을 붙인 것입니다.

서로 생성목적 자체가 달랐는데, 결과적으로 보니 VAE와 AE의 구조가 같습니다. 하지만, VAE는 Generative Model임을 잊으면 안됩니다.

 

 

위의 AutoEncoder 그림을 잠깐 살펴봅시다.

위의 Latent Variables에는 입력 데이터의 어떤 특징들을 함축하고 있는 부분으로 이해할 수 있는데요,

만약 Latent Variable값들을 추출해서 조절한다면, 저희가 원하는 데이터들을 마음껏 만들 수 있지않을까요?

 

잠깐 예시를 들면, 입력 데이터에 키가크고, 피부가 까맣고, 대머리이며, 웃고있는 사람 하면 저희는 특정사람을 표현할 수 있습니다. 사실 사람을 표현하려면 상당히 많은 특징들이 필요하죠? (손톱,팔길이,어깨,등등등)

그중 저희가 키,피부,머리,표정 이라는 4개의 특성을 찾아서 이 특성값을 조정한다면, 저희는 키카 크고, 피부가 까맣고, 대머리이며, 울고 있는사람,무표정인사람의 이미지를 생성해 낼 수 있을 겁니다. 

 

즉, latent variable(z) vector로 부터 이미지를 조정할 수 있다는 것을 알 수 있습니다.

 

 

이글을 잠깐 살펴보면, VAE는 MLE 방식을 바로 사용하지 않습니다.오른쪽의 2라는 숫자의 예시를 살펴볼게요(b) 데이터는 (a)에서 일부 데이터를 삭제한 데이터 이고,(c) 데이터는 (a)데이터를 오른쪽으로 shift한 데이터 입니다.

 

저희가 Generator를 가우시안 모델로 설정 할경우, MSE관점에서 더 가까운것이 p(x)에 크게 기여합니다.

그렇기 때문에, (c) 보다는 (b)가 MSE가 훨씬 낮게 나오기 때문에 , 훈련 끝에는 알아볼 수 없는 숫자가 나올 가능성이 크겠죠?

 

 

그렇기 때문에 다음 같은 변분추론(Variational Inference) 방식이 나옵니다.

 

 

여기서 prior에서 샘플링하는 것이 아닌 초록색 원안에 있는 이상적인 샘플링 함수에서 샘플링을 수행합니다.

 

※여기서, P(X|Z) 는 디코더의 역할, P(Z|X) 는 인코더의 역할이라고 이해했습니다.

 

강의에서 이렇게 설명을 하셨는데 이해가 더 잘 됐습니다.

" x를 보여줄 테니 적어도 x를 잘 generate 하는 이상적인 sampling 함수를 만들어봐"

 

 

ELBO(Evidence LowerBound) 

ELBO는 우리가 찾고자 하는 값 p(X)를 최적화 시킨 값을 말합니다.

 

여기서 $log(p(x))$의 최적값은 EBLO(Φ) + DKL 에서 EBLO(Φ)를 최적 화 하면됩니다.

 

각각의 텀을 잠깐 확인해보면

 

 

이식에서 저희가 DKL 값은 최적화 할 수 없는 값입니다. 따라서 ELBO 값을 최적화 해야하는데,

여기서 Reconstruction term 와 Regularlization term을 최적화 해야합니다.

 

 

위의 두 term을 최적화 시키면 우리가 원하는 샘플을 얻을 수 있는것 입니다.

 

 

 

'# AI 이론 > DeepLearning' 카테고리의 다른 글

[GAN] 생성적 적대 신경망  (0) 2022.05.12
트랜스포머 정리(3)  (0) 2022.05.10
트랜스포머 정리(2)  (0) 2022.05.09
트랜스포머 정리(1)  (0) 2022.05.09
어텐션 메커니즘  (0) 2022.05.09