概要
勾配消失問題は深層学習において重要な問題である。
その問題を解決するために活性化関数、初期値の設定やバッチ正規化などがある
この章では以下の項目を学んだ
・勾配消失問題の基礎(確認テスト1つ含む)
・活性化関数(確認テスト1つ含む)
・初期値の設定方法(確認テスト1つ含む)
・バッチ正規化(確認テスト1つ含む)
・ハンズオン
・例題チャレンジ
勾配消失問題の基礎
誤差逆伝播が下位層に進んでいくに連れて、勾配がどんどん緩やかになっていく。そのため、勾配降下法による、更新では下位層のパラメータはほとんど変わらず、訓練は最適値に収束しなくなる問題。
勾配は偏微分で計算されるため下位層になるほど連鎖律が続くのでパラメータの更新量が非常に小さくなるからである
<<確認テスト>>
連鎖律の原理を使いdz/dxを求めよ。z=t2, t=x+yとする
活性化関数
-∞~+∞までの入力を-1~+1に押し込む関数
大きな値では出力の変化が微小なため、勾配消失問題を引き起こしてしまう
ReLU関数
入力が0以下の時は0、0より大きいときは入力をそのまま出力する恒等関数になる
勾配消失問題の回避とスパース化に貢献することで良い成果をもたらしている。
<<確認テスト>>
0.25
初期値の設定方法
Xavier
重みの要素を、前の層のノード数の平方根で除算した値
各層の出力結果が0or1に偏ることがないため、勾配が消失するリスクを低減する
He
重みの要素を、前の層のノード数の平方根で除算した値に対し√2をかけ合わせた値
<<確認テスト>>
重みの初期値を0に設定するとどのような問題が発生するか?
正しい学習が行いえない。全ての重みが均一に更新されるため、多数の重みを持つ意味がなくなる
バッチ正規化
ミニバッチ単位で入力値のデータの偏りを抑制する手法
活性化関数に値を渡す前後にバッチ正規化を孕んだ層を加える
バッチ正規化を数学的に記述すると以下のようになる
<<確認テスト>>
一般的に考えられるバッチ正規化の効果を2点挙げよ
・中間層の重みの更新が安定化される ⇒ 学習のスピードアップ
・過学習抑制 ⇒ データの値を一定の範囲内にスケーリングできるのでバッチごとのデータの異常な偏りを抑制できる
ハンズオン
hidden_size_listの数字の変更
初期のhidden_size_listは[40,20]であるため[20,10]に変更
レイヤーサイズを小さくしたことによって、学習が収束するするまで時間がかかっている
例題チャレンジ
下図の(き)にあてはまるコードを記述せよ
data_x[i:i_end], data_t[i:i_end