矩阵运算及求导

基本运算

  矩阵的常见运算如下:

符号描述
A − 1 A^{-1} A1矩阵的逆
det ⁡ ( A ) \det(A) det(A)A的行列式
T r ( A ) Tr(A) Tr(A)矩阵的迹
e i g ( A ) eig(A) eig(A)矩阵的特征值
A T A^T ATA的转置
∥ A ∥ \|A\| AA的范数
A ∘ B A\circ B AB哈达玛积
A ⊗ B A\otimes B AB克罗内克积
A H A^H AHA的共轭转置
A ∗ A^* AA的伴随矩阵

运算规则

  • ( A B ) ∗ = B ∗ A ∗ (AB)^*=B^*A^* (AB)=BA
    *表示求逆,转置,共轭转置等运算

  • ( A + B ) ∗ = ( A ∗ + B ∗ ) (A+B)^*=(A^*+B^*) (A+B)=(A+B)
    *表示转置和共轭转置,对于只改变元素排列方式的运算,该运算性质都是成立的

    以上两个规则也适用于多个矩阵运算的情况

  • ( A − 1 ) T = ( A T ) − 1 ( A H ) − 1 = ( A − 1 ) H (A^{-1})^T=(A^T)^{-1}\quad (A^H)^{-1}=(A^{-1})^H (A1)T=(AT)1(AH)1=(A1)H

  • T r ( A ) = ∑ i = 1 n A i i Tr(A)=\sum_{i=1}^{n}A_{ii} Tr(A)=i=1nAii

  • T r ( A ) = ∑ i = 1 n λ i Tr(A)=\sum_{i=1}^{n}\lambda_i Tr(A)=i=1nλi
    λ \lambda λ为矩阵A的特征值

  • T r ( A ) = T r ( A T ) Tr(A)=Tr(A^T) Tr(A)=Tr(AT)

  • T r ( A B ) = T r ( B A ) T r ( A + B ) = T r ( A ) + T r ( B ) Tr(AB)=Tr(BA)\quad Tr(A+B)=Tr(A)+Tr(B) Tr(AB)=Tr(BA)Tr(A+B)=Tr(A)+Tr(B)
    这也适用于两个矩阵以上的情况

  • a T a = T r ( a a T ) a^Ta=Tr(aa^T) aTa=Tr(aaT)
    a为列向量,这个很好理解,直接拿个例子计算一下就好了。 a T a a^Ta aTa的结果是数值,也可以看作一个1*1的矩阵,这样可以利用上一条规则直接得到。

求导运算

  矩阵的求导法则 这个部分参考了很多资料,但是有些地方不太一样,所以我按照我认为最正确的教程来。
  首先,矩阵的微分主要有6种形式,用表格表示如下:
matrix derivative
下面分别对这6种情况进行说明:
这里的向量指的是列向量,我们用小写字母表示数值变量,黑体小写字母表示向量,黑体大写字母表示矩阵。

  • Scalar-Scalar
    数值变量对数值变量求导是最简单的情况,也是数学里头经常遇到的,得到的结果是函数的导数。

  • Vector-Scalar
    向量对数值变量求导,得到的是一个列向量。
    [ ∂ y ∂ x ] = [ ∂ y i ∂ x ] T [\frac{\partial \textbf {y} } {\partial x}]=[\frac{\partial y_i}{\partial x}]^T [xy]=[xyi]T

  • Matrix-Scalar
    矩阵对数值变量求导,得到的是一个矩阵,该矩阵与原矩阵的形状相同。
    [ ∂ Y ∂ x ] = [ ∂ y i j ∂ x ] [\frac{\partial \textbf {Y} } {\partial x}]=[\frac{\partial y_{ij}}{\partial x}] [xY]=[xyij]

  • Scalar-Vector
    数值变量对向量求导,得到的是一个行向量。
    [ ∂ y ∂ x ] = [ ∂ y i ∂ x j ] [\frac{\partial y} {\partial \textbf {x}}]=[\frac{\partial y_i}{\partial x_j}] [xy]=[xjyi]

  • Vector-Vector
    向量对向量求导,得到的是一个矩阵。
    [ ∂ y ∂ x ] i j = [ ∂ y i ∂ x j ] [\frac{\partial \textbf {y}} {\partial \textbf {x}}]_{ij}=[\frac{\partial y_i}{\partial x_j}] [xy]ij=[xjyi]
    这个和多元积分换元公式里头的雅可比矩阵是一样的形式。

  • Scalar-Matrix
    [ ∂ y ∂ X ] i j = [ ∂ y ∂ x j i ] [\frac{\partial y} {\partial \textbf {X}}]_{ij}=[\frac{\partial y}{\partial x_{ji}}] [Xy]ij=[xjiy]

需要说明的是,矩阵微分的形式有两种,这两种写法求得的结果互为转置,在求解矩阵相关的问题的时候可以采用任意一种,但是不可混用。

常用的求导法则

  这里的很多规则和数值函数里面的求导法则是类似的。

  • d A = 0 d \textbf{A}=\textbf{0} dA=0 这里的A为常数矩阵
  • d ( α X ) = α X d(\alpha \textbf{X})=\alpha \textbf{X} d(αX)=αX
  • d ( X + Y ) = d X + d Y d(\textbf{X}+\textbf{Y})=d\textbf{X}+d\textbf{Y} d(X+Y)=dX+dY
  • d ( XY ) = ( d X ) Y + X ( d Y ) d(\textbf{XY})=(d\textbf{X})\textbf{Y}+\textbf{X} (d\textbf{Y}) d(XY)=(dX)Y+X(dY)
  • d ( t r ( X ) ) = t r ( d ( X ) ) d(tr(\textbf{X}))=tr(d(\textbf{X})) d(tr(X))=tr(d(X))
  • d ( X ⊗ Y ) = ( d X ) ⊗ Y + X ⊗ ( d Y ) d(\textbf{X}\otimes \textbf{Y})=(d\textbf{X})\otimes\textbf{Y}+\textbf{X}\otimes (d\textbf{Y}) d(XY)=(dX)Y+X(dY)
  • d ( X ∘ Y ) = ( d X ) ∘ Y + X ∘ ( d Y ) d(\textbf{X}\circ \textbf{Y})=(d\textbf{X})\circ\textbf{Y}+\textbf{X}\circ (d\textbf{Y}) d(XY)=(dX)Y+X(dY)
  • d ( X − 1 ) = − X − 1 ( d X ) X − 1 d(\textbf{X}^{-1})=-\textbf{X}^{-1}(d\textbf{X})\textbf{X}^{-1} d(X1)=X1(dX)X1
    推导过程如下:
    d ( XX − 1 ) = d I = 0 d(\textbf{XX}^{-1})=d\textbf{I}=\textbf{0} d(XX1)=dI=0
    同时
    d ( XX − 1 ) = d ( X ) X − 1 + X ( d X − 1 ) = 0 d(\textbf{XX}^{-1})=d(\textbf{X})\textbf{X}^{-1}+\textbf{X}(d\textbf{X}^{-1})=0 d(XX1)=d(X)X1+X(dX1)=0
  • d X ∗ = ( d X ) ∗ d\textbf{X}^*=(d\textbf{X})^* dX=(dX)
    *表示对矩阵元素进行变换的操作,例如转置等。
  • d ( d e t ( X ) ) = d e t ( X ) t r ( X − 1 d X ) d(det(\textbf{X}))=det(\textbf{X})tr(\textbf{X}^{-1}d\textbf{X}) d(det(X))=det(X)tr(X1dX)
    推导的过程可以看看这个
  • d ( log ⁡ ( d e t ( X ) ) = t r ( X − 1 d X ) d(\log(det(\textbf{X}))=tr(\textbf{X}^{-1}d\textbf{X}) d(log(det(X))=tr(X1dX)
    这个利用链式法则就可以证明

常用的求导运算

  • d a T x d x = d x T a d x = a T \frac{d\textbf{a}^T\textbf{x}}{d\textbf{x}}=\frac{d\textbf{x}^T\textbf{a}}{d\textbf{x}}=\textbf{a}^T dxdaTx=dxdxTa=aT
    这个直接根据定义来就行了,将 a T x \textbf{a}^T\textbf{x} aTx写成数值表达式的形式然后根据数值量对向量求导的公式进行展开即可。

  • d x T x d x = 2 x T \frac{d\textbf{x}^T\textbf{x}}{d\textbf{x}}=2\textbf{x}^T dxdxTx=2xT
    这个也是直接展开就行了。

  • d ( x T a ) 2 d x = 2 x T aa T \frac{d(\textbf{x}^T\textbf{a})^2}{d\textbf{x}}=2\textbf{x}^T\textbf{aa}^T dxd(xTa)2=2xTaaT
    利用链式法则即可。

  • d ( Ax ) d x = A \frac{d(\textbf{A}\textbf{x})}{d\textbf{x}}=A dxd(Ax)=A
    直接利用微分的定义进行推导

  • d x T A d x = A T \frac{d\textbf{x}^T\textbf{A}}{d\textbf{x}}=A^T dxdxTA=AT
    这个我不太会推导,不过可以根据矩阵的形状来确定

  • d x T Ax d x = x T ( A + A T ) \frac{d\textbf{x}^T\textbf{A}\textbf{x}}{d\textbf{x}}=\textbf{x}^T(\textbf{A}+\textbf{A}^T) dxdxTAx=xT(A+AT)
    这个利用之前提到的微分的乘法运算即可

矩阵的迹的求导法则

公式在推导的时候可以直接展开,然后根据元素的下标进行推导,如果记忆的话根据矩阵的形状即可。

  • d tr ( AXB ) d X = BA \frac{d\textbf{tr}(\textbf{AXB})}{d\textbf{X}}=\textbf{BA} dXdtr(AXB)=BA

  • d tr ( A X − 1 B ) d X = − X − 1 BAX − 1 \frac{d\textbf{tr}(\textbf{A}\textbf{X}^{-1}\textbf{B})}{d\textbf{X}}=-\textbf{X}^{-1}\textbf{BAX}^{-1} dXdtr(AX1B)=X1BAX1
    由微分规则, d tr ( A X − 1 B ) = d tr ( BAX − 1 ) = tr ( d ( BAX − 1 ) ) = tr ( BA d ( X − 1 ) ) = − tr ( BA X − 1 ( d X ) X − 1 ) = − tr ( X − 1 BAX − 1 d X ) d\textbf{tr}(\textbf{A}\textbf{X}^{-1}\textbf{B})=d\textbf{tr}(\textbf{BAX}^{-1})=\textbf{tr}(d(\textbf{BAX}^{-1}))=\textbf{tr}(\textbf{BA}d(\textbf{X}^{-1}))=-\textbf{tr}(\textbf{BA}\textbf{X}^{-1}(d\textbf{X})\textbf{X}^{-1})=-\textbf{tr}(\textbf{X}^{-1}\textbf{BAX}^{-1}d\textbf{X}) dtr(AX1B)=dtr(BAX1)=tr(d(BAX1))=tr(BAd(X1))=tr(BAX1(dX)X1)=tr(X1BAX1dX)

  • d det ( X ) d X = det ( X ) X − 1 \frac{d \textbf{det}(\textbf{X})}{d\textbf{X}}=\textbf{det}(\textbf{X})\textbf{X}^{-1} dXddet(X)=det(X)X1

总结

  先只写这么多,矩阵的内容实在太多,以后慢慢整理。我查阅了很多资料,其中的写法不尽相同,矩阵微分计算的结果在形式上也可能不同,其主要表现在矩阵的形状上,在计算和矩阵相关的问题时要选定一种写法,这并不会影响我们的计算结果,如果有任何问题,欢迎指出。

参考资料
  • 7
    点赞
  • 52
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值