行列変数関数の全微分
背景
スカラー微分
スカラー関数 $f : \mathbb{R} \to \mathbb{R}$と通常の微分を考えてみよう。
$$ \dfrac{d f}{d x} \tag{1} $$
この表記は分数のように見えて、実際に計算するときにそのように扱っても良いことが保証されている。例えば合成関数の微分法である連鎖律は、以下のように分数を約分するかのように直感的に計算できる。
$$ \dfrac{d f}{d t} = \dfrac{d f}{d x} \dfrac{d x}{d t} $$
$(1)$を分数として扱えるということは、$df$と$dx$をそれぞれが意味を持つ対象として扱うことに等しい。この文脈では、$df$(または$dx$)は$f$(または$x$)の非常に小さな変化量を意味する。
$$ \begin{align*} df &= \dfrac{d f}{d x} dx \tag{2} \\ \text{$f$の小さい変化量} &= \text{($x$に対する$f$の変化率) $\times$ ($x$の小さい変化量)} \end{align*} $$
ベクトル微分
次に、多変数関数 $f : \mathbb{R}^{n} \to \mathbb{R}$とベクトル微分を考えてみよう。$f$の導関数は、$i$番目の変数で偏微分したものを$i$番目の成分とするグラディエントで与えられる。
$$ \nabla_{\mathbf{x}}f = \dfrac{\partial f}{\partial \mathbf{x}} = \begin{bmatrix} \dfrac{\partial f}{\partial x_{1}} & \cdots & \dfrac{\partial f}{\partial x_{n}} \end{bmatrix}^{\mathsf{T}} $$
このとき、$f$の小さい変化量である$df$は、各変数に対する$f$の変化量$\dfrac{\partial f}{\partial x_{i}}$と各変数の変化量$dx_{i}$をすべて足した値として定義される。これは$f$の全微分、完全微分、または微分素differentialと呼ばれる。
$$ df = \dfrac{\partial f}{\partial x_{1}}dx_{1} + \cdots + \dfrac{\partial f}{\partial x_{n}}dx_{n} \tag{3} $$
両辺を$dx_{i}$で割ると、各変数は互いに独立しているため、実際に該当する変数に対する$f$の変化率を得て、$df$がよく定義されていることがわかる。
$$ \dfrac{d f}{d x_{i}} = \dfrac{\partial f}{\partial x_{1}} \dfrac{dx_{1}}{dx_{i}} + \cdots + \dfrac{\partial f}{\partial x_{n}} \dfrac{dx_{n}}{dx_{i}} = \dfrac{\partial f}{\partial x_{i}} \dfrac{dx_{i}}{dx_{i}} = \dfrac{\partial f}{\partial x_{i}} $$
ところがここで、$(3)$は以下のような行列積で表現することもできる。
$$ df = \begin{bmatrix} \dfrac{\partial f}{\partial x_{1}} & \cdots & \dfrac{\partial f}{\partial x_{n}} \end{bmatrix} \begin{bmatrix} d x_{1} \\ \vdots \\ d x_{n} \end{bmatrix} \tag{4} $$
行ベクトルはグラディエント $(\nabla_{\mathbf{x}}f)^{\mathsf{T}}$である。列ベクトルを$d\mathbf{x} = \begin{bmatrix} d x_{1} & \cdots & d x_{n} \end{bmatrix}^{\mathsf{T}}$のように表記しよう。これは変数 $(x_{1}, x_{2}, \dots, x_{n})$の小さい変化量を意味する。すると $(4)$は以下のように二つのベクトルの内積の形で表現される。
$$ df = (\nabla_{\mathbf{x}}f)^{\mathsf{T}} d\mathbf{x} = \nabla_{\mathbf{x}}f \cdot \mathbf{x} = \braket{\nabla_{\mathbf{x}}f, \mathbf{x}} \tag{5} $$
スカラー微分 $(2)$で$\nabla_{x}f = \frac{d f}{d x}$と表記すると$df = \nabla_{x}f dx$なので$(5)$とその形が正確に一致し、ベクトルへの一般化が自然に行われたことがわかる。ここで同じ方法で行列微分への一般化を導いてみよう。
行列微分
行列空間上で定義された関数 $f : \mathbb{R}^{n \times n} \to \mathbb{R}$を考えてみよう。この関数の変数は次のような行列である。
$$ \mathbf{X} = \begin{bmatrix} x_{11} & x_{12} & \cdots & x_{1n} \\ x_{21} & x_{22} & \cdots & x_{2n} \\ \vdots & \vdots & \ddots & \vdots \\ x_{n1} & x_{n2} & \cdots & x_{nn} \end{bmatrix} $$
ベクトルの場合と同様に、$d \mathbf{X}$を以下のように定義するのが自然であろう。
$$ d \mathbf{X} = \begin{bmatrix} d x_{11} & d x_{12} & \cdots & d x_{1n} \\ d x_{21} & d x_{22} & \cdots & d x_{2n} \\ \vdots & \vdots & \ddots & \vdots \\ d x_{n1} & d x_{n2} & \cdots & d x_{nn} \end{bmatrix} $$
また、$df$は$(3)$に似た以下のように定義するのが自然である。
$$ df = \sum\limits_{i, j=1}^{n} \dfrac{\partial f}{\partial x_{ij}} d x_{ij} $$
右辺は二つの行列の内積の形となっている。したがって次のように表現できる。
$$ df = \Braket{ \left[ \dfrac{\partial f}{\partial x_{ij}} \right], \left[ dx_{ij} \right] } = \Tr \left( \left[ \dfrac{\partial f}{\partial x_{ij}} \right]^{\mathsf{T}}, \left[ dx_{ij} \right] \right) $$
ここで最初の行列はグラディエント行列 $\nabla_{\mathbf{X}}f = \dfrac{\partial f}{\partial \mathbf{X}}$であり、二番目の行列は$\mathbf{X}$である。したがって次の定理を得る。
定理
行列空間で定義されたスカラー関数 $f : \mathbb{R}^{n \times n} \to \mathbb{R}$について、全微分 $df$は次のようになる。
$$ df = \Braket{\nabla_{\mathbf{X}}f, d \mathbf{X}} = \Tr \left( \left( \nabla_{\mathbf{X}}f \right)^{\mathsf{T}} d \mathbf{X} \right) \tag{6} $$
ここで $\nabla_{\mathbf{X}}f$はグラディエント行列、$d \mathbf{X}$は$\mathbf{X}$の微分素である。
$$ \nabla_{\mathbf{X}} f = \dfrac{\partial f}{\partial \mathbf{X}} = \begin{bmatrix} \dfrac{\partial f}{\partial x_{11}} & \cdots & \dfrac{\partial f}{\partial x_{1n}} \\ \vdots & \ddots & \vdots \\ \dfrac{\partial f}{\partial x_{n1}} & \cdots & \dfrac{\partial f}{\partial x_{nn}} \end{bmatrix} $$
$$ d \mathbf{X} = \begin{bmatrix} d x_{11} & d x_{12} & \cdots & d x_{1n} \\ d x_{21} & d x_{22} & \cdots & d x_{2n} \\ \vdots & \vdots & \ddots & \vdots \\ d x_{n1} & d x_{n2} & \cdots & d x_{nn} \end{bmatrix} $$
説明
$(6)$は微分計算に非常に有用で、$\nabla_{\mathbf{X}}f$を得るためには実際に$f$を計算する必要がなく、$df = \Tr (A^{\mathsf{T}} d \mathbf{X})$の形を作るだけでよい。すると行列 $A$がすぐに$f$のグラディエント行列となる。その詳細は以下を参照。
- トレーストリック
- [行列式トリック]