大器无成

大器はその大きさゆえに、決して完成することはない

Variational Autoencoders

について学んだ。学びきれていませんが:

https://towardsdatascience.com/understanding-variational-autoencoders-vaes-f70510919f73

アイディアとしては、ただ素直に

  1. 観測値
  2. 次元削減したベクトル
  3. 復元値

となるようなエンコーダ・デコーダを推定するのではなくベイズ推定のモデル

  1. 観測値
  2. 次元削減したベクトルを確率的に表現する正規分布(平均と分散のベクトルとして表される)
  3. 復元値を確率的に表現する正規分布(平均ベクトルとして表される、分散はハイパーパラメータ)

を表現するようなエンコーダ・デコーダを推定する、というところ。

これに加えて、事前確率として「次元削減したベクトル値が本来従うべき確率分布」を与えることで、次元削減された空間がコンパクトかつ連続的な空間になる(記事中では「無意味な出力が生成されえない」と表現されている)ように拘束してやることができる。

デコーダの再現精度(復元値分布の分散)をハイパーパラメータとしていじってやることで、再現の正確性と次元削減空間の連続性のトレードオフを調整してやることができる(というかこの部分が一番大変そう)。

この人の記事は、表現が難しいけれどコンセプトをきちんと教えてくれていてよい気がする。

8月22日追記

TensorFlowを用いたVAEの実装チュートリアルは、以下のものが比較的わかりやすそう:

danijar.com

こちらはPyTorchを用いたバージョン:

vxlabs.com