工科数学基础系列(1)——矩阵微分

工科数学基础系列文章

下面是工科数学基础系列文章的总链接,本人发表这个系列的文章链接均收录于此

数学基础系列文章链接


下面是专栏地址:

工科数学基础系列专栏



前言

这个系列的文章是分享工科数学基础系列


工科数学基础系列(1)——矩阵微分

布局(Layout)

矩阵向量求导引入

在高等数学里面,我们已经学过了标量对标量的求导,比如标量 y 对标量 x 的求导,可以表示为 ∂ y ∂ x \frac{\partial y}{\partial x} xy

有些时候,我们会有一组标量 y i , i = 1 , 2 , ⋯   , m y_i,i=1,2,\cdots,m yi,i=1,2,,m来对一个标量 x 的求导,那么我们会得到一组标量求导的结果:
∂ y i ∂ x , i = 1 , 2. , , m \dfrac{\partial y_i}{\partial x},i=1,2.,,m xyi,i=1,2.,,m
如果我们把这组标量写成向量的形式,即得到维度为m的一个向量 y 对一个标量 x 的求导,那么结果也是一个m维的向量 ∂ y ∂ x \frac{\partial \bf{y}}{\partial x} xy

可见,所谓向量对标量的求导,其实就是向量里的每个分量分别对标量求导,最后把求导的结果排列在一起,按一个向量表示而已。类似的结论也存在于标量对向量的求导,向量对向量的求导,向量对矩阵的求导,矩阵对向量的求导,以及矩阵对矩阵的求导等。

总而言之,所谓的向量矩阵求导本质上就是多元函数求导,仅仅是把把函数的自变量,因变量以及标量求导的结果排列成了向量矩阵的形式,方便表达与计算,更加简洁而已。

为了便于描述,后面如果没有指明,则第一章求导的自变量用 x x x(不加粗) 表示标量 x \bf{x} x(加粗)表示n维向量X 表示 m×n 维度的矩阵,求导的因变量用 y y y(不加粗) 表示标量, y \bf{y} y(加粗)表示m维向量Y表示 p×q 维度的矩阵。

矩阵向量求导定义

根据求导的自变量和因变量是标量,向量还是矩阵,我们有9种可能的矩阵求导定义,如下:

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

这9种里面,标量对标量的求导高数里面就有,不需要我们单独讨论。在剩下的8种情况里面,我们先讨论上图中标量对向量或矩阵求导,向量或矩阵对标量求导,以及向量对向量求导这5种情况。另外三种向量对矩阵的求导,矩阵对向量的求导,以及矩阵对矩阵的求导我们在后面再讲。

前面讲到的例子,维度为m的一个向量y对一个标量 x x x的求导,那么结果也是一个m维的向量 ∂ y ∂ x \frac{\partial \bf{y}}{\partial x} xy。这是我们表格里面向量对标量求导的情况。这里有一个问题没有讲到,就是这个m维求导结果排列成的m维向量到底应该是列向量还是行向量

这个问题的答案是:行向量或者列向量皆可!毕竟我们求导的本质只是把标量求导的结果排列起来,至于是按行排列还是按列排列都是可以的。但是这样也有问题,在我们机器学习算法法优化过程中,如果行向量或者列向量随便写,那么结果就不唯一,乱套了。

为了解决这个问题,我们引入求导布局的概念。

矩阵向量求导布局

矩阵求导,想必许多领域能见到。不同的文献中,同样的式子求导的结果有时候会不一样,仔细观察会发现刚好相差一个转置,于是我们得先说说求导的两个派别(布局)

矩阵求导有两种布局,分子布局(numerator layout)分母布局(denominator layout)。如下所示:

分子布局,就是分子是列向量形式,分母是行向量形式,矩阵的第一个维度以分子为准,即结果是一个 m×n 的矩阵,如下式。
∂ f ( x ) ∂ x 3 × 1 T = [ ∂ f ∂ x 1 , ∂ f ∂ x 2 , ∂ f ∂ x 3 ] = [ 2 x 1 + x 2 , x 1 + x 3 , x 2 ] \dfrac{\partial f(\boldsymbol{x})}{\partial\boldsymbol{x}_{3\times1}^T}=\left[\dfrac{\partial f}{\partial x_1},\dfrac{\partial f}{\partial x_2},\dfrac{\partial f}{\partial x_3}\right]=\left[2x_1+x_2,x_1+x_3,x_2\right] x3×1Tf(x)=[x1f,x2f,x3f]=[2x1+x2,x1+x3,x2]
如果这里的 function 是实向量函数 f 2 × 1 f_{2×1} f2×1 的话,结果就是 2×3 的矩阵了:
∂ f 2 × 1 ( x ) ∂ x 3 × 1 T = [ ∂ f 1 ∂ x 1 ∂ f 1 ∂ x 2 ∂ f 1 ∂ x 3 ∂ f 2 ∂ x 1 ∂ f 2 ∂ x 2 ∂ f 2 ∂ x 3 ] 2 × 3 \frac{\partial\boldsymbol{f}_{2\times1}(\boldsymbol{x})}{\partial\boldsymbol{x}_{3\times1}^{T}}=\begin{bmatrix}\frac{\partial f_{1}}{\partial x_{1}}&\frac{\partial f_{1}}{\partial x_{2}}&\frac{\partial f_{1}}{\partial x_{3}}\\ \frac{\partial f_{2}}{\partial x_{1}}&\frac{\partial f_{2}}{\partial x_{2}}&\frac{\partial f_{2}}{\partial x_{3}}\end{bmatrix}_{2\times3} x3×1Tf2×1(x)=[x1f1x1f2x2f1x2f2x3f1x3f2]2×3
更一般的,
∂ y ∂ x = ( ∂ y 1 ∂ x 1 ∂ y 1 ∂ x 2 ⋯ ∂ y 1 ∂ x n ∂ y 2 ∂ x 1 ∂ y 2 ∂ x 2 ⋯ ∂ y 2 ∂ x n ⋮ ⋮ ⋱ ⋮ ∂ y n ∂ x 1 ∂ y n ∂ x 2 ⋯ ∂ y n ∂ x n ) \frac{\partial\mathbf{y}}{\partial\mathbf{x}}=\left(\begin{array}{cccc}\frac{\partial y_1}{\partial x_1}&\frac{\partial y_1}{\partial x_2}&\cdots&\frac{\partial y_1}{\partial x_n}\\ \frac{\partial y_2}{\partial x_1}&\frac{\partial y_2}{\partial x_2}&\cdots&\frac{\partial y_2}{\partial x_n}\\ \vdots&\vdots&\ddots&\vdots\\ \frac{\partial y_n}{\partial x_1}&\frac{\partial y_n}{\partial x_2}&\cdots&\frac{\partial y_n}{\partial x_n}\end{array}\right) xy= x1y1x1y2x1ynx2y1x2y2x2ynxny1xny2xnyn
上边这个按分子布局向量对向量求导的结果矩阵,我们一般叫做雅克比 (Jacobian)矩阵。有的资料上会使用 ∂ y ∂ x T \frac{\partial \mathbf{y}}{\partial \mathbf{x}^{T}} xTy来定义雅克比矩阵,意义是一样的。

分母布局,就是分母是列向量形式,分子是行向量形式,求导的结果矩阵的第一维度会以分母为准,即结果是一个 n×m 的矩阵,如下式。
∂ f ( x ) ∂ x 3 × 1 = [ ∂ f ∂ x 1 ∂ f ∂ x 2 ∂ f ∂ x 3 ] = [ 2 x 1 + x 2 x 1 + x 3 x 2 ] \dfrac{\partial f(\boldsymbol{x})}{\partial\boldsymbol{x}_{3\times1}}=\begin{bmatrix}\frac{\partial f}{\partial x_1}\\ \frac{\partial f}{\partial x_2}\\ \frac{\partial f}{\partial x_3}\end{bmatrix}=\begin{bmatrix}2x_1+x_2\\ x_1+x_3\\ x_2\end{bmatrix} x3×1f(x)= x1fx2fx3f = 2x1+x2x1+x3x2
如果这里的 function 是实向量函数 f 2 × 1 f_{2×1} f2×1 的话,结果就是 3×2 的矩阵了:
∂ f 2 × 1 T ( x ) ∂ x 3 × 1 = [ ∂ f 1 ∂ x 1 ∂ f 2 ∂ x 1 ∂ f 1 ∂ x 2 ∂ f 2 ∂ x 2 ∂ f 1 ∂ x 3 ∂ f 2 ∂ x 3 ] 3 × 2 \frac{\partial\boldsymbol{f}_{2\times1}^T(\boldsymbol{x})}{\partial\boldsymbol{x}_{3\times1}}=\begin{bmatrix}\frac{\partial f_1}{\partial x_1}&\frac{\partial f_2}{\partial x_1}\\ \frac{\partial f_1}{\partial x_2}&\frac{\partial f_2}{\partial x_2}\\ \frac{\partial f_1}{\partial x_3}&\frac{\partial f_2}{\partial x_3}\end{bmatrix}_{3\times2} x3×1f2×1T(x)= x1f1x2f1x3f1x1f2x2f2x3f2 3×2
更一般的,
∂ y ∂ x = ( ∂ y 1 ∂ x 1 ∂ y 2 ∂ x 1 … ∂ y m ∂ x 1 ∂ y 1 ∂ x 2 ∂ y 2 ∂ x 2 … ∂ y m ∂ x 2 ⋮ ⋮ ⋱ ⋮ ∂ y 1 ∂ x n ∂ y 2 ∂ x n … ∂ y m ∂ x n ) \frac{\partial\mathbf{y}}{\partial\mathbf{x}}=\begin{pmatrix}\frac{\partial y_{1}}{\partial x_{1}}&\frac{\partial y_{2}}{\partial x_{1}}&\ldots&\frac{\partial y_{m}}{\partial x_{1}}\\ \frac{\partial y_{1}}{\partial x_{2}}&\frac{\partial y_{2}}{\partial x_{2}}&\ldots&\frac{\partial y_{m}}{\partial x_{2}}\\ \vdots&\vdots&\ddots&\vdots\\ \frac{\partial y_{1}}{\partial x_{n}}&\frac{\partial y_{2}}{\partial x_{n}}&\ldots&\frac{\partial y_{m}}{\partial x_{n}}\end{pmatrix} xy= x1y1x2y1xny1x1y2x2y2xny2x1ymx2ymxnym
上边这个按分母布局向量对向量求导的结果矩阵,我们一般叫做梯度矩阵。有的资料上会使用 ∂ y T ∂ x \frac{\partial \mathbf{y}^{T}}{\partial \mathbf{x}} xyT来定义梯度矩阵,意义是一样的。

这两种布局间的关系是
∂ y T ∂ x = ( ∂ y ∂ x T ) T \frac{\partial \mathbf{y}^{T}}{\partial \mathbf{x}}=(\frac{\partial \mathbf{y}}{\partial \mathbf{x}^{T}})^T xyT=(xTy)T
有了布局的概念,我们对于上面5种求导类型,可以各选择一种布局来求导。但是对于某一种求导类型,不能同时使用分子布局和分母布局求导。

但是在机器学习算法原理的资料推导里,我们并没有看到说正在使用什么布局,也就是说布局被隐含了,这就需要自己去推演,比较麻烦。但是一般来说我们会使用一种叫混合布局的思路,即如果是向量或者矩阵对标量求导,则使用分子布局为准,如果是标量对向量或者矩阵求导,则以分母布局为准。对于向量对对向量求导,有些分歧。

(1)向量和标量

  • 对于分子布局来说,我们求导结果的维度以分子为主,比如对于我们上面向量对标量求导的例子,结果的维度和分子的维度是一致的。也就是说,如果向量y是一个m维的列向量,那么求导结果 ∂ y ∂ x \frac{\partial \bf{y}}{\partial x} xy也是一个m维列向量。如果向量y是一个m维行向量,那么求导结果 ∂ y ∂ x \frac{\partial \bf{y}}{\partial x} xy也是一个m维行向量

  • 对于分母布局来说,我们求导结果的维度以分母为主,比如对于我们上面向量对标量求导的例子,如果向量y是一个m维的列向量,那么求导结果 ∂ y ∂ x \frac{\partial \bf{y}}{\partial x} xy是一个m维行向量。如果向量y是一个m维的行向量,那么求导结果 ∂ y ∂ x \frac{\partial \bf{y}}{\partial x} xy是一个m维的列向量

可见,对于分子布局和分母布局的结果来说,两者相差一个转置。

(2)矩阵和向量

标量y 对**矩阵X(m×n)**求导:

  • 如果是分子布局,则求导结果的维度为 n×m

  • 如果按分母布局,则求导结果的维度和矩阵X的维度 m×n 是一致的。

这样,对于标量对向量或者矩阵求导,向量或者矩阵对标量求导这4种情况,对应的分子布局和分母布局的排列方式已经确定了。

(3)向量和向量

稍微麻烦点的是向量对向量的求导,本文只讨论列向量对列向量的求导,其他的行向量求导只是差一个转置而已。比如m维列向量yn维列向量x 求导。对于这2个向量求导,那么一共有 mn个标量对标量的求导。求导的结果一般是排列为一个矩阵。

例如,假设 y 为 m 维列向量,x 为 n 维列向量。 ∂ y ∂ x \frac{\partial \bf{y}}{\partial \bf{x}} xy如果采用的是分子布局,则是 m×n 矩阵,而如果采用的是分母布局,则是 n×m 矩阵。

分母布局的另一种求解方法

已知:
A m × n = [ a 11 a 12 … a 1 n a 21 a 22 … a 2 n … … a m 1 a m 2 … a m n ] , x = [ x 1 x 2 … x n ] , 那么 A X = [ a 11 x 1 + a 12 x 2 + . . . + a 1 n x n a 21 x 1 + a 22 x 2 + . . . + a 2 n x n . . . a m 1 x 1 + a m 2 x 2 + . . . + a m n x n ] m = 1 ∂ A x ∂ x = [ a 11 a 21 … a m 1 a 12 a 22 … a m 2 . . . a 1 n a 2 n … a m n ] = A T A_{m\times n}=\begin{bmatrix}a_{11}&a_{12}&\ldots &a_{1n}\\ a_{21}&a_{22}&\ldots&a_{2n}\\ \ldots&\ldots\\ a_{m1}&a_{m2}&\ldots &a_{mn}\end{bmatrix},\mathbf{x}=\begin{bmatrix}x_1\\ x_2\\ \ldots\\ x_{n}\end{bmatrix}, \\那么A_{\mathbf{X}}={\left[\begin{array}{l}{a_{11}x_{1}+a_{12}x_{2}+...+a_{1n}x_{n}}\\ {a_{21}x_{1}+a_{22}x_{2}+...+a_{2n}x_{n}}\\ {...}\\ {a_{m1}x_{1}+a_{m2}x_{2}+...+a_{m n}x_{n}}\end{array}\right]}_{m=1} \\ \dfrac{\partial A x}{\partial x}=\begin{bmatrix}a_{11}a_{21}\ldots a_{m1}\\ a_{12}a_{22}\ldots a_{m2}\\...\\ a_{1n}a_{2n}\ldots a_{mn}\end{bmatrix}=A^T Am×n= a11a21am1a12a22am2a1na2namn ,x= x1x2xn ,那么AX= a11x1+a12x2+...+a1nxna21x1+a22x2+...+a2nxn...am1x1+am2x2+...+amnxn m=1xAx= a11a21am1a12a22am2...a1na2namn =AT
对谁求导数,就以谁(分母)作为主序,得出结果。比如这里x是列向量,求Ax关于x求导数,那么对x的每个分量分别求偏导数(写成一行),然后整理排成一列(同x一样是列向量)

同理有: ∂ A x ∂ x T = A \frac{\partial\mathbf{A}\mathbf{x}}{\partial\mathbf{x}^{\mathbf{T}}}=\mathbf{A} xTAx=A

关于x的转置 x T \mathbf{x}^T xT求导数, x T \mathbf{x}^T xT是行向量,那么Ax分别对 x T \mathbf{x}^T xT向量中的分量求偏导(写成一列),然后整体排成一行(同 x T \mathbf{x}^T xT行向量)。

基本的求导规则

因为向量标量都可以表示成简单的矩阵形式,所以这里我们使用“矩阵”来泛化的表示所有含义。我们使用黑体字母来表示向量,而黑体大写字母表示矩阵。

向量标量求导(相对于数量变量的微分,即自变量是数量变量)

定义

首先是向量 y标量 x 求导,我们假定所有的向量都是列向量
y = [ y 1 y 2 ⋮ y m ] \mathbf{y}=\begin{bmatrix}y_1\\ y_2\\ \vdots\\ y_m\end{bmatrix} y= y1y2ym
分子布局下,
∂ y ∂ x = [ ∂ y 1 ∂ x ∂ y 2 ∂ x ⋮ ∂ y m ∂ x ] \dfrac{\partial\mathbf{y}}{\partial x}=\begin{bmatrix}\frac{\partial y_1}{\partial x}\\ \frac{\partial y_2}{\partial x}\\ \vdots\\ \frac{\partial y_m}{\partial x}\end{bmatrix} xy= xy1xy2xym
而在分母布局下,
∂ y ∂ x = [ ∂ y 1 ∂ x ∂ y 2 ∂ x … ∂ y m ∂ x ] \dfrac{\partial\mathbf{y}}{\partial x}=\begin{bmatrix}\dfrac{\partial y_1}{\partial x}\quad\dfrac{\partial y_2}{\partial x}\quad\dots\quad\dfrac{\partial y_m}{\partial x}\end{bmatrix} xy=[xy1xy2xym]
在接下来的部分将默认使用分母布局,除非是在一些很特殊的情形,这些到时候再详述。

运算法则

相对于数量变量的微分

(1) d ( A ± B ) d t = d A d t ± d B d t {\frac{d\left(A\pm B\right)}{d t}=\frac{d A}{d t}\pm\frac{d B}{d t}} dtd(A±B)=dtdA±dtdB

(2) d ( λ A ) d t = d λ d t A + λ d A d t \frac{d\left(\lambda A\right)}{d t}=\frac{d\lambda}{d t}A+\lambda\frac{d A}{d t} dtd(λA)=dtdλA+λdtdA

(3) d d t ( a T b ) = d a T d t b + a T d b d t \frac{d}{d t}\left(a^Tb\right)=\frac{d a^{T}}{d t}b+a^{T}\frac{d b}{d t} dtd(aTb)=dtdaTb+aTdtdb

(4) d d t ( A B ) = d A d t B + A d B d t \frac{d}{d t}\left(A B\right)=\frac{d A}{d t}B+A\frac{d B}{d t} dtd(AB)=dtdAB+AdtdB

标量 y 对向量 x 求导(数量函数相对于向量的微分)

定义

分母布局
f ( x ) = f ( x 1 , x 2 , ⋯ x n ) x = [ x 1 , x 2 ⋯ x n ] T d f ( x ) d x = [ ∂ f ∂ x 1 ∂ f ∂ x 2 ⋯ ∂ f ∂ x n ] T f\left(x\right)=f\left(x_{1},x_{2},\cdots x_{n}\right)\quad x=\left[x_{1},x_{2}\cdots x_{n}\right]^{\text{T}} \\ \dfrac{df(x)}{dx}=\left[\dfrac{\partial f}{\partial x_1}\quad \dfrac{\partial f}{\partial x_2}\quad \cdots \quad \dfrac{\partial f}{\partial x_n}\right]^T f(x)=f(x1,x2,xn)x=[x1,x2xn]Tdxdf(x)=[x1fx2fxnf]T
此式为数学中梯度的定义,表示为 g r a d [ f ( x ) ] grad[f(x)] grad[f(x)]或者 ∇ f ( x ) \nabla f(x) f(x)

分子布局:
d f ( x ) d x T = [ ∂ f ∂ x 1 ∂ f ∂ x 2 ⋯ ∂ f ∂ x n ] \dfrac{df(x)}{dx^T}=\left[\dfrac{\partial f}{\partial x_1}\quad \dfrac{\partial f}{\partial x_2}\quad \cdots\quad \dfrac{\partial f}{\partial x_n}\right] dxTdf(x)=[x1fx2fxnf]

运算法则

f ( x ) , g ( x ) f(x),g(x) f(x),g(x)

(1) d ( f ± g ) d x = d f d x ± d g d x \dfrac{d\left(f\pm g\right)}{dx}=\dfrac{df}{dx}\pm\dfrac{dg}{dx} dxd(f±g)=dxdf±dxdg

(2) d ( f g ) = d f d x g + f d g d x d\left(fg\right)=\dfrac{df}{dx}g+f\dfrac{dg}{dx} d(fg)=dxdfg+fdxdg

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值