【必读】3分钟带你了解标量对矩阵求导方法

这是个人学习笔记,不是原创。来源请查看 “参考文档”

标量对矩阵的求导

基础推导

定义

标量f对矩阵X的导数,定义为 ∂ f ∂ X = [ ∂ f ∂ X i j ] \frac{\partial f}{\partial X} =[\frac{\partial f}{\partial X_{ij}}] Xf=[Xijf],即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=1mj=1nXijfdXij=tr(XfTdX)

上面第二个等式,用到了矩阵的迹的性质。因为两个向量相乘,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,jAijBij

这里第一个等号是全微分公式,第二个等号表达了矩阵导数与微分的联系:全微分 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} dX1=X1dXX1

  • 行列式

d ∣ X ∣ = t r ( X # d X ) d|X|=tr(X^{\#}dX) dX=tr(X#dX)

​ 其中 X # X^\# X#表示X矩阵的伴随矩阵,在X可逆的时候,可以写作:
d ∣ X ∣ = ∣ X ∣ t r ( X − 1 d X ) d|X|=|X|tr(X^{-1}dX) dX=Xtr(X1dX)

  • 逐元素乘法

d ( X ⊙ Y ) = d X ⊙ Y + X ⊙ d Y d(X\odot Y)=dX\odot Y+X\odot dY d(XY)=dXY+XdY

​ 其中, ⊙ \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(XfTdX)求出左侧的微分 d f df df后,该如何写成右侧的形式并得到导数?这需要一些迹技巧:

  1. 标量套上迹: a = t r ( a ) a=tr(a) a=tr(a)
  2. 转置: t r ( A T ) = t r ( A ) tr(A^T)=tr(A) tr(AT)=tr(A)
  3. 线性: 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)
  4. 矩阵乘法交换: 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
  5. 矩阵乘法/逐元素乘法交换: 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(BC))=tr((AB)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(XfTdX),即能得到导数。

复合函数

假设已求得 ∂ f ∂ Y \frac{{\partial f}}{\partial Y} Yf,而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(YfTdY)
  • 再将dY用dX表示出来代入,并使用迹技巧将其他项交换至dX左侧,即可得到 ∂ f ∂ X \frac{\partial f}{\partial X} Xf

例子

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(YfTdY)=tr(YfTAdXB)=tr(BYfTAdX)=tr((ATYfBT)TdX)
上面的式子与 d f = t r ( ∂ f ∂ X T d X ) df=tr(\frac{{\partial f}}{\partial X}^TdX) df=tr(XfTdX)对比,即可得到 ∂ f ∂ X = A T ∂ f ∂ Y B T \frac{\partial f}{\partial X}=A^T \frac{\partial f}{\partial Y }B^T Xf=ATYfBT

注意, 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 YfTAdX 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(XfTdX)对比,可得
∂ f ∂ X = a b T \frac{\partial f}{\partial X}=ab^T Xf=abT

参考文档

  • https://zhuanlan.zhihu.com/p/24709748
  • https://www.jianshu.com/p/d0110f242b64
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一朝英雄拔剑起

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值