这是个人学习笔记,不是原创。来源请查看 “参考文档”
标量对矩阵的求导
基础推导
定义
标量f对矩阵X的导数,定义为 ∂ f ∂ X = [ ∂ f ∂ X i j ] \frac{\partial f}{\partial X} =[\frac{\partial f}{\partial X_{ij}}] ∂X∂f=[∂Xij∂f],即f对X逐元素求导排成与X尺寸相同的矩阵。
将矩阵导数与微分建立联系:
d
f
=
∑
i
=
1
m
∑
j
=
1
n
∂
f
∂
X
i
j
d
X
i
j
=
t
r
(
∂
f
∂
X
T
d
X
)
df = \sum_{i=1}^{m}\sum_{j=1}^n{\frac{\partial f}{\partial X_{ij}}}dX_{ij}=tr(\frac{{\partial f}}{\partial X}^TdX)
df=i=1∑mj=1∑n∂Xij∂fdXij=tr(∂X∂fTdX)
上面第二个等式,用到了矩阵的迹的性质。因为两个向量相乘,A中第i个元素乘以B中第i个元素的积,全部在形成的矩阵对角线上,即
t r ( A T B ) = ∑ i , j A i j B i j tr(A^TB)=\sum_{i,j}{A_{ij}B_{ij}} tr(ATB)=i,j∑AijBij
这里第一个等号是全微分公式,第二个等号表达了矩阵导数与微分的联系:全微分 d f df df是导数$\frac{\partial f}{\partial X} ( m x n ) 与 微 分 矩 阵 (mxn)与微分矩阵 (mxn)与微分矩阵dX$(mxn)的內积。(这里的m,n是矩阵的大小)
求导公式
运用这些法则,可以建立常用的矩阵微分的运算法则:
- 加减法
d ( X ± Y ) = d X ± d Y d(X\pm Y)=dX\pm dY d(X±Y)=dX±dY
- 矩阵乘法
d ( X Y ) = d ( X ) Y + X d Y d(XY)=d(X)Y+XdY d(XY)=d(X)Y+XdY
- 转置
d ( X T ) = ( d X ) T d(X^T)=(dX)^T d(XT)=(dX)T
- 迹
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
- 行列式
d ∣ X ∣ = t r ( X # d X ) d|X|=tr(X^{\#}dX) d∣X∣=tr(X#dX)
其中
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 , σ ( X ) = [ σ ( X i j ) ] d\sigma(X)=\sigma'(X)\odot dX,\sigma(X)=[\sigma(X_{ij})] dσ(X)=σ′(X)⊙dX,σ(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} , dsin(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],dsin(X)=[cosx11dx11cosx21dx21cosx12dx12cosx22dx22]=cos(X)⊙dX
矩阵迹的运算
利用矩阵导数与微分的联系 d f = t r ( ∂ f ∂ X T d X ) df=tr(\frac{{\partial f}}{\partial X}^TdX) df=tr(∂X∂fTdX)求出左侧的微分 d f df df后,该如何写成右侧的形式并得到导数?这需要一些迹技巧:
- 标量套上迹: a = t r ( a ) a=tr(a) a=tr(a)
- 转置: t r ( A T ) = t r ( A ) tr(A^T)=tr(A) tr(AT)=tr(A)
- 线性: t r ( A ± B ) = t r ( A ) ± t r ( B ) tr(A\pm B)=tr(A)\pm 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 A A与 B T B^T BT的尺寸相同。两侧都等于 ∑ i , j A i j B j i \sum_{i,j}A_{ij}B_{ji} ∑i,jAijBji
- 矩阵乘法/逐元素乘法交换: t r ( A T ( B ⊙ C ) ) = t r ( ( A ⊙ B ) T C ) tr(A^T(B\odot C))=tr((A\odot B)^TC) tr(AT(B⊙C))=tr((A⊙B)TC),其中A,B,C尺寸相同,两侧都等于 ∑ i , j A i j B i j C i j \sum_{i,j}{A_{ij}B_{ij}}C_{ij} ∑i,jAijBijCij
结论
若标量函数f是矩阵X经加减乘法、逆、行列式、逐元素函数等运算构成,则使用相应的运算法则对f求微分,再使用迹技巧给df套上迹并将其它项交换至dX左侧,对照导数与微分的联系 d f = t r ( ∂ f ∂ X T d X ) df=tr(\frac{{\partial f}}{\partial X}^TdX) df=tr(∂X∂fTdX),即能得到导数。
复合函数
假设已求得 ∂ f ∂ Y \frac{{\partial f}}{\partial Y} ∂Y∂f,而Y是X的函数,如何求$\frac{\partial f}{\partial X} $?
- d f = t r ( ∂ f ∂ Y T d Y ) df=tr(\frac{{\partial f}}{\partial Y}^TdY) df=tr(∂Y∂fTdY)
- 再将dY用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
T
d
Y
)
=
t
r
(
∂
f
∂
Y
T
A
d
X
B
)
=
t
r
(
B
∂
f
∂
Y
T
A
d
X
)
=
t
r
(
(
A
T
∂
f
∂
Y
B
T
)
T
d
X
)
df= tr(\frac{{\partial f}}{\partial Y}^TdY)=tr(\frac{{\partial f}}{\partial Y}^TAdXB)=tr(B\frac{{\partial f}}{\partial Y}^TAdX)=tr((A^T\frac{{\partial f}}{\partial Y}B^T)^TdX)
df=tr(∂Y∂fTdY)=tr(∂Y∂fTAdXB)=tr(B∂Y∂fTAdX)=tr((AT∂Y∂fBT)TdX)
上面的式子与
d
f
=
t
r
(
∂
f
∂
X
T
d
X
)
df=tr(\frac{{\partial f}}{\partial X}^TdX)
df=tr(∂X∂fTdX)对比,即可得到
∂
f
∂
X
=
A
T
∂
f
∂
Y
B
T
\frac{\partial f}{\partial X}=A^T \frac{\partial f}{\partial Y }B^T
∂X∂f=AT∂Y∂fBT。
注意, d Y = ( d A ) X B + A d X B + A X d B = A d X B dY=(dA)XB+AdXB+AXdB=AdXB dY=(dA)XB+AdXB+AXdB=AdXB,由于A,B是常量,所以 d A = 0 , d B = 0 dA=0,dB=0 dA=0,dB=0,以及我们使用矩阵乘法交换的迹技巧交换了 ∂ f ∂ Y T A d X \frac{{\partial f}}{\partial Y}^TAdX ∂Y∂fTAdX与 B B B。
例题
f = a T X b f=a^TXb f=aTXb,求$\frac{\partial f}{\partial X} 。 其 中 。其中 。其中a 是 是 是m\times 1 列 向 量 , 列向量, 列向量,X 是 是 是m \times n 矩 阵 , 矩阵, 矩阵,b 是 是 是n \times 1 列 向 量 , 列向量, 列向量,f$是标量。
解:
d
f
=
d
a
T
X
b
+
a
T
d
X
b
+
a
T
X
d
b
=
0
+
a
T
d
X
b
+
0
=
a
T
d
X
b
t
r
(
d
f
)
=
t
r
(
a
T
d
X
b
)
df = da^T Xb+a^TdXb+a^TXdb=0+a^TdXb+0=a^TdXb \\ tr(df)=tr(a^TdXb)
df=daTXb+aTdXb+aTXdb=0+aTdXb+0=aTdXbtr(df)=tr(aTdXb)
由于
d
f
df
df是标量,
t
r
(
d
f
)
=
d
f
tr(df)=df
tr(df)=df,所以
d
f
=
t
r
(
a
T
d
X
b
)
=
t
r
(
b
a
T
d
X
)
=
t
r
(
(
a
b
T
)
T
d
X
)
df =tr(a^TdXb)=tr(ba^TdX)=tr((ab^T)^TdX)
df=tr(aTdXb)=tr(baTdX)=tr((abT)TdX)
与
d
f
=
t
r
(
∂
f
∂
X
T
d
X
)
df=tr(\frac{\partial f}{\partial X}^TdX)
df=tr(∂X∂fTdX)对比,可得
∂
f
∂
X
=
a
b
T
\frac{\partial f}{\partial X}=ab^T
∂X∂f=abT
参考文档
- https://zhuanlan.zhihu.com/p/24709748
- https://www.jianshu.com/p/d0110f242b64