\(\require{AMScd}\) \(\def\KL{D_{\text{KL}}}\)
関数適用の括弧は極力省略する.
VAE を introspective にやる.
VAE を思い出すと,
\[\begin{CD} X @>q_\phi>> Z @>p_\theta>> X \end{CD}\]
encoder 部分を確率分布 \(q_\phi(z|x)\), decoder 部分を確率分布 \(p_\theta(x|z)\) とし, 損失関数は
の和. \(p(z)\) は予め (普通正規分布に) 決めておく.
VAE に GAN を足す.
実際のデータ \(x\) と, \(p(z)\) からサンプリングした \(z'\) を元に生成した \(x'\) とで GAN をする.
を用いて以下の損失関数を設計する:
\(L_E\) の 1 項目はさっきの \(L_{\text{REG}}\) で, 2 項目は生成するデータの分布が真の分布と \(m\) 以下しか離れてないようにするもの. ここで \(m\) は正の定数.
GAN の方式で従って \[\min_E \mathbb{E}_{x \sim p(x), z \sim p(z)} L_E(x,z)\] \[\min_G \mathbb{E}_{z \sim p(z)} L_G(z)\] によってそれぞれを訓練する.
ナッシュ均衡に達した時点の \((E,G)\) を \((E^*, G^*)\) とする. また \(\forall x \in X, p(x) > 0\) とする. このとき, \[p(x) = p(G^*(z))\] \[E^*(x) = \gamma; \gamma \in [0,m], \text{fixed}\]
以下のように修正する:
AE で罰金項だったのが Discriminator になってる.