last_modified: 2026-01-10
生成AIによる自動生成記事に関する免責事項 :
本記事は、Petersen & Pedersen著 The Matrix Cookbook (Nov 15, 2012 edition) のPage 11の内容(公式76〜91)を骨子とし、数理的な証明と応用例を大幅に加筆して再構成した解説記事です。筆者の学習目的で生成したものです。正確な内容は必ず一次情報で確認してください。
1. 序論:最適化問題の記述言語「二次形式」#
Page 11では、行列微分の中で最も実用頻度が高い**「二次形式(Second Order Forms)」**の微分が集中的に扱われています。
物理学におけるエネルギー、統計学における分散、機械学習における二乗誤差などは、すべて二次形式で記述されます。したがって、このページの公式群(Eq. 76-89)を理解することは、最適化問題を解くアルゴリズム(勾配降下法やニュートン法)を自ら設計・実装するための必須要件となります。
また、後半(Eq. 90-91)では、行列のべき乗 X n X^n X n の微分という、より高度なトピックも扱います。これは制御理論における遷移行列の解析などで威力を発揮します。
2. ベクトルと行列の二次形式 (Second Order)#
2.1 ベクトル二次形式の基本 (Eq. 81, 78)#
最も基本的かつ重要な公式です。スカラーの微分 ( a x 2 ) ′ = 2 a x (ax^2)' = 2ax ( a x 2 ) ′ = 2 a x の行列版と考えられます。
【公式】
∂ x T B x ∂ x = ( B + B T ) x (81) \frac{\partial \mathbf{x}^T B \mathbf{x}}{\partial \mathbf{x}} = (B + B^T) \mathbf{x} \tag{81} ∂ x ∂ x T B x = ( B + B T ) x ( 81 )
∂ ( B x + b ) T C ( D x + d ) ∂ x = B T C ( D x + d ) + D T C T ( B x + b ) (78) \frac{\partial (B\mathbf{x}+\mathbf{b})^T C (D\mathbf{x}+\mathbf{d})}{\partial \mathbf{x}} = B^T C (D\mathbf{x}+\mathbf{d}) + D^T C^T (B\mathbf{x}+\mathbf{b}) \tag{78} ∂ x ∂ ( B x + b ) T C ( D x + d ) = B T C ( D x + d ) + D T C T ( B x + b ) ( 78 )
【解説】
Eq. 81 : もし B B B が対称行列(B = B T B=B^T B = B T )ならば、結果はシンプルに 2 B x 2B\mathbf{x} 2 B x となります。これは分散共分散行列を含むマハラノビス距離の微分などで頻出します。
Eq. 78 : これは「積の微分公式」のベクトル版です。u = B x + b , v = D x + d u = B\mathbf{x}+\mathbf{b}, v = D\mathbf{x}+\mathbf{d} u = B x + b , v = D x + d と置けば、u T C v u^T C v u T C v の微分として理解できます。B T B^T B T や D T D^T D T が掛かるのは、連鎖律による内部関数の微分(ヤコビアン)です。
2.2 行列二次形式の微分 (Eq. 77, 82, 83)#
変数がベクトル x \mathbf{x} x ではなく、行列 X X X になったバージョンです。多変量解析や行列回帰で重要になります。
【公式一覧】
∂ b T X T X c ∂ X = X ( b c T + c b T ) (77) \frac{\partial \mathbf{b}^T X^T X \mathbf{c}}{\partial X} = X (\mathbf{b}\mathbf{c}^T + \mathbf{c}\mathbf{b}^T) \tag{77} ∂ X ∂ b T X T X c = X ( b c T + c b T ) ( 77 )
∂ b T X T D X c ∂ X = D T X b c T + D X c b T (82) \frac{\partial \mathbf{b}^T X^T D X \mathbf{c}}{\partial X} = D^T X \mathbf{b}\mathbf{c}^T + D X \mathbf{c}\mathbf{b}^T \tag{82} ∂ X ∂ b T X T D X c = D T X b c T + D X c b T ( 82 )
∂ ( X b + c ) T D ( X b + c ) ∂ X = ( D + D T ) ( X b + c ) b T (83) \frac{\partial (X\mathbf{b}+\mathbf{c})^T D (X\mathbf{b}+\mathbf{c})}{\partial X} = (D + D^T) (X\mathbf{b}+\mathbf{c}) \mathbf{b}^T \tag{83} ∂ X ∂ ( X b + c ) T D ( X b + c ) = ( D + D T ) ( X b + c ) b T ( 83 )
【Eq. 82 の証明】
スカラー関数 f = b T X T D X c = Tr ( b T X T D X c ) = Tr ( D X c b T X T ) f = \mathbf{b}^T X^T D X \mathbf{c} = \text{Tr}(\mathbf{b}^T X^T D X \mathbf{c}) = \text{Tr}(D X \mathbf{c} \mathbf{b}^T X^T) f = b T X T D X c = Tr ( b T X T D X c ) = Tr ( D X c b T X T ) とみなして微分をとります。
d f = Tr ( D ( d X ) c b T X T ) + Tr ( D X c b T ( d X ) T ) = Tr ( c b T X T D d X ) + Tr ( ( D X c b T ) T d X ) = Tr ( ( c b T X T D + b c T X T D T ) d X ) \begin{aligned}
df &= \text{Tr}(D (dX) \mathbf{c} \mathbf{b}^T X^T) + \text{Tr}(D X \mathbf{c} \mathbf{b}^T (dX)^T) \\
&= \text{Tr}(\mathbf{c} \mathbf{b}^T X^T D dX) + \text{Tr}((D X \mathbf{c} \mathbf{b}^T)^T dX) \\
&= \text{Tr}( (\mathbf{c} \mathbf{b}^T X^T D + \mathbf{b} \mathbf{c}^T X^T D^T) dX )
\end{aligned} df = Tr ( D ( d X ) c b T X T ) + Tr ( D X c b T ( d X ) T ) = Tr ( c b T X T D d X ) + Tr (( D X c b T ) T d X ) = Tr (( c b T X T D + b c T X T D T ) d X )
勾配は係数行列の転置なので、
∂ f ∂ X = ( c b T X T D ) T + ( b c T X T D T ) T = D T X b c T + D X c b T \frac{\partial f}{\partial X} = (\mathbf{c} \mathbf{b}^T X^T D)^T + (\mathbf{b} \mathbf{c}^T X^T D^T)^T = D^T X \mathbf{b} \mathbf{c}^T + D X \mathbf{c} \mathbf{b}^T ∂ X ∂ f = ( c b T X T D ) T + ( b c T X T D T ) T = D T X b c T + D X c b T
となり、公式と一致します。
Eq. 77 は Eq. 82 において D = I D=I D = I とした特殊ケースです。
【Eq. 83 の直感的解釈】
これは、線形回帰モデルの残差二乗和 (重み付き最小二乗法)の構造をしています。
r = X b + c \mathbf{r} = X\mathbf{b}+\mathbf{c} r = X b + c と置くと、r T D r \mathbf{r}^T D \mathbf{r} r T D r の微分です。
∂ ( r T D r ) ∂ r = ( D + D T ) r \frac{\partial (\mathbf{r}^T D \mathbf{r})}{\partial \mathbf{r}} = (D+D^T)\mathbf{r} ∂ r ∂ ( r T D r ) = ( D + D T ) r
これに連鎖律(∂ r ∂ X \frac{\partial \mathbf{r}}{\partial X} ∂ X ∂ r の寄与)として b T \mathbf{b}^T b T が右から掛かる形になっています。
2.3 成分ごとの微分とシングルエントリ行列 (Eq. 76, 79, 80)#
成分計算のための補助公式です。
【公式】
∂ ∂ X i j ∑ k l m n X k l X m n = 2 ∑ k l X k l (76) \frac{\partial}{\partial X_{ij}} \sum_{klmn} X_{kl} X_{mn} = 2 \sum_{kl} X_{kl} \tag{76} ∂ X ij ∂ k l mn ∑ X k l X mn = 2 k l ∑ X k l ( 76 )
∂ ( X T B X ) k l ∂ X i j = δ l j ( X T B ) k i + δ k j ( B X ) i l (79) \frac{\partial (X^T B X)_{kl}}{\partial X_{ij}} = \delta_{lj} (X^T B)_{ki} + \delta_{kj} (BX)_{il} \tag{79} ∂ X ij ∂ ( X T BX ) k l = δ l j ( X T B ) ki + δ kj ( BX ) i l ( 79 )
( J i j ) k l = δ i k δ j l (80) (J^{ij})_{kl} = \delta_{ik} \delta_{jl} \tag{80} ( J ij ) k l = δ ik δ j l ( 80 )
【解説】
Eq. 76 : ∑ k l m n X k l X m n = ( ∑ k l X k l ) 2 \sum_{klmn} X_{kl} X_{mn} = (\sum_{kl} X_{kl})^2 ∑ k l mn X k l X mn = ( ∑ k l X k l ) 2 です。これは「全成分の総和の二乗」なので、微分すると 2 × ( 総和 ) 2 \times (\text{総和}) 2 × ( 総和 ) になります。
Eq. 80 : シングルエントリ行列 J i j J^{ij} J ij の定義です。( i , j ) (i, j) ( i , j ) 成分だけが 1 である行列 E i j E_{ij} E ij と同じです。これは Eq. 79 のような成分ごとの微分を、行列形式 X T B J i j + J j i B X X^T B J^{ij} + J^{ji} B X X T B J ij + J ji BX (原典Eq. 79の別記法)として表現する際に使われます。
3. 最小二乗法とLMSアルゴリズム (Eq. 84–89)#
ここでは、統計学や信号処理の核心である「誤差関数の微分」を扱います。
3.1 対称重み行列 W W W を持つ二次形式 (Eq. 84–88)#
関数 J = ( x − A s ) T W ( x − A s ) J = (\mathbf{x} - A\mathbf{s})^T W (\mathbf{x} - A\mathbf{s}) J = ( x − A s ) T W ( x − A s ) を考えます。これは一般化最小二乗法の目的関数そのものです。W W W は対称行列 (W = W T W=W^T W = W T ) と仮定します。
【公式一覧】
∂ J ∂ s = − 2 A T W ( x − A s ) (84) \frac{\partial J}{\partial \mathbf{s}} = -2 A^T W (\mathbf{x} - A\mathbf{s}) \tag{84} ∂ s ∂ J = − 2 A T W ( x − A s ) ( 84 )
∂ J ∂ x = 2 W ( x − A s ) (85) \frac{\partial J}{\partial \mathbf{x}} = 2 W (\mathbf{x} - A\mathbf{s}) \tag{85} ∂ x ∂ J = 2 W ( x − A s ) ( 85 )
∂ J ∂ A = − 2 W ( x − A s ) s T (88) \frac{\partial J}{\partial A} = -2 W (\mathbf{x} - A\mathbf{s}) \mathbf{s}^T \tag{88} ∂ A ∂ J = − 2 W ( x − A s ) s T ( 88 )
※ Eq. 86, 87 は A = I A=I A = I の特殊ケースなので省略しますが、構造は同じです。
【解説と応用】
Eq. 84 (sによる微分) : これを 0 と置くことで、最小二乗解の正規方程式 A T W A s = A T W x A^T W A \mathbf{s} = A^T W \mathbf{x} A T W A s = A T W x が導かれます。
Eq. 88 (Aによる微分) : これが行列微分ならではの醍醐味です。
残差ベクトル e = x − A s \mathbf{e} = \mathbf{x} - A\mathbf{s} e = x − A s を定義すると、勾配は − 2 W e s T -2 W \mathbf{e} \mathbf{s}^T − 2 W e s T となります。
これは、「重み付き残差 W e W\mathbf{e} W e 」と「入力 s \mathbf{s} s 」の直積(Outer Product)です。この形は、ニューラルネットワークの重み更新則(デルタ則)や、辞書学習(Dictionary Learning)における辞書更新と完全に一致します。
3.2 複素数値とLMSアルゴリズム (Eq. 89)#
信号処理における適応フィルタ(LMS: Least Mean Squares)で使われる公式です。
【公式】
∂ ( a − x H b ) 2 ∂ x = − 2 b ( a − x H b ) ∗ (89) \frac{\partial (a - \mathbf{x}^H \mathbf{b})^2}{\partial \mathbf{x}} = -2 \mathbf{b} (a - \mathbf{x}^H \mathbf{b})^* \tag{89} ∂ x ∂ ( a − x H b ) 2 = − 2 b ( a − x H b ) ∗ ( 89 )
※ 原典の指数表記は誤植または特殊な記法と思われますが、一般的には共役 ( ∗ ) (*) ( ∗ ) を意味します。
【解説】
複素数の世界では、実数値の損失関数 J = ∣ e ∣ 2 = e e ∗ J = |e|^2 = e e^* J = ∣ e ∣ 2 = e e ∗ を複素ベクトル x \mathbf{x} x で微分する際、ヴィルティンガー微分(Wirtinger derivatives)の概念が使われます。この公式は、最急降下法による更新方向 − 2 b e ∗ -2 \mathbf{b} e^* − 2 b e ∗ を与えており、通信工学におけるビームフォーミング最適化の基礎式です。
4. 高次形式と非線形行列関数 (Higher-order)#
行列の n n n 乗を含む関数の微分です。
4.1 行列のn乗の成分微分 (Eq. 90)#
【公式】
∂ ( X n ) k l ∂ X i j = ∑ r = 0 n − 1 ( X r J i j X n − 1 − r ) k l (90) \frac{\partial (X^n)_{kl}}{\partial X_{ij}} = \sum_{r=0}^{n-1} (X^r J^{ij} X^{n-1-r})_{kl} \tag{90} ∂ X ij ∂ ( X n ) k l = r = 0 ∑ n − 1 ( X r J ij X n − 1 − r ) k l ( 90 )
【証明と直感】
積の微分法則(ライプニッツ則)を n n n 個の積 X ⋅ X ⋯ X X \cdot X \cdots X X ⋅ X ⋯ X に適用します。
d ( X n ) = ( d X ) X n − 1 + X ( d X ) X n − 2 + ⋯ + X n − 1 ( d X ) d(X^n) = (dX)X^{n-1} + X(dX)X^{n-2} + \cdots + X^{n-1}(dX) d ( X n ) = ( d X ) X n − 1 + X ( d X ) X n − 2 + ⋯ + X n − 1 ( d X )
非可換性があるため、項をまとめることはできず、和の形で残ります。これを成分表示したのが Eq. 90 です。
J i j J^{ij} J ij は微小変化 d X dX d X の成分表現(( i , j ) (i,j) ( i , j ) だけが1)です。
4.2 高次双線形形式 (Eq. 91)#
【公式】
∂ a T X n b ∂ X = ∑ r = 0 n − 1 ( X r ) T a b T ( X n − 1 − r ) T (91) \frac{\partial \mathbf{a}^T X^n \mathbf{b}}{\partial X} = \sum_{r=0}^{n-1} (X^r)^T \mathbf{a} \mathbf{b}^T (X^{n-1-r})^T \tag{91} ∂ X ∂ a T X n b = r = 0 ∑ n − 1 ( X r ) T a b T ( X n − 1 − r ) T ( 91 )
【解説】
スカラー関数 a T X n b \mathbf{a}^T X^n \mathbf{b} a T X n b の微分です。
d ( a T X n b ) = Tr ( a T d ( X n ) b ) d(\mathbf{a}^T X^n \mathbf{b}) = \text{Tr}(\mathbf{a}^T d(X^n) \mathbf{b}) d ( a T X n b ) = Tr ( a T d ( X n ) b ) に、先ほどの d ( X n ) d(X^n) d ( X n ) の展開式を代入し、トレースの巡回性を利用して d X dX d X を括り出すことで導出されます。
n = 1 n=1 n = 1 のときは Eq. 70 a b T \mathbf{a}\mathbf{b}^T a b T に帰着し、n = 2 n=2 n = 2 のときは X T a b T + a b T X T X^T \mathbf{a}\mathbf{b}^T + \mathbf{a}\mathbf{b}^T X^T X T a b T + a b T X T となるなど、次数が増えるにつれて項が増えていきます。
5. 結論#
『The Matrix Cookbook』Page 11 は、応用数理における「実戦配備」のためのページです。
二次形式の微分 (Eq. 81, 83) : 凸最適化問題の勾配計算に必須。特に 2 B x 2B\mathbf{x} 2 B x や ( D + D T ) r (D+D^T)\mathbf{r} ( D + D T ) r という形は、条件反射で出るようにすべきです。
最小二乗法の微分 (Eq. 88) : − 2 W e s T -2 W \mathbf{e} \mathbf{s}^T − 2 W e s T という「残差と入力の直積」形式は、機械学習の学習則の普遍的な構造を示しています。
高次形式 (Eq. 90) : 行列指数関数 e X t e^{Xt} e Xt の摂動解析など、動的システムの制御理論への入り口となります。
このページの公式をマスターすることで、線形回帰からニューラルネットワークまで、幅広いアルゴリズムの導出を自力で行う力が身につきます。
6. 実践的応用例:数式から現実世界へ#
Page 11 で扱った二次形式や高次形式の微分公式は、最適化問題、信号処理、制御理論といった工学分野において、アルゴリズムの導出過程で必ず登場するものです。ここでは、理論が実用技術に変わる瞬間を3つの例で示します。
応用例1:線形回帰と正規方程式の導出(二次形式微分の応用)#
機械学習の最も基本的なモデルである「線形回帰」の解(正規方程式)は、Page 11 の公式 Eq. 81 を使うことで、わずか数行で導出できます。
【問題設定】
入力行列 A A A とターゲットベクトル b \mathbf{b} b に対し、線形モデル A x A\mathbf{x} A x との二乗誤差 J ( x ) = ∥ A x − b ∥ 2 J(\mathbf{x}) = \| A\mathbf{x} - \mathbf{b} \|^2 J ( x ) = ∥ A x − b ∥ 2 を最小化するパラメータ x \mathbf{x} x を求めたいとします。
【解析】
目的関数を展開します。
J ( x ) = ( A x − b ) T ( A x − b ) = x T A T A x − 2 b T A x + b T b \begin{aligned}
J(\mathbf{x}) &= (A\mathbf{x} - \mathbf{b})^T (A\mathbf{x} - \mathbf{b}) \\
&= \mathbf{x}^T A^T A \mathbf{x} - 2 \mathbf{b}^T A \mathbf{x} + \mathbf{b}^T \mathbf{b}
\end{aligned} J ( x ) = ( A x − b ) T ( A x − b ) = x T A T A x − 2 b T A x + b T b
この式を x \mathbf{x} x で微分し、0 と置きます。
第1項 : x T ( A T A ) x \mathbf{x}^T (A^T A) \mathbf{x} x T ( A T A ) x は二次形式です。A T A A^T A A T A は対称行列なので、Eq. 81 より、微分は 2 ( A T A ) x 2 (A^T A) \mathbf{x} 2 ( A T A ) x となります。
第2項 : − 2 ( A T b ) T x -2 (A^T \mathbf{b})^T \mathbf{x} − 2 ( A T b ) T x は一次形式です。Page 10 の Eq. 69 より、微分は − 2 A T b -2 A^T \mathbf{b} − 2 A T b となります。
これらを合わせると、
∇ J = 2 A T A x − 2 A T b = 0 \nabla J = 2 A^T A \mathbf{x} - 2 A^T \mathbf{b} = 0 ∇ J = 2 A T A x − 2 A T b = 0
すなわち、
A T A x = A T b A^T A \mathbf{x} = A^T \mathbf{b} A T A x = A T b
という「正規方程式(Normal Equation)」が導かれます。教科書では成分計算で長く記述されるこの導出も、行列微分を使えば瞬殺です。
応用例2:リアプノフ関数の安定性解析(二次形式微分の応用)#
制御工学において、システムの安定性を判別する「リアプノフ関数」の解析には、二次形式の微分が不可欠です。
【問題設定】
線形システム x ˙ = A x \dot{\mathbf{x}} = A \mathbf{x} x ˙ = A x の安定性を考えます。
候補となるリアプノフ関数を V ( x ) = x T P x V(\mathbf{x}) = \mathbf{x}^T P \mathbf{x} V ( x ) = x T P x (P P P は正定値対称行列)とします。この関数の時間微分 V ˙ ( x ) \dot{V}(\mathbf{x}) V ˙ ( x ) が負定値であれば、システムは安定です。
【解析】
V ˙ ( x ) \dot{V}(\mathbf{x}) V ˙ ( x ) を計算するために、合成関数の微分(連鎖律)を使います。
V ˙ ( x ) = ∂ V ∂ x ⋅ d x d t \dot{V}(\mathbf{x}) = \frac{\partial V}{\partial \mathbf{x}} \cdot \frac{d\mathbf{x}}{dt} V ˙ ( x ) = ∂ x ∂ V ⋅ d t d x
ここで Eq. 81 より、∂ V ∂ x = 2 x T P \frac{\partial V}{\partial \mathbf{x}} = 2 \mathbf{x}^T P ∂ x ∂ V = 2 x T P (勾配を行ベクトルとするレイアウトの場合)となります。これを代入すると、
V ˙ ( x ) = ( 2 x T P ) ( A x ) = x T ( P A ) x + x T ( P A ) x ( スカラーなので転置しても同じ ) = x T P A x + x T A T P x = x T ( P A + A T P ) x \begin{aligned}
\dot{V}(\mathbf{x}) &= (2 \mathbf{x}^T P) (A \mathbf{x}) \\
&= \mathbf{x}^T (P A) \mathbf{x} + \mathbf{x}^T (P A) \mathbf{x} \quad (\text{スカラーなので転置しても同じ}) \\
&= \mathbf{x}^T P A \mathbf{x} + \mathbf{x}^T A^T P \mathbf{x} \\
&= \mathbf{x}^T (P A + A^T P) \mathbf{x}
\end{aligned} V ˙ ( x ) = ( 2 x T P ) ( A x ) = x T ( P A ) x + x T ( P A ) x ( スカラーなので転置しても同じ ) = x T P A x + x T A T P x = x T ( P A + A T P ) x
この結果、「P A + A T P = − Q P A + A^T P = -Q P A + A T P = − Q (Q Q Q は正定値)を満たす P P P が存在するか?」という有名な「リアプノフ方程式」の問題に帰着されます。この導出プロセスは、非線形制御やロバスト制御の基礎となります。
応用例3:適応フィルタのLMSアルゴリズム(複素微分の応用)#
通信システム(ノイズキャンセリングやビームフォーミング)で使われる「LMS(Least Mean Squares)アルゴリズム」の更新則は、Eq. 89(複素微分の公式) そのものです。
【問題設定】
複素入力信号 x \mathbf{x} x と重みベクトル w \mathbf{w} w による出力 y = w H x y = \mathbf{w}^H \mathbf{x} y = w H x が、目標信号 d d d に近づくように w \mathbf{w} w を適応させたいとします。
誤差 e = d − w H x e = d - \mathbf{w}^H \mathbf{x} e = d − w H x の二乗平均 J = E [ ∣ e ∣ 2 ] = E [ e e ∗ ] J = E[|e|^2] = E[e e^*] J = E [ ∣ e ∣ 2 ] = E [ e e ∗ ] を最小化します。
【解析】
確率的勾配降下法(SGD)を用いるため、瞬時二乗誤差 J i n s t = ∣ d − w H x ∣ 2 J_{inst} = |d - \mathbf{w}^H \mathbf{x}|^2 J in s t = ∣ d − w H x ∣ 2 の勾配 ∇ w J i n s t \nabla_{\mathbf{w}} J_{inst} ∇ w J in s t を求めます。
ここで a = d , b = x a=d, \mathbf{b}=\mathbf{x} a = d , b = x と見なせば、これはまさに Eq. 89 の形をしています。
公式 Eq. 89 ∂ ∂ w ( d − x H w ) 2 ∝ − x ( d − x H w ) ∗ \frac{\partial}{\partial \mathbf{w}} (d - \mathbf{x}^H \mathbf{w})^2 \propto -\mathbf{x} (d - \mathbf{x}^H \mathbf{w})^* ∂ w ∂ ( d − x H w ) 2 ∝ − x ( d − x H w ) ∗ を適用すると(変数の対応に注意)、
∇ w J i n s t = − 2 x e ∗ \nabla_{\mathbf{w}} J_{inst} = -2 \mathbf{x} e^* ∇ w J in s t = − 2 x e ∗
が得られます。これより、重みの更新則は
w n e w = w o l d − μ ∇ J = w o l d + 2 μ e ∗ x \mathbf{w}_{new} = \mathbf{w}_{old} - \mu \nabla J = \mathbf{w}_{old} + 2 \mu e^* \mathbf{x} w n e w = w o l d − μ ∇ J = w o l d + 2 μ e ∗ x
となります。このシンプルかつ強力なアルゴリズムは、スマートフォンの通話品質改善からレーダーの信号処理まで、世界中のあらゆる信号処理デバイスの中で動いています。
参考文献#
Petersen, K. B., & Pedersen, M. S. (2012). The Matrix Cookbook . Technical University of Denmark. (Page 11, Eqs 76-91)
Bishop, C. M. (2006). Pattern Recognition and Machine Learning . Springer. (Least Squares & Derivatives)
Haykin, S. (2002). Adaptive Filter Theory . Prentice Hall. (LMS Algorithm & Complex Derivatives)
補足:Eq.76〜88 完全スカラー翻訳リスト#
行列微分の公式は、「とりあえず全部スカラー(数値)だと思って微分し、最後に次元を合わせる(転置や順序の調整)」 という手順で理解すると、記憶の定着率が段違いに良くなります。
ここでは Page 11 に登場するすべての公式について、その「翻訳」を掲載します。
【基本操作】成分の総和 (Eq. 76)#
公式 : ∂ ∂ X i j ∑ k l m n X k l X m n = 2 ∑ k l X k l \frac{\partial}{\partial X_{ij}} \sum_{klmn} X_{kl} X_{mn} = 2 \sum_{kl} X_{kl} ∂ X ij ∂ ∑ k l mn X k l X mn = 2 ∑ k l X k l
スカラー翻訳 : ( ∑ x ) 2 (\sum x)^2 ( ∑ x ) 2 の x x x による微分
思考 : 全成分の和を S = ∑ x S = \sum x S = ∑ x と置くと、式は S 2 S^2 S 2 です。
微分 : d d x S 2 = 2 S ⋅ d S d x = 2 S ⋅ 1 = 2 ∑ x \frac{d}{dx} S^2 = 2S \cdot \frac{dS}{dx} = 2S \cdot 1 = 2 \sum x d x d S 2 = 2 S ⋅ d x d S = 2 S ⋅ 1 = 2 ∑ x
行列の事情 :
X i j X_{ij} X ij は S S S の構成要素の一つなので、連鎖律で 1 1 1 が出てきます。結果は「総和の2倍」です。
【行列二次形式】基本形 (Eq. 77)#
公式 : ∂ b T X T X c ∂ X = X ( b c T + c b T ) \frac{\partial \mathbf{b}^T X^T X \mathbf{c}}{\partial X} = X (\mathbf{b}\mathbf{c}^T + \mathbf{c}\mathbf{b}^T) ∂ X ∂ b T X T X c = X ( b c T + c b T )
スカラー翻訳 : b ⋅ x ⋅ x ⋅ c b \cdot x \cdot x \cdot c b ⋅ x ⋅ x ⋅ c の微分
思考 : y = b c x 2 y = bc x^2 y = b c x 2 です。
微分 : y ′ = 2 b c x = x ( b c + c b ) y' = 2bc x = x (bc + cb) y ′ = 2 b c x = x ( b c + c b )
行列の事情 :
スカラーなら 2 b c 2bc 2 b c ですが、ベクトル b , c \mathbf{b}, \mathbf{c} b , c は非可換なので勝手にまとめられません。
積の微分により b c T \mathbf{b}\mathbf{c}^T b c T と c b T \mathbf{c}\mathbf{b}^T c b T という2つの項(直積)が出てきます。これらを足し合わせたものがスカラーの 2 b c 2bc 2 b c に相当します。
【ベクトル積】双一次形式 (Eq. 78)#
公式 : ∂ ( B x + b ) T C ( D x + d ) ∂ x = B T C ( D x + d ) + D T C T ( B x + b ) \frac{\partial (B\mathbf{x}+\mathbf{b})^T C (D\mathbf{x}+\mathbf{d})}{\partial \mathbf{x}} = B^T C (D\mathbf{x}+\mathbf{d}) + D^T C^T (B\mathbf{x}+\mathbf{b}) ∂ x ∂ ( B x + b ) T C ( D x + d ) = B T C ( D x + d ) + D T C T ( B x + b )
スカラー翻訳 : ( b x + b 0 ) c ( d x + d 0 ) (bx+b_0) c (dx+d_0) ( b x + b 0 ) c ( d x + d 0 ) の微分
思考 : u = b x + b 0 , v = d x + d 0 u = bx+b_0, v = dx+d_0 u = b x + b 0 , v = d x + d 0 とした積 u c v u c v u c v の微分です。
微分 : u ′ c v + u c v ′ = b c ( d x + d 0 ) + ( b x + b 0 ) c d u' c v + u c v' = b c (dx+d_0) + (bx+b_0) c d u ′ c v + u c v ′ = b c ( d x + d 0 ) + ( b x + b 0 ) c d
行列の事情 :
第1項: b b b に相当する B T B^T B T が前に出ます。
第2項: d d d に相当する D T D^T D T が前に出ます。また、行列全体の転置 C T C^T C T が現れます。
構造は「積の微分(前を微分+後ろを微分)」そのものです。
【成分計算】成分ごとの微分 (Eq. 79)#
公式 : ∂ ( X T B X ) k l ∂ X i j = δ l j ( X T B ) k i + δ k j ( B X ) i l \frac{\partial (X^T B X)_{kl}}{\partial X_{ij}} = \delta_{lj} (X^T B)_{ki} + \delta_{kj} (BX)_{il} ∂ X ij ∂ ( X T BX ) k l = δ l j ( X T B ) ki + δ kj ( BX ) i l
スカラー翻訳 : x b x x b x x b x の微分
思考 : y = b x 2 y = b x^2 y = b x 2 の微分です。
微分 : b ⋅ x + x ⋅ b b \cdot x + x \cdot b b ⋅ x + x ⋅ b (x x x が2つあるので、それぞれを微分した項の和)
行列の事情 :
第1項: 「後ろの X X X 」を残して「前の X X X 」を微分した結果。
第2項: 「前の X X X 」を残して「後ろの X X X 」を微分した結果。
クロネッカーのデルタ δ \delta δ は、成分計算における「微分したら 1、それ以外 0」を表しています。
【ベクトル二次形式】標準形 (Eq. 81)#
公式 : ∂ x T B x ∂ x = ( B + B T ) x \frac{\partial \mathbf{x}^T B \mathbf{x}}{\partial \mathbf{x}} = (B + B^T) \mathbf{x} ∂ x ∂ x T B x = ( B + B T ) x
スカラー翻訳 : b x 2 b x^2 b x 2 の微分
行列の事情 :
行列 B B B が対称 (B = B T B=B^T B = B T ) なら 2 B x 2B\mathbf{x} 2 B x となり、スカラーと完全に一致します。
非対称なら B B B と B T B^T B T の和になります。
【行列二次形式】一般形 (Eq. 82)#
公式 : ∂ b T X T D X c ∂ X = D T X b c T + D X c b T \frac{\partial \mathbf{b}^T X^T D X \mathbf{c}}{\partial X} = D^T X \mathbf{b}\mathbf{c}^T + D X \mathbf{c}\mathbf{b}^T ∂ X ∂ b T X T D X c = D T X b c T + D X c b T
スカラー翻訳 : b ⋅ x ⋅ d ⋅ x ⋅ c b \cdot x \cdot d \cdot x \cdot c b ⋅ x ⋅ d ⋅ x ⋅ c の微分
思考 : y = b c d x 2 y = b c d x^2 y = b c d x 2 です。
微分 : 2 b c d x = d x ( b c ) + d x ( c b ) 2 b c d x = d x (bc) + d x (cb) 2 b c d x = d x ( b c ) + d x ( c b )
行列の事情 :
D D D と D T D^T D T がそれぞれの項に掛かります。
b c T \mathbf{b}\mathbf{c}^T b c T はベクトルの直積(行列)です。これも「係数」の一種と考えれば、構造は d x ⋅ ( 係数 ) dx \cdot (\text{係数}) d x ⋅ ( 係数 ) です。
【最小二乗法】残差二乗和の微分 (Eq. 83)#
公式 : ∂ ( X b + c ) T D ( X b + c ) ∂ X = ( D + D T ) ( X b + c ) b T \frac{\partial (X\mathbf{b}+\mathbf{c})^T D (X\mathbf{b}+\mathbf{c})}{\partial X} = (D + D^T) (X\mathbf{b}+\mathbf{c}) \mathbf{b}^T ∂ X ∂ ( X b + c ) T D ( X b + c ) = ( D + D T ) ( X b + c ) b T
スカラー翻訳 : d ( x b + c ) 2 d(xb+c)^2 d ( x b + c ) 2 の微分
思考 : 合成関数の微分です。
微分 : 2 d ( x b + c ) ⋅ b 2d(xb+c) \cdot b 2 d ( x b + c ) ⋅ b
行列の事情 :
2 d 2d 2 d → \to → ( D + D T ) (D+D^T) ( D + D T )
( x b + c ) (xb+c) ( x b + c ) → \to → ( X b + c ) (X\mathbf{b}+\mathbf{c}) ( X b + c )
最後の b b b → \to → b T \mathbf{b}^T b T (行列の形にするため後ろから転置で掛ける)
【一般化最小二乗法】 s s s での微分 (Eq. 84)#
公式 : ∂ ∂ s ( x − A s ) T W ( x − A s ) = − 2 A T W ( x − A s ) \frac{\partial}{\partial \mathbf{s}} (\mathbf{x} - A\mathbf{s})^T W (\mathbf{x} - A\mathbf{s}) = -2 A^T W (\mathbf{x} - A\mathbf{s}) ∂ s ∂ ( x − A s ) T W ( x − A s ) = − 2 A T W ( x − A s )
スカラー翻訳 : w ( x − a s ) 2 w(x - as)^2 w ( x − a s ) 2 の s s s による微分
微分 : w ⋅ 2 ( x − a s ) ⋅ ( − a ) = − 2 a w ( x − a s ) w \cdot 2(x - as) \cdot (-a) = -2aw(x - as) w ⋅ 2 ( x − a s ) ⋅ ( − a ) = − 2 a w ( x − a s )
行列の事情 :
係数 − a -a − a が、転置 A T A^T A T となって前に出ます。
【単純最小二乗法】 x x x での微分 (Eq. 85, 87)#
公式 : ∂ ∂ x ( x − s ) T W ( x − s ) = 2 W ( x − s ) \frac{\partial}{\partial \mathbf{x}} (\mathbf{x} - \mathbf{s})^T W (\mathbf{x} - \mathbf{s}) = 2 W (\mathbf{x} - \mathbf{s}) ∂ x ∂ ( x − s ) T W ( x − s ) = 2 W ( x − s )
※ Eq. 87 は中身が ( x − A s ) (\mathbf{x} - A\mathbf{s}) ( x − A s ) ですが構造は同じです。
スカラー翻訳 : w ( x − s ) 2 w(x - s)^2 w ( x − s ) 2 の x x x による微分
微分 : 2 w ( x − s ) 2w(x - s) 2 w ( x − s )
行列の事情 :
これは完全にスカラーと同じ形です。W W W が対称行列と仮定されているため、W + W T = 2 W W+W^T = 2W W + W T = 2 W となっています。
【単純最小二乗法】 s s s での微分 (Eq. 86)#
公式 : ∂ ∂ s ( x − s ) T W ( x − s ) = − 2 W ( x − s ) \frac{\partial}{\partial \mathbf{s}} (\mathbf{x} - \mathbf{s})^T W (\mathbf{x} - \mathbf{s}) = -2 W (\mathbf{x} - \mathbf{s}) ∂ s ∂ ( x − s ) T W ( x − s ) = − 2 W ( x − s )
スカラー翻訳 : w ( x − s ) 2 w(x - s)^2 w ( x − s ) 2 の s s s による微分
微分 : 2 w ( x − s ) ⋅ ( − 1 ) = − 2 w ( x − s ) 2w(x - s) \cdot (-1) = -2w(x - s) 2 w ( x − s ) ⋅ ( − 1 ) = − 2 w ( x − s )
行列の事情 :
これもスカラーと完全に同じです。合成関数の微分でマイナスが出るだけです。
【一般化最小二乗法】 行列 A A A での微分 (Eq. 88)#
公式 : ∂ ∂ A ( x − A s ) T W ( x − A s ) = − 2 W ( x − A s ) s T \frac{\partial}{\partial A} (\mathbf{x} - A\mathbf{s})^T W (\mathbf{x} - A\mathbf{s}) = -2 W (\mathbf{x} - A\mathbf{s}) \mathbf{s}^T ∂ A ∂ ( x − A s ) T W ( x − A s ) = − 2 W ( x − A s ) s T
スカラー翻訳 : w ( x − a s ) 2 w(x - as)^2 w ( x − a s ) 2 の a a a による微分
微分 : 2 w ( x − a s ) ⋅ ( − s ) = − 2 w s ( x − a s ) 2w(x - as) \cdot (-s) = -2ws(x - as) 2 w ( x − a s ) ⋅ ( − s ) = − 2 w s ( x − a s )
行列の事情 :
係数 − s -s − s が掛かる位置に注目してください。行列演算の整合性を保つため、ベクトル s \mathbf{s} s は転置 s T \mathbf{s}^T s T されて一番後ろ に掛かります。
これにより ( m × 1 ) × ( 1 × n ) = m × n (m \times 1) \times (1 \times n) = m \times n ( m × 1 ) × ( 1 × n ) = m × n 行列(A A A と同じサイズ)が生成されます。
ここまでのまとめ:行列微分の「型」#
Eq. 76〜88 を通して見えてくるのは、以下のシンプルなルールです。
二乗 (x 2 x^2 x 2 ) の微分は 2 x 2x 2 x になる。
行列なら x T A x → 2 A x x^T A x \to 2Ax x T A x → 2 A x (または ( A + A T ) x (A+A^T)x ( A + A T ) x )。
積 (u v uv uv ) の微分は u ′ v + u v ′ u'v + uv' u ′ v + u v ′ になる。
合成関数 (f ( a x ) f(ax) f ( a x ) ) の微分は中身の微分 (a a a ) が外に出る。
行列なら A T A^T A T が前に出るか、後ろに A T A^T A T がつく。
この「型」さえ認識できていれば、添字 i , j , k , l i, j, k, l i , j , k , l の海に溺れることなく、瞬時に式の正しさを検証できるようになります。
【複素微分】LMSアルゴリズム (Eq. 89)#
公式 : ∂ ( a − x H b ) 2 ∂ x = − 2 b ( a − x H b ) ∗ \frac{\partial (a - \mathbf{x}^H \mathbf{b})^2}{\partial \mathbf{x}} = -2 \mathbf{b} (a - \mathbf{x}^H \mathbf{b})^* ∂ x ∂ ( a − x H b ) 2 = − 2 b ( a − x H b ) ∗
※ 原典の指数 4 ^4 4 は明らかに誤植(共役 ∗ * ∗ の文字化け等)なので、一般的な共役として扱います。
スカラー翻訳 : ∣ a − x ˉ b ∣ 2 |a - \bar{x} b|^2 ∣ a − x ˉ b ∣ 2 の x x x による微分
思考 : 複素数の世界では、実数値関数 J = ∣ e ∣ 2 = e e ˉ J = |e|^2 = e \bar{e} J = ∣ e ∣ 2 = e e ˉ を x x x で微分する際、x x x と x ˉ \bar{x} x ˉ を独立変数として扱います(ヴィルティンガー微分)。
微分 : ∂ ∂ x ( e e ˉ ) = ∂ e ∂ x e ˉ + e ∂ e ˉ ∂ x \frac{\partial}{\partial x} (e \bar{e}) = \frac{\partial e}{\partial x} \bar{e} + e \frac{\partial \bar{e}}{\partial x} ∂ x ∂ ( e e ˉ ) = ∂ x ∂ e e ˉ + e ∂ x ∂ e ˉ
ここで e = a − x ˉ b e = a - \bar{x} b e = a − x ˉ b なので、∂ e ∂ x = 0 \frac{\partial e}{\partial x} = 0 ∂ x ∂ e = 0 、∂ e ˉ ∂ x = − b \frac{\partial \bar{e}}{\partial x} = -b ∂ x ∂ e ˉ = − b となります。
よって、結果は e ⋅ ( − b ) = − b ( a − x ˉ b ) e \cdot (-b) = -b (a - \bar{x} b) e ⋅ ( − b ) = − b ( a − x ˉ b ) です。
行列の事情 :
スカラーの計算結果 − b e -b e − b e に対して、ベクトルの世界では e e e がスカラーで b \mathbf{b} b がベクトルです。
LMSアルゴリズムなどの勾配方向としては、通常 e e e の複素共役をとった − 2 b e ∗ -2 \mathbf{b} e^* − 2 b e ∗ という形(またはその変種)が使われます。原典の式もこの構造を示しています。
【高次形式】行列のn乗の成分微分 (Eq. 90)#
公式 : ∂ ( X n ) k l ∂ X i j = ∑ r = 0 n − 1 ( X r J i j X n − 1 − r ) k l \frac{\partial (X^n)_{kl}}{\partial X_{ij}} = \sum_{r=0}^{n-1} (X^r J^{ij} X^{n-1-r})_{kl} ∂ X ij ∂ ( X n ) k l = ∑ r = 0 n − 1 ( X r J ij X n − 1 − r ) k l
スカラー翻訳 : x n x^n x n の微分
思考 : y = x n = x ⋅ x ⋯ x ⏟ n 個 y = x^n = \underbrace{x \cdot x \cdots x}_{n \text{ 個}} y = x n = n 個 x ⋅ x ⋯ x
微分 : 積の微分則を適用します。
y ′ = 1 ⋅ x n − 1 + x ⋅ 1 ⋅ x n − 2 + ⋯ + x n − 1 ⋅ 1 y' = \mathbf{1} \cdot x^{n-1} + x \cdot \mathbf{1} \cdot x^{n-2} + \cdots + x^{n-1} \cdot \mathbf{1} y ′ = 1 ⋅ x n − 1 + x ⋅ 1 ⋅ x n − 2 + ⋯ + x n − 1 ⋅ 1
項が n n n 個あるので、足し合わせると n x n − 1 n x^{n-1} n x n − 1 になります。
行列の事情 :
スカラーなら x x x を自由に交換してまとめられますが、行列は非可換(掛け算の順序を変えられない)です。
そのため、「r r r 番目の X X X を微分した」という履歴を残すために、X r ( 微分 ) X n − 1 − r X^r (\text{微分}) X^{n-1-r} X r ( 微分 ) X n − 1 − r という項をそのまま並べて足すしかありません。
結果として、「n n n 個の項の和」という構造はスカラーと同じですが、項を統合できないため ∑ \sum ∑ の形で残ります。
【高次形式】高次双線形形式 (Eq. 91)#
公式 : ∂ a T X n b ∂ X = ∑ r = 0 n − 1 ( X r ) T a b T ( X n − 1 − r ) T \frac{\partial \mathbf{a}^T X^n \mathbf{b}}{\partial X} = \sum_{r=0}^{n-1} (X^r)^T \mathbf{a} \mathbf{b}^T (X^{n-1-r})^T ∂ X ∂ a T X n b = ∑ r = 0 n − 1 ( X r ) T a b T ( X n − 1 − r ) T
スカラー翻訳 : a ⋅ x n ⋅ b a \cdot x^n \cdot b a ⋅ x n ⋅ b の微分
思考 : y = a b x n y = ab x^n y = ab x n
微分 : y ′ = a b ⋅ n x n − 1 = ∑ r = 0 n − 1 a b x n − 1 y' = ab \cdot n x^{n-1} = \sum_{r=0}^{n-1} a b x^{n-1} y ′ = ab ⋅ n x n − 1 = ∑ r = 0 n − 1 ab x n − 1
行列の事情 :
これも Eq. 90 と同じ論理です。X n X^n X n の微分が n n n 個の項の和になるため、全体も n n n 個の項の和になります。
各項において、係数ベクトル a , b \mathbf{a}, \mathbf{b} a , b が真ん中に挟まります(スカラーでいう a b ab ab の部分)。
行列の形に合わせるため、a b T \mathbf{a}\mathbf{b}^T a b T (直積)となり、さらに左右の X X X に転置 T ^T T がかかります。
構造 : ∑ ( 左のX ) T ⋅ ( 係数 ) ⋅ ( 右のX ) T \sum (\text{左のX})^T \cdot (\text{係数}) \cdot (\text{右のX})^T ∑ ( 左の X ) T ⋅ ( 係数 ) ⋅ ( 右の X ) T
まとめ#
これで Page 11 の全公式の翻訳が完了しました。
どんなに複雑な行列微分も、結局は以下の3パターンに帰着することがお分かりいただけたかと思います。
係数 2 が出る ← \leftarrow ← x 2 x^2 x 2 の微分だから
項が 2 つ出る ← \leftarrow ← 積 x y xy x y の微分だから
項が n n n 個出る ← \leftarrow ← x n x^n x n の微分だから
この「スカラー感覚」を持った上で、転置の位置だけ気をつけるようにすれば、行列微分はもう怖くありません。