欢迎您访问 最编程 本站为您分享编程语言代码,编程技术文章!
您现在的位置是: 首页

3 分钟了解矩阵的标量推导。

最编程 2024-04-05 20:39:13
...

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

标量对矩阵的求导

基础推导

定义

标量f对矩阵X的导数,定义为 ![](juejin.cn/equation?te… f}{\partial X} =[\frac{\partial f}{\partial X_{ij}}]),即f对X逐元素求导排成与X尺寸相同的矩阵。

将矩阵导数与微分建立联系:

![](https://juejin.cn/equation?tex=df = \sum_{i=1}^{m}\sum_{j=1}^n{\frac{\partial f}{\partial X_{ij}}}dX_{ij}=tr(\frac{{\partial f}}{\partial X}^TdX))

上面第二个等式,用到了矩阵的迹的性质。因为两个向量相乘,A中第i个元素乘以B中第i个元素的积,全部在形成的矩阵对角线上,即

![](https://juejin.cn/equation?tex=tr(A^TB)=\sum_{i,j}{A_{ij}B_{ij}})

这里第一个等号是全微分公式,第二个等号表达了矩阵导数与微分的联系:全微分是导数![](juejin.cn/equation?te… f}{\partial X})(mxn)与微分矩阵(mxn)的內积。(这里的m,n是矩阵的大小)

求导公式

运用这些法则,可以建立常用的矩阵微分的运算法则:

  • 加减法
![](https://juejin.cn/equation?tex=d(X\pm Y)=dX\pm dY)
  • 矩阵乘法
![](https://juejin.cn/equation?tex=d(XY)=d(X)Y+XdY)
  • 转置
![](https://juejin.cn/equation?tex=d(X^T)=(dX)^T)
![](https://juejin.cn/equation?tex=dtr(X)=tr(dX))
![](https://juejin.cn/equation?tex=dX^{-1}=-X^{-1}dXX^{-1})
  • 行列式
d|X|=tr(X# dX)

​ 其中X#表示X矩阵的伴随矩阵,在X可逆的时候,可以写作:

![](https://juejin.cn/equation?tex=d|X|=|X|tr(X^{-1}dX))
  • 逐元素乘法
![](https://juejin.cn/equation?tex=d(X\odot Y)=dX\odot Y+X\odot dY)

​ 其中,表示尺寸相同的矩阵X,Y逐元素相乘。

  • 逐元素函数
![](https://juejin.cn/equation?tex=d\sigma(X)=\sigma'(X)\odot dX,\sigma(X)=[\sigma(X_{ij})])

​ 这是逐元素标量函数运算,是逐元素求导数。

![](https://juejin.cn/equation?tex=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)

矩阵迹的运算

利用矩阵导数与微分的联系![](juejin.cn/equation?te… f}}{\partial X}^TdX))求出左侧的微分后,该如何写成右侧的形式并得到导数?这需要一些迹技巧:

  1. 标量套上迹:![](https://juejin.cn/equation?tex=a=tr(a))
  2. 转置:![](https://juejin.cn/equation?tex=tr(A^T)=tr(A))
  3. 线性:![](https://juejin.cn/equation?tex=tr(A\pm B)=tr(A)\pm tr(B))
  4. 矩阵乘法交换:![](https://juejin.cn/equation?tex=tr(AB)=tr(BA)),其中![](https://juejin.cn/equation?tex=A)与![](https://juejin.cn/equation?tex=B^T)的尺寸相同。两侧都等于![](https://juejin.cn/equation?tex=\sum_{i,j}A_{ij}B_{ji})
  5. 矩阵乘法/逐元素乘法交换:![](https://juejin.cn/equation?tex=tr(A^T(B\odot C))=tr((A\odot B)^TC)),其中A,B,C尺寸相同,两侧都等于![](https://juejin.cn/equation?tex=\sum_{i,j}{A_{ij}B_{ij}}C_{ij})

结论

若标量函数f是矩阵X经加减乘法、逆、行列式、逐元素函数等运算构成,则使用相应的运算法则对f求微分,再使用迹技巧给df套上迹并将其它项交换至dX左侧,对照导数与微分的联系![](juejin.cn/equation?te… f}}{\partial X}^TdX)),即能得到导数。

复合函数

假设已求得![](juejin.cn/equation?te… f}}{\partial Y}),而Y是X的函数,如何求![](juejin.cn/equation?te… f}{\partial X})?

  • ![](https://juejin.cn/equation?tex=df=tr(\frac{{\partial f}}{\partial Y}^TdY))
  • 再将dY用dX表示出来代入,并使用迹技巧将其他项交换至dX左侧,即可得到![](https://juejin.cn/equation?tex=\frac{\partial f}{\partial X})。

例子

![](https://juejin.cn/equation?tex=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))

上面的式子与![](juejin.cn/equation?te… f}}{\partial X}^TdX))对比,即可得到![](juejin.cn/equation?te… f}{\partial X}=A^T \frac{\partial f}{\partial Y }B^T)。

注意,,由于A,B是常量,所以,以及我们使用矩阵乘法交换的迹技巧交换了![](juejin.cn/equation?te… f}}{\partial Y}^TAdX)与

例题

,求![](juejin.cn/equation?te… f}{\partial X})。其中是![](juejin.cn/equation?te… 1)列向量,是![](juejin.cn/equation?te… \times n)矩阵,是![](juejin.cn/equation?te… \times 1)列向量,是标量。

解:

![](https://juejin.cn/equation?tex=df = da^T Xb+a^TdXb+a^TXdb=0+a^TdXb+0=a^TdXb \\ tr(df)=tr(a^TdXb))

由于是标量,,所以

![](https://juejin.cn/equation?tex=df =tr(a^TdXb)=tr(ba^TdX)=tr((ab^T)^TdX))

与![](juejin.cn/equation?te… f}{\partial X}^TdX))对比,可得

![](https://juejin.cn/equation?tex=\frac{\partial f}{\partial X}=ab^T)

参考文档

  • https://zhuanlan.zhihu.com/p/24709748
  • https://www.jianshu.com/p/d0110f242b64

推荐阅读