矩阵求导总结

矩阵求导总结

参考文章: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}}}] Xf=[Xijf]

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=1nxifdxi=(xf)dx,第一个等号是全微分公式,第二个等号表达了梯度与微分的联系。全微分 d f df df是梯度向量 ∂ f ∂ x ( n × 1 ) \frac{\partial f}{\partial \mathbf{x}}(n×1) xf(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=1mj=1nXijfdXij=tr((Xf)dX)

    其中tr代表迹(trace)是方阵对角线元素之和,满足性质:对尺寸相同的矩阵A,B, t r ( A ⊤ B ) tr(A^\top B) tr(AB)即是矩阵A,B的内积(A、B对应位置元素乘积之和)。与梯度相似,这里第一个等号是全微分公式,第二个等号表达了矩阵导数与微分的联系:全微分 d f df df是导数 ∂ f ∂ X ( m × n ) \frac{\partial f}{\partial X}(m×n) Xf(m×n)与微分矩阵 d X ( m × n ) dX(m×n) dX(m×n)的内积。

​ 矩阵微分的运算法则:

  1. 加减法: d ( X ± Y ) = d X ± d Y d(X±Y)=dX±dY d(X±Y)=dX±dY

  2. 矩阵乘法: d ( X Y ) = ( d X ) Y + X d Y d(XY)=(dX)Y+XdY d(XY)=(dX)Y+XdY

  3. 转置:$d(X^\top )=(dX)^ \top $

  4. 迹: d t r ( X ) = t r ( d X ) dtr(X)=tr(dX) dtr(X)=tr(dX)

  5. 逆: d X − 1 = − X − 1 d X X − 1 dX^{-1}=-X^{-1}dXX^{-1} dX1=X1dXX1(此式可在 X X − 1 = I XX^{-1}=I XX1=I两侧去求微分证明)

  6. 行列式: d ∣ X ∣ = t r ( X ∗ d X ) d |X|=tr(X^*dX) dX=tr(XdX) 其中, 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) dX=Xtr(X1dX)

  7. 逐元素乘法: 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逐个元素相乘

  8. 逐元素函 数: 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((Xf)dX),在求出左侧的微分 d f df df后,该如何写成右侧的形式并得到导数呢?

​ 需要一些的技巧:

  1. 套上迹的标量: a = t r ( a ) a=tr(a) a=tr(a)
  2. 转置: t r ( A ⊤ ) = t r ( A ) tr(A^\top)=tr(A) tr(A)=tr(A),转置不改变对角线元素位置故迹不变
  3. 线性: t r ( A ± B ) = t r ( A ) ± t r ( B ) tr(A±B)=tr(A)±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 和 B ⊤ A和B^\top AB尺寸相同。
  5. 矩阵乘法/逐元素乘法交换: t r ( A ⊤ ( B ⊙ C ) ) = t r ( ( A ⊙ B ) ⊤ C ) tr(A^\top(B\odot C))=tr((A\odot B)^\top C) tr(A(BC))=tr((AB)C),其中 A 、 B 、 C A、B、C ABC尺寸相同,两侧都等于 ∑ 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((Xf)dX),即能得到导数。

特别地,若矩阵退化为向量,对照导数与微分的联系 d f = ∂ f ∂ x ⊤ d x df=\frac{\partial f}{\partial \mathbf{x}}^\top d \mathbf{x} df=xfdx,即能得到导数。

​ 再看复合,假设已经求得 ∂ f ∂ Y \frac{\partial f}{\partial Y} Yf,而 Y Y Y X X X的函数,如何求 ∂ f ∂ X \frac{\partial f}{\partial X} Xf呢?

从微分入手建立复合法则:先写出 d f = t r ( ∂ f ∂ Y ⊤ d Y ) df=tr(\frac{\partial f}{\partial Y}^\top dY) df=tr(YfdY),再将 d Y dY dY d X dX dX表示出来代入,并用迹技巧将其他项交换至 d X dX dX左侧,即可得到 ∂ f ∂ X \frac{\partial f}{\partial X} Xf

​ 看一个例子: 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(YfdY)=tr(YfAdXB)=tr(BYfAdX)=tr((AYfB)dX)
可以得到, ∂ f ∂ X = A ⊤ ∂ f ∂ Y B ⊤ \frac{\partial f}{\partial X}=A^ \top \frac{\partial f}{\partial Y}B^ \top Xf=AYfB

注意:
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,由于AB是常量,dA=dB=0

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值