自分に要るものだけ わかるひとだけわかる
形と目的
-
AE : 複数の入力個体の情報を圧縮して記憶できる技術。
- ボンキュッボン x-z-x' 形式のネット、 $(x-x')^2$ を最小化。
- 欠点 入力にないデータ点で何が出てきても知らない
-
VAE : AEで、zの分布を素性の良い分布に加工する技術。
- 個体(点)+分布(曲面)を覚える。
- 理にかなった分布を使えば、入力にない自然な派生画像を生成できる(→"生成モデル")。
-
欠点
- 対象の分布は素性の良い分布(e.g. 正規分布)に限られる and
- 実装するために hand-written reparametrization が必要
- 本質ではない (例:元論文でmeanとsigmaに分けるのは正規分布の都合上)
-
GAN : あるネットGの出力を特定の非自明な分布に沿わせるための技術
- ゴチャい分布でもok
- 欠点 遅い、システムがゴチャい
- DとGの訓練バランスがムズイ(DをGのk倍訓練するなど)
(入力)----<加工したいNN G>----(出力) こんなネットがあったとする
今のところ (出力) はやりたい放題な値になっている
このネットワークの(出力)をある [わけわからん分布] に沿わせたい このとき
1. <Discriminator NN D>
2. ([わけわからん分布]からランダムサンプル出来る生成器)
を使って01判定をおこなう。
Step A. まず
((生成器) concat (出力))----<D>----(判定結果)
上を判定結果が (111..111 000..000) になるよう学習する。 (loss: binary crossentropy)
11... は(生成器)のデータを1と判定しており、00... は(出力)のデータを0と判定している。
Step B. 次に Discriminator NN D の重みを固定して(学習をオフ)
(入力)----<G>----(出力)----<D[固定]>----(判定結果)
(判定結果) を (111..111) になるようGだけ学習する。
こうするとStep Aの結果が完璧*でなくなるので、Step Aをまた実行する
Step A,Bを繰り返すといろいろあって (出力) の分布が (生成器) の分布と同じになる。
論文ではゴチャい数式が出てくるが E[log D(z)] + E[ log (1-D(G(x))) ] ていうのは
crossentropy の式を binary (01) の項に書き下したら 色々項が消えてそうなっただけ。
* 実際は完璧でなくて良い
イメージとしてはダイヤフラムポンプですね。Discriminatorでエラー情報を蓄積して、
こんどはDiscriminatorを固定してGeneratorに修正情報を詰め込む感じ。通じる?
- AAE : VAE+GAN.
- hand-written reparametrization のかわりにGANを使う
- ふつうのVAEと違い、GANのおかげでゴチャい分布でもok 論文では swiss roll
- 欠点 GANよりムズイ
---①-->
x-->z-->x'
↘ \
②↘→ +--->d [0,1]
⇕ 重みは共有
n----+--->d [0,1]
ノイズ
---③--->
①, ②+③(x-z固定), ②(z-d固定) を繰り返す