다음 논문의 내용을 참고하여 모델을 구성하였다.
Transformer VAE <Link>
Conditional VAE <Link>
정리 전 원본 github : <Link> 깃허브에는 실험을 너무 많이 진행하다 보니까 모든 실험을 다 github에 담지는 못했다,,
Transformer VAE에서 제안하는 구조는는 다음과 같은 구조이다. 기존의 Vanilla Transformer가 Encoder-Decoder 구조로 이미 이루어져 있기 때문에 중간에 Sampling 과정과 VAE loss로 학습시키기만 하면 Transformer VAE라는 이야기이다. 이외에는 마스크를 적용하는 방식에서 새로운 트릭을 사용하였다는 점 정도가 차별점이었다.
우리가 이 모델의 각 부분에서 수행할 역할들을 다음과 같이 기대하였다.

Transformer VAE 구조
앞서 언급했던 목표 중에서 입력값에 메타 데이터를 미디 데이터와 Concat 하지 않고 모델 중간에 넣어주는 시도도 있었기 때문에 우리는 이 구조에 메타 데이터를 넣을 방법에 대해 고찰하였다. 고민 끝에 아래와 같은 구조가 적합할 것이라고 결론지었다. sampling된 latent에 Condition을 Encoding시켜 Concat 하는 방식이다.

Transformer CVAE 구조
latent와 condition이 concat 되어 있다는 것은 두 가지 정보가 섞여있지 않은 상태에서, Cross Attention 과정에서 두 가지 정보가 적절히 반영될 수 있다는 생각에 concat이 정보를 넣어주는 적합한 방식이라고 판단하였다.
또, Attention layer를 거치지 않고 인코딩된 상태로 그대로 넣었던 이유는 latent가 위치나 다른 노트들과의 관계를 고려하여 값이 바뀔 필요가 없다고 생각했기 때문이다.
그러나 이러한 방식은 잘 학습되지 않았고, 학습이 잘 되지 않는 이유를 분석해 보았다. Transformer VAE가 아닌 일반 VAE가 작동하는 방식은 정보를 압축하고, 복원한다는 점이 핵심인데, 여기서는 정보를 channel wise로 압축한다.