Faces)を見て、これを音声合成の声質生成に使いたいと思ったのが興味のきっかけだった。自分なりに読み解いてまとめてみた結果になっている。ドライブさっそく実験!いつものimport。潜在空間が2次元であるVAEの結果を意味する。torch.cuda.manual_seed(seed)MNISTのデータをロードする。shuffle=True)VAEのアーキテクチャVAEは、Autoencoderと似ているが、Encoderの出力が正規分布の平均と共分散行列になり、潜在表現zがその正規分布からサンプリングされる点が異なる。潜在表現zはランダムサンプリングされるため同じ入力画像Xを入れても毎回異なるzにマッピングされる。上図のようにEncoderは正規分布の平均ベクトル(mu)と分散共分散行列の対数(logvar)を出力する。可視化しやすいように2次元としたので、平均ベクトルのサイズは2となる。分散共分散行列は対角行列と仮定しているため対角成分のみ取ってこちらも2次元ベクトルとなる。対数を取る理由がはっきりしないけどアンダーフローを防ぐためかな?Encoderが出力した平均と分散を持つ正規分布から入力Xの潜在表現zをサンプリングする。上の式でサンプリングするのではなく、でzを計算する。このように計算すると和と積の演算だけで構成されるので計算グラフが構築でき、誤差逆伝搬ができるとのこと。Operationが実装されている。ここがちょっとわからない。Trick必要なのかな?多次元正規分布になるとできないのだろうか?上のアーキテクチャをPyTorchのコードで書くと下のようになる。