본문 바로가기

기타

VAE (Auto-Encoding Variational Bayes) 리뷰

VAE에 대해 소개하기에 앞서, 먼저 Auto Encoder가 뭔지 설명해보면,

Auto Encoder 란?

  • 비지도학습으로 입력 데이터의 표현을 효율적으로 학습할 수 있는 인공신경망 (feature extractor)
  • Encoder - z (latent variable) - Decoder 형태
  • output이 input의 형태로 나타나도록 하는 것이 목적이나, 그 과정에서 입력을 reconstruction해서 데이터를 효율적으로 representation 하는 방법 학습
  • 차원을 축소(특징 추출)하기 위한 목적으로 만들어졌기 때문에 Encoder를 학습하기 위해 Decoder를 사용한 것으로 볼 수 있음

Variational Auto Encoder

  • Decoder를 사용하기 위해 Encoder 활용 (Decoder로 새로운 데이터를 생성하기 위함)
  • 대략적인 동작 과정
    1. input 이미지 Encoder에 넣음
    2. 인코더를 거쳐 2개의 vector 평균과 표준편차를 output으로 배출
    3. 위의 평균과 표준편차를 통해 normal distribution 만듬
    4. distribution에서 데이터 sampling 해서 z 생성
      👉 Reparameterization Trick 사용
      → NN에서 backpropagation 가능하게 하기 위함
      → normal distribution을 단순히 sampling 했을 경우에는 미분이 불가하기 때문에 미분 가능한 식으로 바꿔줌
    5. Decoder 통과
    6. input과 비슷하게 복원된 output 배출
  • Auto Encoder vs. Variational Auto Encoder
    AE VAE
    Encoder를 학습하기 위해 Decoder를 사용 
    → 차원 축소(특징 추출) 목적
    Decoder를 사용하기 위해 Encoder 활용
    → 새로운 데이터 생성 목적
    Encoder → z (latent vector) Encoder → 평균, 표준편차 vector 배출 → normal distribution → sampling → z(latent vector)

Loss Function

아래 두가지 function의 합으로 나타냄

  • Reconstruction Error
    • input과 output의 차이를 최소화 하는 것
    • normal distribution의 경우 MSE, bernoulli distribution의 경우 Cross entropy로 나타남 → VAE는 기본적으로 bernoulli를 따르는 Decoder 사용
  • Regularization
    • VAE는 normal distribution을 만들어 sampling하기 때문에 z는 normal distribution을 따른다는 가정이 들어가있음
    • 그 과정을 최적화에 넣기 위해, encoder를 통과해서 나오는 z 값의 확률분포정규분포와의 거리최소가 되도록 KL divergence 최소화 

Regularization 식을 KL divergence로 변환하면 아래와 같음

👉 KL divergence → 두 확률 분포의 차이를 계산하는데 사용하는 함수

How to train ? (x가 input data)

  • VAE는 기본적으로 Decoder를 위한 것이기 때문에 위처럼 z가 있으면 x를 만들어내기 위한 목적이 있음
  • training data의 likelihood(가능도)를 최대화
    → 즉, x가 나올 확률 p(x) 가 가장 커지는 distribution을 만들고자 함

  • 원래는 Decoder만 있으면 되지만, z에 대한 x를 뽑아내서 학습을 시키는 게 수식적으로 intractable해서 Encoder를 정의함

  • p(x)의 최대를 구하기 위해 log(p(x))의 최대를 구해도 됨→ z가 encoder의 q(z|x) distribution을 따를 때 log(p(x))의 기대값을 구함 → 베이즈 정리 + 수식 계산 → KL divergence 형태로 나타냄
  • 정리하면, 아래의 식 maximize
    • 첫번째 항 : decoder를 통해 복원될 수 있도록 만들어주면 됨
    • 두번째 항 : encoder를 통과한 확률 분포가 z의 분포와 비슷하게 만들어주면 됨
    • 세번째 항의 경우 : x → z 방향의 조건부 확률 값은 intractable 하고 KL divergence 값 자체가 0 이상이라는 것만 알 수 있음
    • 즉, 빨간 박스 부분(ELBO)을 maximize 하면 됨

→ θ는 decoder의 파라미터, Φ는 encoder의 파라미터

최종 Loss function 도출

  • Reconstruction Error : x가 Encoder(Φ라는 network) 지나서 z가 나오고, 해당 z를 Decoder(θ라는 network)에 넣었을 때 x가 나올 확률 maximize
  • Regularization : x가 Encoder(Φ라는 network)를 지났을 때 z의 분포가 가정한 z의 분포와 일치하도록 만듬

Optimization

Regularization 계산하기 위한 Assumption

1. 가우시안 encoder를 통과해서 나오는 분포가 정규분포 + diagonal한 covariance를 가진다고 가정 할 경우 아래와 같이 표현 가능

2. decoder를 통과해서 나오는 p의 분포는 평균이 0이고, 모든 표준편차가 1로 표현되는 표준 정규 분포를 따른다고 가정 → N(0, I) 로 표현 가능

최종 Regularization 계산하기

해당 내용을 regularization을 나타내는 KL divergence 식에 대입하면,

 

 

Reconstruction Error 계산하기

위와 같은 적분 방법으로 기댓값을 계산할 수 있지만, 계산이 어려움

> Monte-carlo technique 사용

특정 분포에서 샘플링을 무한대로 하고 평균을 내면, 전체의 기대값과 거의 동일해진다!

즉, z를 계속 뽑아서 각 z를 샘플링한 값을 평균

→ 계산량이 많아지기 때문에 딥러닝에서 사용하기 어려움

→ L을 1로 가정 (trick : 샘플링을 한번만 해서 대표값으로 사용)

 

> Reparameterization trick 계산

평균이 0이고, 표준편차가 1인 표준정규분포에서 입실론을 샘플링해서 위의 식에 대입

→ z에 대한 식이 나오고, 미분 가능해짐!

 

정리하면, 아래와 같은 식 계산하면 됨

p가 확률 분포이기 때문에 베르누이를 따른다고 가정하고 계산하면, ( 가우시안을 따른다고 가정하고 계산할 수도 있음)

최종적으로 위와 같은 cross entropy 식이 도출됨

 

 

 

출처 )

https://www.youtube.com/watch?v=GbCAwVVKaHY     
https://taeu.github.io/paper/deeplearning-paper-vae/

'기타' 카테고리의 다른 글

대규모 데이터 처리의 어려운 점  (0) 2022.04.01
Quick DBD  (0) 2021.10.15
[Unix] vi 에디터 사용하기 & Shell 명령  (0) 2021.09.05
[AWS] 스토리지 활용 웹사이트 만들기  (0) 2021.08.10
[AWS] Amazon Linux 2 실행하기  (0) 2021.08.10