G検定の公式テキストを読んでいて気になったところをまとめておきます。
既存のNNにおける問題
- ネットワークを深くする(隠れ層を増やす)と、誤差が最後まで正しく反映されない。(誤差逆伝播法がうまくいかない)
- なぜ、隠れ層を増やすと誤差の伝搬がうまくいかないのか?
- 理由の1つ、シグモイド関数の特性がある
シグモイドの特性
誤差は、ネットワークを逆向きに順々に伝搬する。その過程で、数式上では、もともとの誤差にいくつかの項が掛け合わせる。その項の一つに活性化関数の微分があ理、そこに問題があった。
NNの活性化関数としてシグモイド関数が使われると何が起こるか?
- 問題は、
シグモイド関数の微分の最大値が0.25にしかならない
- 隠れ層を遡るごとに、伝搬していく誤差はどんどん小さくなる
- これを勾配消失問題(gradient vanishing problem)と呼ぶ
+α
- 隠れ層では、任意の実数を(非線形に)変換することができる関数であれば、特にどんな関数であろうと問題はない。
- ReLUでは、xが0以下の場合は微分値も0になるから、学習がうまくいかない場合もある。
勾配降下法
勾配降下法は、「見せかけの最適解」であるかどうかを見抜くことができない。
- 局所最適解 -> 見せかけの解
- 大域最適解 -> 本当の最適解
point: 特に何も工夫しないと、勾配降下法は局所最適解に陥ってしまう可能性が高い。
じゃどうする?局所最適解を防ぐ方法は?
Answer : 学習率の値を大きく設定!!
- ただし、学習率が大きいままだと、最適解を飛び越えて探索を続ける可能性ある。
- 適切なタイミングで学習率の値を小さくする
鞍点とは、 ある次元から見れば極小であるけど、別の次元から見ると極大
- 鞍点は一般的に勾配の小さな平坦な地点に囲まれていることが多いので、一度鞍点付近に陥ると、そこから抜け出すのが困難(こうした停留状態をプラトーという)
鞍点を回避するには?
Answer : どの方向に沿って勾配を進んでいるときに学習率を調整するかを考える
→ モーメンタムの利用
データの正規化・重みの初期化
正規化 : データ全体を調整する処理
機械学習の手法は、「入力のそれぞれの特徴量がどう動いたら、出力がどう動くか」を見ている
→ 各特徴量の分散を揃えて置くことで、それぞれの特徴量の動きに対する感度を平等に見ることができる
データの標準化の効果がDNNでは薄くなる理由は?
Answer : 何かしらの活性化関数がかかっていると、せっかく正規化したデータなのに、層を伝搬するにしたがって分布が徐々に崩れる。データの偏りが発生すると、勾配消失が起きやすい。
解決策は??
→ 重みの初期化を工夫する
勾配降下法の探索は初期値に依存するので、重みの初期値の設定は重要。
シグモイド関数には、Xavierの初期値
ReLU関数には、Heの初期値
参考文献
終わりに
今回は、メモ程度に書きました。
随時、更新していきたいと思います。