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

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

一、标量向量矩阵求导case

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

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

自变量\因变量 标量 y y 向量y 矩阵Y
标量 x x y x \frac{\partial y}{\partial x} y x \frac{\partial \textbf{y}}{\partial x} Y x \frac{\partial Y}{\partial x}
向量x y x \frac{\partial y}{\partial \textbf{x}} y x \frac{\partial \textbf{y}}{\partial \textbf{x}} Y x \frac{\partial Y}{\partial \textbf{x}}
矩阵X y X \frac{\partial y}{\partial X} y X \frac{\partial \textbf{y}}{\partial X} Y X \frac{\partial Y}{\partial X}

二、向量矩阵求导布局

2.1 分子布局(Numerator Layout)

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

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

2.2 分母布局(Denominator Layout)

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

2.3 总结

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

三、定义法求导

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

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

【例如】:对于实值函数 y = x T A x y=x^TAx ,其中 x R n × 1 , A R n × n x\in R^{n\times 1},A\in R^{n\times n} x T A x x \frac{\partial x^TAx}{\partial x} .
已知向量 x \textbf{x} n n 个分量,所以我们先求对其中第 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}
其中 δ i k = 1 i f    i = k \delta_{ik}=1,if\; i=k δ i k = 0 i f    i k \delta_{ik}=0,if\; i\not=k 。因此对于 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

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

对于实值函数 y = a T X b y=a^TXb ,其中 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} a T X b X \frac{\partial a^TXb}{\partial X} .
已知向量 X X n × m n\times m 个分量,所以我们先求对其中第 X i j X_{ij} 个分量的导数。
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
又因为 i = 1 , 2 , . . . , n j = 1 , 2 , . . , m i=1,2,...,n且j=1,2,..,m ,所以将这 n × m n\times m 个求导后的值排列成矩阵后为
a T X b X = a b T \frac{\partial a^TXb}{\partial X}=ab^T

3.3 定义法缺陷

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

四、微分法求导

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

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

4.1 从向量微分到矩阵微分

①向量微分
对于向量 x R n × 1 \textbf{x}\in R^{n\times 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
②矩阵微分

【例如】:假设 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} ,则 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 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}
因此,当两矩阵 A , B A,B 满足 A A B T B^T 同维度时,有如下等式成立
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}
对于矩阵 X R n × m X\in R^{n\times 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]

4.2 矩阵微分的性质

  • 微分加减法: d ( X ± Y ) = d ( X ) ± d ( Y ) d(X\pm Y)=d(X)\pm d(Y)
  • 微分乘法: d ( X Y ) = d ( X ) Y + X d ( Y ) d(XY) = d(X)\cdot Y + X\cdot d(Y)
  • 微分转置: d ( X T ) = [ d ( X ) ] T d(X^T)=[d(X)]^T
  • 微分的迹: d [ t r ( X ) ] = t r [ 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}

4.3 使用微分法对向量矩阵求导

【所需公式】:

  • 标量 x x 的迹是其本身: t r ( x ) = x tr(x) = x
  • 转置不变性: t r ( A T ) = t r ( A ) tr(A^T)=tr(A)
  • 交换律: t r ( A B ) = t r ( B T A T ) = t r ( B A ) tr(AB)=tr(B^TA^T)=tr(BA) ,需要 A , B T A,B^T 同维度
  • 加减法: t r ( A ± B ) = t r ( A ) ± t r ( B ) tr(A\pm B)=tr(A) \pm 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)]
    其中, A , B , C A,B,C 三个矩阵同维度。 A B A \odot B 表示逐元素相乘哈达马积( H a d a m a r d    p r o d u c t Hadamard\; product )
    【例如】
    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}
    【例如】: d ( e X b ) = e X b d ( X b ) \begin{gathered} d(e^{Xb}) =e^{Xb} \odot d(Xb) \end{gathered}

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

① 求微分
d y = a T d ( X ) b dy = a^T d(X)b
② 加迹函数以将 d x 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)

d y d X = ( b a T ) T = a b T \frac{dy}{dX} = (ba^T)^T=ab^T
【例如】: y = H T L H y=H^TLH ,求 H T L H H \frac{\partial H^TLH}{\partial H}
① 求微分
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)
② 加迹函数以将 d x 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}
所以
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

五、链式法则求导

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

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

发布了126 篇原创文章 · 获赞 438 · 访问量 25万+

猜你喜欢

转载自blog.csdn.net/SL_World/article/details/104234581