Super Kawaii Cute Cat Kaoani CVAE 설명

수업정리/딥러닝 이론

CVAE 설명

치킨고양이짱아 2022. 7. 20. 17:15
728x90
728x90
Conditional VAE

 

Conditional VAE는 이름에서도 알수있듯이 VAE에 Condition을 부여하게 된다. 

 

앞서 살펴본 VAE는 latent space가 임의로 sampling되면 VAE는 어떤 숫자가 샘플링될지 제어할 수 없다. 

하지만 CVAE는 생성할 숫자의 조건(one-hot lable)을 도입함으로써 이 문제를 해결할 수 있다. 

이 조건은 Encoder와 Decoder에 모두 제공된다 .

Vanila VAE와 Conditional VAE의 차이를 비교해보자. 

 

VAE와 비교했을 때 Conditional VAE에서 두드러지게 나타나는 차이점은 y라는 노드가 새로 추가된다는 점이다. Conditional VAE에서는 y(label 정보)를 알고 있다면 Encoder와 Decoder에 넣어주게 된다. 

 

Encoder에서는 latent vector z를 찾기 위해 x와 함께 y값을 given으로 주었다. 

마찬가지로 Decoder에서는 data를 생성해내는 과정에서 y 값을 같이 넣어주었다. 

 

 

label 정보를 모를 때는 어떻게 학습할 수 있을까?

label 정보를 모를 때는 

1. 기존의 Vanilla VAE를 사용하거나

2. y(label 정보)를 추정해서 학습할 수 있다. 

 

이 중에서 2번 경우에 대해 조금 더 자세히 살펴보자. 

 

y(label 정보)를 추정하여 학습하는 방법

 

y(label 정보)를 모를 때는 y를 추정하는 네트워크를 별도로 두면 된다.

Vanilla VAE(M1 구조)윗단에 label y를 추정하는 network(M2 구조)를 붙인 network(M3 구조)를 생성한다.

이렇게 되면 label 정보를 추정하여 z vector를 생성할 수 있다. 

 

VAE, CVAE 성능 비교

 

Condition을 부여했을 때와 부여하지 않았을 때 성능이 어떻게 달라질까? 결과값을 비교하여 알아보자. 

결과적으로 CVAE의 성능이 VAE보다 더 좋다. 위의 그림을 보면 CVAE는 단 1 epoch만으로 입력값과 매우 유사한 값을 생성해내는 것을 볼 수 있다. 생각해보면 이는 매우 당연한 결과인데 이미 숫자의 정보(label의 정보)를 알고 있기 때문이다. 

 

만약 CVAE에서 동일한 z-sampling 값을 넣어주고 label값만 바꾸게 되면 어떤 결과를 얻을 수 있을까?

결과를 보면 스타일은 비슷한데 다른 숫자를 출력하는걸 확인할 수 있다. 

이렇게 되면 폰트를 생성해낼 수 있을 거라는 생각에 드는데, 실제로 폰트를 만들어주는 서비스를 진행하기도 하였다고 한다. 

 

Reference

https://wikidocs.net/149206

 

CVAE (조건부 VAE)

> 조건부 VAE[2]의 기본 개념은 [CGAN](120290)과 유사하다. [MNIST](120171) 데이터세트의 경우, 잠재 공간이 임의로 샘플링되면 [VAE](120 ...

wikidocs.net

https://deepinsight.tistory.com/128

 

[정리노트] [AutoEncoder의 모든것] Chap4. VAE Architecture - Conditional VAE, Adversarial AutoEncoder

AutoEncoder의 모든 것 본 포스팅은 이활석님의 'AutoEncoder의 모든 것'에 대한 강연 자료를 바탕으로 학습을 하며 정리한 문서입니다. 이활석님의 동의를 받아 출처를 밝히며 강의 자료의 일부를 인

deepinsight.tistory.com

 

728x90
728x90