작성자: 김기훈
이론
-
Intuition
- 기존의 autoencoder와는 다르게 의미 있는 z 를 만들고 싶다.(z를 고려해서 학습)
- z의 분포를 정규분포로 해서 sampling을 했을 때, z로부터 제대로된 데이터를 만들게 하자.
-
AutoEncoder 구조를 사용
-
Encoder : 입력(이미지 등)을 latent space로 mapping 해주는 역할
-q(z|x) 를 학습
-
Decoder : latent space에서 sampling된 latent vector를 입력 형태의 데이터로 복원
-p(z|x) 를 학습
-
착각할 수도 있어서.. mean이랑 sigma 라고 말한 게, 평균이랑 분산을 구하라는 말이 아니라.. layer 이름이 mean이랑 sigma입니다. 각각은 layer에요 ㅎㅎ
-
Variance Inference를 사용
- 정말 좋은 latent space를 만드는 P(z|x) 를 모르기 때문에, 이를 가우시안인 Q(z|x)로 근사해서 사용
- 학습 과정에서 두개가 비슷해진다. 왜냐? KLD가 줄어드는 방향으로 학습이 되기 때문에
-
학습 방법
- likelihood(P(x))를 직접적으로 maximization 하는 대신 ELBO를 maximization
- 이 과정에서 P(Z)가 나오는 형태로 분리를 해준다.
- 그 결과로, reconstruction loss를 줄이려고 하고 latent space가 정규분포 형태로 되게 해준다.
- reparametrization trick을 사용해서 중간에 sampling과정이 있어도 학습이 되게 해준다.
- Loss
- Reconstruction loss : 처음 입력으로 준 데이터를 얼마나 잘 복원하는가
- KLD regularize loss : q(z|X)가 얼마나 정규분포에 가까운가.

결과



왼쪽이 latent space(n차원)을 2차원으로 차원 축소를 해서 내린 그림인데, 보면은, 비슷한 숫자끼리는 비슷하게 모여서 학습이 되는 것을 볼 수 있습니다. 그리고 이걸 가지고 latent를 부드럽게 바꿔가면서 숫자를 뽑아내면 오른쪽처럼 서서히 변화하는 것을 볼 수 있습니다
(여기서 보면 latent vector가 숫자만 표현할 수 있는 10개를 넘어갔기 때문에(아마??) 숫자 뿐만 아니라 기울기도 특징으로 학습이 된 것을 확인해 볼 수 있습니다)