勾配消失問題は深層学習の長年の敵。どう克服されたかの歴史を知ることで、DLの進化が見えてきます。
勾配消失って、なんでそんなに困るの?
勾配消失問題が起きると、深い層の重みが更新されず学習が進まなくなるからよ。
逆伝播で勾配が層を経るごとに減衰し、入力側ではほぼ0になってしまうの。
原因の一つがシグモイド関数。
微分値の最大が0.25で、層を重ねると0.25^n と指数的に小さくなる。
深い10層なら10^-6以下になってしまうわ。
10層でほぼ消えちゃうんですかぁ?
それは困りますぅ…
逆の問題として勾配爆発問題もあるわ。
層が深いと勾配が指数的に大きくなり、学習が不安定になるの。
特にRNNで顕著ね。
解決策は大きく4つ。
1) ReLUなど勾配が消えにくい活性化関数、2) バッチ正規化、3) 残差接続(スキップ接続)、4) 適切な重み初期化ね。
ReLUは前に出てきたね!
そう。
残差接続はResNet(2015) が採用した画期的手法。
層の出力にその入力を足し算することで、勾配が通りやすい『バイパス』を作るの。
重み初期化も重要。
Xavier初期化(Glorot初期化) は活性化関数の分散を保つように設計、He初期化はReLU用に分散を2倍にしたバージョンよ。
初期値って、そんなに大事なんですねぇ!
ヒントンらが2006年に発表した事前学習(Pre-training) も歴史的に重要。
オートエンコーダなどで1層ずつ事前学習してから全体を微調整する方法ね。
勾配爆発には勾配クリッピングが対策。
勾配のノルムが閾値を超えたらスケーリングして抑えるの。
LSTM学習でよく使われるわ。
いろんな技を組み合わせて、勾配問題を乗り越えてきたんだね!
G検定では『勾配消失/爆発問題』『ReLU・バッチ正規化・残差接続・重み初期化』『勾配クリッピング』をしっかり押さえておいてね!
確認クイズ
勾配消失問題への対策として、ResNetで採用され『層の出力に入力を足し算する』構造はどれか。
- ドロップアウト
- 残差接続 (スキップ接続)
- バッチ正規化
- データ拡張
こたえを見る
正解: 2. 残差接続 (スキップ接続)
残差接続 (スキップ接続)はResNet (2015) が採用した構造で、層の出力に入力を足して勾配が通りやすい『バイパス』を作ります。これにより100層以上のネットワークが学習可能になりました。