ChainerでDeep Autoencoderを作ってみる

最終更新日:


Chainer
Pythonなどで使える、DeepLearningの為のパッケージです。今回はPython2.7環境で使いました。Chainerについての解説は公式のドキュメントか他にも解説してくださってるかたがいるので省こうと思います。
今回作りたいもの
Chainerを使ったAutoencoderです。
Autoencoderとは
入力信号$x$を受け取った時にそれと同じ入力を返すネットワーク(関数)のことです。今回は簡単のために入力は実数だとして$xinmathbb{R}^n$と考えます。
https://en.wikipedia.org/wiki/Autoencoder(絵がわかりやすいと思ったので英語版を乗せます)
当たり前ですが、$f(x)=x$にしたら達成出来るじゃんということになるので、関数$f$に制約を付けます。
具体的には中間層$h=f_1(x)$を作る関数$f_1$とそこから出力$t=f_2(h)$を作る$f_2$によって出力が決定するします。
それを踏まえれば全体では
$$
t=f_2(h)=f_2(f_1(x))
$$
となります。
何が嬉しいか
関数$f_1,f_2$が入力$x$を受け取って、それに重み$W_1,W_2$、バイアス$b_1,b_2$を付ける線形写像だとすると、中間層$h$を作るとします。この時バイアスを$b$とすれば中間層は
$$
begin{eqnarray}
h&=&f_1(x)=W_1x+b_1\
t&=&f_2(h)=W_2h+b_2
end{eqnarray}
$$
と表せます。ここで話を単純化して、バイアスを無視して$W_2=W_1^T$だとすれば
$$
t=W_1W_1^Tx
$$
になり、誤差関数$phi$として二乗誤差$phi(x,t)=||x-t||^2$使ってあげると
$$
min_{W_1}{mathbb{E}[phi(x,t)]}=mathbb{E}[||x-W_1W_1^Tx||^2] $$
になって、これは主成分分析PCAと同じ結果となり、実際にはAutoendoderではこれに活性化関数が加わった定式化をしていますから全く一致するわけではありませんが、Dataが大きく動く方向を学習して、Dataの特徴を捉えることがAutoencoderで…この記事の続きを読む

サイト名: Qiita - Python
2016年2月17日

無料メールマガジン登録

週1回、注目のAIニュースやイベント情報を
編集部がピックアップしてお届けしています。

こちらの規約にご同意のうえチェックしてください。

規約に同意する


Leave a Reply

Your email address will not be published.

This site uses Akismet to reduce spam. Learn how your comment data is processed.