机器学习常用矩阵求导方法

本文主要对在机器学习中常用矩阵求导方法做以总结,以实用为主。同时感谢大佬@刘建平Pinard的博文,浅显易懂,更加全面的资料请见底部参考文献

一、标量向量矩阵求导case

向量可以看做一组标量的排列集合,因此向量的求导可视为对向量中的标量逐个求导,这是向量求导的主要思路。而矩阵的求导方式在此基础上继续衍生。

此处, x x x表示标量, x \textbf{x} x表示向量, X X X表示矩阵。根据标量、向量和矩阵的组合,以下一共罗列了9种,其中在机器学习中常用的是①标量对向量②标量对矩阵的求导。

自变量\因变量标量 y y y向量y矩阵Y
标量 x x x ∂ y ∂ x \frac{\partial y}{\partial x} xy ∂ y ∂ x \frac{\partial \textbf{y}}{\partial x} xy ∂ Y ∂ x \frac{\partial Y}{\partial x} xY
向量x ∂ y ∂ x \frac{\partial y}{\partial \textbf{x}} xy ∂ y ∂ x \frac{\partial \textbf{y}}{\partial \textbf{x}} xy ∂ Y ∂ x \frac{\partial Y}{\partial \textbf{x}} xY
矩阵X ∂ y ∂ X \frac{\partial y}{\partial X} Xy ∂ y ∂ X \frac{\partial \textbf{y}}{\partial X} Xy ∂ Y ∂ X \frac{\partial Y}{\partial X} XY

二、向量矩阵求导布局

2.1 分子布局(Numerator Layout)

求导的结果的维度是分子的维度。这里,我自己的理解是将分子的顺序排在最前。

【例如】有 m × 1 m\times1 m×1列向量 y \textbf{y} y 1 × 1 1\times1 1×1标量 x x x求导 ∂ y ∂ x \frac{\partial \textbf{y}}{\partial x} xy
①分子布局:“优先”分子 y \textbf{y} y,看成 y \textbf{y} y x x x组成的向量 ( m × 1 ) × ( 1 × 1 ) (m\times1)\times (1\times1) (m×1)×(1×1)= m × 1 m\times1 m×1
②分母布局:“优先”分母 x x x,看成 x x x y T \textbf{y}^T yT组成的向量 ( 1 × 1 ) × ( 1 × m ) (1\times 1)\times (1\times m) (1×1)×(1×m)= 1 × m 1\times m 1×m

2.2 分母布局(Denominator Layout)

求导的结果的维度是分母的维度

2.3 总结
自变量\因变量 1 × 1 1\times1 1×1标量 y y y m × 1 m\times1 m×1列向量 y \textbf{y} y p × q p\times q p×q矩阵 Y Y Y
1 × 1 1\times1 1×1标量 x x x—— ∂ y ∂ x \frac{\partial \textbf{y}}{\partial x} xy
分子布局:得 m × 1 m\times 1 m×1列向量(默认)
分母布局:得 1 × m 1\times m 1×m行向量
∂ Y ∂ x \frac{\partial Y}{\partial x} xY
分子布局:得 p × q p\times q p×q矩阵 (默认)
分母布局:得 q × p q\times p q×p矩阵
n × 1 n\times1 n×1列向量 x \textbf{x} x ∂ y ∂ x \frac{\partial y}{\partial \textbf{x}} xy
分子布局:得 1 × n 1\times n 1×n行向量
分母布局:得 n × 1 n\times 1 n×1列向量(默认)
∂ y ∂ x \frac{\partial \textbf{y}}{\partial \textbf{x}} xy
分子布局:得 m × n m\times n m×n雅克比矩阵(默认)
分母布局:得 n × m n\times m n×m梯度矩阵
——
n × m n\times m n×m矩阵 X X X ∂ y ∂ X \frac{\partial y}{\partial X} Xy
分子布局:得 m × n m\times n m×n矩阵
分母布局:得 n × m n\times m n×m矩阵 (默认)
————

三、定义法求导

当对向量或矩阵求导时,对其分量进行逐个求导。

3.1 标量对向量(分母布局)

【例如】:对于实值函数 y = x T A x y=x^TAx y=xTAx,其中 x ∈ R n × 1 , A ∈ R n × n x\in R^{n\times 1},A\in R^{n\times n} xRn×1,ARn×n ∂ x T A x ∂ x \frac{\partial x^TAx}{\partial x} xxTAx.
已知向量 x \textbf{x} x n n n个分量,所以我们先求对其中第 k k k个分量的导数
∂ x T A x ∂ x k = ∂ ∑ i = 1 n ∑ j = 1 n x i A i j x j ∂ x k = ∑ i = 1 n ∑ j = 1 n δ i k A i j x j + ∑ i = 1 n ∑ j = 1 n x i A i j δ j k \frac{\partial x^TAx}{\partial x_k}=\frac{\partial \sum_{i=1}^n \sum_{j=1}^n x_iA_{ij}x_j}{\partial x_k}= \sum_{i=1}^n\sum_{j=1}^n \delta_{ik} A_{ij}x_j+ \sum_{i=1}^n\sum_{j=1}^n x_i A_{ij}\delta_{jk} xkxTAx=xki=1nj=1nxiAijxj=i=1nj=1nδikAijxj+i=1nj=1nxiAijδjk
其中 δ i k = 1 , i f    i = k \delta_{ik}=1,if\; i=k δik=1ifi=k δ i k = 0 , i f    i ≠ k \delta_{ik}=0,if\; i\not=k δik=0ifi=k。因此对于 k = 1 , 2 , . . . , n k=1,2,...,n k=1,2,...,n分别求导排列成向量后如下
∂ x T A x ∂ x k = ∑ j = 1 n A k j x j + ∑ i = 1 n x i A i k = A x + x T A = A x + A T x \frac{\partial x^TAx}{\partial x_k}= \sum_{j=1}^n A_{kj}x_j+ \sum_{i=1}^n x_i A_{ik}=Ax+x^TA=Ax+A^Tx xkxTAx=j=1nAkjxj+i=1nxiAik=Ax+xTA=Ax+ATx

3.2 标量对矩阵(分母布局)

对于实值函数 y = a T X b y=a^TXb y=aTXb,其中 a ∈ R n × 1 , b ∈ R m × 1 , X ∈ R n × m a\in R^{n\times 1},b\in R^{m\times 1},X\in R^{n\times m} aRn×1,bRm×1,XRn×m ∂ a T X b ∂ X \frac{\partial a^TXb}{\partial X} XaTXb.
已知向量 X X X n × m n\times m n×m个分量,所以我们先求对其中第 X i j X_{ij} Xij个分量的导数。
∂ a T X b ∂ X = ∂ ∑ p = 1 n ∑ q = 1 m a p X p q b q ∂ X i j = δ i p δ j q a i b j = a i b j \frac{\partial a^TXb}{\partial X}=\frac{\partial \sum_{p=1}^n \sum_{q=1}^m a_p X_{pq}b_q}{\partial X_{ij}}= \delta_{ip}\delta_{jq} a_i b_j=a_i b_j XaTXb=Xijp=1nq=1mapXpqbq=δipδjqaibj=aibj
又因为 i = 1 , 2 , . . . , n 且 j = 1 , 2 , . . , m i=1,2,...,n且j=1,2,..,m i=1,2,...,nj=1,2,..,m,所以将这 n × m n\times m n×m个求导后的值排列成矩阵后为
∂ a T X b ∂ X = a b T \frac{\partial a^TXb}{\partial X}=ab^T XaTXb=abT

3.3 定义法缺陷

需要逐个对向量和矩阵的每个元素进行求导,然后在排列起来。对于复杂的式子难以做到且效率不高,因此需要一个整体求导解法。

四、微分法求导

回顾一下高等数学中从极限引出的导数和微分。其中 Δ y \Delta y Δy是曲线的增量, d y dy dy是切线函数的增量。

因此导数和微分的关系如下:
【微分】: d y = f ′ ( x ) d x , d x = Δ x dy=f'(x) dx,dx=\Delta x dy=f(x)dxdx=Δx
【导数】: f ′ ( x ) = d y d x f'(x)=\frac{dy}{dx} f(x)=dxdy,也称微商

4.1 从向量微分到矩阵微分

①向量微分
对于向量 x ∈ R n × 1 \textbf{x}\in R^{n\times 1} xRn×1,其微分如下:
d y = ∑ i = 1 n d y d x i d x i = ( d y d x ) T d x dy = \sum_{i=1}^n \frac{dy}{dx_i} dx_i=(\frac{dy}{dx})^T dx dy=i=1ndxidydxi=(dxdy)Tdx
②矩阵微分

【例如】:假设 A ∈ R 3 × 2 , B ∈ R 2 × 3 , A B ∈ R 3 × 3 A\in R^{3\times 2},B\in R^{2\times 3},AB\in R^{3\times 3} AR3×2,BR2×3,ABR3×3,则 n = 3 , m = 2 n=3,m=2 n=3,m=2
A = [ a 11 a 12 a 21 a 22 a 31 a 32 ] B = [ b 11 b 12 b 13 b 21 b 22 b 23 ] \begin{gathered} A=\begin{bmatrix} a_{11} & a_{12} \\ a_{21} & a_{22} \\ a_{31} & a_{32} \\ \end{bmatrix} B=\begin{bmatrix} b_{11} & b_{12} & b_{13}\\ b_{21} & b_{22} & b_{23}\\ \end{bmatrix} \end{gathered} A=a11a21a31a12a22a32B=[b11b21b12b22b13b23]
则两矩阵内积为
A B = [ a 11 b 11 + a 12 b 21 ⋅ ⋅ ⋅ ⋅ ⋅ ⋅ ⋅ ⋅ ⋅ a 21 b 12 + a 22 b 22 ⋅ ⋅ ⋅ ⋅ ⋅ ⋅ ⋅ ⋅ ⋅ a 31 b 13 + a 32 b 23 ] \begin{gathered} A B=\begin{bmatrix} a_{11}b_{11}+a_{12}b_{21} & ··· & ··· \\ ···& a_{21}b_{12}+a_{22}b_{22} & ···\\ ··· & ··· & a_{31}b_{13}+a_{32}b_{23} \\ \end{bmatrix} \end{gathered} AB=a11b11+a12b21a21b12+a22b22a31b13+a32b23
因此,当两矩阵 A , B A,B A,B满足 A A A B T B^T BT同维度时,有如下等式成立
t r ( A B ) = ∑ i = 1 n ( A B ) i i = ∑ i = 1 n ∑ j = 1 m A i j B j i = ∑ j = 1 m ∑ i = 1 n B j i A i j tr(AB)=\sum_{i=1}^n(AB)_{ii}=\sum_{i=1}^n\sum_{j=1}^m A_{ij}B_{ji}=\sum_{j=1}^m\sum_{i=1}^n B_{ji}A_{ij} tr(AB)=i=1n(AB)ii=i=1nj=1mAijBji=j=1mi=1nBjiAij
对于矩阵 X ∈ R n × m X\in R^{n\times m} XRn×m,其微分如下:
d y = ∑ i = 1 n ∑ j = 1 m d y X i j d X i j = ∑ i , j = 1 ( d y X j i ) T d X i j = t r [ ( d y X ) T d X ] dy = \sum_{i=1}^n\sum_{j=1}^m \frac{dy}{X_{ij}} dX_{ij} = \sum_{i,j=1}(\frac{dy}{X_{ji}})^T dX_{ij} =tr[(\frac{dy}{X})^T dX] dy=i=1nj=1mXijdydXij=i,j=1(Xjidy)TdXij=tr[(Xdy)TdX]

4.2 矩阵微分的性质
  • 微分加减法: d ( X ± Y ) = d ( X ) ± d ( Y ) d(X\pm Y)=d(X)\pm d(Y) d(X±Y)=d(X)±d(Y)
  • 微分乘法: d ( X Y ) = d ( X ) ⋅ Y + X ⋅ d ( Y ) d(XY) = d(X)\cdot Y + X\cdot d(Y) d(XY)=d(X)Y+Xd(Y)
  • 微分转置: d ( X T ) = [ d ( X ) ] T d(X^T)=[d(X)]^T d(XT)=[d(X)]T
  • 微分的迹: d [ t r ( X ) ] = t r [ d ( X ) ] d[tr(X)]=tr[d(X)] d[tr(X)]=tr[d(X)]
  • 逆矩阵微分: d ( X − 1 ) = − X − 1 d ( X ) X − 1 d(X^{-1})=-X^{-1}d(X)X^{-1} d(X1)=X1d(X)X1
4.3 使用微分法对向量矩阵求导

【所需公式】:

  • 标量 x x x的迹是其本身: t r ( x ) = x tr(x) = x tr(x)=x
  • 转置不变性: t r ( A T ) = t r ( A ) tr(A^T)=tr(A) tr(AT)=tr(A)
  • 交换律: t r ( A B ) = t r ( B T A T ) = t r ( B A ) tr(AB)=tr(B^TA^T)=tr(BA) tr(AB)=tr(BTAT)=tr(BA) ,需要 A , B T A,B^T A,BT同维度
  • 加减法: 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 C ] = t r [ A T ( B ⊙ C ) ] tr[(A\odot B)^T C]=tr[A^T (B\odot C)] tr[(AB)TC]=tr[AT(BC)]
    其中, A , B , C A,B,C A,B,C三个矩阵同维度。 A ⊙ B A \odot B AB表示逐元素相乘哈达马积( H a d a m a r d    p r o d u c t Hadamard\; product Hadamardproduct)
    【例如】
    A ⊙ B = [ 1 2 3 4 ] ⊙ [ 1 2 3 4 ] = [ 1 ⋅ 1 2 ⋅ 2 3 ⋅ 3 4 ⋅ 4 ] = [ 1 4 9 16 ] \begin{gathered} A \odot B= \begin{bmatrix} 1 & 2 \\ 3 & 4 \\ \end{bmatrix}\odot \begin{bmatrix} 1 & 2 \\ 3 & 4 \\ \end{bmatrix} = \begin{bmatrix} 1\cdot1 & 2\cdot 2 \\ 3\cdot 3 & 4\cdot 4 \\ \end{bmatrix} = \begin{bmatrix} 1 & 4 \\ 9 & 16 \\ \end{bmatrix} \end{gathered} AB=[1324][1324]=[11332244]=[19416]
    【例如】: d ( e X b ) = e X b ⊙ d ( X b ) \begin{gathered} d(e^{Xb}) =e^{Xb} \odot d(Xb) \end{gathered} d(eXb)=eXbd(Xb)

【求导步骤】:如 y = a T X b y=a^TXb y=aTXb,求 d y d X \frac{dy}{dX} dXdy
已知
d y = t r [ ( d y X ) T d X ] dy =tr[(\frac{dy}{X})^T dX] dy=tr[(Xdy)TdX]

① 求微分
d y = a T d ( X ) b dy = a^T d(X)b dy=aTd(X)b
② 加迹函数以将 d x dx dx调换到最右调整矩阵乘积顺序
d y = t r ( d y ) = t r ( a T d ( X ) b ) = t r ( b a T d X ) dy = tr(dy)=tr(a^T d(X)b) = tr(ba^T dX) dy=tr(dy)=tr(aTd(X)b)=tr(baTdX)

d y d X = ( b a T ) T = a b T \frac{dy}{dX} = (ba^T)^T=ab^T dXdy=(baT)T=abT
【例如】: y = H T L H y=H^TLH y=HTLH,求 ∂ H T L H ∂ H \frac{\partial H^TLH}{\partial H} HHTLH
① 求微分
d y = d ( H T ) L H + H T L d ( H ) = d ( H ) T L H + H T L d ( H ) dy = d(H^T)LH+H^TLd(H)= d(H)^TLH+H^TLd(H) dy=d(HT)LH+HTLd(H)=d(H)TLH+HTLd(H)
② 加迹函数以将 d x dx dx调换到最右
d y = t r ( d y ) = t r [ d ( H ) T L H + H T L d ( H ) ] = t r [ d ( H ) T L H ] + t r [ H T L d ( H ) ] = t r [ H T L T d ( H ) ] + t r [ H T L d ( H ) ] = t r [ H T ( L T + L ) d H ] \begin{aligned} dy = tr(dy) & = tr[d(H)^TLH+H^TLd(H)]=tr[d(H)^TLH]+tr[H^TLd(H)] \\ & = tr[H^TL^Td(H)]+tr[H^TLd(H)] \\ & = tr[H^T(L^T+L)dH] \\ \end{aligned} dy=tr(dy)=tr[d(H)TLH+HTLd(H)]=tr[d(H)TLH]+tr[HTLd(H)]=tr[HTLTd(H)]+tr[HTLd(H)]=tr[HT(LT+L)dH]
所以
d y d H = ∂ H T L H ∂ H = ( L T + L ) T H = ( L + L T ) H \frac{d y}{d H} = \frac{\partial H^TLH}{\partial H} = (L^T+L)^TH=(L+L^T)H dHdy=HHTLH=(LT+L)TH=(L+LT)H

五、链式法则求导

矩阵的链式法则详情求导见机器学习中的矩阵向量求导四

【参考文献】
[1] 刘建平.机器学习中的矩阵向量求导[一]
[2] 刘建平.机器学习中的矩阵向量求导[二]
[3] 刘建平.机器学习中的矩阵向量求导[三]
[4] 刘建平.机器学习中的矩阵向量求导[四]
[5] 矩阵求导术(上)[知乎]【排版真心不敢恭维】
[6] 矩阵求导术(下)[知乎]【排版真心不敢恭维】
[7] 知乎-微分、导数与积分的关系

  • 5
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

SL_World

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

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

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

打赏作者

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

抵扣说明:

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

余额充值