JKになりたい

何か書きたいことを書きます。主にWeb方面の技術系記事が多いかも。

ディープネットの事前学習・その他の自己符号化器

MLPシリーズ「深層学習」の5.6ディープネットの事前学習と5.7その他の自己符号化器のまとめです。

ディープネットの事前学習

多層の順伝播型ネットワークには勾配消失という現象が起こるため、学習が難しい。
これを解決するのが事前学習。

一般にネットワークの重みはランダムで初期化される。
この重みの初期値をもっと良いものにしておけば、勾配消失が起きないのでは?というアイデア
実際、経験則的に事前学習がうまくいくことが知られている。

勾配消失問題

勾配消失問題は何故起きるのか。

ニューラルネットワークの計算には順伝搬と逆転伝搬がある。
順伝搬は活性化関数を通すので出力は非線形になる。
非線形であれば、何層になっても出力が発散することはない。つまり勾配消失問題は起こらない。
一方、逆伝搬は線形計算である。
線形な計算を何度繰り返しても線形なので逆伝搬の誤差も線形計算である。
この時、各層の重みが大きいと、誤差が伝搬するうちに発散する、逆に重みが小さいと急速に消失し0になってしまう。
このため、重みの更新がうまくできない勾配消失問題が発生する。

積層自己符号化器

重みを事前に学習する方法として、積層自己符号化器というものがある。
以下のような多層の順伝播型ネットワークの重み,バイアスの初期値を積層型自己符号化器によって得る事を考える。
f:id:deeptoneworks:20161021133302p:plain

まず、上記の多層順伝播型ネットワークを層毎に分解し、それぞれを単一の自己符号化器とみなす。
f:id:deeptoneworks:20161021133512p:plain
それぞれを単一の自己符号化器とみなす、とは以下のような図の構成を意味する。
f:id:deeptoneworks:20161021133622p:plain
これらの自己符号化器の重みWnとバイアスbnをそれぞれ学習する。

最後に、上記の自己符号化器により得た重み,バイアスを初期値として多層順伝播型ネットワークの初期値とする。
ただし、最後にランダムに重みを初期化した層を1層追加する。
f:id:deeptoneworks:20161021133957p:plain
以上で、積層型自己符号化器による重み,バイアスの初期値の決定ができた。

その他の自己符号化器

多層自己符号化器

自己符号化器は基本的には一層であるが、これを多層にしたものを多層自己符号化器とよぶ。
f:id:deeptoneworks:20161021134254p:plain
f:id:deeptoneworks:20161021134310p:plain

デノイジング自己符号化器(雑音除去自己符号化器)

自己符号化器の入力,出力に確率的な考え方を追加した自己符号化器。
通常の自己符号化器より良い性能になることが知られている。

構築方法

ネットワークは通常の自己符号化器と全く同じであるが、 入力と出力(教師)のデータにノイズ(雑音)を加えたものを自己符号化器を構築する。
この自己符号化器の出力はノイズののったデータをx’とすると以下である。
f:id:deeptoneworks:20161021135042p:plain

そして、この出力と元のデータ(ノイズが乗っていないデータ)との差を誤差関数として学習する。
誤差関数は活性化関数が恒等写像であれば二乗誤差、
f:id:deeptoneworks:20161021134912p:plain

シグモイド関数であれば交差エントロピーなどを誤差関数として用いる。
f:id:deeptoneworks:20161021134925p:plain

ノイズの例

・ガウシアンノイズ
平均x,分散ρ2ガウス分布に従うノイズ

・マスク状のノイズ
適当な割合でランダムに要素を選択し、その値を0にする

・ソルト&ペッパーノイズ
適当な割合でランダムに要素を選択し、更にそこからランダムで上限値or下限値にする。
例えば、出力の上限,下限が1~0なら、50%の確率で1に,50%の確率で0にする。