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://deepinsight.tistory.com/128
'수업정리 > 딥러닝 이론' 카테고리의 다른 글
딥러닝 수업정리) 03_Shallow Neural Network (2) | 2022.12.23 |
---|---|
딥러닝 수업정리) 02_WramingUp-Logistic Regression (4) | 2022.12.23 |
딥러닝 수업정리) 01_Quick Introduction (2) | 2022.12.23 |
MoE(ME) model (0) | 2022.07.20 |
VAE 설명 (0) | 2022.07.19 |