深層学習day2 Section1:勾配消失問題
要点まとめ
勾配消失問題とは、誤差逆伝播法の下位層に進んでいくにつれて、勾配がどんどん緩やかになっていくため、勾配降下法におよる更新で下位層のパラメータが殆ど変わらずに訓練が進まなくなり、最適値に収束しなくなることである。
シグモイド関数は勾配消失問題を発生させる代表的な関数である。シグモイド関数の微分は最大値が0.25であり、層を重ねるごとに値の更新量が小さくなっていってしまう。
活性化関数による回避
活性化関数としてReLU関数を用いることで勾配消失問題を回避することができる。
重みの初期値をによる回避
重みの初期値をランダムに設定することで、回避する方法として、Xavierという乱数設定方法がある。標準正規分布に基づいた乱数を、前のレイヤのノード数の平方根で割ったものを設定する。
network['W1'] = np.random.randn(input_layer_size, hidden_layer_size) / np.sqrt(input_layer_size) network['W2'] = np.random.randn(hidden_layer_size, output_layer_size) / np.sqrt(hidden_layer_size)
他にも、Xavierの初期値にを掛けたHeの初期値もあるようだ
network['W1'] = np.random.randn(input_layer_size, hidden_layer_size) / np.sqrt(input_layer_size) * np.sqrt(2) network['W2'] = np.random.randn(hidden_layer_size, output_layer_size) / np.sqrt(hidden_layer_size) * np.sqrt(2)
バッチ正規化
バッチ正規化とは、ミニバッチ単位で入力値のデータの偏りを抑制する方法。 活性化関数に値を渡す前後にバッチ正規化の層を加える。
はミニバッチの各要素データ。 これからミニバッチ全体の平均や、標準偏差を求める。 それらを用いて、ゼロを中心とした正規化を施したを求める。 更に学習の都合に応じて適当な定数やを用いてを算出する。
実装演習
mnistの学習を初期化条件を変更して実施。
活性化関数はReLU関数。
初期値を0固定にすると学習が進まない。
0.01*標準正規分布は最初の収束が遅いようにも見えるが、Xavier,Heのいずれも学習が進んでいく。