トレースの行列微分
📂多変数ベクトル解析トレースの行列微分
公式
Xをn×n行列としよう。∂X∂=∇Xを行列勾配としよう。すると次のような公式が成り立つ。
∂X∂Tr(X)=I,∂X∂Tr(aX)=aI(1)
ここで a∈Rは定数(スカラー)であり、Iは恒等行列である。
A∈Rn×pとして、X∈Rp×nとしよう。次が成り立つ。
∂X∂Tr(AX)=∂X∂Tr(XA)=AT(2)
∂X∂Tr(AXT)=∂X∂Tr(XTA)=A
- 帰結として次が成り立つ。A∈Rn×p、X∈Rp×q、B∈Rq×nについて次が成り立つ。
∂X∂Tr(AXB)=ATBT(3)
A∈Rn×nとして、X∈Rm×nとしよう。次が成り立つ。
∂X∂Tr(AXTX)=∂X∂Tr(XTXA)=∂X∂Tr(XAXT)=X(AT+A)(4)
A,X∈Rn×nについて、次が成り立つ。
∂X∂Tr(AXX)=XTAT+ATXT(5)
A,B,X∈Rn×nについて、次が成り立つ。
∇XTr(AXTBX)=∂X∂Tr(AXTBX)=BXA+BTXAT(6)
X∈Rn×nと自然数nについて次が成り立つ。
∂X∂Tr(Xn)=n(Xn−1)T(7)
説明
行列AのトレースTrAとはAのすべての対角成分の和を指す。これは単に値として考えることもできるが、行列をスカラーに変換する関数として考えることもできる。すると、トレースは次のように定義される関数である。
Tr:Rn×n→R
関数であれば微分について話さないわけにはいかない。関数値を考えてみると、Tr(A)=i=1∑naiiで単純な一次関数に過ぎないため、微分可能性については心配する必要がない。ただし、変数が行列である点が直感的でないかもしれない。詳しくは勾配行列の文書を読んでみよう。
上記の結果を見ると、スカラー微分とかなり似ていることが分かり、ここからトレースとは行列の微分を直感的に扱えるようにしてくれる道具と受け取ることができる。特に、A,B,Xなどすべての行列が対称行列であれば(行列という特異性を考慮する必要がなければ)多項式の微分とほぼ一致する結果を示している。
- (1): 恒等行列Iは行列の掛け算に対する単位元なので、スカラー微分dxdx=1と対応する結果である。
- (2)、(3): 一次関数の微分と対応する直感的な結果である。
- (4)、(5): 二次関数の微分と対応する結果である。
- (7): 多項式の微分と対応する結果である。
下記の証明では直接計算で示したが、🔒(25/07/17)トレーストリックと呼ばれる方法を使用するとより簡単に計算できる。Xに対する任意の形や、Xが多く含まれる式の場合、実際に直接計算するのは非常に困難でトレーストリックを使用する必要がある。
より多くの公式は🔒(25/07/19)スカラー関数の行列微分表で確認できる。
証明
(1)
Tr(X)=i=1∑nxiiであるため次が成り立つ。
∂xij∂Tr(X)={10,i=j,i=j
そのため、以下の結果を得る。
∂X∂Tr(X)=∂x11∂Tr(X)⋮∂xn1∂Tr(X)⋯⋱⋯∂x1n∂Tr(X)⋮∂xnn∂Tr(X)=10⋮001⋮0⋯⋯⋱⋯00⋮1=I
■
(2)
A∈Rn×p、X∈Rp×nとしよう。
まずトレースは循環性質を持つため、Tr(AX)=Tr(XA)である。
トレースの循環性質
Tr(AB)=Tr(BA)
行列AXのij成分はk=1∑paikxkjであるため、Tr(AX)=i=1∑nk=1∑paikxkiである。したがって∂xij∂Tr(AX)=ajiであり、次が成り立つ。
∂X∂Tr(AX)=∂x11∂Tr(AX)⋮∂xp1∂Tr(AX)⋯⋱⋯∂x1n∂Tr(AX)⋮∂xpn∂Tr(AX)=a11a12⋮a1pa21a22⋮a2p⋯⋯⋱⋯an1an2⋮anp=AT
この結果とトレースの循環性質を利用すれば、(3)をすぐに得ることができる。
■
(4)
行列の累乗形式の公式により、AXTXのij成分とトレース、偏微分は次の通りである。
[AXTX]ij=k=1∑nℓ=1∑maikxℓkxℓj,Tr(AXTX)=s=1∑nk=1∑nℓ=1∑maskxℓkxℓs
∂xij∂Tr(AXTX)=k=1∑najkxik+s=1∑nasjxis=k=1∑nxikajk+k=1∑nxikakj=[XAT]ij+[XA]ij
したがって、
∂X∂Tr(AXTX)=XAT+XA=X(AT+A)
(5)
[AXX]ij=k,s=1∑naikxksxsjであるため、
Tr(AXX)=ℓ=1∑nk,s=1∑naℓkxksxsℓ
したがって偏微分は以下の通りである。
∂xij∂Tr(AXX)=ℓ=1∑naℓixjℓ+k=1∑najkxki
よって次が得られる。
[∂X∂Tr(AXX)]ij=ℓ=1∑naℓixjℓ+k=1∑najkxki=[ATXT]ij+[XTAT]
⟹∂X∂Tr(AXX)=ATXT+XTAT
■
(6)
上記の証明過程を無理なく追ってきたという仮定のもと、簡略に記述する。
[AXTBX]ij=k,s,ℓ=1∑naikxskbsℓxℓj
⟹Tr(AXTBX)=r=1∑nk,s,ℓ=1∑narkxskbsℓxℓr
⟹[∇XTr(AXTBX)]ij=r,ℓ∑arjbiℓxℓr+k,s∑ajkxskbsi=r,ℓ∑biℓxℓrarj+k,s∑bsixskajk=[BXA]ij+[BTXAT]ij
⟹∇XTr(AXTBX)=BXA+BTXAT
■
(7)
[Xn]ij=k(2),…,k(n)=1∑nxik(2)xk(2)k(3)⋯xk(n)j
⟹Tr(Xn)=ℓ=1∑nk(2),…,k(n)=1∑nxℓk(2)xk(2)k(3)⋯xk(n)ℓ
⟹[∇XTr(Xn)]ij=nk(3),…,k(n)=1∑nxjk(3)xk(3)k(4)⋯xk(n)i=n[(Xn−1)T]ij
⟹∇XTr(Xn)=n(Xn−1)T
■