Goodfellow,Bengio,CourvilleさんのDeep learning本の14章のまとめ
- 重要と思った部分だけ独断で抽出しています.
- 本当にメモ書き程度なのでわかりにくいかもしれません...すみません.
- 間違っている記述があるかもしれません.
- 心眼で書いている部分があるかもです.
14 Autoencoders
- Autoendoerはただ入力と出力が同じになるようにしたものではない
- Autoencoderは決定論的とも言えるが確率論的なencoder $p(h|x)$とdecoder $p(x|h)$としても捉えることができる.
- もともとは次元削減とかに使われていたが今では生成モデルに応用されている.
14.1 Undercomplete Autoeoncders
encodeされた次元がinput時の次元より小さい時にundercompleteという.
$L(x,g(f(x)))$を最小化することが課題となっている.
Lが最小2乗誤差で関数が線形の時にはPCAと同じになる.
fとgが非線形だったらもっと良い表現を獲得できる.
14.2 Regularized Autoencoders
- undercompleteだったらまだしも潜在空間の次元がinputの次元より大きいときには制約をつけなければ.
Autoencoderがただinputとoutputのコピーとなることを防ぎたい. (良い表現を獲得したい)そこでregularized autoencoderを使う.
潜在変数とinference procedure(観測変数から潜在変数を予測すること)をもつ生成モデルはautoencoderの一種として考えらえることに注意.
14.2.1 Sparse Autoencoders
- $L(x,g(f(x)))+\Omega(h)$を最小化するもの.
- $\Omega(h)$という正則化項は潜在変数のprior(のlog)として考えられる. (6章にも書いてあるがそもそもneural networkは最尤推定をするものであって, 誤差関数Lはoutputの分布から定まることに注意)
- Sparse autoencoderは潜在変数を持つ生成モデルの最尤推定と考えられる.つまり
$\log p_{model}(x) = \log \sum_{h} p_{model}(h,x)=\log \sum_{h}( p_{model}(h)+p_{model}(x|h))$
を最大化したいことが目標で上の$p_{model}(h)$が正則化項と考えられる.実際は和を$h$の点推定で置き換えている.
- 潜在変数のpriorであってweight decay みたいなモデルのパラメータのpriorとしての解釈ではないことに注意.
- priorとしての分布はsparse性を出すためにlaplace distributionやstudent-t distributionが考えられる.
14.2.2 Denoising Autoencoders
- $L(x,g(f(\bar{x})))$を最小化する. $\bar{x}$はxにnoiseを加えたものである.
14.2.3 Regulazing by Penalizing Derivatives
- $\sum_{i} \lambda || \nabla_{x}f_{i}||^{2}$を正則化項として加える.
- xの動きに頑健なhが学習できる.
- CAE(contractive autoencoder)ともいう.
14.3 Representational Power,Layer Size and Depth
- Deepなautoencoderはただinputとoutputを同じにするだけではなくて特徴量もよく抽出する.
- Deepになると表現力が上がる. (universal approximator theorem)
14.4 Stochastic Encoders and Decoders
- Stochasticにする. つまりencoder, decoderを$p_{encoder}(h|x)$, $p_{decoder}(x|h)$として解釈する. $-\log p_{decoder}(x|h)$を最小化することが目標となる.
- decoderの方は連続なoutputの場合, linearな関数にgaussianをのせてoutputを出力. 離散な場合, sigmoid関数にBernoulli distributionのせてoutputを出力にする.
- 基本的にoutputは$h$に対しての条件付独立とされる. (簡単だから)
14.5 Denoising Autoencoders
- $-E_{x \sim p_{data}(x)}E_{\bar{x} \sim C(\bar{x}|x)} \log p_{decoder}(x|h=f(\bar{x}))$ の最小化となる ($C(\bar{x}|x)$はxをcorruptさせたときの条件付分布)
14.5.1 Estimating the Score
- Score matchingの一種としてDAEは解釈できる(Scoreとは$\nabla \log p(x)$のこと)
- Score matchingで得られる推定量は最尤推定量と同様に漸近的に一致性を持つ. (真の値に確率収束する)
- Gaussianな$p(x|h)$を学習するということは$g(f(x))-x$というスコアを学習することと同じ
- ここらへんは分かりにくいのでこれを読んだほうがいいかも
14.6 Learning Manifolds with Autoencoders
- Autoencoderは多様体学習に使える.
- Autoencoderとは下の二つの目的のせめぎ合いでどちらも重要である.
- 潜在変数から観測変数が復元のため
- 制約を満たすため(もとからのautoencoderの構造であったり, 潜在変数のpriorとか)
- 重要な肝はautoencoderはサンプルを復元するために必要な変化を抽出するだけであるということ
- $h=f(x)$というencoderは多様体上の方向の変化にはsensitiveである必要があるが, 垂直方向の変化に対してはsensitiveである必要はない
- 従来の手法は高次元データが実は低次元の部分多様体(埋め込みの像)という多様体仮説に基づいて各点におて近傍のデータと適合するlocalな座標系を求めるやり方であった. 一方, encoderのやり方はもっとglobalなやり方である. (多様体とは簡単に言えば局所的にEculide空間な座標系の貼り合わせであることに注意)
- 前者のようなやり方は単純でsmoothな多様体のときしか機能しないし, 基本的にはデータ点の近傍の補間をしているだけなので未知の点に対応できない.
- そこでもっとlocalに見るだけでなく分散化されたglobalな情報を使って多様体学習を行うというのがDeep learning的な多様体学習である.
(少なくとも自分はこの章を読んでも結局, なぜAutoencoderが多様体学習の枠組みで有効かよくわからなかったので論文とかを読んだほうがいいかもです)
14.7 Contractive Autoencoders
- $\lambda||\frac{\partial f(x)}{\partial x}||_{F}^{2}$を正則化項として付け加える.
- DAEと関連している.つまりDAEはinputがnoiseに耐えられるようにreconstruction errorを工夫するが,CAEはencoderがnoiseに頑健なよう正則化項を付け加えている.
- Contractiveの心はinputに対してoutputをshrinkageすること. つまり近いものはそれだけ近くして遠いものはさらに遠くする.
- 作用素がContractiveとはHessianのノルムが1以下のとき. このときshrinkしていく. (対称行列のときフロベニウスノルムと最大特異値は等しいので最大特異値が全て1以下という意味)
- CAEは恒等写像を学習してほしいという願いとxの変化に対してもあまり変わらないでほしいという願いがこめられている
- 計算大変
- 実用上, decoderをscaleしてあげなきゃいけない
14.8 Predictive Sparse Decomposition
- モデルは以下のようなparametricなencoder $f(x)$とdecoder $g(h)$があって $||x-g(h)||^{2} + a||h||_{1}+b||h-f(x)||^{2}$ を最小化するように$f$と$g$と$h$を最適化していく.
- ただのsparse coding(13章,http://qiita.com/masasora/items/431afb71eae60a1c826b )と違ってdecoderも存在することに注意.
- 最適化するときにはhとモデルパラメータを交互に最適化していく.
- Training時は交互にやっていくが, その後特徴量を求める際はencoderを使って求めるので計算量は少ない.
- "Learned approximate inference"の枠組みでも解釈できる(19章)
- Autoencoderとsparse codingのhybridである.
14.9 Application of Autoencoders
- 次元削減に使える.
- Information retrievalに使える. つまりencoderをhash関数と見る. もちろんhidden layerをbinaryにしてあげる必要はある. Semantic hasingという.
- 具体的にはencoding functionをsigmoidにしたりnoiseを加えてあげればよい. すると0か1にいってくれる.