last_modified: 2026-01-10
生成AIによる自動生成記事に関する免責事項 :
本記事は、Petersen & Pedersen著 The Matrix Cookbook (Nov 15, 2012 edition) のPage 14の内容(公式124〜133)を骨子とし、数理的な証明と応用例を大幅に加筆して再構成した解説記事です。
1. 序論:幾何学と構造へのアプローチ#
Page 14 では、行列微分の応用範囲をさらに広げる3つのトピックを扱います。
逆行列の複雑なトレース微分 : 統計学(特に最尤推定)で現れる「逆行列」と「二次形式」が混ざった複雑な関数の微分です。
ベクトルノルムの微分 : 距離 ∥ x ∥ \|\mathbf{x}\| ∥ x ∥ や正規化ベクトル x / ∥ x ∥ \mathbf{x}/\|\mathbf{x}\| x /∥ x ∥ の微分。これらは物理シミュレーション(バネの力など)や幾何学的最適化で不可欠です。
構造化行列の微分 : 「対称行列」や「テープリッツ行列」など、成分同士が独立でない行列を微分するための一般則(連鎖律)を導入します。
2. 逆行列を含むトレース微分 (Eq. 124–128)#
Page 10 で扱った逆行列微分の応用編です。より複雑な、入れ子になった逆行列構造を扱います。
2.1 基本的な逆行列サンドイッチ (Eq. 124)#
【公式】
∂ ∂ X Tr ( A X − 1 B ) = − ( X − 1 B A X − 1 ) T = − X − T A T B T X − T (124) \frac{\partial}{\partial X} \text{Tr}(A X^{-1} B) = -(X^{-1} B A X^{-1})^T = -X^{-T} A^T B^T X^{-T} \tag{124} ∂ X ∂ Tr ( A X − 1 B ) = − ( X − 1 B A X − 1 ) T = − X − T A T B T X − T ( 124 )
【解説】
これは Page 10 Eq. 63 の再掲(あるいは変形)です。
d ( X − 1 ) = − X − 1 ( d X ) X − 1 d(X^{-1}) = -X^{-1} (dX) X^{-1} d ( X − 1 ) = − X − 1 ( d X ) X − 1 を代入し、トレースの巡回性を使うことで導かれます。
「逆行列の微分はマイナスがつき、両側から逆行列で挟まれる(1 / x → − 1 / x 2 1/x \to -1/x^2 1/ x → − 1/ x 2 )」という基本ルール通りです。
2.2 一般化二次形式の逆行列 (Eq. 125–127)#
統計学における一般化最小二乗法(GLS)などで現れる形式です。ここでは B , C B, C B , C は対称行列と仮定されています。
【公式一覧】
∂ ∂ X Tr [ ( X T C X ) − 1 A ] = − ( C X ( X T C X ) − 1 ) ( A + A T ) ( X T C X ) − 1 (125) \frac{\partial}{\partial X} \text{Tr}[(X^T C X)^{-1} A] = -(C X (X^T C X)^{-1}) (A + A^T) (X^T C X)^{-1} \tag{125} ∂ X ∂ Tr [( X T CX ) − 1 A ] = − ( CX ( X T CX ) − 1 ) ( A + A T ) ( X T CX ) − 1 ( 125 )
∂ ∂ X Tr [ ( X T C X ) − 1 ( X T B X ) ] = − 2 C X ( X T C X ) − 1 X T B X ( X T C X ) − 1 + 2 B X ( X T C X ) − 1 (126) \frac{\partial}{\partial X} \text{Tr}[(X^T C X)^{-1} (X^T B X)] = -2 C X (X^T C X)^{-1} X^T B X (X^T C X)^{-1} + 2 B X (X^T C X)^{-1} \tag{126} ∂ X ∂ Tr [( X T CX ) − 1 ( X T BX )] = − 2 CX ( X T CX ) − 1 X T BX ( X T CX ) − 1 + 2 BX ( X T CX ) − 1 ( 126 )
※ Eq. 127 は Eq. 126 の分母に定数行列 A A A が加わっただけの形式(( A + X T C X ) − 1 (A + X^T C X)^{-1} ( A + X T CX ) − 1 )であり、構造は Eq. 126 と同一のため省略します。
【Eq. 125 の導出ステップ】
Y = X T C X Y = X^T C X Y = X T CX と置きます。求めたいのは Tr ( Y − 1 A ) \text{Tr}(Y^{-1} A) Tr ( Y − 1 A ) の微分です。
合成関数の微分 :
d Tr ( Y − 1 A ) = Tr ( A d ( Y − 1 ) ) = Tr ( A ( − Y − 1 d Y Y − 1 ) ) = − Tr ( Y − 1 A Y − 1 d Y ) d \text{Tr}(Y^{-1} A) = \text{Tr}(A d(Y^{-1})) = \text{Tr}(A (-Y^{-1} dY Y^{-1})) = -\text{Tr}(Y^{-1} A Y^{-1} dY) d Tr ( Y − 1 A ) = Tr ( A d ( Y − 1 )) = Tr ( A ( − Y − 1 d Y Y − 1 )) = − Tr ( Y − 1 A Y − 1 d Y )
中身の微分 :
d Y = d ( X T C X ) dY = d(X^T C X) d Y = d ( X T CX ) です。C C C は対称なので、Eq. 108 より、この微分(に対応する項)は 2 C X 2CX 2 CX の形になります。
統合 :
これらを組み合わせると、逆行列 Y − 1 = ( X T C X ) − 1 Y^{-1} = (X^T C X)^{-1} Y − 1 = ( X T CX ) − 1 が両側から掛かり、さらに A A A の非対称性を考慮して A + A T A+A^T A + A T が現れます。
2.3 行列関数のトレース (Eq. 128)#
【公式】
∂ Tr ( sin ( X ) ) ∂ X = cos ( X ) T (128) \frac{\partial \text{Tr}(\sin(X))}{\partial X} = \cos(X)^T \tag{128} ∂ X ∂ Tr ( sin ( X )) = cos ( X ) T ( 128 )
【解説】
これは Page 12 Eq. 100 付近の「スカラー関数の拡張則」の具体例です。
行列の各成分に関数を適用する(Element-wise)場合、あるいは行列関数(テイラー展開で定義される)の場合、Tr ( F ( X ) ) \text{Tr}(F(X)) Tr ( F ( X )) の微分は f ( X ) T f(X)^T f ( X ) T (f f f は F F F の導関数)となります。
( sin x ) ′ = cos x (\sin x)' = \cos x ( sin x ) ′ = cos x なので、そのまま cos ( X ) T \cos(X)^T cos ( X ) T となります。
3. ベクトルノルムの微分 (Derivatives of Vector Norms)#
ここは物理シミュレーションや幾何計算において最も実用的なセクション です。ユークリッドノルム(L2ノルム) ∥ x ∥ 2 = x T x \|\mathbf{x}\|_2 = \sqrt{\mathbf{x}^T \mathbf{x}} ∥ x ∥ 2 = x T x を扱います。
3.1 距離の勾配 (Eq. 129)#
【公式】
∂ ∂ x ∥ x − a ∥ 2 = x − a ∥ x − a ∥ 2 (129) \frac{\partial}{\partial \mathbf{x}} \|\mathbf{x} - \mathbf{a}\|_2 = \frac{\mathbf{x} - \mathbf{a}}{\|\mathbf{x} - \mathbf{a}\|_2} \tag{129} ∂ x ∂ ∥ x − a ∥ 2 = ∥ x − a ∥ 2 x − a ( 129 )
【解説】
スカラーの微分 ( ∣ x ∣ ) ′ = sgn ( x ) = x / ∣ x ∣ (|x|)' = \text{sgn}(x) = x/|x| ( ∣ x ∣ ) ′ = sgn ( x ) = x /∣ x ∣ のベクトル版です。
あるいは、∇ u = 1 2 u ∇ u \nabla \sqrt{u} = \frac{1}{2\sqrt{u}} \nabla u ∇ u = 2 u 1 ∇ u と考えます。
u = ∥ x − a ∥ 2 u = \|\mathbf{x}-\mathbf{a}\|^2 u = ∥ x − a ∥ 2 と置くと、∇ u = 2 ( x − a ) \nabla u = 2(\mathbf{x}-\mathbf{a}) ∇ u = 2 ( x − a ) なので、
1 2 ∥ x − a ∥ ⋅ 2 ( x − a ) = x − a ∥ x − a ∥ \frac{1}{2\|\mathbf{x}-\mathbf{a}\|} \cdot 2(\mathbf{x}-\mathbf{a}) = \frac{\mathbf{x}-\mathbf{a}}{\|\mathbf{x}-\mathbf{a}\|} 2∥ x − a ∥ 1 ⋅ 2 ( x − a ) = ∥ x − a ∥ x − a
これは、a \mathbf{a} a から x \mathbf{x} x への**単位ベクトル(方向ベクトル)**を表します。物理的には「バネの復元力の方向」そのものです。
3.2 正規化ベクトルのヤコビアン (Eq. 130)#
【公式】
∂ ∂ x ( x − a ∥ x − a ∥ 2 ) = I ∥ x − a ∥ 2 − ( x − a ) ( x − a ) T ∥ x − a ∥ 2 3 (130) \frac{\partial}{\partial \mathbf{x}} \left( \frac{\mathbf{x} - \mathbf{a}}{\|\mathbf{x} - \mathbf{a}\|_2} \right) = \frac{I}{\|\mathbf{x} - \mathbf{a}\|_2} - \frac{(\mathbf{x} - \mathbf{a})(\mathbf{x} - \mathbf{a})^T}{\|\mathbf{x} - \mathbf{a}\|_2^3} \tag{130} ∂ x ∂ ( ∥ x − a ∥ 2 x − a ) = ∥ x − a ∥ 2 I − ∥ x − a ∥ 2 3 ( x − a ) ( x − a ) T ( 130 )
【解説:射影行列としての意味】
これはベクトル値関数 f ( x ) = x ∥ x ∥ \mathbf{f}(\mathbf{x}) = \frac{\mathbf{x}}{\|\mathbf{x}\|} f ( x ) = ∥ x ∥ x (簡単のため a = 0 \mathbf{a}=\mathbf{0} a = 0 )の微分(ヤコビ行列)です。
商の微分則をベクトルに適用して導出されます。
この式を整理すると、以下のようになります。
1 ∥ x ∥ ( I − x x T ∥ x ∥ 2 ) \frac{1}{\|\mathbf{x}\|} \left( I - \frac{\mathbf{x}\mathbf{x}^T}{\|\mathbf{x}\|^2} \right) ∥ x ∥ 1 ( I − ∥ x ∥ 2 x x T )
括弧の中身 P = I − n n T P = I - \mathbf{n}\mathbf{n}^T P = I − n n T (n \mathbf{n} n は単位ベクトル)は、「ベクトル x \mathbf{x} x に垂直な空間への射影行列」 です。
正規化されたベクトルは、長さが変わらず方向だけが変わるため、その変化率は必ず元のベクトルと直交します。この式はその幾何学的性質を見事に表しています。
3.3 ノルム二乗の勾配 (Eq. 131, 132)#
【公式】
∂ ∥ x ∥ 2 2 ∂ x = 2 x (131) \frac{\partial \|\mathbf{x}\|_2^2}{\partial \mathbf{x}} = 2\mathbf{x} \tag{131} ∂ x ∂ ∥ x ∥ 2 2 = 2 x ( 131 )
∂ ∥ X ∥ F 2 ∂ X = 2 X (132) \frac{\partial \|\mathbf{X}\|_F^2}{\partial X} = 2X \tag{132} ∂ X ∂ ∥ X ∥ F 2 = 2 X ( 132 )
【解説】
これらは x 2 x^2 x 2 の微分が 2 x 2x 2 x であることのベクトル版・行列版です。
Eq. 132 は Page 13 Eq. 115 の再掲です。フロベニウスノルムの二乗は Tr ( X X T ) \text{Tr}(X X^T) Tr ( X X T ) なので、微分は 2 X 2X 2 X となります。
4. 構造化行列の微分 (Structured Matrices)#
Eq. 133 は、これまでの公式が通用しないケースに対する「最後の砦」です。
4.1 なぜ構造化行列で公式が壊れるのか?#
これまでの公式(例:Tr ( A X ) \text{Tr}(AX) Tr ( A X ) の微分は A T A^T A T )は、行列 X X X の全成分 X i j X_{ij} X ij が互いに独立 であることを前提としています。
しかし、X X X が対称行列 (X i j = X j i X_{ij} = X_{ji} X ij = X ji )である場合、X i j X_{ij} X ij を動かすと自動的に X j i X_{ji} X ji も動いてしまいます。この「従属関係」を考慮しないと、微分結果は誤りになります(例えば、対角成分以外の感度が2倍になるなど)。
4.2 連鎖律による一般化 (Eq. 133)#
【公式】
d f d A i j = ∑ k l ∂ f ∂ A k l ∂ A k l ∂ A i j = Tr [ ( ∂ f ∂ A ) T ∂ A ∂ A i j ] (133) \frac{df}{dA_{ij}} = \sum_{kl} \frac{\partial f}{\partial A_{kl}} \frac{\partial A_{kl}}{\partial A_{ij}} = \text{Tr} \left[ \left( \frac{\partial f}{\partial A} \right)^T \frac{\partial A}{\partial A_{ij}} \right] \tag{133} d A ij df = k l ∑ ∂ A k l ∂ f ∂ A ij ∂ A k l = Tr [ ( ∂ A ∂ f ) T ∂ A ij ∂ A ] ( 133 )
【解説】
これは、スカラー関数の微分の連鎖律を成分レベルで記述したものです。
∂ f ∂ A k l \frac{\partial f}{\partial A_{kl}} ∂ A k l ∂ f : 構造を無視して計算した「仮の勾配」(これまでのページの公式で求めたもの)。
∂ A k l ∂ A i j \frac{\partial A_{kl}}{\partial A_{ij}} ∂ A ij ∂ A k l : 構造による拘束条件を表す項。
例えば A A A が対称行列なら、k l = i j kl=ij k l = ij または k l = j i kl=ji k l = ji のとき 1、それ以外 0 となります。
【実践的対処法】
対称行列などの構造化行列を微分する場合、実務的には以下の手順がよく使われます。
とりあえず構造を無視して微分する(行列微分公式を使う)。
得られた勾配行列 G G G を、その構造に合わせて射影・対称化する。
対称行列の場合: 正しい勾配は G s y m = G + G T − diag ( G ) G_{sym} = G + G^T - \text{diag}(G) G sy m = G + G T − diag ( G ) のような補正が必要になります(定義によるが、単純に G + G T G+G^T G + G T とする場合もあるため注意が必要)。Eq. 133 はこの補正を厳密に行うための基礎式です。
5. 結論#
Page 14 は、行列微分を「現実の問題」に適用するためのツールボックスです。
ベクトルノルム (Eq. 129, 130) : 力学シミュレーション(粒子間の距離計算)や最適化(勾配の正規化)の実装においてよく使う公式です。
射影行列 (Eq. 130) : I − n n T I - \mathbf{n}\mathbf{n}^T I − n n T という形を見たら、「直交空間への射影だ」と直感できるようになりましょう。
構造化行列 (Eq. 133) : 「対称行列を微分したら計算が合わない」という初心者が陥りやすい罠に対する、理論的な解決策を提供しています。
参考文献#
Petersen, K. B., & Pedersen, M. S. (2012). The Matrix Cookbook . Technical University of Denmark. (Page 14, Eqs 124-133)
Boyd, S., & Vandenberghe, L. (2004). Convex Optimization . Cambridge University Press. (Norms and Derivatives)
Horn, R. A., & Johnson, C. R. (2012). Matrix Analysis . Cambridge University Press. (Structured Matrices)
補足:Page 14 の公式を「スカラー(数値)」で直感的に理解する#
ここでも、スカラーへの翻訳が理解の助けになります。
1. 逆行列のトレース (Eq. 124)#
公式 : ∂ ∂ X Tr ( A X − 1 B ) \frac{\partial}{\partial X} \text{Tr}(A X^{-1} B) ∂ X ∂ Tr ( A X − 1 B )
スカラー翻訳 : a b x \frac{ab}{x} x ab の微分
微分 : − a b x 2 = − 1 x ⋅ b ⋅ a ⋅ 1 x -\frac{ab}{x^2} = - \frac{1}{x} \cdot b \cdot a \cdot \frac{1}{x} − x 2 ab = − x 1 ⋅ b ⋅ a ⋅ x 1
行列の事情 :
− X − T A T B T X − T -X^{-T} A^T B^T X^{-T} − X − T A T B T X − T は − ( X − 1 B A X − 1 ) T -(X^{-1} B A X^{-1})^T − ( X − 1 B A X − 1 ) T です。
マイナス符号と「2つの逆行列で挟む」という構造はスカラーと同じです。
2. 距離の微分 (Eq. 129)#
公式 : ∂ ∂ x ∥ x − a ∥ 2 \frac{\partial}{\partial \mathbf{x}} \|\mathbf{x} - \mathbf{a}\|_2 ∂ x ∂ ∥ x − a ∥ 2
スカラー翻訳 : ∣ x − a ∣ |x-a| ∣ x − a ∣ の微分
微分 : sgn ( x − a ) = x − a ∣ x − a ∣ \text{sgn}(x-a) = \frac{x-a}{|x-a|} sgn ( x − a ) = ∣ x − a ∣ x − a
行列の事情 :
x − a ∥ x − a ∥ 2 \frac{\mathbf{x}-\mathbf{a}}{\|\mathbf{x}-\mathbf{a}\|_2} ∥ x − a ∥ 2 x − a 。これは単位ベクトルであり、符号関数のベクトル版と解釈できます。
3. 正規化の微分 (Eq. 130)#
公式 : ∂ ∂ x ( x ∥ x ∥ ) \frac{\partial}{\partial \mathbf{x}} \left( \frac{\mathbf{x}}{\|\mathbf{x}\|} \right) ∂ x ∂ ( ∥ x ∥ x )
スカラー翻訳 : x ∣ x ∣ \frac{x}{|x|} ∣ x ∣ x の微分
思考 : スカラーの場合、x / ∣ x ∣ x/|x| x /∣ x ∣ は定数(1 または -1)なので、微分は 0 です。
行列の事情 :
公式の結果は 1 ∥ x ∥ ( I − n n T ) \frac{1}{\|\mathbf{x}\|} (I - \mathbf{n}\mathbf{n}^T) ∥ x ∥ 1 ( I − n n T ) です。
1次元の場合、n n T \mathbf{n}\mathbf{n}^T n n T は 1 × 1 = 1 1 \times 1 = 1 1 × 1 = 1 になり、I = 1 I=1 I = 1 なので、1 − 1 = 0 1-1=0 1 − 1 = 0 。
なんと、スカラーの直感(微分が0)と完全に一致します!
多次元では「0」ではなく、「半径方向の変化は0だが、回転方向の変化は残る」ため、このような射影行列になります。
Page 14 の公式は、幾何学的な意味(方向、直交性)を数式で表現した美しい例と言えます。
補足:Eq. 130 の幾何学的意味(射影行列と曲率)#
『The Matrix Cookbook』Eq. 130 は、正規化ベクトルの微分を記述する公式ですが、その数式の形には「射影」と「回転」という幾何学の本質が凝縮されています。
∂ ∂ x ( x ∥ x ∥ ) = 1 ∥ x ∥ ( I − x x T ∥ x ∥ 2 ) (130) \frac{\partial}{\partial \mathbf{x}} \left( \frac{\mathbf{x}}{\|\mathbf{x}\|} \right) = \frac{1}{\|\mathbf{x}\|} \left( I - \frac{\mathbf{x}\mathbf{x}^T}{\|\mathbf{x}\|^2} \right) \tag{130} ∂ x ∂ ( ∥ x ∥ x ) = ∥ x ∥ 1 ( I − ∥ x ∥ 2 x x T ) ( 130 )
この式が何を意味しているのか、数式を分解して解説します。
1. 数式の解剖:射影行列 P ⊥ P_{\perp} P ⊥ の出現#
まず、単位ベクトル n = x ∥ x ∥ \mathbf{n} = \frac{\mathbf{x}}{\|\mathbf{x}\|} n = ∥ x ∥ x を定義して式を整理します。
右辺の括弧内は以下のように書き換えられます。
I − x x T ∥ x ∥ 2 = I − ( x ∥ x ∥ ) ( x ∥ x ∥ ) T = I − n n T I - \frac{\mathbf{x}\mathbf{x}^T}{\|\mathbf{x}\|^2} = I - \left( \frac{\mathbf{x}}{\|\mathbf{x}\|} \right) \left( \frac{\mathbf{x}}{\|\mathbf{x}\|} \right)^T = I - \mathbf{n}\mathbf{n}^T I − ∥ x ∥ 2 x x T = I − ( ∥ x ∥ x ) ( ∥ x ∥ x ) T = I − n n T
これにより、ヤコビ行列 J J J は驚くほどシンプルな構造になります。
J = 1 ∥ x ∥ ⏟ スケーリング × ( I − n n T ) ⏟ 射影行列 P ⊥ J = \underbrace{\frac{1}{\|\mathbf{x}\|}}_{\text{スケーリング}} \times \underbrace{(I - \mathbf{n}\mathbf{n}^T)}_{\text{射影行列 } P_{\perp}} J = スケーリング ∥ x ∥ 1 × 射影行列 P ⊥ ( I − n n T )
ここで現れた行列 P ⊥ = I − n n T P_{\perp} = I - \mathbf{n}\mathbf{n}^T P ⊥ = I − n n T は、「ベクトル x \mathbf{x} x に垂直な空間への射影行列」 です。
2. なぜ「垂直な空間」への射影なのか?#
微分の意味を考えるために、入力 x \mathbf{x} x に微小な変化 d x d\mathbf{x} d x を加えたとき、正規化ベクトル n \mathbf{n} n がどう変化するかを見てみましょう。
d n = P ⊥ d x = ( I − n n T ) d x = d x − n ( n T d x ) d\mathbf{n} = P_{\perp} d\mathbf{x} = (I - \mathbf{n}\mathbf{n}^T) d\mathbf{x} = d\mathbf{x} - \mathbf{n}(\mathbf{n}^T d\mathbf{x}) d n = P ⊥ d x = ( I − n n T ) d x = d x − n ( n T d x )
入力の変化 d x d\mathbf{x} d x は、2つの成分に分解できます。
平行成分 (d x ∥ d\mathbf{x}_{\parallel} d x ∥ ) : x \mathbf{x} x の長さを変える変化(n \mathbf{n} n 方向)。
垂直成分 (d x ⊥ d\mathbf{x}_{\perp} d x ⊥ ) : x \mathbf{x} x の向きを変える変化(n \mathbf{n} n と直交)。
この射影行列 P ⊥ P_{\perp} P ⊥ は、以下のフィルタとして機能します。
平行成分 : n T d x ∥ ≠ 0 \mathbf{n}^T d\mathbf{x}_{\parallel} \neq 0 n T d x ∥ = 0 なので、d x ∥ − d x ∥ = 0 d\mathbf{x}_{\parallel} - d\mathbf{x}_{\parallel} = \mathbf{0} d x ∥ − d x ∥ = 0 。つまり、長さの変化は無視されます (正規化されるため)。
垂直成分 : n T d x ⊥ = 0 \mathbf{n}^T d\mathbf{x}_{\perp} = 0 n T d x ⊥ = 0 なので、d x ⊥ − 0 = d x ⊥ d\mathbf{x}_{\perp} - \mathbf{0} = d\mathbf{x}_{\perp} d x ⊥ − 0 = d x ⊥ 。つまり、向きの変化だけがそのまま残ります 。
3. 係数 1 / ∥ x ∥ 1/\|\mathbf{x}\| 1/∥ x ∥ の意味:曲率と半径#
式の先頭に掛かっている 1 ∥ x ∥ \frac{1}{\|\mathbf{x}\|} ∥ x ∥ 1 は、幾何学的には 「回転半径の逆数(曲率)」 を表しています。
円運動をイメージしてください。
半径 r = ∥ x ∥ r = \|\mathbf{x}\| r = ∥ x ∥ の円周上を、距離 d s = ∥ d x ⊥ ∥ ds = \|d\mathbf{x}_{\perp}\| d s = ∥ d x ⊥ ∥ だけ動いたとき、角度の変化 d θ d\theta d θ はどれくらいでしょうか?
関係式は d s = r d θ ds = r d\theta d s = r d θ なので、d θ = 1 r d s d\theta = \frac{1}{r} ds d θ = r 1 d s です。
正規化ベクトルの微分もこれと同じです。
∥ d n ∥ = 1 ∥ x ∥ ∥ d x ⊥ ∥ \|d\mathbf{n}\| = \frac{1}{\|\mathbf{x}\|} \|d\mathbf{x}_{\perp}\| ∥ d n ∥ = ∥ x ∥ 1 ∥ d x ⊥ ∥
∥ d x ⊥ ∥ \|d\mathbf{x}_{\perp}\| ∥ d x ⊥ ∥ : 横方向への移動距離
1 / ∥ x ∥ 1/\|\mathbf{x}\| 1/∥ x ∥ : 半径の逆数
∥ d n ∥ \|d\mathbf{n}\| ∥ d n ∥ : 単位球面上での移動量(角度変化)
つまり Eq. 130 は、「正規化ベクトルの変化率は、向きの変化成分だけを取り出し(P ⊥ P_{\perp} P ⊥ )、それを現在の半径で割って角度変化に変換する(1 / r 1/r 1/ r ) 」という物理的事実を記述しているのです。
まとめ#
Eq. 130 のヤコビ行列は、以下の2つの要素の積です。
幾何学的フィルタ (P ⊥ P_{\perp} P ⊥ ) : 長さの変化を捨て、向きの変化だけを残す。
幾何学的スケーリング (1 / ∥ x ∥ 1/\|\mathbf{x}\| 1/∥ x ∥ ) : 原点から遠いほど、同じ移動距離でも角度は変わりにくくなる。
この式は、勾配法において「重みベクトルの方向だけを最適化したい(Weight Normalization)」といった場面で、勾配がどのように補正されるかを理解する鍵となります。
解説:射影行列の一般化(I − n n T I - nn^T I − n n T から B行列へ)#
質問者様が提示された式 P = I − B T ( B B T ) − 1 B P = I - B^T (BB^T)^{-1} B P = I − B T ( B B T ) − 1 B は、まさに P = I − n n T P = I - \mathbf{n}\mathbf{n}^T P = I − n n T を 「複数の拘束条件(方向)を同時に扱う」 形に拡張したものです。
分子シミュレーションや拘束付き最適化において、この「B行列を使った射影」が何を意味するのかを解説します。
1. 数学的なつながり:n n n が増えただけ#
まず、最も単純なケースで式が一致することを確認しましょう。
ケース1: 拘束が1つだけの場合(ベクトル n \mathbf{n} n )
行列 B B B が、たった1つの行ベクトル n T \mathbf{n}^T n T で構成されているとします(B = n T B = \mathbf{n}^T B = n T )。
このとき、B B T BB^T B B T はスカラー(内積 n T n = ∥ n ∥ 2 \mathbf{n}^T \mathbf{n} = \|\mathbf{n}\|^2 n T n = ∥ n ∥ 2 )になります。
式に代入すると:
P = I − ( n T ) T ( n T n ) − 1 ( n T ) = I − n 1 ∥ n ∥ 2 n T = I − n n T ∥ n ∥ 2 \begin{aligned}
P &= I - (\mathbf{n}^T)^T (\mathbf{n}^T \mathbf{n})^{-1} (\mathbf{n}^T) \\
&= I - \mathbf{n} \frac{1}{\|\mathbf{n}\|^2} \mathbf{n}^T \\
&= I - \frac{\mathbf{n}\mathbf{n}^T}{\|\mathbf{n}\|^2}
\end{aligned} P = I − ( n T ) T ( n T n ) − 1 ( n T ) = I − n ∥ n ∥ 2 1 n T = I − ∥ n ∥ 2 n n T
もし n \mathbf{n} n が単位ベクトル(∥ n ∥ = 1 \|\mathbf{n}\|=1 ∥ n ∥ = 1 )なら、完全に I − n n T I - \mathbf{n}\mathbf{n}^T I − n n T と一致します。
ケース2: 拘束が複数の場合(行列 B B B )
行列 B B B が複数の行ベクトル b 1 T , b 2 T , … \mathbf{b}_1^T, \mathbf{b}_2^T, \dots b 1 T , b 2 T , … を束ねたものだとします。
B = [ — b 1 T — — b 2 T — ⋮ ] B = \begin{bmatrix} — \mathbf{b}_1^T — \\ — \mathbf{b}_2^T — \\ \vdots \end{bmatrix} B = — b 1 T — — b 2 T — ⋮
このとき、P = I − B T ( B B T ) − 1 B P = I - B^T (BB^T)^{-1} B P = I − B T ( B B T ) − 1 B は、「ベクトル b 1 , b 2 , … \mathbf{b}_1, \mathbf{b}_2, \dots b 1 , b 2 , … が張る空間(Row Space)にある成分をすべて除去し、それら全てに垂直な空間(Null Space)だけを残す射影行列」 となります。
2. 「B行列」の正体と物理的意味#
分子シミュレーションの文脈、特に WilsonのB行列 (内部座標 q q q のデカルト座標 x x x に対する微分 B i j = ∂ q i / ∂ x j B_{ij} = \partial q_i / \partial x_j B ij = ∂ q i / ∂ x j )として考えると、この射影の意味がより鮮明になります。
n n T \mathbf{n}\mathbf{n}^T n n T の意味 :
「ある1つの方向(例:結合軸方向)の成分を捨てる」
応用例: 結合距離を固定する(RATTLE/SHAKEなど)。
B T ( B B T ) − 1 B B^T (BB^T)^{-1} B B T ( B B T ) − 1 B の意味 :
「内部座標の定義に関わるすべての方向 (全結合、全角度の変化方向)の成分をまとめて捨てる」
応用例:
並進・回転の除去 : 全体の並進や回転に対応するモードをB行列に含めて射影することで、内部運動だけを取り出す(Eckart条件)。
冗長な座標の処理 : 冗長内部座標系における逆変換(G-inverse)などで現れる。
3. ( B B T ) − 1 (BB^T)^{-1} ( B B T ) − 1 は何をしている?#
単に ∑ b i b i T \sum \mathbf{b}_i \mathbf{b}_i^T ∑ b i b i T と足し合わせるのではなく、間に ( B B T ) − 1 (BB^T)^{-1} ( B B T ) − 1 (Gram行列の逆行列)挟む理由は、「基底ベクトル b i \mathbf{b}_i b i 同士が直交していない(重なっている)から」 です。
I − n n T I - \mathbf{n}\mathbf{n}^T I − n n T : n \mathbf{n} n が1本なので、自分の長さで割るだけで正規化完了。
I − B T ( B B T ) − 1 B I - B^T (BB^T)^{-1} B I − B T ( B B T ) − 1 B : b i \mathbf{b}_i b i 同士が斜めに交わっている場合、単純な足し算では重複カウントしてしまいます。( B B T ) − 1 (BB^T)^{-1} ( B B T ) − 1 はこの「重なり(Overlap)」を補正して、きれいに直交化する役割(正規直交化の一般化)を果たしています。
P single = I − n n T n T n → 多次元化 P multi = I − B T ( B B T ) − 1 B P_{\text{single}} = I - \frac{\mathbf{n}\mathbf{n}^T}{\mathbf{n}^T\mathbf{n}} \quad \xrightarrow{\text{多次元化}} \quad P_{\text{multi}} = I - B^T (B B^T)^{-1} B P single = I − n T n n n T 多次元化 P multi = I − B T ( B B T ) − 1 B
両者は全く同じ概念です。
「指定された方向(n \mathbf{n} n または B B B の行)への成分をきれいに削ぎ落とし、残りの成分(垂直成分)だけを取り出す」 という幾何学的な操作を表しています。
補足:構造化行列の微分と連鎖律 (Eq. 133)#
『The Matrix Cookbook』Eq. 133 は、対称行列や対角行列など、成分同士が独立ではない**「構造化行列(Structured Matrix)」**を扱うための、非常に重要な公式です。
通常の行列微分公式がなぜ通用しないのか、そして Eq. 133 がどのようにそれを解決するのかを解説します。
1. なぜこれが必要なのか?(直感的なイメージ)#
これまでの公式(例:∂ Tr ( A X ) ∂ X = A T \frac{\partial \text{Tr}(AX)}{\partial X} = A^T ∂ X ∂ Tr ( A X ) = A T )は、行列 X X X の全ての成分 X 11 , X 12 , … X_{11}, X_{12}, \dots X 11 , X 12 , … が 「独立した別々の変数(スイッチ)」 であることを前提としています。
しかし、対称行列 (X i j = X j i X_{ij} = X_{ji} X ij = X ji ) の場合、話が変わります。
独立の場合 : スイッチ X 12 X_{12} X 12 を押しても、電球 X 21 X_{21} X 21 は点きません。
対称行列の場合 : スイッチ X 12 X_{12} X 12 を押すと、配線が繋がっているため、電球 X 21 X_{21} X 21 も同時に点灯 します。
つまり、ある成分を操作したときの影響範囲が、その成分単体だけではないのです。この「連動」を考慮しないと、微分の計算結果(勾配)は誤ったものになります。
2. 公式の解剖#
Eq. 133 は、この連動性を考慮した**「微分の連鎖律」**です。
d f d A i j = ∑ k l ∂ f ∂ A k l ⏟ ①仮の勾配 ∂ A k l ∂ A i j ⏟ ②連動ルール (133) \frac{df}{dA_{ij}} = \sum_{kl} \underbrace{\frac{\partial f}{\partial A_{kl}}}_{\text{①仮の勾配}} \underbrace{\frac{\partial A_{kl}}{\partial A_{ij}}}_{\text{②連動ルール}} \tag{133} d A ij df = k l ∑ ① 仮の勾配 ∂ A k l ∂ f ② 連動ルール ∂ A ij ∂ A k l ( 133 )
① 仮の勾配 : 構造を無視して、既存の公式で求めた勾配。「もし全成分が独立だったら?」という値。
② 連動ルール : 成分 A i j A_{ij} A ij を動かしたとき、他のどの成分 A k l A_{kl} A k l が連動して動くか?(0 または 1)。
結論 : 「スイッチ A i j A_{ij} A ij の本当の感度を知りたければ、そのスイッチで反応する全ての電球 (k l kl k l ) の感度を合計しなさい 」ということです。
3. 具体例:対称行列の微分#
関数 f = Tr ( B X ) f = \text{Tr}(B X) f = Tr ( BX ) を、対称行列 X X X (X = X T X=X^T X = X T ) で微分してみましょう。
Step 1: 仮の勾配を求める
とりあえず構造を無視して微分します。
G = ∂ f ∂ X naive = B T G = \frac{\partial f}{\partial X_{\text{naive}}} = B^T G = ∂ X naive ∂ f = B T
成分で書くと G k l = ( B T ) k l = B l k G_{kl} = (B^T)_{kl} = B_{lk} G k l = ( B T ) k l = B l k です。
Step 2: 連動ルールを確認して合計する
Eq. 133 に従って計算します。
ケースA: 対角成分 X i i X_{ii} X ii の場合
連動するのは自分自身 (k = i , l = i k=i, l=i k = i , l = i ) だけです。
結果: G i i × 1 = B i i G_{ii} \times 1 = B_{ii} G ii × 1 = B ii
ケースB: 非対角成分 X i j X_{ij} X ij (i ≠ j i \neq j i = j ) の場合
自分 (k = i , l = j k=i, l=j k = i , l = j ) と、対称位置 (k = j , l = i k=j, l=i k = j , l = i ) の2箇所が動きます。
結果: G i j × 1 + G j i × 1 = B j i + B i j G_{ij} \times 1 + G_{ji} \times 1 = B_{ji} + B_{ij} G ij × 1 + G ji × 1 = B ji + B ij
Step 3: 行列の形にまとめる
得られた正しい勾配を行列形式で書くと以下のようになります。
d f d X s y m = B + B T − diag ( B ) \frac{df}{dX_{sym}} = B + B^T - \text{diag}(B) d X sy m df = B + B T − diag ( B )
(対角成分は B i i B_{ii} B ii だけなのに、B + B T B+B^T B + B T だと 2 B i i 2B_{ii} 2 B ii とダブルカウントされてしまうため、重複分を引きます)
4. 他のパターンの例#
この考え方は、あらゆる構造化行列に応用できます。
対角行列 (X = diag ( x ) X = \text{diag}(\mathbf{x}) X = diag ( x ) )
連動ルール: 非対角成分は定数(0)なので動きません。
結果: 仮の勾配 G G G の対角成分だけを取り出します。
d f d X = diag ( G ) = I ∘ G \frac{df}{dX} = \text{diag}(G) = I \circ G d X df = diag ( G ) = I ∘ G
成分がすべて同じ行列 (X i j = x X_{ij} = x X ij = x )
連動ルール: 1つの x x x を動かすと、全成分 X k l X_{kl} X k l が動きます。
結果: 仮の勾配 G G G の全成分の合計になります。
d f d x = ∑ k l G k l \frac{df}{dx} = \sum_{kl} G_{kl} d x df = k l ∑ G k l
まとめ#
構造化行列の微分で迷ったら、以下の手順を踏んでください。
Naive Gradient : 構造を忘れて、公式通りに微分する。
Projection : 行列の構造(対称性など)に合わせて、得られた勾配の成分を足し合わせたり、マスクしたりする。
Eq. 133 は、この「足し合わせ」の理論的根拠を与えているのです。