HELLO CYBERNETICS

深層学習、機械学習、強化学習、信号処理、制御工学、量子計算などをテーマに扱っていきます

ディープラーニングを更に深くすることを可能にするか?Highway Networksのメモ

 

 

follow us in feedly

f:id:s0sem0y:20170528223005j:plain

Highway Networks

通常のNeural Networks

活性化関数f()

入力\bf x

重み\bf W

バイアス \bf b

としたときには、通常の層は以下のような計算で出力\bf yを決めます。 

 

{\bf y}= f{\bf (Wx+b)}

 

これは単純に

 

  1. 線形変換\bf Wを作用
  2. バイアス\bf b分だけずらす
  3. 活性化関数fで非線形変換

 

という操作をしていることになります。

 

Highway Networks

一方で、Highway Networksの層は以下のような変換を行います。

活性化関数f()

シグモイド関数σ()

入力\bf x

重み\bf W_h,W_t

バイアス \bf b_h,b_t

要素ごとの積\odot

としたときに、

 

{\bf y}= f{\bf (W_hx+b_h)} \odot σ{\bf (W_tx+b_t)}+{\bf x} \odot \{ 1-σ({\bf W_tx+b_t}) \}

 

です。

これは、通常のニューラルネットワークの層の働きを包含しています。

 

通常の層と同じ働きをするケース

仮に

 

σ{\bf (W_tx+b_t)}=1

 

という条件が揃っていたとしましょう。

 

{\bf y}= f{\bf (W_hx+b_h)} \odot σ{\bf (W_tx+b_t)}+{\bf x} \odot \{ 1-σ({\bf W_tx+b_t}) \}

 

 

{\bf y}= f{\bf (W_hx+b_h)} \odot 1 +{\bf x} \odot \{ 1-1\}=f{\bf (W_hx+b_h)}

 

となり、通常のニューラルネットワークの層と同じように働くことになります。

 

あたかも層が無いかのように振る舞うケース

仮に

 

σ{\bf (W_tx+b_t)}=0

 

という条件が揃っているとしましょう。

 

{\bf y}= f{\bf (W_hx+b_h)} \odot σ{\bf (W_tx+b_t)}+{\bf x} \odot \{ 1-σ({\bf W_tx+b_t}) \}

 

 

{\bf y}= f{\bf (W_hx+b_h)} \odot 0 +{\bf x} \odot \{ 1-0\}={\bf x}

 

となり、入力\bf xをそのまま出力します。

 

Highway Networksの働き

基本的まとめ

一般的には

 

 0 \leq σ{\bf (W_tx+b_t)} \leq 1

 

であることに着目すれば、通常のニューラルネットワークの層の働きと、何もしないで入力を通過させるかの中間的な働きをすることが期待できます。

すなわち以下の式

 

{\bf y}= f{\bf (W_hx+b_h)} \odot σ{\bf (W_tx+b_t)}+{\bf x} \odot \{ 1-σ({\bf W_tx+b_t}) \}

 

において、σ{\bf (W_tx+b_t)}は、そのバランスを取る役割を担っていることになります。当然、このバランス自体も、\bf W_t,b_tをパラメータとして学習により決定されます。

 

Highway Networksの利点(論文の主張)

基本的に、ディープラーニングと謳われる通り、ニューラルネットワークは深い構造をしていることで高い能力を示してきました。しかし一方で、層が深くなるほど学習は困難になってきます。

 

これは「1.誤差逆伝搬法が上手く動作しない」や「2.パラメータの増加による鞍点(学習が停滞する場所)の増加」が原因としてあげられます。「1.」にはReLUや事前学習による重みの初期化、「2.」にはAdamを代表とする最適化手法の改良によって解決がなされてきました。

 

今回のHighway Networksはネットワークの構造を工夫したことで、深い層の学習を可能にした手法であると言えます。

 

実際、論文では「確率的勾配降下法(SGD)」を使い、通常のニューラルネットワークと比較をしていますが、層が増えていった際の学習の困難さの違いが顕著に現れています。

 

以下はCIFAR-10(10種類の画像認識コンペ)の学習曲線です。緑色がHighway Networksであり、青色が通常のNeural Networksです。左から(10、20、50、100)と層の数を増やして学習をしていますが、Highway Networksでは層の増加による学習の困難さへの影響はあまりなさそうです。

 

f:id:s0sem0y:20170528220937p:plain

 

 

※ただし、単純に学習による損失の減少は、層が少ない通常のニューラルネットでも十分になっています。これはCIFAR-10がそれほど複雑なニューラルネットでなくても、ある程度対応できる問題だからです。

 

CIFAR-100でも同様に実験を行い、900層もの深いHighway Networksを学習させたところ、それでも最適化が難しくなる兆候は見られなかったそうです。

 

詳しくは以下を参照

[1505.00387] Highway Networks

 

 

最後に

Chainerでの実装

ChainerにはHigjway Networksの層が既に実装されています。

 

 

import chainer.links as L

 

を書いておけば

 

L.Highway(in_out_size)

 

in_out_sizeは入力・出力ベクトルの次元。デフォルトで活性化関数は「ReLU」が選ばれることに注意してください。(したがって、順伝搬の際に活性化関数を書く必要はありません)

 

まあ、それほど難しいものではないので、自分でChainerを使って実装するのも簡単でしょう。

 

TensorFlowでの実装

以下のページで実装が載せられています。

それほど難しくありません。

medium.com

 

Highway Networksのアイデアの根幹

Highway NetworksはLSTMにインスパイアされて出てきたものです。LSTMも複数のGateを用いて入力を変換し、通過させる度合いを調整しています。

 

s0sem0y.hatenablog.com