ヤコビ行列とヤコビアンの意味を理解する

地図を作るとき、球面上の地球を平面に展開する必要があります。メルカトル図法では高緯度が引き伸ばされ、グリーンランドがアフリカ大陸より大きく見えてしまいます。この「引き伸ばされ具合」を正確に定量化するには、座標変換による面積の変化率を知る必要があります。この変化率を与えるのがヤコビアン(Jacobian)です。

また、ロボットアームの先端がどの方向にどれだけ動けるかを知りたいとき、各関節の角度変化が先端位置にどう影響するかを記述する行列が必要です。この行列がヤコビ行列(Jacobian matrix)です。

ヤコビ行列とヤコビアンを理解すると、以下のような応用が開けます。

  • 重積分の変数変換: 極座標変換での $r\,dr\,d\theta$ の $r$ はヤコビアンから出てくる
  • 機械学習: ニューラルネットワークの逆伝播(バックプロパゲーション)はヤコビ行列の連鎖
  • ロボティクス: ロボットアームの逆運動学でヤコビ行列の逆行列を使う
  • 確率変数の変換: 確率密度関数の変数変換にヤコビアンの絶対値が現れる

本記事の内容

  • ヤコビ行列の直感的な理解と幾何学的意味
  • ヤコビ行列の数学的定義
  • ヤコビアン(行列式)の意味 — 面積・体積の変換比
  • 座標変換とヤコビアンの関係
  • 逆関数定理との関連
  • Pythonによる可視化と実装

前提知識

この記事を読む前に、以下の記事を読んでおくと理解が深まります。

ヤコビ行列とは — 多変数関数の「微分」

1変数の微分からの拡張

1変数関数 $y = f(x)$ の微分 $f'(a)$ は、$x = a$ の近くで

$$ f(a + h) \approx f(a) + f'(a) \cdot h $$

という線形近似を与えます。ここで $f'(a)$ は「入力の微小変化 $h$ が出力の変化 $f'(a) \cdot h$ にどのようにスケーリングされるか」を表す1つの数値です。

では、多変数の入力多変数の出力に変換する関数 $\bm{F}: \mathbb{R}^n \to \mathbb{R}^m$ の場合はどうでしょうか。たとえば、極座標 $(r, \theta)$ を直交座標 $(x, y)$ に変換する関数

$$ \begin{cases} x = r\cos\theta \\ y = r\sin\theta \end{cases} $$

は2変数の入力を2変数の出力に変換します。$(r, \theta)$ が少し変化したとき、$(x, y)$ がどう変化するかを記述するには、1つの数値では足りません。$r$ の変化が $x$ に与える影響、$r$ の変化が $y$ に与える影響、$\theta$ の変化が $x$ に与える影響、$\theta$ の変化が $y$ に与える影響 — 合計4つの偏微分が必要です。

これらを行列にまとめたものがヤコビ行列です。つまり、ヤコビ行列は「多変数関数の微分」を行列として表現したものです。

幾何学的イメージ

ヤコビ行列の幾何学的な意味を理解するために、写像 $\bm{F}$ が入力空間の小さな四角形をどのように変形するかを考えましょう。

入力空間で $\bm{a}$ を中心とした微小な四角形を考えます。$\bm{F}$ によってこの四角形は出力空間に写されますが、一般には歪んだ平行四辺形になります。ヤコビ行列は、この「微小な四角形が微小な平行四辺形に変換される」という線形的な振る舞いを記述する行列です。

ヤコビアン(ヤコビ行列の行列式)は、この変換による面積(体積)の拡大率を表します。ヤコビアンが正なら向きが保存され、負なら向きが反転します。ヤコビアンが0の点では、四角形が「つぶれて」線分や点になることを意味します。

こうした直感を念頭に置いて、次に数学的な定義を見ていきましょう。

ヤコビ行列の数学的定義

定義

ベクトル値関数 $\bm{F}: \mathbb{R}^n \to \mathbb{R}^m$ を

$$ \bm{F}(\bm{x}) = \begin{pmatrix} F_1(x_1, \ldots, x_n) \\ F_2(x_1, \ldots, x_n) \\ \vdots \\ F_m(x_1, \ldots, x_n) \end{pmatrix} $$

とするとき、ヤコビ行列(Jacobian matrix)$\bm{J}$ は

$$ \begin{equation} \bm{J} = \frac{\partial \bm{F}}{\partial \bm{x}} = \begin{pmatrix} \frac{\partial F_1}{\partial x_1} & \frac{\partial F_1}{\partial x_2} & \cdots & \frac{\partial F_1}{\partial x_n} \\ \frac{\partial F_2}{\partial x_1} & \frac{\partial F_2}{\partial x_2} & \cdots & \frac{\partial F_2}{\partial x_n} \\ \vdots & \vdots & \ddots & \vdots \\ \frac{\partial F_m}{\partial x_1} & \frac{\partial F_m}{\partial x_2} & \cdots & \frac{\partial F_m}{\partial x_n} \end{pmatrix} \end{equation} $$

つまり、$\bm{J}$ は $m \times n$ 行列であり、$(i, j)$ 成分は $\frac{\partial F_i}{\partial x_j}$ です。$i$ 行目は $F_i$ の勾配ベクトルの転置 $\nabla F_i^\top$ に対応します。

ヤコビ行列による線形近似

ヤコビ行列を使うと、$\bm{F}$ の線形近似が次のように書けます。

$$ \begin{equation} \bm{F}(\bm{a} + \bm{h}) \approx \bm{F}(\bm{a}) + \bm{J}(\bm{a}) \cdot \bm{h} \end{equation} $$

これは1変数の $f(a+h) \approx f(a) + f'(a)h$ の自然な多変数への拡張です。スカラーの微分係数 $f'(a)$ が行列 $\bm{J}(\bm{a})$ に置き換わっただけです。

具体例: 極座標変換

極座標 $(r, \theta) \to (x, y) = (r\cos\theta, r\sin\theta)$ のヤコビ行列を計算しましょう。

$$ \bm{J} = \begin{pmatrix} \frac{\partial x}{\partial r} & \frac{\partial x}{\partial \theta} \\ \frac{\partial y}{\partial r} & \frac{\partial y}{\partial \theta} \end{pmatrix} = \begin{pmatrix} \cos\theta & -r\sin\theta \\ \sin\theta & r\cos\theta \end{pmatrix} $$

1列目 $(\cos\theta, \sin\theta)^\top$ は「$r$ を少し増やしたとき $(x, y)$ がどう動くか」を表し、これは原点から外向きの方向です。2列目 $(-r\sin\theta, r\cos\theta)^\top$ は「$\theta$ を少し増やしたとき $(x, y)$ がどう動くか」を表し、これは円の接線方向です。

連鎖律のヤコビ行列表現

合成関数 $\bm{G} = \bm{F} \circ \bm{H}$($\bm{x} \mapsto \bm{H}(\bm{x}) \mapsto \bm{F}(\bm{H}(\bm{x}))$)のヤコビ行列は

$$ \begin{equation} \bm{J}_{\bm{G}} = \bm{J}_{\bm{F}} \cdot \bm{J}_{\bm{H}} \end{equation} $$

つまり、連鎖律はヤコビ行列のとして表されます。ニューラルネットワークの逆伝播(バックプロパゲーション)は、この連鎖律を効率的に計算するアルゴリズムです。

ヤコビ行列の定義を理解したところで、次にその行列式であるヤコビアンの意味を見ていきましょう。

ヤコビアンの意味 — 面積・体積の変換比

ヤコビアンの定義

$n = m$ の場合(正方行列の場合)、ヤコビ行列の行列式をヤコビアンと呼びます。

$$ \begin{equation} J = \det(\bm{J}) = \det\left(\frac{\partial \bm{F}}{\partial \bm{x}}\right) \end{equation} $$

面積の変換比

ヤコビアンの最も重要な解釈は、「座標変換による面積(体積)の局所的な拡大率」です。

入力空間で $(u, v)$ を中心とする微小な長方形の面積は $\Delta u \cdot \Delta v$ です。この長方形がヤコビ行列によって出力空間の平行四辺形に写されるとき、平行四辺形の面積は

$$ \Delta A = |J| \cdot \Delta u \cdot \Delta v $$

となります。ここで $|J|$ はヤコビアンの絶対値です。

極座標のヤコビアン

極座標変換のヤコビアンを計算しましょう。

$$ J = \det\begin{pmatrix} \cos\theta & -r\sin\theta \\ \sin\theta & r\cos\theta \end{pmatrix} = r\cos^2\theta + r\sin^2\theta = r $$

したがって、極座標での面積要素は

$$ dA = |J| \, dr \, d\theta = r \, dr \, d\theta $$

これは、重積分の変数変換で $dxdy = r\,drd\theta$ とする理由の正確な説明です。$r$ が大きいほど、$\theta$ の微小変化が $(x, y)$ 空間で大きな弧を描くため、面積要素が $r$ に比例して大きくなるのです。

3次元: 球面座標のヤコビアン

球面座標 $(r, \theta, \phi) \to (x, y, z)$ の変換は

$$ \begin{cases} x = r\sin\theta\cos\phi \\ y = r\sin\theta\sin\phi \\ z = r\cos\theta \end{cases} $$

ヤコビ行列は $3 \times 3$ 行列です。

$$ \bm{J} = \begin{pmatrix} \sin\theta\cos\phi & r\cos\theta\cos\phi & -r\sin\theta\sin\phi \\ \sin\theta\sin\phi & r\cos\theta\sin\phi & r\sin\theta\cos\phi \\ \cos\theta & -r\sin\theta & 0 \end{pmatrix} $$

行列式を計算すると

$$ J = r^2\sin\theta $$

したがって、球面座標での体積要素は $dV = r^2\sin\theta \, dr \, d\theta \, d\phi$ です。この公式は、球対称の積分(ガウス積分の3次元版、重力ポテンシャルの計算など)で不可欠です。

確率変数の変換

ヤコビアンは確率密度関数の変換にも現れます。確率変数 $\bm{X}$ の密度を $f_{\bm{X}}(\bm{x})$、$\bm{Y} = \bm{g}(\bm{X})$ を全単射な変換とすると

$$ \begin{equation} f_{\bm{Y}}(\bm{y}) = f_{\bm{X}}(\bm{g}^{-1}(\bm{y})) \cdot \left|\det\left(\frac{\partial \bm{g}^{-1}}{\partial \bm{y}}\right)\right| \end{equation} $$

つまり、密度関数にヤコビアンの絶対値を掛ける必要があります。これは「$\bm{y}$ 空間での微小体積が $\bm{x}$ 空間でどれだけの体積に対応するか」を補正しているのです。

ヤコビアンの「面積の変換比」としての解釈が重要であることがわかりました。次に、ヤコビアンがゼロになる場合(特異点)の意味を考えましょう。

逆関数定理と特異点

逆関数定理

ヤコビアンがゼロでない点では、写像は局所的に可逆です。これを述べるのが逆関数定理です。

定理(逆関数定理): $\bm{F}: \mathbb{R}^n \to \mathbb{R}^n$ が $C^1$ 級で、$\det\bm{J}(\bm{a}) \neq 0$ ならば、$\bm{a}$ の近傍で $\bm{F}$ は可逆であり、逆写像 $\bm{F}^{-1}$ も $C^1$ 級で、そのヤコビ行列は

$$ \bm{J}_{\bm{F}^{-1}} = (\bm{J}_{\bm{F}})^{-1} $$

逆に、$\det\bm{J}(\bm{a}) = 0$ の点では、$\bm{F}$ は局所的に可逆ではなく、微小な四角形がつぶれて次元が落ちることを意味します。このような点を特異点(singular point)と呼びます。

極座標の特異点

極座標変換のヤコビアン $J = r$ は $r = 0$(原点)でゼロになります。これは幾何学的に自然です。原点では $\theta$ を変えても $(x, y) = (0, 0)$ のままで動きません。つまり、2次元の情報($r$ と $\theta$)が1点(原点)につぶれてしまうのです。

この特異性は、極座標での偏微分方程式の解析(ラプラス方程式の解など)で技術的な困難を引き起こすことがあります。

陰関数定理との関係

逆関数定理の系として陰関数定理が得られます。方程式 $\bm{G}(\bm{x}, \bm{y}) = \bm{0}$ で定義される陰関数 $\bm{y} = \bm{y}(\bm{x})$ が存在するための条件は、$\frac{\partial \bm{G}}{\partial \bm{y}}$ のヤコビアンがゼロでないことです。陰関数定理については別の記事で詳しく扱います。

なお、逆関数定理と陰関数定理は「局所的な可逆性」を保証するものであり、大域的な可逆性を保証するわけではない点に注意が必要です。たとえば、$\bm{F}(x) = (\cos x, \sin x)$ はすべての点でヤコビアンが非ゼロですが、$2\pi$ ごとに同じ値をとるため全体としては単射ではありません。大域的な可逆性には、写像の固有(proper)性などの追加条件が必要になります。こうした局所と大域の違いを意識しておくことは、座標変換を用いた実際の計算で積分領域を正しく設定するうえでも重要です。

理論的な内容を理解したところで、次にPythonでヤコビ行列とヤコビアンの幾何学的意味を可視化してみましょう。

Pythonでの実装と可視化

座標変換による面積の変形

極座標変換が入力空間のグリッドをどのように変形するかを可視化します。

import numpy as np
import matplotlib.pyplot as plt
from matplotlib.patches import Polygon
from matplotlib.collections import PatchCollection

# 極座標変換
def polar_to_cartesian(r, theta):
    return r * np.cos(theta), r * np.sin(theta)

fig, axes = plt.subplots(1, 3, figsize=(16, 5))

# (a) 入力空間 (r, theta) のグリッド
ax = axes[0]
r_lines = np.linspace(0.5, 2.5, 6)
theta_lines = np.linspace(0, 2 * np.pi, 13)

for r in r_lines:
    ax.axhline(r, color='blue', alpha=0.5, linewidth=0.8)
for theta in theta_lines:
    ax.axvline(theta, color='red', alpha=0.5, linewidth=0.8)

# 特定のセルを強調
r1, r2 = 1.0, 1.5
t1, t2 = np.pi/4, np.pi/2
rect = plt.Rectangle((t1, r1), t2-t1, r2-r1, linewidth=2,
                       edgecolor='green', facecolor='green', alpha=0.3)
ax.add_patch(rect)

ax.set_xlabel(r'$\theta$', fontsize=12)
ax.set_ylabel(r'$r$', fontsize=12)
ax.set_title(r'Input space $(r, \theta)$', fontsize=13)
ax.set_xlim(0, 2*np.pi)
ax.set_ylim(0, 3)
ax.grid(True, alpha=0.3)

# (b) 出力空間 (x, y) に変換
ax = axes[1]
theta_fine = np.linspace(0, 2*np.pi, 200)

for r in r_lines:
    x, y = polar_to_cartesian(r, theta_fine)
    ax.plot(x, y, 'b-', alpha=0.5, linewidth=0.8)

r_fine = np.linspace(0.5, 2.5, 100)
for theta in theta_lines:
    x, y = polar_to_cartesian(r_fine, theta)
    ax.plot(x, y, 'r-', alpha=0.5, linewidth=0.8)

# 変換されたセルを強調
theta_arc = np.linspace(t1, t2, 50)
x1_inner, y1_inner = polar_to_cartesian(r1, theta_arc)
x1_outer, y1_outer = polar_to_cartesian(r2, theta_arc)
verts = np.concatenate([
    np.column_stack([x1_inner, y1_inner]),
    np.column_stack([x1_outer[::-1], y1_outer[::-1]])
])
poly = Polygon(verts, closed=True, facecolor='green', edgecolor='green',
               alpha=0.3, linewidth=2)
ax.add_patch(poly)

ax.set_xlabel('x', fontsize=12)
ax.set_ylabel('y', fontsize=12)
ax.set_title(r'Output space $(x, y)$', fontsize=13)
ax.set_aspect('equal')
ax.set_xlim(-3, 3)
ax.set_ylim(-3, 3)
ax.grid(True, alpha=0.3)

# (c) ヤコビアン |J| = r の可視化
ax = axes[2]
r_grid = np.linspace(0, 3, 200)
theta_grid = np.linspace(0, 2*np.pi, 200)
R, THETA = np.meshgrid(r_grid, theta_grid)
X = R * np.cos(THETA)
Y = R * np.sin(THETA)
J_det = R  # ヤコビアン = r

im = ax.pcolormesh(X, Y, J_det, cmap='viridis', shading='auto')
plt.colorbar(im, ax=ax, label='|Jacobian| = r')
ax.set_xlabel('x', fontsize=12)
ax.set_ylabel('y', fontsize=12)
ax.set_title('Jacobian Determinant (Area Scaling)', fontsize=13)
ax.set_aspect('equal')
ax.set_xlim(-3, 3)
ax.set_ylim(-3, 3)

plt.tight_layout()
plt.savefig('jacobian_polar.png', dpi=150, bbox_inches='tight')
plt.show()

このグラフから、ヤコビアンの幾何学的意味が視覚的に理解できます。

  1. 左図(入力空間): $(r, \theta)$ 空間では等間隔のグリッドが描かれています。緑色のセルは面積 $\Delta r \cdot \Delta\theta$ の長方形です。

  2. 中央図(出力空間): 極座標変換によって、等間隔のグリッドが同心円と放射線に変換されています。注目すべきは、入力空間で同じ大きさだったセルが、出力空間では $r$ が大きい場所ほど大きな面積を持つことです。緑色のセルも曲がった形の領域に変換されています。

  3. 右図(ヤコビアンの分布): ヤコビアン $|J| = r$ の値が色で示されています。原点付近($r \approx 0$)でヤコビアンが小さく(暗い色)、$r$ が大きくなるほどヤコビアンも大きくなります(明るい色)。これは、$r$ が大きい場所ほど面積が引き伸ばされることを定量的に示しています。

一般の非線形変換

極座標以外の非線形変換について、ヤコビ行列による線形近似を可視化します。

import numpy as np
import matplotlib.pyplot as plt

# 非線形変換: (u, v) -> (x, y) = (u^2 - v^2, 2uv)(複素数の二乗 z^2)
def transform(u, v):
    return u**2 - v**2, 2 * u * v

def jacobian_matrix(u, v):
    return np.array([[2*u, -2*v],
                     [2*v, 2*u]])

fig, axes = plt.subplots(1, 2, figsize=(14, 6))

# 入力空間のグリッド
u_lines = np.linspace(-2, 2, 11)
v_lines = np.linspace(-2, 2, 11)

# 出力空間での変換
ax = axes[0]
t = np.linspace(-2, 2, 200)

for u_val in u_lines:
    x, y = transform(u_val, t)
    ax.plot(x, y, 'b-', alpha=0.4, linewidth=0.8)
for v_val in v_lines:
    x, y = transform(t, v_val)
    ax.plot(x, y, 'r-', alpha=0.4, linewidth=0.8)

# 特定の点でのヤコビ行列の効果を可視化
points = [(1, 0.5), (-1, 1), (0.5, -1)]
colors_pt = ['green', 'orange', 'purple']

for (u0, v0), color in zip(points, colors_pt):
    x0, y0 = transform(u0, v0)
    J = jacobian_matrix(u0, v0)

    # 単位円をヤコビ行列で変換(楕円になる)
    angles = np.linspace(0, 2*np.pi, 100)
    circle = np.array([np.cos(angles), np.sin(angles)])
    ellipse = J @ circle * 0.3 + np.array([[x0], [y0]])

    ax.plot(ellipse[0], ellipse[1], color=color, linewidth=2)
    ax.plot(x0, y0, 'o', color=color, markersize=8)

    det_J = np.linalg.det(J)
    ax.annotate(f'|J|={abs(det_J):.1f}', xy=(x0, y0),
                xytext=(x0+0.3, y0+0.3), fontsize=9, color=color,
                fontweight='bold')

ax.set_xlabel('x', fontsize=12)
ax.set_ylabel('y', fontsize=12)
ax.set_title(r'$z^2$ mapping: $(u,v) \mapsto (u^2-v^2, 2uv)$', fontsize=13)
ax.set_xlim(-5, 5)
ax.set_ylim(-5, 5)
ax.set_aspect('equal')
ax.grid(True, alpha=0.3)

# ヤコビアンのヒートマップ
ax = axes[1]
u_grid = np.linspace(-2, 2, 200)
v_grid = np.linspace(-2, 2, 200)
U, V = np.meshgrid(u_grid, v_grid)
J_det = np.abs(4 * U**2 + 4 * V**2)  # |det J| = 4(u^2 + v^2)

im = ax.pcolormesh(U, V, J_det, cmap='plasma', shading='auto')
plt.colorbar(im, ax=ax, label='|det J|')

# 特異点を表示
ax.plot(0, 0, 'r*', markersize=15, label='Singular point (|J|=0)')

ax.set_xlabel('u', fontsize=12)
ax.set_ylabel('v', fontsize=12)
ax.set_title('Jacobian Determinant in Input Space', fontsize=13)
ax.set_aspect('equal')
ax.legend(fontsize=10)
ax.grid(True, alpha=0.3)

plt.tight_layout()
plt.savefig('jacobian_nonlinear.png', dpi=150, bbox_inches='tight')
plt.show()

このグラフから、非線形変換におけるヤコビ行列の役割が理解できます。

  1. 左図(変換の可視化): 入力空間の直交グリッドが、$z^2$ 写像によって曲がった格子に変換されています。各点での楕円は、ヤコビ行列が単位円をどのように変形するかを示しています。$|J|$ の値が大きい点ほど楕円が大きく、面積の拡大率が高いことがわかります。

  2. 右図(ヤコビアンのヒートマップ): 入力空間でのヤコビアン $|J| = 4(u^2 + v^2)$ の分布を示しています。原点(赤い星)でヤコビアンがゼロ(特異点)となり、原点から離れるほどヤコビアンが大きくなります。原点での特異性は、$z = 0$ における $z^2$ の微分がゼロ($\frac{d}{dz}z^2|_{z=0} = 0$)であることに対応しています。

数値ヤコビアンの計算

ヤコビ行列を数値的に計算するコードを実装します。

import numpy as np

def numerical_jacobian(F, x, h=1e-7):
    """
    ベクトル値関数 F: R^n -> R^m のヤコビ行列を数値的に計算する。
    中心差分を使用。
    """
    n = len(x)
    f0 = np.array(F(x))
    m = len(f0)
    J = np.zeros((m, n))

    for j in range(n):
        x_plus = x.copy()
        x_minus = x.copy()
        x_plus[j] += h
        x_minus[j] -= h
        J[:, j] = (np.array(F(x_plus)) - np.array(F(x_minus))) / (2 * h)

    return J

# テスト: 極座標変換
def polar_transform(x):
    r, theta = x
    return [r * np.cos(theta), r * np.sin(theta)]

# (r, theta) = (2, pi/3) での検証
point = np.array([2.0, np.pi / 3])
J_numerical = numerical_jacobian(polar_transform, point)
J_analytical = np.array([
    [np.cos(np.pi/3), -2*np.sin(np.pi/3)],
    [np.sin(np.pi/3), 2*np.cos(np.pi/3)]
])

print("ヤコビ行列(数値):")
print(J_numerical)
print("\nヤコビ行列(解析):")
print(J_analytical)
print(f"\n最大誤差: {np.max(np.abs(J_numerical - J_analytical)):.2e}")
print(f"\nヤコビアン(数値): {np.linalg.det(J_numerical):.6f}")
print(f"ヤコビアン(解析): {point[0]:.6f}")  # r = 2

数値ヤコビアンの計算結果は解析解と非常によく一致し、最大誤差は $10^{-10}$ 程度に抑えられています。中心差分による数値微分は、手で微分を計算するのが困難な複雑な関数に対して特に有用です。機械学習フレームワーク(PyTorch, JAXなど)の自動微分も、本質的にはヤコビ行列の計算を効率的に行う仕組みです。

ヤコビ行列の応用例

ロボットアームの逆運動学

ロボットアームの先端位置 $\bm{p} = (x, y)$ が関節角度 $\bm{\theta} = (\theta_1, \theta_2)$ の関数 $\bm{p} = \bm{f}(\bm{\theta})$ で表されるとき、ヤコビ行列 $\bm{J} = \frac{\partial \bm{f}}{\partial \bm{\theta}}$ は関節の微小回転が先端位置の微小変位にどう対応するかを記述します。

先端を目標位置 $\bm{p}^*$ に移動させたいとき、必要な関節角度の修正量は

$$ \delta\bm{\theta} = \bm{J}^{-1} \delta\bm{p} $$

で近似できます($\bm{J}$ が正則の場合)。$\bm{J}$ が特異になる姿勢(特異姿勢)では、先端がある方向に動けなくなります。たとえば、2リンクアームが完全に伸びきった姿勢では、伸びた方向には動けません。この現象はヤコビアン $\det(\bm{J}) = 0$ として検出されます。

ニューラルネットワークの逆伝播

多層ニューラルネットワークの各層を $\bm{z}^{(l)} = \bm{f}^{(l)}(\bm{z}^{(l-1)})$ と表すと、出力から入力への勾配は連鎖律

$$ \frac{\partial \mathcal{L}}{\partial \bm{z}^{(1)}} = \bm{J}^{(2)^T} \bm{J}^{(3)^T} \cdots \bm{J}^{(L)^T} \frac{\partial \mathcal{L}}{\partial \bm{z}^{(L)}} $$

で計算されます。ヤコビ行列の特異値が1より大きいと勾配が指数的に増大(勾配爆発)し、1より小さいと指数的に消滅(勾配消失)します。ResNet(残差接続 $\bm{z}^{(l)} = \bm{z}^{(l-1)} + \bm{g}(\bm{z}^{(l-1)})$)のヤコビ行列は $\bm{I} + \bm{J}_{\bm{g}}$ となり、特異値が1の近傍に保たれるため、勾配の伝播が安定します。

ヤコビ行列の理論は、こうした実用的な問題の理解と設計に不可欠な基盤を提供しています。

まとめ

本記事では、ヤコビ行列とヤコビアンの理論と幾何学的意味について解説しました。

  • ヤコビ行列はベクトル値関数の偏微分を行列にまとめたもので、多変数関数の「微分」に相当する。$m \times n$ 行列であり、$(i,j)$ 成分は $\partial F_i / \partial x_j$
  • ヤコビ行列は線形近似 $\bm{F}(\bm{a} + \bm{h}) \approx \bm{F}(\bm{a}) + \bm{J}(\bm{a})\bm{h}$ を与える
  • ヤコビアン($n = m$ の場合の行列式)は座標変換による面積・体積の拡大率を表す
  • 極座標のヤコビアンは $r$、球面座標のヤコビアンは $r^2\sin\theta$ であり、重積分の変数変換公式に直結する
  • 逆関数定理により、ヤコビアンが非ゼロの点では写像は局所的に可逆
  • 連鎖律はヤコビ行列の積として表され、ニューラルネットワークの逆伝播の基盤となる

次のステップとして、以下の記事も参考にしてください。