아이공의 AI 공부 도전기

[Naver D2] 오토인코더의 모든 것 - 이활석 박사님 (2)

 

0. 시작에 앞서

 

현재는 김성훈님과 함께 Upstage를 같이 꾸려가시는 분으로 Naver Clova에서 많은 공헌을 하셨던 분입니다. 이활석 박사님의 강좌는 몇년 전에도 들었지만 최근에 다시 들어보니 VAE를 한 눈에 이해하는데 많은 도움이 됨에 따라 정리의 필요성을 느껴 3파트에 나눠 설명드릴 예정입니다.

 

물론 구어체를 글씨로 바꾸는 상황이라 굳이 필요없을지도 모르나 VAE를 다시 공부함에 따라 해당 이해를 확장하고 공부함에 있어 도움이 될 것이라 생각했기 때문에 진행하고자 합니다.

 

서술은 유튜브가 나뉘어진 3파트에 따라 진행될 예정이며 링크는 아래와 같습니다.

Upload 날짜는 2018년 5월 10일

 

오토인코더의 모든 것 - 2/3

https://www.youtube.com/watch?v=rNh2CrTFpm4&ab_channel=naverd2 

 

발표 슬라이드 : https://www.slideshare.net/NaverEngineering/ss-96581209

 

오토인코더의 모든 것

발표자: 이활석(NAVER) 발표일: 2017.11. 최근 딥러닝 연구는 지도학습에서 비지도학습으로 급격히 무게 중심이 옮겨 지고 있습니다. 본 과정에서는 비지도학습의 가장 대표적인 방법인 오토인코더

www.slideshare.net

 

1. 

 

 

 

VAE 논문 자체는 논리적 흐름에 따른 이해가 어려움

 

VAE로 먼저 시도해보고 t-SNE 고전적인 접근법으로 한 번 더 시도함으로써 manifold상에서의 NN하는 접근 방식 또한 시도해봄직함

 

Autodencoder : Manifold Learning이 목적

VAE : Generative Model Learning이 목적

 

번외) 

google에 저자 이름 쳐보니 Adam도 만들고 semi-supervised learning with deep generative model, weight normalization, glow, pixelcnn.... 보자마자 "Wow! Genius" 이 말과 생각이 먼저 떠오르더군요.... ㅋ

왼쪽 Training DB에서 나올 확률

 

z는 control remote. 다루기 쉬운 분포 사용. 보통 Normal distribution을 사용

 

Manifold 상에서 복잡할 것 같은데 z를 normal distribution을 사용하는 것이 맞는가에 대한 질문

한 두개의 latent space로의 mapping이후 나머지는 latent vector에 맞는 이미지 생성이 가능

 

여러 sampling을 통해 MC(Monte Carlo) 방식을 하면 왜 안 될까에 대한 설명

x : training DB에 있는 고정된 sample 하나

p(x)는 높아야함 (training sample이기 때문에 당연히 높아야 함)

 

오른쪽 그림 

(a) Real Image

(b) (a)로부터 왼쪽이 조금 잘린 image

(c) (a)로부터 pixel 1개가 움직인 이미지

 

의미적으로 (a)와 (c)가 가까울 것처럼 보이나 MSE 방식으로 Loss를 구하면 (a)와 (c)의 MSE가 (a)와 (b)의 MSE보다 크다.

MSE가 likelihood 상에서 같기를 바라지만

 

prior기반 MSE는 학습이 잘 안되지만 likelihood 관점에서의 MSE 학습은 비교적 잘 된다.

이 때문에 VAE를 사용한다.

 

https://github.com/mingyuliutw/cvpr2017_gan_tutorial

 

GitHub - mingyuliutw/cvpr2017_gan_tutorial: CVPR'17 GAN Tutorial

CVPR'17 GAN Tutorial. Contribute to mingyuliutw/cvpr2017_gan_tutorial development by creating an account on GitHub.

github.com

Prior 기반 sampling은 의미없는 sampling이 진행됨

따라서 generator에서 그냥 p(x)라는 prior를 사용하는 것이 아니라 Approximation class의 기본적인 Probability function을 사용하여 True posterior를 estimation하고 이를 Generator로써 사용하는 것이 좋다.

 

4개간의 관계식을 구하기 위한 방법

Variational Inference를 위해 $q_\phi (z|x)$ 를 사용 (Jensen's Inequality를 사용한 방법)

Tutorial에서 제공하는 방법

 

KL divergence는 기본적으로 확률분포 간 거리를 의미하며 이를 최소화하는 방향으로 진행됨

KL minimize = ELBO maximize

2가지 Optimization problem을 풀어야함

1. Variation Inference

2. 

Generator로 sampling하고 싶다. 그러나 prior로 sampling은 잘 안 되었다. 이상적인 sampling 함수에서 진행하고 싶다. x를 evidence로 주고 이상적인 z를 위해 $q_{\phi}$ 도입

 

목적 : 앞단 generator를 위해서 뒷단이 붙여졌다. 이것이 Autoencoder와 큰 차. AE는 뒷 단을 위해 앞단이 붙음. 결과적으로는 비슷해보이지만 다름

 

뒷단 : Encoder, Posterior, Inference Network(Baysian에서 가져옴)

 

KL term 계산

이상적 : $\mu, \sigma$ 찾기

closed form으로 KL 계산이 됨

간혹 상수 term은 의미 없어서 빼는 경우도 있음. 가령 1/2, -1

 

MC 기법과 같이 L개의 sampling 평균

sampling은 random node -> backpropagation 불가, chain rule 불가

reparametrization trick을 통해 $\epsilon$을 사용한 것은 결과적으로 Normal distribution의 z와 같다.

확률적 특성은 같고 backpropagation 또한 가능

 

reparametrization trick쓰지 않아도 된다고 할 때가 있음 - tensorflow 기준 딱히 쓰지 않아도 API에서는 reparametrization trick을 자동으로 사용함

Bernoulli 또는 Gaussian Distribution 모두 가능하다

그러나 Bernoulli를 사용하여 Cross entropy로 진행함 (Gaussian의 경우 MSE)

 

x sampling - Gaussian으로 진행시 $\mu, \sigma$를 찾을 예정 - sampling을 위해 reparameterization Trick 사용

 

https://github.com/hwalsuklee/tensorflow-mnist-VAE/blob/master/vae.py

 

GitHub - hwalsuklee/tensorflow-mnist-VAE: Tensorflow implementation of variational auto-encoder for MNIST

Tensorflow implementation of variational auto-encoder for MNIST - GitHub - hwalsuklee/tensorflow-mnist-VAE: Tensorflow implementation of variational auto-encoder for MNIST

github.com

 

AE는 manifold 상의 space가 계속 바뀜 (계속 위치 변경), z는 아무 condition이 없음

VAE 관점 : 이상적인 sampling 함수가 trial과 같게 만들어야함

 

generation 관점에서 큰 차이

 

label 정보를 알고 있을 때 사용하는 방법 Conditional VAE(supervised version)

semi-supervised

 

label 정보를 조금만 알고있을 때 

CVAE가 빠르게 수렴 (숫자정보를 알기 때문에 쉬운 상태)

style 고정, condition을 바꾼다면 같은 스타일 다른 숫자 출력

 

Gaussian 이외 KL term을 구하기 어려웠음

KL 대신 GAN loss를 사용하는 것 

Maximize D

Minimize G

Generator에서 나온 것은 가짜 term으로 인식

Prior Distribution에서 나온 것은 진짜 term으로 인식

 

swiss roll data

 

 

Manifold를 우리가 원하는 모양으로 만들 수 있다는 것이 가장 큰 장점

 

 

 

 

https://github.com/hwalsuklee/tensorflow-mnist-AAE

 

GitHub - hwalsuklee/tensorflow-mnist-AAE: Tensorflow implementation of adversarial auto-encoder for MNIST

Tensorflow implementation of adversarial auto-encoder for MNIST - GitHub - hwalsuklee/tensorflow-mnist-AAE: Tensorflow implementation of adversarial auto-encoder for MNIST

github.com

 

VAE보다 AE의 코드를 Discriminator에 사용하는 것이 좋아서 사용함

공유하기

facebook twitter kakaoTalk kakaostory naver band
loading