読むだけでちょっと賢くなる、架空のまとめスレ

【疑問】層を深くしたら前のほうの層だけ学習せん。勾配消失と勾配爆発、原因と対策の全体像【G検定】

11レスカテゴリ:AI・機械学習
1: 名無しさん

ネットワークを深くしたら、出力に近い層は学習してるのに、入力に近い層の重みがほとんど変わらん
何が起きてるん?

2: 名無しさん

前提のおさらい。誤差逆伝播法では、出力側から入力側へ、各層の傾きを連鎖律で掛け算しながら勾配を伝える

3: 名無しさん

>>1
勾配消失問題。掛け算する傾きが1より小さいと、層を戻るたびに勾配が縮む
シグモイド関数の微分は最大でも0.25やから、10層ぶん掛けると 。入力に近い層にはほとんど勾配が届かん

4: 名無しさん

>>3
逆に、掛ける値が1より大きいとどうなるん?

5: 名無しさん

>>4
勾配爆発問題。1.5が30回掛かると 万。重みが一気に大きく動いて、誤差が発散したり、計算が数値として扱えなくなったりする
0.9でも30回なら まで縮む。1からほんの少しずれるだけで、深いと効いてくる

6: 名無しさん

>>5
RNNで特に問題になるのも同じ理由やな。時間をさかのぼって伝えるから、長い系列は深いネットワークと同じになる

7: 名無しさん

原因は大きく2つ。活性化関数の傾きと、重みの大きさ。深さはそれを何回掛けるかを決める

8: 名無しさん

>>7
対策の全体像をまとめとく
活性化関数:隠れ層にReLUを使う。正の側の傾きが1で縮まない
重みの初期値:層の入力の数に合わせて大きさをそろえる(Xavierの初期値、Heの初期値)
正規化:バッチ正規化などで、層ごとの値の大きさを整える
構造:スキップ結合で、層を飛ばして勾配を直接伝える道を作る(ResNet)
RNNでは:ゲート機構を持つLSTMやGRUを使う
爆発には:勾配の大きさに上限をつける(勾配クリッピング)

9: 名無しさん

>>8
ReLUにすれば全部解決ちゃうの?傾き1なら縮まんやん

10: 名無しさん

>>9
ReLUの傾きは1やけど、勾配には重みも掛かる。重みが大きすぎたり小さすぎたりしたら、やっぱり爆発も消失もする。だから初期値や正規化と組み合わせる
ReLUは負の側で傾きが0になって、そのユニットが学習せんくなる問題もある

11: 名無しさん

>>10
100層を超えるネットワークを学習できるようになったのは、ReLU、初期値、正規化、スキップ結合を組み合わせた結果やと考えとけばええ。どれか1つで解決したわけやない

管理人のひとこと