今回は、ディープラーニングの「学習が安定する仕組み」を数式と一緒に理解していきましょう。
早速、レッツゴーーーーー!!!
勾配爆発・勾配消失の仕組み
ディープラーニングでは、損失関数を最小化するために「誤差逆伝播法」で勾配を計算します。
層が深くなるほど、この勾配は掛け算の連鎖で伝わります。
登場人物:
:各層の活性化関数の微分
:各層の重み
:層の総数
もし各層の値が、
であれば、次のように指数的に増加します。仮に各層の値の平均が1.2とすると、
これが 勾配爆発(exploding gradient) です。
誤差が膨張し、重みが発散して学習が壊れます。
対策としては、
- 勾配クリッピング:勾配の上限を設定して切り捨てる
- 重み初期化:初期の値を安定化
- バッチ正規化:層ごとのばらつきを整える
逆に、勾配消失(vanishing gradient)という概念もあります。
もし各層の値が、
であれば、指数的に減少していきます。仮に各層の値の平均が0.8とすると、
対策としては、
- ReLUなどの使用:勾配が0になりにくい活性化関数を使う
- 重み初期化:小さすぎる重みを避ける
- バッチ正規化:入力のスケールを安定させる
バッチ正規化
各層の出力が偏ると、勾配が伝わりにくくなります。
そこで「出力を正規化(平均0・標準偏差1)」するのがバッチ正規化です。
登場人物:
:バッチ内の平均値
:バッチ内の分散
:ゼロ割防止の微小値
:スケール(伸ばす係数)
:シフト(ずらす係数)
最初の式で標準化し、次の式でスケール・シフトを調整します。
これにより層間の値のばらつきが減り、勾配が安定します。
表現学習(Feature Learning)
表現学習とは「特徴を自動で学ぶこと」です。
その代表的な例が オートエンコーダ(Autoencoder) です。
登場人物:
:潜在表現(圧縮された特徴)
:活性化関数(エンコード/デコード)
:重み行列
:バイアス
入力 を一度圧縮し、再構成した出力
と比較して誤差を最小化します。
これにより「データの本質的な構造」を自動的に学び取ります。
最適化手法(Optimization Methods)
学習の進み方を決めるのが最適化手法(optimizer)です。
勾配降下法の改良版として代表的な3つの手法を見てみましょう。
(1) Momentum(モーメント法)
登場人物:
:過去の勾配の移動平均(慣性)
:慣性係数(0.9前後)
:学習率
:現在の勾配
過去の勾配を少し残して進むことで、振動を抑え、より滑らかに収束します。
(2) AdaGrad(アダグラッド)
登場人物:
:過去の勾配の二乗和
:学習率
:安定化のための微小値
よく動いたパラメータほど更新幅を小さくし、動きにくいパラメータは大きく更新することで、学習率を自動調整します。
(3) Adam(アダム)
MomentumとAdaGradを組み合わせた手法です。
各記号の意味:
:1次モーメント(勾配の平均)
:2次モーメント(勾配の分散)
:減衰率(一般的に0.9と0.999)
これにより、初期段階でも学習率が安定し、勾配降下法よりも効率的に最小値へ近づけます。
おわりに
結構重たい内容でしたが、皆さん、着いていけましたか?
書いている私はヘロヘロです。
何回転んでもいいので、まずは概念だけでもゆっくり覚えましょう。
