矩阵求导总结
参考文章:https://zhuanlan.zhihu.com/p/24709748
一、标量对矩阵求导术
首先,标量 f f f对矩阵 X \mathbf{X} X的导数,定义为:
∂ f ∂ X = [ ∂ f ∂ X i j ] \frac{\partial f}{\partial \mathbf{X}}=[\frac{\partial f}{\partial \mathbf{X_{ij}}}] ∂X∂f=[∂Xij∂f],
即 f f f对 X \mathbf{X} X逐个元素求导排列成和 X \mathbf{X} X尺寸相同的矩阵。这个定义在计算中并不好用,原因有二:
- 实用上的原因是对函数较复杂的情形难以逐元素求导;
- 哲理上的原因是逐元素求导破坏了整体性。
通过回顾:
-
一元微积分中的导数(标量对标量的导数)与微分的联系: d f = f ′ ( x ) d x df = f'(x)dx df=f′(x)dx
-
多元微积分中的梯度(标量对向量的导数)也与微分有联系: d f = ∑ i = 1 n ∂ f ∂ x i d x i = ( ∂ f ∂ x ) ⊤ d x df=\sum_{i=1}^n \frac{\partial f}{\partial x_i}dx_i=(\frac{\partial f}{\partial \mathbf{x}}) ^\top d\mathbf{x} df=∑i=1n∂xi∂fdxi=(∂x∂f)⊤dx,第一个等号是全微分公式,第二个等号表达了梯度与微分的联系。全微分 d f df df是梯度向量 ∂ f ∂ x ( n × 1 ) \frac{\partial f}{\partial \mathbf{x}}(n×1) ∂x∂f(n×1)与微分向量 d x ( 1 × n ) d \mathbf{x}(1×n) dx(1×n)的内积
-
受此启发,将矩阵导数与微分建立联系:
- d f = ∑ i = 1 m ∑ j = 1 n ∂ f ∂ X i j d X i j = t r ( ( ∂ f ∂ X ) ⊤ d X ) df=\sum_{i=1}^m\sum_{j=1}^n \frac{\partial f}{\partial X_{ij}}dX_{ij}=tr((\frac{\partial f}{\partial \mathbf{X}}) ^\top d\mathbf{X}) df=i=1∑mj=1∑n∂Xij∂fdXij=tr((∂X∂f)⊤dX)
其中tr代表迹(trace)是方阵对角线元素之和,满足性质:对尺寸相同的矩阵A,B, t r ( A ⊤ B ) tr(A^\top B) tr(A⊤B)即是矩阵A,B的内积(A、B对应位置元素乘积之和)。与梯度相似,这里第一个等号是全微分公式,第二个等号表达了矩阵导数与微分的联系:全微分 d f df df是导数 ∂ f ∂ X ( m × n ) \frac{\partial f}{\partial X}(m×n) ∂X∂f(m×n)与微分矩阵 d X ( m × n ) dX(m×n) dX(m×n)的内积。
矩阵微分的运算法则:
-
加减法: d ( X ± Y ) = d X ± d Y d(X±Y)=dX±dY d(X±Y)=dX±dY
-
矩阵乘法: d ( X Y ) = ( d X ) Y + X d Y d(XY)=(dX)Y+XdY d(XY)=(dX)Y+XdY
-
转置:$d(X^\top )=(dX)^ \top $
-
迹: d t r ( X ) = t r ( d X ) dtr(X)=tr(dX) dtr(X)=tr(dX)
-
逆: d X − 1 = − X − 1 d X X − 1 dX^{-1}=-X^{-1}dXX^{-1} dX−1=−X−1dXX−1(此式可在 X X − 1 = I XX^{-1}=I XX−1=I两侧去求微分证明)
-
行列式: d ∣ X ∣ = t r ( X ∗ d X ) d |X|=tr(X^*dX) d∣X∣=tr(X∗dX) 其中, X ∗ X^* X∗表示 X X X的伴随矩阵;在 X X X可逆时又可写作: d ∣ X ∣ = ∣ X ∣ t r ( X − 1 d X ) d|X|=|X|tr(X^{-1}dX) d∣X∣=∣X∣tr(X−1dX)
-
逐元素乘法: d ( X ⊙ Y ) = d X ⊙ Y + X ⊙ d Y d(X \odot Y)=dX \odot Y+X\odot dY d(X⊙Y)=dX⊙Y+X⊙dY ⊙ \odot ⊙表示尺寸相同的矩阵 X、Y逐个元素相乘
-
逐元素函 数: d σ ( X ) = σ ′ ( X ) ⊙ d X d\sigma(X)=\sigma'(X) \odot dX dσ(X)=σ′(X)⊙dX , σ ( X ) = [ σ ( X i j ) ] \sigma(X)=[\sigma(X_{ij})] σ(X)=[σ(Xij)]是逐元素标量函数运算, σ ’ ( X ) = [ σ ′ ( X i j ) ] \sigma’(X)=[\sigma'(X_{ij})] σ’(X)=[σ′(Xij)]是逐元素求导数。例如:
X = [ X 11 X 12 X 21 X 22 ] , d s i n ( X ) = [ c o s X 11 d X 11 c o s X 12 d X 12 c o s X 21 d X 21 c o s X 22 d X 22 ] = c o s ( X ) ⊙ d X X=\begin{bmatrix} X_{11} & X_{12} \\ X_{21} & X_{22} \end{bmatrix},\\ d\ sin(X) = \begin{bmatrix} cosX_{11}dX_{11} & cosX_{12}dX_{12} \\ cosX_{21}dX_{21} & cosX_{22}dX_{22} \end{bmatrix} =cos(X)\odot dX X=[X11X21X12X22],d sin(X)=[cosX11dX11cosX21dX21cosX12dX12cosX22dX22]=cos(X)⊙dX
试图利用矩阵导数与微分的联系 d f = t r ( ( ∂ f ∂ X ) ⊤ d X ) df=tr((\frac{\partial f}{\partial \mathbf{X}}) ^\top d\mathbf{X}) df=tr((∂X∂f)⊤dX),在求出左侧的微分 d f df df后,该如何写成右侧的形式并得到导数呢?
需要一些迹的技巧:
- 套上迹的标量: a = t r ( a ) a=tr(a) a=tr(a)
- 转置: t r ( A ⊤ ) = t r ( A ) tr(A^\top)=tr(A) tr(A⊤)=tr(A),转置不改变对角线元素位置故迹不变
- 线性: t r ( A ± B ) = t r ( A ) ± t r ( B ) tr(A±B)=tr(A)±tr(B) tr(A±B)=tr(A)±tr(B),矩阵加减求迹相当于对角线元素相加减
- 矩阵乘法交换: t r ( A B ) = t r ( B A ) tr(AB)=tr(BA) tr(AB)=tr(BA),其中 A 和 B ⊤ A和B^\top A和B⊤尺寸相同。
- 矩阵乘法/逐元素乘法交换: t r ( A ⊤ ( B ⊙ C ) ) = t r ( ( A ⊙ B ) ⊤ C ) tr(A^\top(B\odot C))=tr((A\odot B)^\top C) tr(A⊤(B⊙C))=tr((A⊙B)⊤C),其中 A 、 B 、 C A、B、C A、B、C尺寸相同,两侧都等于 ∑ i j A i j B i j C i j \sum_{ij}A_{ij}B_{ij}C_{ij} ∑ijAijBijCij
观察一下可以断言,若标量函数 f f f是矩阵X经加减乘法、逆、行列式、逐元素函数等运算构成,则使用相应的运算法则对f求微分,再使用迹技巧给 d f df df套上迹并将其它项交换至 d X dX dX左侧,对照导数与微分的联系 d f = t r ( ( ∂ f ∂ X ) ⊤ d X ) df=tr((\frac{\partial f}{\partial \mathbf{X}}) ^\top d\mathbf{X}) df=tr((∂X∂f)⊤dX),即能得到导数。
特别地,若矩阵退化为向量,对照导数与微分的联系 d f = ∂ f ∂ x ⊤ d x df=\frac{\partial f}{\partial \mathbf{x}}^\top d \mathbf{x} df=∂x∂f⊤dx,即能得到导数。
再看复合,假设已经求得 ∂ f ∂ Y \frac{\partial f}{\partial Y} ∂Y∂f,而 Y Y Y是 X X X的函数,如何求 ∂ f ∂ X \frac{\partial f}{\partial X} ∂X∂f呢?
从微分入手建立复合法则:先写出 d f = t r ( ∂ f ∂ Y ⊤ d Y ) df=tr(\frac{\partial f}{\partial Y}^\top dY) df=tr(∂Y∂f⊤dY),再将 d Y dY dY用 d X dX dX表示出来代入,并用迹技巧将其他项交换至 d X dX dX左侧,即可得到 ∂ f ∂ X \frac{\partial f}{\partial X} ∂X∂f
看一个例子:
Y
=
A
X
B
Y=AXB
Y=AXB,此时
d
f
=
t
r
(
∂
f
∂
Y
⊤
d
Y
)
=
t
r
(
∂
f
∂
Y
⊤
A
d
X
B
)
=
t
r
(
B
∂
f
∂
Y
⊤
A
d
X
)
=
t
r
(
(
A
⊤
∂
f
∂
Y
B
⊤
)
⊤
d
X
)
df=tr(\frac{\partial f}{\partial Y}^\top dY)=tr(\frac{\partial f}{\partial Y}^\top AdXB)\\=tr(B\frac{\partial f}{\partial Y}^\top AdX)=tr((A^\top \frac{\partial f}{\partial Y}B^\top)^\top dX)
df=tr(∂Y∂f⊤dY)=tr(∂Y∂f⊤AdXB)=tr(B∂Y∂f⊤AdX)=tr((A⊤∂Y∂fB⊤)⊤dX)
可以得到,
∂
f
∂
X
=
A
⊤
∂
f
∂
Y
B
⊤
\frac{\partial f}{\partial X}=A^ \top \frac{\partial f}{\partial Y}B^ \top
∂X∂f=A⊤∂Y∂fB⊤
注意:
d
Y
=
(
d
A
)
X
B
+
A
d
X
B
+
A
X
d
B
=
A
d
X
B
,
由于
A
,
B
是常量,
d
A
=
d
B
=
0
dY=(dA)XB+AdXB+AXdB=AdXB,\\由于A,B是常量,dA=dB=0
dY=(dA)XB+AdXB+AXdB=AdXB,由于A,B是常量,dA=dB=0