logo

トレーストリック 📂多変数ベクトル解析

トレーストリック

公式

行列空間$M(\mathbb{R}^{n \times n})$上で定義されたスカラー関数$f: \mathbb{R}^{n \times n} \to \mathbb{R}$が与えられたとしよう。$\mathrm{d}f$を$f$の全微分としよう。次が成り立つ。

$$ \mathrm{d}f = \Tr (\mathrm{d}f) = \mathrm{d}\Tr (f) \tag{1} $$

$\Tr$はトレースである。

証明

$f$(の関数値)はスカラーなので、トレースをとっても同じである。したがって次を得る。

$$ f = \Tr(f) \implies \mathrm{d}f = \mathrm{d}\Tr(f) $$

$\mathrm{d}f$もスカラーであり、スカラーにトレースをとっても同じだから、次を得る。

$$ \mathrm{d}f = \Tr (\mathrm{d}f) $$

上の2つの結果から、以下の式を得る。

$$ \Tr (\mathrm{d}f) = \mathrm{d}f = \mathrm{d}\Tr(f) $$

トレーストリック

トレーストリックとは、勾配行列$\nabla_{\mathbf{X}}f$を簡単に求める一種の計算方法である。1変数関数の導函数$\dfrac{d f}{d x}$や勾配$\nabla_{\mathbf{x}}f = \begin{bmatrix} \dfrac{\partial f}{\partial x_{1}} & \cdots & \dfrac{\partial f}{\partial x_{n}} \end{bmatrix}^{\mathsf{T}}$に比べて、勾配行列は成分が多く計算が難しい。特に行列積転置が複雑に含まれる場合、インデックスを考慮することも紛らわしいが、トレーストリックを使用するとインデックスを考慮せずに簡単に計算できる。計算過程をまとめると以下の通りである。

  1. $\mathrm{d}f = \Tr( \mathrm{d}f )$または$\mathrm{d}f = \mathrm{d}\Tr(f)$で開始する。
  2. 上記の式を$\mathrm{d}f = \Tr \left( A^{\mathsf{T}} \mathrm{d}\mathbf{X} \right)$の形に変える。
  3. $f$の全微分は$\mathrm{d}f = \Tr \left( \left( \nabla_{\mathbf{X}}f \right)^{\mathsf{T}} \mathrm{d}\mathbf{X} \right)$なので、$A = \nabla_{\mathbf{X}}f$である。

この過程で、$(1)$やトレースの様々な性質行列微分素の性質などを利用すると計算が容易になる。例を見れば分かるが、実際には「計算」と言うほど頭を使うことはなく、トレースの性質を利用して行列の積の順序をうまく変えることがすべてである。何よりも重要なのは、実際には微分を行わないことである。(もちろん微分素行列を計算することは積の微分法によるものではあるが)

トレーストリックで計算された微分公式はスカラー関数の行列微分表で確認することができる。

例示

計算には以下の規則が使用される。

行列微分素の性質

変数である行列$\mathbf{X}, \mathbf{Y} \in \mathbb{R}^{n \times n}$とスカラー$\alpha \in \mathbb{R}$、定数行列$\mathbf{A} \in \mathbb{R}^{n \times n}$について次が成り立つ。

  1. $\mathrm{d}(\alpha \mathbf{X}) = \alpha \mathrm{d}\mathbf{X}$
  2. $\mathrm{d}(\mathbf{X}^{\mathsf{T}}) = (\mathrm{d}\mathbf{X})^{\mathsf{T}}$
  3. $\mathrm{d}(\mathbf{A}\mathbf{X}) = \mathbf{A} \mathrm{d}\mathbf{X}$そして$\mathrm{d}(\mathbf{X}\mathbf{A}) = (\mathrm{d}\mathbf{X}) \mathbf{A}$
  4. $\mathrm{d}(\mathbf{X} + \mathbf{Y}) = \mathrm{d}\mathbf{X} + \mathrm{d}\mathbf{Y}$
  5. $\mathrm{d}(\mathbf{X}\mathbf{Y}) = (\mathrm{d}\mathbf{X})\mathbf{Y} + \mathbf{X} \mathrm{d}\mathbf{Y}$

トレースの性質

  1. $\Tr (\alpha \mathbf{X}) = \alpha \Tr (\mathbf{X})$
  2. 線形性: $\Tr (\mathbf{X} + \mathbf{Y}) = \Tr (\mathbf{X}) + \Tr (\mathbf{Y})$
  3. 循環性: $\Tr (\mathbf{X}\mathbf{Y}\mathbf{Z}) = \Tr (\mathbf{Y}\mathbf{Z}\mathbf{X}) = \Tr (\mathbf{Z}\mathbf{X}\mathbf{Y})$
  4. 転置不変性: $\Tr (\mathbf{X}^{\mathsf{T}}) = \Tr (\mathbf{X})$

$f(\mathbf{X}) = \Tr(\mathbf{A}\mathbf{X})$

上記の説明した順序に従って計算すると以下の通り。

$$ \begin{align*} \mathrm{d}f &= \mathrm{d}\Tr \left( \mathbf{A}\mathbf{X} \right) \\ &= \Tr \left( \mathrm{d}\left( \mathbf{A}\mathbf{X} \right) \right) & \text{by } (1) \\ &= \Tr \left( \mathbf{A} \mathrm{d}\mathbf{X} \right) \\ &= \Tr \left( \left( \mathbf{A}^{\mathsf{T}} \right)^{\mathsf{T}} \mathrm{d}\mathbf{X} \right)\\ &= \Tr \left( (\nabla_{\mathbf{X}}f)^{\mathsf{T}} \mathbf{X} \right) \end{align*} $$

したがって次を得る。

$$ \nabla_{\mathbf{X}}f = \mathbf{A}^{\mathsf{T}} $$

直接計算したものに比べれば、はるかに簡単である。

$f(\mathbf{X}) = \mathbf{a}^{\mathsf{T}}\mathbf{X}\mathbf{b}$

上記と同様に計算する。トレースの性質から$\Tr (\mathbf{a}^{\mathsf{T}}\mathbf{X}\mathbf{b}) = \Tr (\mathbf{b}\mathbf{a}^{\mathsf{T}}\mathbf{X})$だから、以下のように計算できる。

$$ \begin{align*} \mathrm{d}f &= \mathrm{d}\Tr (f) &\text{by } (1) \\ &= \mathrm{d}\Tr \left( \mathbf{a}^{\mathsf{T}}\mathbf{X}\mathbf{b} \right) \\ &= \mathrm{d}\Tr \left( (\mathbf{b}\mathbf{a}^{\mathsf{T}})\mathbf{X} \right) \\ &= \mathrm{d}\Tr \left( (\mathbf{a}\mathbf{b}^{\mathsf{T}})^{\mathsf{T}}\mathbf{X} \right) \\ \end{align*} $$

1つ目の例の結果により、

$$ \nabla_{\mathbf{X}}f = \mathbf{a}\mathbf{b}^{\mathsf{T}} $$

$f(\mathbf{X}) = \mathbf{a}^{\mathsf{T}} \mathbf{X}^{\mathsf{T}}\mathbf{X} \mathbf{b}$

2つ目の例と比較すると、$\mathbf{X}^{\mathsf{T}}$が1つ増えただけだが直接手計算する面倒さと難易度はかなり差がある。トレーストリックを使用すると以下のように計算できる。まずは$\Tr(\mathbf{a}^{\mathsf{T}} \mathbf{X}^{\mathsf{T}} \mathbf{X} \mathbf{b}) = \Tr(\mathbf{b} \mathbf{a}^{\mathsf{T}} \mathbf{X}^{\mathsf{T}} \mathbf{X})$だから、

$$ \begin{align*} \mathrm{d}f &= \mathrm{d}\Tr (f) &\text{by } (1) \\ &= \mathrm{d}\Tr(\mathbf{a}^{\mathsf{T}} \mathbf{X}^{\mathsf{T}} \mathbf{X} \mathbf{b}) \\ &= \mathrm{d}\Tr(\mathbf{b} \mathbf{a}^{\mathsf{T}} \mathbf{X}^{\mathsf{T}} \mathbf{X}) \\ &= \Tr\left( \mathrm{d}(\mathbf{b} \mathbf{a}^{\mathsf{T}} \mathbf{X}^{\mathsf{T}} \mathbf{X}) \right) & \text{by } (1) \\ &= \Tr\left( \mathbf{b} \mathbf{a}^{\mathsf{T}} \mathrm{d}(\mathbf{X}^{\mathsf{T}}) \mathbf{X} + \mathbf{b} \mathbf{a}^{\mathsf{T}} \mathbf{X}^{\mathsf{T}} \mathrm{d}\mathbf{X} \right) \\ &\overset{6\text{th}}{=} \Tr\left( \mathrm{d}(\mathbf{X}^{\mathsf{T}})\mathbf{X}\mathbf{b} \mathbf{a}^{\mathsf{T}} + \mathbf{b} \mathbf{a}^{\mathsf{T}} \mathbf{X}^{\mathsf{T}} \mathrm{d}\mathbf{X} \right) \\ &= \Tr\left( (\mathrm{d}\mathbf{X}^{\mathsf{T}})(\mathbf{X}\mathbf{b} \mathbf{a}^{\mathsf{T}}) + \mathbf{b} \mathbf{a}^{\mathsf{T}} \mathbf{X}^{\mathsf{T}} \mathrm{d}\mathbf{X} \right) \\ &\overset{8\text{th}}{=} \Tr\left( (\mathbf{X}\mathbf{b} \mathbf{a}^{\mathsf{T}})^{\mathsf{T}}\mathrm{d}\mathbf{X} + (\mathbf{X} \mathbf{a} \mathbf{b}^{\mathsf{T}})^{\mathsf{T}} \mathrm{d}\mathbf{X} \right) \\ &= \Tr\left( \left[ \mathbf{X}\mathbf{b} \mathbf{a}^{\mathsf{T}} + \mathbf{X} \mathbf{a} \mathbf{b}^{\mathsf{T}} \right]^{\mathsf{T}} \mathrm{d}\mathbf{X} \right) \\ &= \Tr \left( (\nabla_{\mathbf{X}}f)^{\mathsf{T}} \mathbf{X} \right) \end{align*} $$

6番目の等号はトレースの線形性と循環性質により成り立つ。8番目の等号はトレースの線形性と転置不変性により成り立つ。

$$ \nabla_{\mathbf{X}}f = \mathbf{X}\mathbf{b} \mathbf{a}^{\mathsf{T}} + \mathbf{X} \mathbf{a} \mathbf{b}^{\mathsf{T}} = \mathbf{X} \left( \mathbf{a} \mathbf{b}^{\mathsf{T}} + \mathbf{b} \mathbf{a}^{\mathsf{T}} \right) $$