証明集 第3章: ベクトルをベクトルで微分

Proofs Chapter 3: Vector-by-Vector Derivatives

本章では、ベクトル値関数をベクトルで微分してヤコビ行列(Jacobian matrix)を得る公式を証明する。 ヤコビ行列はニューラルネットワークの層間の勾配伝播、変数変換の確率密度関数の変換(変数変換公式)、 ロボティクスにおける運動学のヤコビアンなど、多変数解析の基盤である。 恒等変換、線形変換、アフィン変換のヤコビ行列を成分計算から導出する。

前提知識: 第2章(スカラをベクトルで微分)本章の結果を用いる章: 第4章(行列微分の基本公式)第14章(行列連鎖律)

本章の前提条件
本章の公式は、特に断りのない限り、以下の条件下で成立する:
  • すべての公式は分母レイアウト(denominator layout)に基づく
  • ベクトル $\boldsymbol{y} \in \mathbb{R}^M$ をベクトル $\boldsymbol{x} \in \mathbb{R}^N$ で微分した結果はJacobi行列 $\frac{\partial \boldsymbol{y}}{\partial \boldsymbol{x}} \in \mathbb{R}^{N \times M}$
  • 関数は微分可能な開集合上で定義される

3.1 恒等変換

公式:$\displaystyle\frac{\partial \boldsymbol{x}}{\partial \boldsymbol{x}} = \boldsymbol{I}$
条件:$\boldsymbol{x} \in \mathbb{R}^N$
証明

分母レイアウト(denominator layout)では、ベクトル $\boldsymbol{y} \in \mathbb{R}^M$ をベクトル $\boldsymbol{x} \in \mathbb{R}^N$ で微分した結果はJacobi行列($N \times M$ 行列)となる。その $(i, j)$ 成分は $\displaystyle\frac{\partial y_j}{\partial x_i}$ である。

$\boldsymbol{x}$ を成分で書き下す。

\begin{equation} \boldsymbol{x} = \begin{pmatrix} x_0 \\ x_1 \\ \vdots \\ x_{N-1} \end{pmatrix} \label{eq:3-1-1} \end{equation}

Jacobi行列の $(i, j)$ 成分を計算する。恒等変換では $y_j = x_j$ である。

\begin{equation} \frac{\partial y_j}{\partial x_i} = \frac{\partial x_j}{\partial x_i} \label{eq:3-1-2} \end{equation}

$x_j$ は $x_i$ と同一($i = j$)か独立($i \neq j$)かで場合分けする。

\begin{equation} \frac{\partial x_j}{\partial x_i} = \begin{cases} 1, & i = j \\ 0, & i \neq j \end{cases} \label{eq:3-1-3} \end{equation}

$i = j$ のとき、$\displaystyle\frac{\partial x_i}{\partial x_i} = 1$ である。$i \neq j$ のとき、$x_j$ は $x_i$ に依存しないので偏微分は $0$ となる。

\eqref{eq:3-1-3} の結果はKroneckerのデルタ $\delta_{ij}$ の定義そのものである。

\begin{equation} \frac{\partial x_j}{\partial x_i} = \delta_{ij} \label{eq:3-1-4} \end{equation}

Jacobi行列を具体的に書き下す。各成分は偏微分で定義される。

\begin{equation} \frac{\partial \boldsymbol{x}}{\partial \boldsymbol{x}} = \begin{pmatrix} \displaystyle\frac{\partial x_0}{\partial x_0} & \displaystyle\frac{\partial x_1}{\partial x_0} & \cdots & \displaystyle\frac{\partial x_{N-1}}{\partial x_0} \\[0.5em] \displaystyle\frac{\partial x_0}{\partial x_1} & \displaystyle\frac{\partial x_1}{\partial x_1} & \cdots & \displaystyle\frac{\partial x_{N-1}}{\partial x_1} \\[0.5em] \vdots & \vdots & \ddots & \vdots \\[0.5em] \displaystyle\frac{\partial x_0}{\partial x_{N-1}} & \displaystyle\frac{\partial x_1}{\partial x_{N-1}} & \cdots & \displaystyle\frac{\partial x_{N-1}}{\partial x_{N-1}} \end{pmatrix} \label{eq:3-1-5} \end{equation}

\eqref{eq:3-1-4} の結果を \eqref{eq:3-1-5} に代入すると、対角成分のみが 1 となり、非対角成分はすべて 0 となる。

\begin{equation} \frac{\partial \boldsymbol{x}}{\partial \boldsymbol{x}} = \begin{pmatrix} 1 & 0 & \cdots & 0 \\ 0 & 1 & \cdots & 0 \\ \vdots & \vdots & \ddots & \vdots \\ 0 & 0 & \cdots & 1 \end{pmatrix} \label{eq:3-1-6} \end{equation}

この行列は $N \times N$ 単位行列 $\boldsymbol{I}$ である。したがって、最終的な結果は次のようになる。

\begin{equation} \frac{\partial \boldsymbol{x}}{\partial \boldsymbol{x}} = \boldsymbol{I} \label{eq:3-1-7} \end{equation}

3.2 線形変換

公式:$\displaystyle\frac{\partial (\boldsymbol{A}\boldsymbol{x})}{\partial \boldsymbol{x}} = \boldsymbol{A}^\top$
条件:$\boldsymbol{A} \in \mathbb{R}^{M \times N}$ は定数行列、$\boldsymbol{x} \in \mathbb{R}^N$
証明

$\boldsymbol{y} = \boldsymbol{A}\boldsymbol{x}$ とおく。$\boldsymbol{y} \in \mathbb{R}^M$ である。

$\boldsymbol{y}$ の第 $j$ 成分を行列-ベクトル積の定義に従って書き下す。

\begin{equation} y_j = (\boldsymbol{A}\boldsymbol{x})_j \label{eq:3-2-1} \end{equation}

行列-ベクトル積の第 $j$ 成分は、$\boldsymbol{A}$ の第 $j$ 行と $\boldsymbol{x}$ の内積である。

\begin{equation} y_j = \sum_{k=0}^{N-1} A_{jk} x_k \label{eq:3-2-2} \end{equation}

Jacobi行列の $(i, j)$ 成分を計算する。$y_j$ を $x_i$ で偏微分する。

\begin{equation} \frac{\partial y_j}{\partial x_i} = \frac{\partial}{\partial x_i} \sum_{k=0}^{N-1} A_{jk} x_k \label{eq:3-2-3} \end{equation}

微分は線形作用素なので、和と順序を交換できる。$A_{jk}$ は定数なので、微分の外に出せる。

\begin{equation} \frac{\partial y_j}{\partial x_i} = \sum_{k=0}^{N-1} A_{jk} \frac{\partial x_k}{\partial x_i} \label{eq:3-2-4} \end{equation}

公式(3.1)より、$\displaystyle\frac{\partial x_k}{\partial x_i} = \delta_{ki}$ である。

\begin{equation} \frac{\partial y_j}{\partial x_i} = \sum_{k=0}^{N-1} A_{jk} \delta_{ki} \label{eq:3-2-5} \end{equation}

Kroneckerのデルタの性質を使う。$\delta_{ki} = 1$ となるのは $k = i$ のときだけなので、和の中で $k = i$ の項だけが残る。

\begin{equation} \frac{\partial y_j}{\partial x_i} = A_{ji} \label{eq:3-2-6} \end{equation}

Jacobi行列を具体的に書き下す。$(i, j)$ 成分が $A_{ji}$ である。

\begin{equation} \frac{\partial (\boldsymbol{A}\boldsymbol{x})}{\partial \boldsymbol{x}} = \begin{pmatrix} A_{00} & A_{10} & \cdots & A_{(M-1)0} \\ A_{01} & A_{11} & \cdots & A_{(M-1)1} \\ \vdots & \vdots & \ddots & \vdots \\ A_{0(N-1)} & A_{1(N-1)} & \cdots & A_{(M-1)(N-1)} \end{pmatrix} \label{eq:3-2-7} \end{equation}

この行列は $\boldsymbol{A}$ の転置 $\boldsymbol{A}^\top$ である。転置の定義 $(\boldsymbol{A}^\top)_{ij} = A_{ji}$ より、\eqref{eq:3-2-6} は $(\boldsymbol{A}^\top)_{ij}$ に等しい。

\begin{equation} \frac{\partial (\boldsymbol{A}\boldsymbol{x})}{\partial \boldsymbol{x}} = \boldsymbol{A}^\top \label{eq:3-2-8} \end{equation}

これは $N \times M$ 行列である。

3.3 定数ベクトル

公式:$\displaystyle\frac{\partial \boldsymbol{a}}{\partial \boldsymbol{x}} = \boldsymbol{O}$
条件:$\boldsymbol{a} \in \mathbb{R}^M$ は定数ベクトル、$\boldsymbol{x} \in \mathbb{R}^N$
証明

定数ベクトル $\boldsymbol{a}$ を成分で書き下す。各成分 $a_j$ は定数である。

\begin{equation} \boldsymbol{a} = \begin{pmatrix} a_0 \\ a_1 \\ \vdots \\ a_{M-1} \end{pmatrix} \label{eq:3-3-1} \end{equation}

Jacobi行列の $(i, j)$ 成分を計算する。$a_j$ を $x_i$ で偏微分する。

\begin{equation} \left(\frac{\partial \boldsymbol{a}}{\partial \boldsymbol{x}}\right)_{ij} = \frac{\partial a_j}{\partial x_i} \label{eq:3-3-2} \end{equation}

$a_j$ は定数であり、$x_i$ に依存しない。定数の偏微分は $0$ である。

\begin{equation} \frac{\partial a_j}{\partial x_i} = 0 \label{eq:3-3-3} \end{equation}

\eqref{eq:3-3-3} はすべての $(i, j)$ の組み合わせで成り立つ。したがって、Jacobi行列のすべての成分が 0 になる。

\begin{equation} \frac{\partial \boldsymbol{a}}{\partial \boldsymbol{x}} = \begin{pmatrix} 0 & 0 & \cdots & 0 \\ 0 & 0 & \cdots & 0 \\ \vdots & \vdots & \ddots & \vdots \\ 0 & 0 & \cdots & 0 \end{pmatrix} \label{eq:3-3-4} \end{equation}

この行列は $N \times M$ 零行列 $\boldsymbol{O}$ である。

\begin{equation} \frac{\partial \boldsymbol{a}}{\partial \boldsymbol{x}} = \boldsymbol{O} \label{eq:3-3-5} \end{equation}

3.4 アフィン変換

公式:$\displaystyle\frac{\partial (\boldsymbol{A}\boldsymbol{x} + \boldsymbol{b})}{\partial \boldsymbol{x}} = \boldsymbol{A}^\top$
条件:$\boldsymbol{A} \in \mathbb{R}^{M \times N}$ は定数行列、$\boldsymbol{b} \in \mathbb{R}^M$ は定数ベクトル、$\boldsymbol{x} \in \mathbb{R}^N$
証明

$\boldsymbol{y} = \boldsymbol{A}\boldsymbol{x} + \boldsymbol{b}$ とおく。$\boldsymbol{y} \in \mathbb{R}^M$ である。

$\boldsymbol{y}$ の第 $j$ 成分を書き下す。

\begin{equation} y_j = (\boldsymbol{A}\boldsymbol{x})_j + b_j \label{eq:3-4-1} \end{equation}

行列-ベクトル積の定義を用いて展開する。

\begin{equation} y_j = \sum_{k=0}^{N-1} A_{jk} x_k + b_j \label{eq:3-4-2} \end{equation}

Jacobi行列の $(i, j)$ 成分を計算する。$y_j$ を $x_i$ で偏微分する。

\begin{equation} \frac{\partial y_j}{\partial x_i} = \frac{\partial}{\partial x_i} \left( \sum_{k=0}^{N-1} A_{jk} x_k + b_j \right) \label{eq:3-4-3} \end{equation}

和の微分は、各項の微分の和である。

\begin{equation} \frac{\partial y_j}{\partial x_i} = \frac{\partial}{\partial x_i} \left( \sum_{k=0}^{N-1} A_{jk} x_k \right) + \frac{\partial b_j}{\partial x_i} \label{eq:3-4-4} \end{equation}

$b_j$ は定数なので、その偏微分は $0$ である。

\begin{equation} \frac{\partial b_j}{\partial x_i} = 0 \label{eq:3-4-5} \end{equation}

第1項は公式(3.2)と同じ計算により、$A_{ji}$ となる。

\begin{equation} \frac{\partial}{\partial x_i} \left( \sum_{k=0}^{N-1} A_{jk} x_k \right) = A_{ji} \label{eq:3-4-6} \end{equation}

\eqref{eq:3-4-5} と \eqref{eq:3-4-6} を \eqref{eq:3-4-4} に代入する。

\begin{equation} \frac{\partial y_j}{\partial x_i} = A_{ji} + 0 = A_{ji} \label{eq:3-4-7} \end{equation}

公式(3.2)と同様に、$(i, j)$ 成分が $A_{ji}$ であることから、Jacobi行列は $\boldsymbol{A}^\top$ に等しい。

\begin{equation} \frac{\partial (\boldsymbol{A}\boldsymbol{x} + \boldsymbol{b})}{\partial \boldsymbol{x}} = \boldsymbol{A}^\top \label{eq:3-4-8} \end{equation}

補足:定数項 $\boldsymbol{b}$ は微分で消える。これはアフィン変換のJacobi行列が平行移動成分に依存しないことを意味する。

3.5 転置を含む線形変換

公式:$\displaystyle\frac{\partial (\boldsymbol{x}^\top \boldsymbol{A})}{\partial \boldsymbol{x}} = \boldsymbol{A}$
条件:$\boldsymbol{A} \in \mathbb{R}^{N \times M}$ は定数行列、$\boldsymbol{x} \in \mathbb{R}^N$
証明

$\boldsymbol{y}^\top = \boldsymbol{x}^\top \boldsymbol{A}$ とおく。$\boldsymbol{y}^\top$ は $1 \times M$ の行ベクトルである。

$\boldsymbol{y}^\top$ の第 $j$ 成分を書き下す。行ベクトル $\boldsymbol{x}^\top$ と行列 $\boldsymbol{A}$ の積の定義より、

\begin{equation} (\boldsymbol{x}^\top \boldsymbol{A})_j = \sum_{k=0}^{N-1} x_k A_{kj} \label{eq:3-5-1} \end{equation}

である。これは $\boldsymbol{x}$ と $\boldsymbol{A}$ の第 $j$ 列との内積である。

$y_j = (\boldsymbol{x}^\top \boldsymbol{A})_j$ とする。Jacobi行列の $(i, j)$ 成分を計算するため、$y_j$ を $x_i$ で偏微分する。

\begin{equation} \displaystyle\frac{\partial y_j}{\partial x_i} = \displaystyle\frac{\partial}{\partial x_i} \sum_{k=0}^{N-1} x_k A_{kj} \label{eq:3-5-2} \end{equation}

微分と和の順序を交換する。$A_{kj}$ は定数なので、

\begin{equation} \displaystyle\frac{\partial y_j}{\partial x_i} = \sum_{k=0}^{N-1} A_{kj} \displaystyle\frac{\partial x_k}{\partial x_i} \label{eq:3-5-3} \end{equation}

となる。

公式(3.1)より、$\displaystyle\frac{\partial x_k}{\partial x_i} = \delta_{ki}$ である。これを \eqref{eq:3-5-3} に代入すると、

\begin{equation} \displaystyle\frac{\partial y_j}{\partial x_i} = \sum_{k=0}^{N-1} A_{kj} \delta_{ki} \label{eq:3-5-4} \end{equation}

を得る。

Kroneckerのデルタの性質を使う。$\delta_{ki} = 1$ となるのは $k = i$ のときだけなので、

\begin{equation} \displaystyle\frac{\partial y_j}{\partial x_i} = A_{ij} \label{eq:3-5-5} \end{equation}

となる。

Jacobi行列の $(i, j)$ 成分が $A_{ij}$ であるということは、Jacobi行列が $\boldsymbol{A}$ そのものであることを意味する。したがって、

\begin{equation} \displaystyle\frac{\partial (\boldsymbol{x}^\top \boldsymbol{A})}{\partial \boldsymbol{x}} = \boldsymbol{A} \label{eq:3-5-6} \end{equation}

である。これは $N \times M$ 行列である。

補足:公式(3.2)と比較すると、$\boldsymbol{A}\boldsymbol{x}$ の微分は $\boldsymbol{A}^\top$、$\boldsymbol{x}^\top \boldsymbol{A}$ の微分は $\boldsymbol{A}$ となる。転置の有無に注意。

3.6 和・差の法則(ベクトル版)

公式:$\displaystyle\frac{\partial (\boldsymbol{f}(\boldsymbol{x}) \pm \boldsymbol{g}(\boldsymbol{x}))}{\partial \boldsymbol{x}} = \displaystyle\frac{\partial \boldsymbol{f}(\boldsymbol{x})}{\partial \boldsymbol{x}} \pm \displaystyle\frac{\partial \boldsymbol{g}(\boldsymbol{x})}{\partial \boldsymbol{x}}$
条件:$\boldsymbol{f}: \mathbb{R}^N \to \mathbb{R}^M$、$\boldsymbol{g}: \mathbb{R}^N \to \mathbb{R}^M$ はベクトル値関数、$\boldsymbol{x} \in \mathbb{R}^N$
証明

$\boldsymbol{y}(\boldsymbol{x}) = \boldsymbol{f}(\boldsymbol{x}) \pm \boldsymbol{g}(\boldsymbol{x})$ とおく。$\boldsymbol{y} \in \mathbb{R}^M$ である。

$\boldsymbol{y}$ の第 $j$ 成分を書き下す。ベクトルの和・差は成分ごとに行われるので、

\begin{equation} y_j(\boldsymbol{x}) = f_j(\boldsymbol{x}) \pm g_j(\boldsymbol{x}) \label{eq:3-6-1} \end{equation}

である。

Jacobi行列の $(i, j)$ 成分を計算するため、$y_j$ を $x_i$ で偏微分する。

\begin{equation} \displaystyle\frac{\partial y_j}{\partial x_i} = \displaystyle\frac{\partial}{\partial x_i} (f_j(\boldsymbol{x}) \pm g_j(\boldsymbol{x})) \label{eq:3-6-2} \end{equation}

スカラ関数の和・差の微分規則を適用する。和・差の微分は、各項の微分の和・差であるから、

\begin{equation} \displaystyle\frac{\partial y_j}{\partial x_i} = \displaystyle\frac{\partial f_j(\boldsymbol{x})}{\partial x_i} \pm \displaystyle\frac{\partial g_j(\boldsymbol{x})}{\partial x_i} \label{eq:3-6-3} \end{equation}

となる。

右辺の各項をJacobi行列の成分として解釈する。

\begin{equation} \displaystyle\frac{\partial f_j(\boldsymbol{x})}{\partial x_i} = \left( \displaystyle\frac{\partial \boldsymbol{f}(\boldsymbol{x})}{\partial \boldsymbol{x}} \right)_{ij}, \quad \displaystyle\frac{\partial g_j(\boldsymbol{x})}{\partial x_i} = \left( \displaystyle\frac{\partial \boldsymbol{g}(\boldsymbol{x})}{\partial \boldsymbol{x}} \right)_{ij} \label{eq:3-6-4} \end{equation}

\eqref{eq:3-6-3} と \eqref{eq:3-6-4} を組み合わせると、

\begin{equation} \left( \displaystyle\frac{\partial \boldsymbol{y}}{\partial \boldsymbol{x}} \right)_{ij} = \left( \displaystyle\frac{\partial \boldsymbol{f}(\boldsymbol{x})}{\partial \boldsymbol{x}} \right)_{ij} \pm \left( \displaystyle\frac{\partial \boldsymbol{g}(\boldsymbol{x})}{\partial \boldsymbol{x}} \right)_{ij} \label{eq:3-6-5} \end{equation}

を得る。

これはすべての $(i, j)$ の組み合わせで成り立つ。行列の和・差は成分ごとに行われるので、

\begin{equation} \displaystyle\frac{\partial (\boldsymbol{f}(\boldsymbol{x}) \pm \boldsymbol{g}(\boldsymbol{x}))}{\partial \boldsymbol{x}} = \displaystyle\frac{\partial \boldsymbol{f}(\boldsymbol{x})}{\partial \boldsymbol{x}} \pm \displaystyle\frac{\partial \boldsymbol{g}(\boldsymbol{x})}{\partial \boldsymbol{x}} \label{eq:3-6-6} \end{equation}

が成り立つ。

補足:この線形性はJacobi行列の各成分でスカラの微分の線形性が成り立つことから導かれる。

3.7 積の微分(スカラ×ベクトル)

公式:$\displaystyle\frac{\partial (f(\boldsymbol{x}) \boldsymbol{g}(\boldsymbol{x}))}{\partial \boldsymbol{x}} = f(\boldsymbol{x}) \displaystyle\frac{\partial \boldsymbol{g}(\boldsymbol{x})}{\partial \boldsymbol{x}} + \displaystyle\frac{\partial f(\boldsymbol{x})}{\partial \boldsymbol{x}} \boldsymbol{g}(\boldsymbol{x})^\top$
条件:$f: \mathbb{R}^N \to \mathbb{R}$ はスカラ関数、$\boldsymbol{g}: \mathbb{R}^N \to \mathbb{R}^M$ はベクトル値関数、$\boldsymbol{x} \in \mathbb{R}^N$
証明

$\boldsymbol{y}(\boldsymbol{x}) = f(\boldsymbol{x}) \boldsymbol{g}(\boldsymbol{x})$ とおく。これはスカラとベクトルの積であり、$\boldsymbol{y} \in \mathbb{R}^M$ である。

$\boldsymbol{y}$ の第 $j$ 成分を書き下す。スカラとベクトルの積は各成分に対して行われるので、

\begin{equation} y_j(\boldsymbol{x}) = f(\boldsymbol{x}) \cdot g_j(\boldsymbol{x}) \label{eq:3-7-1} \end{equation}

である。

Jacobi行列の $(i, j)$ 成分を計算するため、$y_j$ を $x_i$ で偏微分する。

\begin{equation} \displaystyle\frac{\partial y_j}{\partial x_i} = \displaystyle\frac{\partial}{\partial x_i} (f(\boldsymbol{x}) \cdot g_j(\boldsymbol{x})) \label{eq:3-7-2} \end{equation}

スカラ関数の積の微分規則(公式 2.9)を適用すると、

\begin{equation} \displaystyle\frac{\partial y_j}{\partial x_i} = f(\boldsymbol{x}) \displaystyle\frac{\partial g_j(\boldsymbol{x})}{\partial x_i} + g_j(\boldsymbol{x}) \displaystyle\frac{\partial f(\boldsymbol{x})}{\partial x_i} \label{eq:3-7-3} \end{equation}

となる。

右辺の第1項を解釈する。

\begin{equation} f(\boldsymbol{x}) \displaystyle\frac{\partial g_j(\boldsymbol{x})}{\partial x_i} = f(\boldsymbol{x}) \left( \displaystyle\frac{\partial \boldsymbol{g}(\boldsymbol{x})}{\partial \boldsymbol{x}} \right)_{ij} \label{eq:3-7-4} \end{equation}

これは $f(\boldsymbol{x})$ と $\boldsymbol{g}$ のJacobi行列の $(i, j)$ 成分の積である。

第2項について考える。$\displaystyle\frac{\partial f(\boldsymbol{x})}{\partial x_i}$ は勾配ベクトル $\displaystyle\frac{\partial f}{\partial \boldsymbol{x}} \in \mathbb{R}^N$ の第 $i$ 成分であり、$g_j(\boldsymbol{x})$ は $\boldsymbol{g}(\boldsymbol{x}) \in \mathbb{R}^M$ の第 $j$ 成分である。$N$ 次元列ベクトル $\displaystyle\frac{\partial f}{\partial \boldsymbol{x}}$ と $M$ 次元行ベクトル $\boldsymbol{g}^\top$ の外積(outer product)は $N \times M$ 行列となり、その $(i, j)$ 成分は

\begin{equation} \left( \displaystyle\frac{\partial f}{\partial \boldsymbol{x}} \boldsymbol{g}^\top \right)_{ij} = \displaystyle\frac{\partial f}{\partial x_i} \cdot g_j \label{eq:3-7-5} \end{equation}

である。

\eqref{eq:3-7-3}、\eqref{eq:3-7-4}、\eqref{eq:3-7-5} を組み合わせると、

\begin{equation} \left( \displaystyle\frac{\partial \boldsymbol{y}}{\partial \boldsymbol{x}} \right)_{ij} = f(\boldsymbol{x}) \left( \displaystyle\frac{\partial \boldsymbol{g}}{\partial \boldsymbol{x}} \right)_{ij} + \left( \displaystyle\frac{\partial f}{\partial \boldsymbol{x}} \boldsymbol{g}^\top \right)_{ij} \label{eq:3-7-6} \end{equation}

を得る。

これはすべての $(i, j)$ で成り立つので、行列形式で書くと、

\begin{equation} \displaystyle\frac{\partial (f(\boldsymbol{x}) \boldsymbol{g}(\boldsymbol{x}))}{\partial \boldsymbol{x}} = f(\boldsymbol{x}) \displaystyle\frac{\partial \boldsymbol{g}(\boldsymbol{x})}{\partial \boldsymbol{x}} + \displaystyle\frac{\partial f(\boldsymbol{x})}{\partial \boldsymbol{x}} \boldsymbol{g}(\boldsymbol{x})^\top \label{eq:3-7-7} \end{equation}

となる。

補足:第1項 $f \displaystyle\frac{\partial \boldsymbol{g}}{\partial \boldsymbol{x}}$ はスカラ倍で $N \times M$ 行列、第2項 $\displaystyle\frac{\partial f}{\partial \boldsymbol{x}} \boldsymbol{g}^\top$ は外積($N \times 1$ と $1 \times M$)で同じく $N \times M$ 行列となる。

3.8 ベクトルの要素ごとの2乗の微分

公式:$\displaystyle\frac{\partial (\boldsymbol{x} \odot \boldsymbol{x})}{\partial \boldsymbol{x}} = 2\,\text{diag}(\boldsymbol{x})$
条件:$\boldsymbol{x} \in \mathbb{R}^N$、$\odot$ はHadamard積(要素ごとの積)
証明

$\boldsymbol{y} = \boldsymbol{x} \odot \boldsymbol{x}$ とおく。Hadamard積(要素ごとの積)の定義より、$\boldsymbol{y}$ の第 $j$ 成分は

\begin{equation} y_j = x_j \cdot x_j = x_j^2 \label{eq:3-8-1} \end{equation}

である。

$\boldsymbol{y}$ を成分で書き下すと、

\begin{equation} \boldsymbol{y} = \boldsymbol{x} \odot \boldsymbol{x} = \begin{pmatrix} x_0^2 \\ x_1^2 \\ \vdots \\ x_{N-1}^2 \end{pmatrix} \label{eq:3-8-2} \end{equation}

となる。

Jacobi行列の $(i, j)$ 成分を計算するため、$y_j = x_j^2$ を $x_i$ で偏微分する。

\begin{equation} \displaystyle\frac{\partial y_j}{\partial x_i} = \displaystyle\frac{\partial (x_j^2)}{\partial x_i} \label{eq:3-8-3} \end{equation}

$i = j$ の場合、$x_j^2$ を $x_j$ で微分する。べき乗の微分公式(1.18)より、

\begin{equation} \displaystyle\frac{\partial (x_j^2)}{\partial x_j} = 2x_j \label{eq:3-8-4} \end{equation}

である。

$i \neq j$ の場合、$x_j^2$ は $x_i$ に依存しないので、

\begin{equation} \displaystyle\frac{\partial (x_j^2)}{\partial x_i} = 0 \label{eq:3-8-5} \end{equation}

である。

\eqref{eq:3-8-4} と \eqref{eq:3-8-5} をまとめると、

\begin{equation} \displaystyle\frac{\partial y_j}{\partial x_i} = \begin{cases} 2x_j, & i = j \\ 0, & i \neq j \end{cases} \label{eq:3-8-6} \end{equation}

となる。

Jacobi行列を具体的に書き下すと、対角成分のみが非零である。

\begin{equation} \displaystyle\frac{\partial (\boldsymbol{x} \odot \boldsymbol{x})}{\partial \boldsymbol{x}} = \begin{pmatrix} 2x_0 & 0 & 0 & \cdots & 0 \\ 0 & 2x_1 & 0 & \cdots & 0 \\ 0 & 0 & 2x_2 & \cdots & 0 \\ \vdots & \vdots & \vdots & \ddots & \vdots \\ 0 & 0 & 0 & \cdots & 2x_{N-1} \end{pmatrix} \label{eq:3-8-7} \end{equation}

この行列を対角行列として表現する。$\text{diag}(\boldsymbol{x})$ は対角成分が $x_0, x_1, \ldots, x_{N-1}$ の対角行列であるから、

\begin{equation} \displaystyle\frac{\partial (\boldsymbol{x} \odot \boldsymbol{x})}{\partial \boldsymbol{x}} = 2\,\text{diag}(\boldsymbol{x}) \label{eq:3-8-8} \end{equation}

が成り立つ。

3.9 ベクトルの外積の微分

公式:$\displaystyle\frac{d}{dt}(\boldsymbol{f}(t) \times \boldsymbol{g}(t)) = \displaystyle\frac{d\boldsymbol{f}}{dt} \times \boldsymbol{g}(t) + \boldsymbol{f}(t) \times \displaystyle\frac{d\boldsymbol{g}}{dt}$
条件:$\boldsymbol{f}: \mathbb{R} \to \mathbb{R}^3$、$\boldsymbol{g}: \mathbb{R} \to \mathbb{R}^3$ は時間 $t \in \mathbb{R}$ のベクトル値関数
証明

$\boldsymbol{h}(t) = \boldsymbol{f}(t) \times \boldsymbol{g}(t)$ とおく。外積の定義に従って成分を書き下す。成分は $1, 2, 3$ で添字付けする。

\begin{equation} \boldsymbol{h} = \boldsymbol{f} \times \boldsymbol{g} = \begin{pmatrix} f_2 g_3 - f_3 g_2 \\ f_3 g_1 - f_1 g_3 \\ f_1 g_2 - f_2 g_1 \end{pmatrix} \label{eq:3-9-1} \end{equation}

第1成分 $h_1 = f_2 g_3 - f_3 g_2$ を $t$ で微分する。

\begin{equation} \displaystyle\frac{dh_1}{dt} = \displaystyle\frac{d}{dt}(f_2 g_3 - f_3 g_2) \label{eq:3-9-2} \end{equation}

差の微分は、各項の微分の差であるから、

\begin{equation} \displaystyle\frac{dh_1}{dt} = \displaystyle\frac{d}{dt}(f_2 g_3) - \displaystyle\frac{d}{dt}(f_3 g_2) \label{eq:3-9-3} \end{equation}

となる。

各項に積の微分則(1.25)を適用すると、

\begin{equation} \displaystyle\frac{d}{dt}(f_2 g_3) = \displaystyle\frac{df_2}{dt} g_3 + f_2 \displaystyle\frac{dg_3}{dt}, \quad \displaystyle\frac{d}{dt}(f_3 g_2) = \displaystyle\frac{df_3}{dt} g_2 + f_3 \displaystyle\frac{dg_2}{dt} \label{eq:3-9-4} \end{equation}

を得る。

\eqref{eq:3-9-3} に \eqref{eq:3-9-4} を代入すると、

\begin{equation} \displaystyle\frac{dh_1}{dt} = \displaystyle\frac{df_2}{dt} g_3 + f_2 \displaystyle\frac{dg_3}{dt} - \displaystyle\frac{df_3}{dt} g_2 - f_3 \displaystyle\frac{dg_2}{dt} \label{eq:3-9-5} \end{equation}

となる。

項を並べ替えて、$\boldsymbol{f}$ の微分を含む項と $\boldsymbol{g}$ の微分を含む項にグループ化する。

\begin{equation} \displaystyle\frac{dh_1}{dt} = \left( \displaystyle\frac{df_2}{dt} g_3 - \displaystyle\frac{df_3}{dt} g_2 \right) + \left( f_2 \displaystyle\frac{dg_3}{dt} - f_3 \displaystyle\frac{dg_2}{dt} \right) \label{eq:3-9-6} \end{equation}

外積の定義と比較する。$\displaystyle\frac{d\boldsymbol{f}}{dt} \times \boldsymbol{g}$ の第1成分は $\displaystyle\frac{df_2}{dt} g_3 - \displaystyle\frac{df_3}{dt} g_2$ であり、$\boldsymbol{f} \times \displaystyle\frac{d\boldsymbol{g}}{dt}$ の第1成分は $f_2 \displaystyle\frac{dg_3}{dt} - f_3 \displaystyle\frac{dg_2}{dt}$ である。したがって、

\begin{equation} \displaystyle\frac{dh_1}{dt} = \left( \displaystyle\frac{d\boldsymbol{f}}{dt} \times \boldsymbol{g} \right)_1 + \left( \boldsymbol{f} \times \displaystyle\frac{d\boldsymbol{g}}{dt} \right)_1 \label{eq:3-9-7} \end{equation}

となる。

同様の計算を第2成分、第3成分についても行うと、すべての $k = 1, 2, 3$ について

\begin{equation} \displaystyle\frac{dh_k}{dt} = \left( \displaystyle\frac{d\boldsymbol{f}}{dt} \times \boldsymbol{g} \right)_k + \left( \boldsymbol{f} \times \displaystyle\frac{d\boldsymbol{g}}{dt} \right)_k \label{eq:3-9-8} \end{equation}

が成り立つ。

ベクトル全体としてまとめると、

\begin{equation} \displaystyle\frac{d}{dt}(\boldsymbol{f}(t) \times \boldsymbol{g}(t)) = \displaystyle\frac{d\boldsymbol{f}}{dt} \times \boldsymbol{g}(t) + \boldsymbol{f}(t) \times \displaystyle\frac{d\boldsymbol{g}}{dt} \label{eq:3-9-9} \end{equation}

を得る。

補足:外積は非可換($\boldsymbol{a} \times \boldsymbol{b} \neq \boldsymbol{b} \times \boldsymbol{a}$)なので、項の順序に注意。$\displaystyle\frac{d\boldsymbol{f}}{dt} \times \boldsymbol{g}$ と $\boldsymbol{g} \times \displaystyle\frac{d\boldsymbol{f}}{dt}$ は符号が逆転する。

3.10 2-ノルムの時間微分

公式:$\displaystyle\frac{d}{dt} \|\boldsymbol{f}(t)\| = \displaystyle\frac{\boldsymbol{f}(t) \cdot \displaystyle\frac{d\boldsymbol{f}}{dt}}{\|\boldsymbol{f}(t)\|}$
条件:$\boldsymbol{f}: \mathbb{R} \to \mathbb{R}^N$ は時間 $t \in \mathbb{R}$ のベクトル値関数、$\|\boldsymbol{f}(t)\| \neq 0$
証明

$g(t) = \|\boldsymbol{f}(t)\|$ とおく。2-ノルムの定義を書き下すと、

\begin{equation} g(t) = \|\boldsymbol{f}(t)\| = \sqrt{\boldsymbol{f}(t) \cdot \boldsymbol{f}(t)} \label{eq:3-10-1} \end{equation}

である。

内積を成分で展開すると、

\begin{equation} \boldsymbol{f}(t) \cdot \boldsymbol{f}(t) = \sum_{k=0}^{N-1} f_k(t)^2 \label{eq:3-10-2} \end{equation}

となる。

表記を簡単にするため、$h(t) = \boldsymbol{f}(t) \cdot \boldsymbol{f}(t) = \|\boldsymbol{f}(t)\|^2$ とおく。

\begin{equation} g(t) = \sqrt{h(t)} = h(t)^{1/2} \label{eq:3-10-3} \end{equation}

$g(t)$ を $t$ で微分する。連鎖律(1.26)を適用すると、

\begin{equation} \displaystyle\frac{dg}{dt} = \displaystyle\frac{d}{dh}(h^{1/2}) \cdot \displaystyle\frac{dh}{dt} \label{eq:3-10-4} \end{equation}

となる。

$\displaystyle\frac{d}{dh}(h^{1/2})$ を計算する。べき乗の微分公式(1.19)より、

\begin{equation} \displaystyle\frac{d}{dh}(h^{1/2}) = \displaystyle\frac{1}{2} h^{-1/2} = \displaystyle\frac{1}{2\sqrt{h}} = \displaystyle\frac{1}{2\|\boldsymbol{f}(t)\|} \label{eq:3-10-5} \end{equation}

である。

$\displaystyle\frac{dh}{dt}$ を計算する。$h = \sum_{k=0}^{N-1} f_k^2$ なので、

\begin{equation} \displaystyle\frac{dh}{dt} = \sum_{k=0}^{N-1} \displaystyle\frac{d}{dt}(f_k^2) \label{eq:3-10-6} \end{equation}

である。

$\displaystyle\frac{d}{dt}(f_k^2)$ を計算する。連鎖律(1.26)より、

\begin{equation} \displaystyle\frac{d}{dt}(f_k^2) = 2 f_k \displaystyle\frac{df_k}{dt} \label{eq:3-10-7} \end{equation}

である。

\eqref{eq:3-10-6} に \eqref{eq:3-10-7} を代入すると、

\begin{equation} \displaystyle\frac{dh}{dt} = \sum_{k=0}^{N-1} 2 f_k \displaystyle\frac{df_k}{dt} = 2 \sum_{k=0}^{N-1} f_k \displaystyle\frac{df_k}{dt} \label{eq:3-10-8} \end{equation}

となる。

この和を内積として解釈すると、

\begin{equation} \displaystyle\frac{dh}{dt} = 2 \left( \boldsymbol{f}(t) \cdot \displaystyle\frac{d\boldsymbol{f}}{dt} \right) \label{eq:3-10-9} \end{equation}

である。

\eqref{eq:3-10-4} に \eqref{eq:3-10-5} と \eqref{eq:3-10-9} を代入すると、

\begin{equation} \displaystyle\frac{dg}{dt} = \displaystyle\frac{1}{2\|\boldsymbol{f}(t)\|} \cdot 2 \left( \boldsymbol{f}(t) \cdot \displaystyle\frac{d\boldsymbol{f}}{dt} \right) \label{eq:3-10-10} \end{equation}

となる。

2 が約分されて、

\begin{equation} \displaystyle\frac{d}{dt} \|\boldsymbol{f}(t)\| = \displaystyle\frac{\boldsymbol{f}(t) \cdot \displaystyle\frac{d\boldsymbol{f}}{dt}}{\|\boldsymbol{f}(t)\|} \label{eq:3-10-11} \end{equation}

を得る。

補足:分子は $\boldsymbol{f}$ と $\displaystyle\frac{d\boldsymbol{f}}{dt}$ の内積であり、$\boldsymbol{f}$ の方向成分への速度の射影を表す。$\|\boldsymbol{f}\| = 0$ のとき(零ベクトル)は分母が 0 になるため定義されない。

3.11 要素ごとの関数適用

公式:$\displaystyle\frac{\partial \boldsymbol{g}(\boldsymbol{x})}{\partial \boldsymbol{x}} = \text{diag}(f'(x_0), f'(x_1), \ldots, f'(x_{N-1}))$
条件:$f: \mathbb{R} \to \mathbb{R}$ は微分可能なスカラ関数、$\boldsymbol{x} \in \mathbb{R}^N$、$\boldsymbol{g}(\boldsymbol{x}) = (f(x_0), f(x_1), \ldots, f(x_{N-1}))^\top \in \mathbb{R}^N$
証明

$\boldsymbol{g}(\boldsymbol{x})$ はスカラ関数 $f$ をベクトル $\boldsymbol{x}$ の各成分に適用した結果である。第 $j$ 成分を書き下すと、

\begin{equation} g_j(\boldsymbol{x}) = f(x_j) \label{eq:3-11-1} \end{equation}

である。

$\boldsymbol{g}$ を成分で書き下すと、

\begin{equation} \boldsymbol{g}(\boldsymbol{x}) = \begin{pmatrix} f(x_0) \\ f(x_1) \\ \vdots \\ f(x_{N-1}) \end{pmatrix} \label{eq:3-11-2} \end{equation}

となる。

Jacobi行列の $(i, j)$ 成分を計算するため、$g_j = f(x_j)$ を $x_i$ で偏微分する。

\begin{equation} \displaystyle\frac{\partial g_j}{\partial x_i} = \displaystyle\frac{\partial f(x_j)}{\partial x_i} \label{eq:3-11-3} \end{equation}

$i = j$ の場合、$f(x_j)$ を $x_j$ で微分する。連鎖律(1.26)より、

\begin{equation} \displaystyle\frac{\partial f(x_j)}{\partial x_j} = f'(x_j) \cdot \displaystyle\frac{\partial x_j}{\partial x_j} = f'(x_j) \cdot 1 = f'(x_j) \label{eq:3-11-4} \end{equation}

である。

$i \neq j$ の場合、$f(x_j)$ は $x_i$ に依存しない($x_j$ と $x_i$ は独立変数)ので、

\begin{equation} \displaystyle\frac{\partial f(x_j)}{\partial x_i} = 0 \label{eq:3-11-5} \end{equation}

である。

\eqref{eq:3-11-4} と \eqref{eq:3-11-5} をまとめると、

\begin{equation} \displaystyle\frac{\partial g_j}{\partial x_i} = \begin{cases} f'(x_j), & i = j \\ 0, & i \neq j \end{cases} \label{eq:3-11-6} \end{equation}

となる。

Jacobi行列を具体的に書き下すと、対角成分のみが非零である。

\begin{equation} \displaystyle\frac{\partial \boldsymbol{g}(\boldsymbol{x})}{\partial \boldsymbol{x}} = \begin{pmatrix} f'(x_0) & 0 & \cdots & 0 \\ 0 & f'(x_1) & \cdots & 0 \\ \vdots & \vdots & \ddots & \vdots \\ 0 & 0 & \cdots & f'(x_{N-1}) \end{pmatrix} \label{eq:3-11-7} \end{equation}

この行列を対角行列として表現すると、

\begin{equation} \displaystyle\frac{\partial \boldsymbol{g}(\boldsymbol{x})}{\partial \boldsymbol{x}} = \text{diag}(f'(x_0), f'(x_1), \ldots, f'(x_{N-1})) \label{eq:3-11-8} \end{equation}

が得られる。

補足:この公式はニューラルネットワークの活性化関数(ReLU、sigmoid等)の微分で頻繁に使用される。$f' \circ \boldsymbol{x}$ を要素ごとの導関数適用と書くこともある。

3.12 Hadamard積(要素ごとの積)

公式:$\displaystyle\frac{\partial (\boldsymbol{x} \odot \boldsymbol{y})}{\partial \boldsymbol{x}} = \mathrm{diag}(\boldsymbol{y})$
条件:$\boldsymbol{x}, \boldsymbol{y} \in \mathbb{R}^N$、$\boldsymbol{y}$ は $\boldsymbol{x}$ に依存しない定数ベクトル
証明

Hadamard積の $i$ 番目の成分は次のように定義される。

\begin{equation} (\boldsymbol{x} \odot \boldsymbol{y})_i = x_i \, y_i \label{eq:3-12-1} \end{equation}

これを $x_j$ で偏微分する。$y_i$ は $\boldsymbol{x}$ に依存しない定数であるから次のようになる。

\begin{equation} \frac{\partial (x_i \, y_i)}{\partial x_j} = y_i \frac{\partial x_i}{\partial x_j} = y_i \, \delta_{ij} \label{eq:3-12-2} \end{equation}

Jacobi行列の $(i, j)$ 成分が $y_i \, \delta_{ij}$ であるから、$i = j$ のときのみ非零で $y_i$ となる。したがってJacobi行列は対角行列である。

\begin{equation} \frac{\partial (\boldsymbol{x} \odot \boldsymbol{y})}{\partial \boldsymbol{x}} = \mathrm{diag}(\boldsymbol{y}) \label{eq:3-12-3} \end{equation}

補足:$\boldsymbol{y}$ も $\boldsymbol{x}$ の関数である一般の場合は、積の法則により $\mathrm{diag}(\boldsymbol{x}) \, \partial \boldsymbol{y}/\partial \boldsymbol{x} + \mathrm{diag}(\boldsymbol{y})$ となる(6.1 を参照)。

3.13 softmax関数のJacobian

公式:$\displaystyle\frac{\partial\, \mathrm{softmax}(\boldsymbol{x})}{\partial \boldsymbol{x}} = \mathrm{diag}(\boldsymbol{p}) - \boldsymbol{p}\boldsymbol{p}^\top$
($\boldsymbol{p} = \mathrm{softmax}(\boldsymbol{x})$)
条件:$\boldsymbol{x} \in \mathbb{R}^N$、$p_i = e^{x_i} / \sum_{k} e^{x_k}$
証明

softmax関数の $i$ 番目の出力を $x_j$ で偏微分する。$S = \sum_{k} e^{x_k}$ とおく。

\begin{equation} p_i = \frac{e^{x_i}}{S} \label{eq:3-13-1} \end{equation}

$i = j$ のとき:商の微分法を適用する。

\begin{equation} \frac{\partial p_i}{\partial x_i} = \frac{e^{x_i} S - e^{x_i} e^{x_i}}{S^2} = p_i - p_i^2 = p_i(1 - p_i) \label{eq:3-13-2} \end{equation}

$i \neq j$ のとき:分子 $e^{x_i}$ は $x_j$ に依存しない。

\begin{equation} \frac{\partial p_i}{\partial x_j} = -\frac{e^{x_i} e^{x_j}}{S^2} = -p_i \, p_j \label{eq:3-13-3} \end{equation}

$\eqref{eq:3-13-2}$ と $\eqref{eq:3-13-3}$ を Kronecker のデルタでまとめると次のようになる。

\begin{equation} \frac{\partial p_i}{\partial x_j} = p_i(\delta_{ij} - p_j) \label{eq:3-13-4} \end{equation}

行列形式で書くと次のようになる。

\begin{equation} \frac{\partial \boldsymbol{p}}{\partial \boldsymbol{x}} = \mathrm{diag}(\boldsymbol{p}) - \boldsymbol{p}\boldsymbol{p}^\top \label{eq:3-13-5} \end{equation}

補足:本証明は6.2 と同一の内容である。第3章ではベクトルをベクトルで微分するJacobi行列の具体例として、第6章では活性化関数の微分として配置している。

参考文献

  • Petersen, K. B., & Pedersen, M. S. (2012). The Matrix Cookbook. Technical University of Denmark.
  • Magnus, J. R., & Neudecker, H. (1999). Matrix Differential Calculus with Applications in Statistics and Econometrics (Revised ed.). Wiley.
  • Matrix calculus - Wikipedia