0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【深層学習の数学】ヤコビ行列の正体と、数億次元の罠「鞍点」からの脱出(直感でわかる最適化 #2)

0
Posted at

はじめに

前回の記事では、勾配ベクトル $\nabla f$ と関数の変化量 $\Delta f$ の違いを整理し、$\Delta f \approx \nabla f(\mathbf{a}) \cdot \Delta \mathbf{x}$ という近似式について解説しました。

しかし、実際のニューラルネットワークでは、出力が1つだけ(スカラー)ということはありません。入力も出力もベクトルとなる複数次元の変換を扱います。ここで登場するのが「ヤコビ行列(Jacobian Matrix)」です。

本記事では、ヤコビ行列の具体的な計算例と、深層学習における最適化の最大の壁である「局所的最適解」と「鞍点(Saddle Point)」について数学的に解説します。

ヤコビ行列とは何か?

ヤコビ行列を一言で言えば、「複数の出力を持つ関数において、すべての偏微分をまとめた行列」です。

入力ベクトルを $\mathbf{x} = [x_1, x_2]^\mathsf{T}$、出力ベクトルを $\mathbf{y} = [y_1, y_2]^\mathsf{T}$ としたとき、微小な入力の変化 $\Delta \mathbf{x}$ が、出力の変化 $\Delta \mathbf{y}$ にどう影響するかは、以下の式で近似できます。

$$\Delta \mathbf{y} \approx \mathbf{J}_f(\mathbf{x}) \Delta \mathbf{x}$$

この $\mathbf{J}_f(\mathbf{x})$ がヤコビ行列です。
前回の $\Delta f \approx \nabla f(\mathbf{x}) \cdot \Delta \mathbf{x}$ が、そのまま行列とベクトルの掛け算に拡張された形になっています。

具体例で計算してみる

抽象的なままだと分かりにくいので、具体的な関数でヤコビ行列を作り、予測値を計算してみましょう。

$$y_1 = x_1^2 + x_2$$
$$y_2 = 3x_1 x_2$$

この関数のヤコビ行列 $\mathbf{J}$ は、それぞれの出力を $x_1, x_2$ で偏微分して並べたものです。

$$\mathbf{J}(\mathbf{x}) = \begin{bmatrix} \frac{\partial y_1}{\partial x_1} & \frac{\partial y_1}{\partial x_2} \ \frac{\partial y_2}{\partial x_1} & \frac{\partial y_2}{\partial x_2} \end{bmatrix} = \begin{bmatrix} 2x_1 & 1 \ 3x_2 & 3x_1 \end{bmatrix}$$

現在地が $\mathbf{x} = [1, 2]^\mathsf{T}$ (つまり $x_1=1, x_2=2$)だとします。これを代入すると、この地点でのヤコビ行列が確定します。

$$\mathbf{J} = \begin{bmatrix} 2 & 1 \ 6 & 3 \end{bmatrix}$$

ここから、$\Delta \mathbf{x} = [0.1, 0.05]^\mathsf{T}$ だけ移動したときの出力の変化量 $\Delta \mathbf{y}$ を予測してみましょう。

$$\begin{bmatrix} \Delta y_1 \ \Delta y_2 \end{bmatrix} \approx \begin{bmatrix} 2 & 1 \ 6 & 3 \end{bmatrix} \begin{bmatrix} 0.1 \ 0.05 \end{bmatrix} = \begin{bmatrix} 0.25 \ 0.75 \end{bmatrix}$$

このように、ヤコビ行列を使えば「入力の微小な変化が、複数の出力にどう波及するか」を一発の行列計算で導き出すことができます。深層学習の誤差逆伝播法(バックプロパゲーション)は、まさにこのヤコビ行列の連続的な掛け算(連鎖律)によって計算されています。

深層学習の地形と最適化の罠

勾配が計算できるようになったら、あとは勾配降下法で谷底を下るだけです。しかし、深層学習の損失関数は非常に複雑な地形をしており、単純には下れません。

1. 凸関数と非凸関数(局所的最適解)

線形回帰のようなシンプルなモデルの損失関数は「凸関数(Convex)」になり、谷底(大域的最適解)は1つしか存在しません。しかし、ReLUなどの非線形な活性化関数を多層に重ねたディープラーニングの損失関数は「非凸関数(Non-Convex)」になります。

convex_vs_nonconvex.png
図1:凸関数と非凸関数の比較

非凸関数では、一番深い谷底(大域的最適解)とは別に、中腹にある浅い窪み「局所的最適解(Local Minimum)」が生まれます。勾配降下法は「足元の傾き」しか見えないため、この局所的最適解に落ちると $\nabla f = \mathbf{0}$ となり、学習がストップしてしまいます。

2. 数億次元の最大の罠「鞍点(Saddle Point)」

「じゃあ深層学習は局所的最適解にハマりまくって失敗するのか?」というと、実はそうではありません。パラメータ数が数百万〜数億にもなる超高次元空間では、すべての次元の方向が「上り坂」になる完全な窪み(局所的最適解)ができる確率は天文学的に低くなります。

代わりに無限に発生するのが「鞍点(Saddle Point)」です。

代表的な鞍点の数式 $f(x, y) = x^2 - y^2$ を見てみましょう。

saddle_point.png
図2:鞍点の3Dグラフ

原点 $(0, 0)$ において、偏微分(勾配)を計算します。

  • $\frac{\partial f}{\partial x} = 2x = 0$
  • $\frac{\partial f}{\partial y} = -2y = 0$
    つまり、原点では $\nabla f = [0, 0]^\mathsf{T}$ となり、勾配が完全に消失します。

$x$ 軸方向から見ると谷底(極小)ですが、$y$ 軸方向から見ると頂上(極大)になっています。勾配降下法は $\nabla f = \mathbf{0}$ になるとアップデートを止めてしまうため、この「平らな部分」に捕まって学習が停滞するのが、高次元の最適化における最も厄介な罠なのです。

まとめ

  • ヤコビ行列:複数の出力に対する勾配ベクトルをまとめた行列。微小変化の線形変換($\Delta \mathbf{y} \approx \mathbf{J} \Delta \mathbf{x}$)を司る。
  • 局所的最適解:非凸関数に存在する、真の正解ではない窪み。
  • 鞍点(Saddle Point):ある方向には極小、別の方向には極大となる点。超高次元ではこれが無数に発生し、勾配消失(学習の停滞)を引き起こす原因となる。

現在主流のAdamなどのオプティマイザは、単純な勾配だけでなく「過去の勾配の勢い(Momentum)」などを数式に組み込むことで、この鞍点からスムーズに抜け出せるように工夫されています。

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?