G検定の第4章を勉強していて、特に理解しにくかったのが**「鞍点(saddle point)」**だった。
損失関数、勾配降下法、局所最適解、鞍点、プラトー……。
それぞれの用語だけを見ると別々の話に見えるが、
ニューラルネットワークは、損失関数という「地形」の中で、一番低い場所を探している
と考えると、一つの話としてつながった。
この記事では、G検定で必要になる範囲を中心に、鞍点とその周辺の数学的なイメージを整理する。
1. そもそもニューラルネットワークは何を探しているのか
ニューラルネットワークでは、大量の**重み(weight)**を調整しながら学習する。
例えば、
入力
↓
ニューラルネットワーク
↓
予測
↓
正解と比較
↓
Loss
という流れがある。
**Loss(損失)**は、
モデルの予測が正解からどれくらい外れているか
を数値化したもの。
そのため、学習では基本的に
Lossをできるだけ小さくする重みを探す
ことになる。
2. 損失関数を「地形」として考える
重みを1つだけ (w) とすると、損失関数は
$$
L(w)
$$
と表せる。
横軸を重み、縦軸をLossとすると、
Loss
↑
│\
│ \
│ \
│ \____
│ \
│ ★
└────────────────→ w
のようなグラフとして考えられる。
★のようなLossの低い場所を見つけたい。
つまり、
横軸 = Weight
縦軸 = Loss
高い場所 = 予測が悪い
低い場所 = 予測が良い
ということになる。
3. 勾配降下法とは「坂を下る方法」
では、Lossの低い場所をどうやって探すのか。
そこで登場するのが**勾配降下法(Gradient Descent)**である。
考え方は、
今いる場所の坂の傾きを調べて、Lossが小さくなる方向へ少し進む
というもの。
Loss
↑
│●
│ \
│ ●
│ \
│ ●
│ \
│ ★
└────────────────→ Weight
これを繰り返すことで、Lossの低い場所へ近づいていく。
4. 微分と勾配の関係
重みが1つだけなら、微分によって
この場所では、どちらへ進めばLossが下がるのか
を調べられる。
例えば、
$$
\frac{dL}{dw}
$$
が正なら、一方へ進むとLossが増える。
反対方向へ進めばLossを減らせる。
ニューラルネットワークでは、
(w_1, w_2, w_3, \dots)
のように大量の重みが存在する。
そこで、それぞれの方向について
Lossがどのように変化するか
をまとめたものが**勾配(gradient)**である。
そのため、大まかには
微分
↓
1つの変数について傾きを調べる
勾配
↓
複数の変数について
Lossがどちらへ変化するか調べる
と考えると分かりやすい。
5. 「勾配が0 = 最適解」とは限らない
ここからが鞍点を理解するうえで重要になる。
谷底では、傾きがなくなる。
つまり、
$$
\nabla L = 0
$$
となる。
そのため、
勾配が0なら最小値なのでは?
と思いたくなる。
しかし、実際にはそうとは限らない。
勾配が0になる場所には、極小値以外も存在する。
6. 局所最小値と大域最小値
例えば、次のようなLossの地形を考える。
Loss
↑
│
│\
│ \ /\
│ \____/ \
│ A \
│ \____
│ B
└────────────────────→ Weight
Aも谷底である。
しかしBの方がさらに低い。
この場合、
- A:局所最小値
- B:大域最小値
と考えられる。
局所最小値
その周辺だけを見れば一番低い場所。
大域最小値
関数全体で最も低い場所。
つまり局所最小値とは、
「この近所では一番いい。でも、もっと遠くにはさらにいい場所がある」
という状態である。
7. では「鞍点」とは何なのか
鞍点は、局所最小値とは少し違う。
代表的な例として、
$$
f(x,y)=x^2-y^2
$$
を考える。
ポイントは変数が
$$
x,y
$$
の2つ存在することである。
8. x方向だけを見る
(y=0) とすると、
$$
f(x,0)=x^2
$$
となる。
これは、
\ /
\ /
\ /
★
という谷になる。
つまり★は、
x方向から見ると最小値
である。
9. y方向から見ると逆になる
今度は (x=0) とする。
すると、
$$
f(0,y)=-y^2
$$
となる。
これは、
★
/\
/ \
/ \
という山になる。
つまり同じ★なのに、
y方向から見ると最大値
になっている。
まとめると、
x方向から見る
\ /
\ /
★
→ 谷底
y方向から見る
★
/ \
→ 山頂
となる。
これが**鞍点(saddle point)**である。
10. なぜ「鞍」という名前なのか
馬に乗るときに使う「鞍」の形に似ているからである。
鞍の中央を見ると、
前後方向
→ 谷
左右方向
→ 山
という形になっている。
そのため、
ある方向から見ると谷底
別の方向から見ると山頂
となる点を鞍点と呼ぶ。
11. 鞍点では勾配が0になる
先ほどの
$$
f(x,y)=x^2-y^2
$$
について微分すると、
$$
\frac{\partial f}{\partial x}=2x
$$
$$
\frac{\partial f}{\partial y}=-2y
$$
となる。
中心
$$
(x,y)=(0,0)
$$
では、
$$
\frac{\partial f}{\partial x}=0
$$
かつ
$$
\frac{\partial f}{\partial y}=0
$$
になる。
つまり、
$$
\nabla f=(0,0)
$$
である。
勾配は0なのに、最小値ではない。
ここが鞍点を理解するときの重要なポイントになる。
12. 停留点とは
勾配が0になる場所を、
停留点(stationary point)
という。
つまり、
$$
\nabla L=0
$$
となる場所。
ただし、停留点には複数種類ある。
停留点
│
┌───────┼───────┐
↓ ↓ ↓
極小値 極大値 鞍点
したがって、
勾配が0になったからといって、最小値を発見したとは限らない。
ということになる。
13. 二階微分で何が分かるのか
高校数学でも、
$$
f'(x)=0
$$
となる場所を調べただけでは、極大・極小を完全には判断できない。
そこで二階微分を見ることがある。
例えば、
$$
f''(x)>0
$$
なら、
\ /
\______/
のような形になる。
谷型なので極小値になりうる。
反対に、
$$
f''(x)<0
$$
なら、
/ ̄ ̄\
/ \
という山型になる。
つまり二階微分は、
その場所がどちら向きに曲がっているか
を調べる情報でもある。
14. ヘッセ行列とは
ニューラルネットワークでは変数が1つではない。
例えば、
(L(w_1, w_2, w_3, \dots))
という大量の変数を持つ関数になる。
そこで、多変数について二階微分の情報をまとめたものが
ヘッセ行列(Hessian matrix)
である。
G検定を理解する段階なら、
ヘッセ行列 = 多変数版の二階微分情報をまとめたもの
と考えると分かりやすい。
15. 鞍点とヘッセ行列
鞍点では、
ある方向
↓
谷
別の方向
↓
山
になっている。
つまり、
ある方向 → 下に凸
別の方向 → 上に凸
という状態である。
この性質はヘッセ行列の固有値を調べることで判断できる。
典型的な鞍点では、
正の固有値
+
負の固有値
が存在する。
ここで固有値の計算方法まで覚える必要はない。
重要なのは、
正負が混ざる = 方向によって曲がり方が違う
という意味である。
16. なぜニューラルネットワークで鞍点が重要なのか
実際のニューラルネットワークでは、重みが2個どころではない。
例えば、
w1
w2
w3
w4
...
w1000000
のように大量のパラメータを持つ。
したがってLossは、
$$
L(w_1,w_2,w_3,\dots,w_n)
$$
という非常に高次元の関数になる。
人間は3次元までしか直感的に描けないが、実際のニューラルネットワークでは、
数百万、数十億といった大量の方向を持つ「Lossの地形」
を探索することになる。
方向が増えるほど、
この方向では谷
でも
別の方向では山
という状態も考えなければならない。
そのため、ニューラルネットワークの最適化を理解するうえで鞍点という概念が重要になる。
17. プラトーとは
鞍点と一緒に理解しておきたいのが、
プラトー(plateau)
である。
プラトーは、Lossの変化が非常に小さい平坦な領域。
Loss
↑
│\
│ \
│ \____________
│ \
│ \
└──────────────────→ Weight
↑
Plateau
この場所では、
$$
\nabla L \approx 0
$$
となる。
完全に0ではなくても、非常に小さい。
18. なぜプラトーが問題になるのか
勾配降下法による重みの更新は、大まかに
$$
w \leftarrow w-\eta\nabla L
$$
と表される。
ここで、
- (w):重み
- (\nabla L):勾配
- (\eta):学習率
である。
プラトーでは、
(\nabla L)
が非常に小さい。
すると、
重みを少し更新
↓
Lossがほとんど変わらない
↓
また少し更新
↓
ほとんど変わらない
↓
……
となり、学習が進みにくくなる。
19. ここからMomentumにつながる
こうした最適化上の問題を理解すると、
Momentum
などの最適化手法がなぜ登場するのかも分かりやすくなる。
通常の勾配降下法では、
今いる場所の勾配
を利用して進む。
Momentumでは、それに加えて、
これまで進んできた方向
も考慮する。
坂を転がるボールのようなイメージである。
通常
●
↓
●
↓
●
──────────
平坦になると遅い
Momentum
●
↘
●
↘
●──────→
これまでの「勢い」が残る
そのため、平坦な領域や鞍点付近などでも、単純な勾配降下法とは異なる挙動をする。
20. SGD・Momentum・Adamの話も同じところにつながる
G検定では、
- SGD
- Momentum
- AdaGrad
- RMSprop
- Adam
など大量の名前が登場する。
最初は別々のアルゴリズムとして暗記してしまいがちだが、根本的には、
複雑なLossの地形を、どう効率よく下っていくか?
という問題に対する工夫である。
ニューラルネットワーク
↓
大量のWeight
↓
複雑なLoss関数
↓
勾配を計算
↓
Lossを下げたい
↓
でも……
局所最小値
鞍点
Plateau
勾配の大きさの違い
などがある
↓
どう効率よく最適化する?
↓
SGD
Momentum
AdaGrad
RMSprop
Adam
こう考えると、それぞれの最適化手法を学ぶ理由が見えてくる。
21. G検定の図を見るときの読み替え
損失関数の3Dグラフが出てきたら、次のように読み替えると理解しやすい。
| 図に出てくるもの | 意味 |
|---|---|
| 横方向 | Weightなどのパラメータ |
| 高さ | Loss |
| 高い場所 | Lossが大きい |
| 低い場所 | Lossが小さい |
| 坂 | 勾配 |
| 坂を下る | Weightを更新する |
| 谷底 | 極小値 |
| 近所だけで一番低い谷 | 局所最小値 |
| 全体で一番低い谷 | 大域最小値 |
| 方向によって山・谷になる場所 | 鞍点 |
| 平らな領域 | Plateau |
つまり、あの複雑そうな3Dグラフは、
ニューラルネットワークが学習するときに探索しているLossの地形
をイメージとして描いたものだと考えればよい。
22. 最後に一番重要なポイント
今回、鞍点を理解して一番重要だと思ったのは、
$$
\boxed{\nabla L=0 \neq 必ず最適解}
$$
ということだった。
勾配が0になる場所には、
極小値
極大値
鞍点
などが存在する。
さらに実際のニューラルネットワークでは大量のパラメータが存在するため、Lossの地形は非常に高次元になる。
だからディープラーニングでは、
「勾配を計算して下れば終わり」
ではなく、
複雑なLossの地形の中を、どう効率よく最適化するか
という問題が重要になる。
そして、この問題意識が、
損失関数
↓
勾配
↓
勾配降下法
↓
局所最小値・鞍点・Plateau
↓
Momentum
↓
AdaGrad / RMSprop
↓
Adam
というG検定第4章の話につながっている。
用語を一つずつ暗記するより、
「なぜ次の技術が必要になったのか?」
という順番で追うと、かなり理解しやすくなる。
参考文献
- 日本ディープラーニング協会(JDLA)『深層学習教科書 ディープラーニング G検定(ジェネラリスト)公式テキスト 第3版』
- 日本ディープラーニング協会(JDLA)「G検定 シラバス」
- Goodfellow, Bengio, Courville, Deep Learning, MIT Press, Chapter 8: Optimization for Training Deep Models
- Sebastian Ruder, An overview of gradient descent optimization algorithms
- Dauphin et al., Identifying and attacking the saddle point problem in high-dimensional non-convex optimization, NeurIPS 2014
一言で復習
Loss
= AIがどれくらい間違っているか
勾配
= Lossが増える方向・その変化率
勾配降下法
= 勾配の反対方向へ進んでLossを減らす
局所最小値
= 近所では一番低い
大域最小値
= 全体で一番低い
鞍点
= ある方向では谷、別方向では山
Plateau
= ほぼ平坦で勾配が小さい
Momentum
= 過去の更新方向も利用して進む
Adam
= 勾配の情報を利用しながら
パラメータごとの更新量を適応的に調整する
G検定4章では、これらを独立した単語として覚えるのではなく、「Lossの地形をどう下るのか」という一つのストーリーとして理解するのがポイントである。