last_modified: 2026-01-10
生成AIによる自動生成記事に関する免責事項:
本記事は、Petersen & Pedersen著 The Matrix Cookbook (Nov 15, 2012 edition) のPage 14の内容(公式124〜133)を骨子とし、数理的な証明と応用例を大幅に加筆して再構成した解説記事です。
1. 序論:幾何学と構造へのアプローチ#
Page 14 では、行列微分の応用範囲をさらに広げる3つのトピックを扱います。
- 逆行列の複雑なトレース微分: 統計学(特に最尤推定)で現れる「逆行列」と「二次形式」が混ざった複雑な関数の微分です。
- ベクトルノルムの微分: 距離 ∥x∥ や正規化ベクトル x/∥x∥ の微分。これらは物理シミュレーション(バネの力など)や幾何学的最適化で不可欠です。
- 構造化行列の微分: 「対称行列」や「テープリッツ行列」など、成分同士が独立でない行列を微分するための一般則(連鎖律)を導入します。
2. 逆行列を含むトレース微分 (Eq. 124–128)#
Page 10 で扱った逆行列微分の応用編です。より複雑な、入れ子になった逆行列構造を扱います。
2.1 基本的な逆行列サンドイッチ (Eq. 124)#
【公式】
∂X∂Tr(AX−1B)=−(X−1BAX−1)T=−X−TATBTX−T(124)
【解説】
これは Page 10 Eq. 63 の再掲(あるいは変形)です。
d(X−1)=−X−1(dX)X−1 を代入し、トレースの巡回性を使うことで導かれます。
「逆行列の微分はマイナスがつき、両側から逆行列で挟まれる(1/x→−1/x2)」という基本ルール通りです。
2.2 一般化二次形式の逆行列 (Eq. 125–127)#
統計学における一般化最小二乗法(GLS)などで現れる形式です。ここでは B,C は対称行列と仮定されています。
【公式一覧】
∂X∂Tr[(XTCX)−1A]=−(CX(XTCX)−1)(A+AT)(XTCX)−1(125)
∂X∂Tr[(XTCX)−1(XTBX)]=−2CX(XTCX)−1XTBX(XTCX)−1+2BX(XTCX)−1(126)
※ Eq. 127 は Eq. 126 の分母に定数行列 A が加わっただけの形式((A+XTCX)−1)であり、構造は Eq. 126 と同一のため省略します。
【Eq. 125 の導出ステップ】
Y=XTCX と置きます。求めたいのは Tr(Y−1A) の微分です。
- 合成関数の微分:
dTr(Y−1A)=Tr(Ad(Y−1))=Tr(A(−Y−1dYY−1))=−Tr(Y−1AY−1dY)
- 中身の微分:
dY=d(XTCX) です。C は対称なので、Eq. 108 より、この微分(に対応する項)は 2CX の形になります。
- 統合:
これらを組み合わせると、逆行列 Y−1=(XTCX)−1 が両側から掛かり、さらに A の非対称性を考慮して A+AT が現れます。
2.3 行列関数のトレース (Eq. 128)#
【公式】
∂X∂Tr(sin(X))=cos(X)T(128)
【解説】
これは Page 12 Eq. 100 付近の「スカラー関数の拡張則」の具体例です。
行列の各成分に関数を適用する(Element-wise)場合、あるいは行列関数(テイラー展開で定義される)の場合、Tr(F(X)) の微分は f(X)T (f は F の導関数)となります。
(sinx)′=cosx なので、そのまま cos(X)T となります。
3. ベクトルノルムの微分 (Derivatives of Vector Norms)#
ここは物理シミュレーションや幾何計算において最も実用的なセクションです。ユークリッドノルム(L2ノルム) ∥x∥2=xTx を扱います。
3.1 距離の勾配 (Eq. 129)#
【公式】
∂x∂∥x−a∥2=∥x−a∥2x−a(129)
【解説】
スカラーの微分 (∣x∣)′=sgn(x)=x/∣x∣ のベクトル版です。
あるいは、∇u=2u1∇u と考えます。
u=∥x−a∥2 と置くと、∇u=2(x−a) なので、
2∥x−a∥1⋅2(x−a)=∥x−a∥x−a
これは、a から x への**単位ベクトル(方向ベクトル)**を表します。物理的には「バネの復元力の方向」そのものです。
3.2 正規化ベクトルのヤコビアン (Eq. 130)#
【公式】
∂x∂(∥x−a∥2x−a)=∥x−a∥2I−∥x−a∥23(x−a)(x−a)T(130)
【解説:射影行列としての意味】
これはベクトル値関数 f(x)=∥x∥x (簡単のため a=0)の微分(ヤコビ行列)です。
商の微分則をベクトルに適用して導出されます。
この式を整理すると、以下のようになります。
∥x∥1(I−∥x∥2xxT)
括弧の中身 P=I−nnT (n は単位ベクトル)は、「ベクトル x に垂直な空間への射影行列」 です。
正規化されたベクトルは、長さが変わらず方向だけが変わるため、その変化率は必ず元のベクトルと直交します。この式はその幾何学的性質を見事に表しています。
3.3 ノルム二乗の勾配 (Eq. 131, 132)#
【公式】
∂x∂∥x∥22=2x(131)
∂X∂∥X∥F2=2X(132)
【解説】
これらは x2 の微分が 2x であることのベクトル版・行列版です。
Eq. 132 は Page 13 Eq. 115 の再掲です。フロベニウスノルムの二乗は Tr(XXT) なので、微分は 2X となります。
4. 構造化行列の微分 (Structured Matrices)#
Eq. 133 は、これまでの公式が通用しないケースに対する「最後の砦」です。
4.1 なぜ構造化行列で公式が壊れるのか?#
これまでの公式(例:Tr(AX) の微分は AT)は、行列 X の全成分 Xij が互いに独立であることを前提としています。
しかし、X が対称行列(Xij=Xji)である場合、Xij を動かすと自動的に Xji も動いてしまいます。この「従属関係」を考慮しないと、微分結果は誤りになります(例えば、対角成分以外の感度が2倍になるなど)。
4.2 連鎖律による一般化 (Eq. 133)#
【公式】
dAijdf=kl∑∂Akl∂f∂Aij∂Akl=Tr[(∂A∂f)T∂Aij∂A](133)
【解説】
これは、スカラー関数の微分の連鎖律を成分レベルで記述したものです。
- ∂Akl∂f: 構造を無視して計算した「仮の勾配」(これまでのページの公式で求めたもの)。
- ∂Aij∂Akl: 構造による拘束条件を表す項。
- 例えば A が対称行列なら、kl=ij または kl=ji のとき 1、それ以外 0 となります。
【実践的対処法】
対称行列などの構造化行列を微分する場合、実務的には以下の手順がよく使われます。
- とりあえず構造を無視して微分する(行列微分公式を使う)。
- 得られた勾配行列 G を、その構造に合わせて射影・対称化する。
- 対称行列の場合: 正しい勾配は Gsym=G+GT−diag(G) のような補正が必要になります(定義によるが、単純に G+GT とする場合もあるため注意が必要)。Eq. 133 はこの補正を厳密に行うための基礎式です。
5. 結論#
Page 14 は、行列微分を「現実の問題」に適用するためのツールボックスです。
- ベクトルノルム (Eq. 129, 130): 力学シミュレーション(粒子間の距離計算)や最適化(勾配の正規化)の実装においてよく使う公式です。
- 射影行列 (Eq. 130): I−nnT という形を見たら、「直交空間への射影だ」と直感できるようになりましょう。
- 構造化行列 (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(AX−1B)
- スカラー翻訳: xab の微分
- 微分: −x2ab=−x1⋅b⋅a⋅x1
- 行列の事情:
- −X−TATBTX−T は −(X−1BAX−1)T です。
- マイナス符号と「2つの逆行列で挟む」という構造はスカラーと同じです。
2. 距離の微分 (Eq. 129)#
公式: ∂x∂∥x−a∥2
- スカラー翻訳: ∣x−a∣ の微分
- 微分: sgn(x−a)=∣x−a∣x−a
- 行列の事情:
- ∥x−a∥2x−a。これは単位ベクトルであり、符号関数のベクトル版と解釈できます。
3. 正規化の微分 (Eq. 130)#
公式: ∂x∂(∥x∥x)
- スカラー翻訳: ∣x∣x の微分
- 思考: スカラーの場合、x/∣x∣ は定数(1 または -1)なので、微分は 0 です。
- 行列の事情:
- 公式の結果は ∥x∥1(I−nnT) です。
- 1次元の場合、nnT は 1×1=1 になり、I=1 なので、1−1=0。
- なんと、スカラーの直感(微分が0)と完全に一致します!
- 多次元では「0」ではなく、「半径方向の変化は0だが、回転方向の変化は残る」ため、このような射影行列になります。
Page 14 の公式は、幾何学的な意味(方向、直交性)を数式で表現した美しい例と言えます。
補足:Eq. 130 の幾何学的意味(射影行列と曲率)#
『The Matrix Cookbook』Eq. 130 は、正規化ベクトルの微分を記述する公式ですが、その数式の形には「射影」と「回転」という幾何学の本質が凝縮されています。
∂x∂(∥x∥x)=∥x∥1(I−∥x∥2xxT)(130)
この式が何を意味しているのか、数式を分解して解説します。
1. 数式の解剖:射影行列 P⊥ の出現#
まず、単位ベクトル n=∥x∥x を定義して式を整理します。
右辺の括弧内は以下のように書き換えられます。
I−∥x∥2xxT=I−(∥x∥x)(∥x∥x)T=I−nnT
これにより、ヤコビ行列 J は驚くほどシンプルな構造になります。
J=スケーリング∥x∥1×射影行列 P⊥(I−nnT)
ここで現れた行列 P⊥=I−nnT は、「ベクトル x に垂直な空間への射影行列」 です。
2. なぜ「垂直な空間」への射影なのか?#
微分の意味を考えるために、入力 x に微小な変化 dx を加えたとき、正規化ベクトル n がどう変化するかを見てみましょう。
dn=P⊥dx=(I−nnT)dx=dx−n(nTdx)
入力の変化 dx は、2つの成分に分解できます。
- 平行成分 (dx∥): x の長さを変える変化(n 方向)。
- 垂直成分 (dx⊥): x の向きを変える変化(n と直交)。
この射影行列 P⊥ は、以下のフィルタとして機能します。
- 平行成分: nTdx∥=0 なので、dx∥−dx∥=0。つまり、長さの変化は無視されます(正規化されるため)。
- 垂直成分: nTdx⊥=0 なので、dx⊥−0=dx⊥。つまり、向きの変化だけがそのまま残ります。
3. 係数 1/∥x∥ の意味:曲率と半径#
式の先頭に掛かっている ∥x∥1 は、幾何学的には 「回転半径の逆数(曲率)」 を表しています。
円運動をイメージしてください。
- 半径 r=∥x∥ の円周上を、距離 ds=∥dx⊥∥ だけ動いたとき、角度の変化 dθ はどれくらいでしょうか?
- 関係式は ds=rdθ なので、dθ=r1ds です。
正規化ベクトルの微分もこれと同じです。
∥dn∥=∥x∥1∥dx⊥∥
- ∥dx⊥∥: 横方向への移動距離
- 1/∥x∥: 半径の逆数
- ∥dn∥: 単位球面上での移動量(角度変化)
つまり Eq. 130 は、「正規化ベクトルの変化率は、向きの変化成分だけを取り出し(P⊥)、それを現在の半径で割って角度変化に変換する(1/r)」という物理的事実を記述しているのです。
まとめ#
Eq. 130 のヤコビ行列は、以下の2つの要素の積です。
- 幾何学的フィルタ (P⊥): 長さの変化を捨て、向きの変化だけを残す。
- 幾何学的スケーリング (1/∥x∥): 原点から遠いほど、同じ移動距離でも角度は変わりにくくなる。
この式は、勾配法において「重みベクトルの方向だけを最適化したい(Weight Normalization)」といった場面で、勾配がどのように補正されるかを理解する鍵となります。
解説:射影行列の一般化(I−nnT から B行列へ)#
質問者様が提示された式 P=I−BT(BBT)−1B は、まさに P=I−nnT を 「複数の拘束条件(方向)を同時に扱う」 形に拡張したものです。
分子シミュレーションや拘束付き最適化において、この「B行列を使った射影」が何を意味するのかを解説します。
1. 数学的なつながり:n が増えただけ#
まず、最も単純なケースで式が一致することを確認しましょう。
ケース1: 拘束が1つだけの場合(ベクトル n)
行列 B が、たった1つの行ベクトル nT で構成されているとします(B=nT)。
このとき、BBT はスカラー(内積 nTn=∥n∥2)になります。
式に代入すると:
P=I−(nT)T(nTn)−1(nT)=I−n∥n∥21nT=I−∥n∥2nnT
もし n が単位ベクトル(∥n∥=1)なら、完全に I−nnT と一致します。
ケース2: 拘束が複数の場合(行列 B)
行列 B が複数の行ベクトル b1T,b2T,… を束ねたものだとします。
B=—b1T——b2T—⋮
このとき、P=I−BT(BBT)−1B は、「ベクトル b1,b2,… が張る空間(Row Space)にある成分をすべて除去し、それら全てに垂直な空間(Null Space)だけを残す射影行列」 となります。
2. 「B行列」の正体と物理的意味#
分子シミュレーションの文脈、特に WilsonのB行列(内部座標 q のデカルト座標 x に対する微分 Bij=∂qi/∂xj)として考えると、この射影の意味がより鮮明になります。
- nnT の意味:
- 「ある1つの方向(例:結合軸方向)の成分を捨てる」
- 応用例: 結合距離を固定する(RATTLE/SHAKEなど)。
- BT(BBT)−1B の意味:
- 「内部座標の定義に関わるすべての方向(全結合、全角度の変化方向)の成分をまとめて捨てる」
- 応用例:
- 並進・回転の除去: 全体の並進や回転に対応するモードをB行列に含めて射影することで、内部運動だけを取り出す(Eckart条件)。
- 冗長な座標の処理: 冗長内部座標系における逆変換(G-inverse)などで現れる。
3. (BBT)−1 は何をしている?#
単に ∑bibiT と足し合わせるのではなく、間に (BBT)−1(Gram行列の逆行列)挟む理由は、「基底ベクトル bi 同士が直交していない(重なっている)から」 です。
- I−nnT: n が1本なので、自分の長さで割るだけで正規化完了。
- I−BT(BBT)−1B: bi 同士が斜めに交わっている場合、単純な足し算では重複カウントしてしまいます。(BBT)−1 はこの「重なり(Overlap)」を補正して、きれいに直交化する役割(正規直交化の一般化)を果たしています。
Psingle=I−nTnnnT多次元化Pmulti=I−BT(BBT)−1B
両者は全く同じ概念です。
「指定された方向(n または B の行)への成分をきれいに削ぎ落とし、残りの成分(垂直成分)だけを取り出す」 という幾何学的な操作を表しています。
補足:構造化行列の微分と連鎖律 (Eq. 133)#
『The Matrix Cookbook』Eq. 133 は、対称行列や対角行列など、成分同士が独立ではない**「構造化行列(Structured Matrix)」**を扱うための、非常に重要な公式です。
通常の行列微分公式がなぜ通用しないのか、そして Eq. 133 がどのようにそれを解決するのかを解説します。
1. なぜこれが必要なのか?(直感的なイメージ)#
これまでの公式(例:∂X∂Tr(AX)=AT)は、行列 X の全ての成分 X11,X12,… が 「独立した別々の変数(スイッチ)」 であることを前提としています。
しかし、対称行列 (Xij=Xji) の場合、話が変わります。
- 独立の場合: スイッチ X12 を押しても、電球 X21 は点きません。
- 対称行列の場合: スイッチ X12 を押すと、配線が繋がっているため、電球 X21 も同時に点灯します。
つまり、ある成分を操作したときの影響範囲が、その成分単体だけではないのです。この「連動」を考慮しないと、微分の計算結果(勾配)は誤ったものになります。
2. 公式の解剖#
Eq. 133 は、この連動性を考慮した**「微分の連鎖律」**です。
dAijdf=kl∑①仮の勾配∂Akl∂f②連動ルール∂Aij∂Akl(133)
- ① 仮の勾配: 構造を無視して、既存の公式で求めた勾配。「もし全成分が独立だったら?」という値。
- ② 連動ルール: 成分 Aij を動かしたとき、他のどの成分 Akl が連動して動くか?(0 または 1)。
結論: 「スイッチ Aij の本当の感度を知りたければ、そのスイッチで反応する全ての電球 (kl) の感度を合計しなさい」ということです。
3. 具体例:対称行列の微分#
関数 f=Tr(BX) を、対称行列 X (X=XT) で微分してみましょう。
Step 1: 仮の勾配を求める
とりあえず構造を無視して微分します。
G=∂Xnaive∂f=BT
成分で書くと Gkl=(BT)kl=Blk です。
Step 2: 連動ルールを確認して合計する
Eq. 133 に従って計算します。
- ケースA: 対角成分 Xii の場合
- 連動するのは自分自身 (k=i,l=i) だけです。
- 結果: Gii×1=Bii
- ケースB: 非対角成分 Xij (i=j) の場合
- 自分 (k=i,l=j) と、対称位置 (k=j,l=i) の2箇所が動きます。
- 結果: Gij×1+Gji×1=Bji+Bij
Step 3: 行列の形にまとめる
得られた正しい勾配を行列形式で書くと以下のようになります。
dXsymdf=B+BT−diag(B)
(対角成分は Bii だけなのに、B+BT だと 2Bii とダブルカウントされてしまうため、重複分を引きます)
4. 他のパターンの例#
この考え方は、あらゆる構造化行列に応用できます。
- 対角行列 (X=diag(x))
- 連動ルール: 非対角成分は定数(0)なので動きません。
- 結果: 仮の勾配 G の対角成分だけを取り出します。
dXdf=diag(G)=I∘G
- 成分がすべて同じ行列 (Xij=x)
- 連動ルール: 1つの x を動かすと、全成分 Xkl が動きます。
- 結果: 仮の勾配 G の全成分の合計になります。
dxdf=kl∑Gkl
まとめ#
構造化行列の微分で迷ったら、以下の手順を踏んでください。
- Naive Gradient: 構造を忘れて、公式通りに微分する。
- Projection: 行列の構造(対称性など)に合わせて、得られた勾配の成分を足し合わせたり、マスクしたりする。
Eq. 133 は、この「足し合わせ」の理論的根拠を与えているのです。