下面是工科数学基础系列文章的总链接,本人发表这个系列的文章链接均收录于此
下面是专栏地址:
这个系列的文章是分享工科数学基础系列
在高等数学里面,我们已经学过了标量对标量的求导,比如标量 y 对标量 x 的求导,可以表示为 ∂ y ∂ x \frac{\partial y}{\partial x} ∂x∂y
有些时候,我们会有一组标量 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 ∂x∂yi,i=1,2.,,m
如果我们把这组标量写成向量的形式,即得到维度为m的一个向量 y 对一个标量 x 的求导,那么结果也是一个m维的向量: ∂ y ∂ x \frac{\partial \bf{y}}{\partial x} ∂x∂y
可见,所谓向量对标量的求导,其实就是向量里的每个分量分别对标量求导,最后把求导的结果排列在一起,按一个向量表示而已。类似的结论也存在于标量对向量的求导,向量对向量的求导,向量对矩阵的求导,矩阵对向量的求导,以及矩阵对矩阵的求导等。
总而言之,所谓的向量矩阵求导本质上就是多元函数求导,仅仅是把把函数的自变量,因变量以及标量求导的结果排列成了向量矩阵的形式,方便表达与计算,更加简洁而已。
为了便于描述,后面如果没有指明,则第一章求导的自变量用 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} ∂x∂y | ∂ y ∂ x \frac{\partial \bf{y}}{\partial x} ∂x∂y | ∂ Y ∂ x \frac{\partial \bf{Y}}{\partial x} ∂x∂Y |
向量x | ∂ y ∂ x \frac{\partial y}{\partial \bf{x}} ∂x∂y | ∂ y ∂ x \frac{\partial \bf{y}}{\partial \bf{x}} ∂x∂y | ∂ Y ∂ x \frac{\partial \bf{Y}}{\partial \bf{x}} ∂x∂Y |
矩阵X | ∂ y ∂ X \frac{\partial y}{\partial \bf{X}} ∂X∂y | ∂ y ∂ X \frac{\partial \bf{y}}{\partial \bf{X}} ∂X∂y | ∂ Y ∂ X \frac{\partial \bf{Y}}{\partial \bf{X}} ∂X∂Y |
这9种里面,标量对标量的求导高数里面就有,不需要我们单独讨论。在剩下的8种情况里面,我们先讨论上图中标量对向量或矩阵求导,向量或矩阵对标量求导,以及向量对向量求导这5种情况。另外三种向量对矩阵的求导,矩阵对向量的求导,以及矩阵对矩阵的求导我们在后面再讲。
前面讲到的例子,维度为m的一个向量y对一个标量 x x x的求导,那么结果也是一个m维的向量: ∂ y ∂ x \frac{\partial \bf{y}}{\partial x} ∂x∂y。这是我们表格里面向量对标量求导的情况。这里有一个问题没有讲到,就是这个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×1T∂f(x)=[∂x1∂f,∂x2∂f,∂x3∂f]=[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×1T∂f2×1(x)=[∂x1∂f1∂x1∂f2∂x2∂f1∂x2∂f2∂x3∂f1∂x3∂f2]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) ∂x∂y= ∂x1∂y1∂x1∂y2⋮∂x1∂yn∂x2∂y1∂x2∂y2⋮∂x2∂yn⋯⋯⋱⋯∂xn∂y1∂xn∂y2⋮∂xn∂yn
上边这个按分子布局的向量对向量求导的结果矩阵,我们一般叫做雅克比 (Jacobian)矩阵。有的资料上会使用 ∂ y ∂ x T \frac{\partial \mathbf{y}}{\partial \mathbf{x}^{T}} ∂xT∂y来定义雅克比矩阵,意义是一样的。
分母布局,就是分母是列向量形式,分子是行向量形式,求导的结果矩阵的第一维度会以分母为准,即结果是一个 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×1∂f(x)= ∂x1∂f∂x2∂f∂x3∂f = 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×1∂f2×1T(x)= ∂x1∂f1∂x2∂f1∂x3∂f1∂x1∂f2∂x2∂f2∂x3∂f2 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} ∂x∂y= ∂x1∂y1∂x2∂y1⋮∂xn∂y1∂x1∂y2∂x2∂y2⋮∂xn∂y2……⋱…∂x1∂ym∂x2∂ym⋮∂xn∂ym
上边这个按分母布局的向量对向量求导的结果矩阵,我们一般叫做梯度矩阵。有的资料上会使用 ∂ y T ∂ x \frac{\partial \mathbf{y}^{T}}{\partial \mathbf{x}} ∂x∂yT来定义梯度矩阵,意义是一样的。
这两种布局间的关系是
∂ y T ∂ x = ( ∂ y ∂ x T ) T \frac{\partial \mathbf{y}^{T}}{\partial \mathbf{x}}=(\frac{\partial \mathbf{y}}{\partial \mathbf{x}^{T}})^T ∂x∂yT=(∂xT∂y)T
有了布局的概念,我们对于上面5种求导类型,可以各选择一种布局来求导。但是对于某一种求导类型,不能同时使用分子布局和分母布局求导。
但是在机器学习算法原理的资料推导里,我们并没有看到说正在使用什么布局,也就是说布局被隐含了,这就需要自己去推演,比较麻烦。但是一般来说我们会使用一种叫混合布局的思路,即如果是向量或者矩阵对标量求导,则使用分子布局为准,如果是标量对向量或者矩阵求导,则以分母布局为准。对于向量对对向量求导,有些分歧。
(1)向量和标量
对于分子布局来说,我们求导结果的维度以分子为主,比如对于我们上面向量对标量求导的例子,结果的维度和分子的维度是一致的。也就是说,如果向量y是一个m维的列向量,那么求导结果 ∂ y ∂ x \frac{\partial \bf{y}}{\partial x} ∂x∂y也是一个m维列向量。如果向量y是一个m维行向量,那么求导结果 ∂ y ∂ x \frac{\partial \bf{y}}{\partial x} ∂x∂y也是一个m维行向量。
对于分母布局来说,我们求导结果的维度以分母为主,比如对于我们上面向量对标量求导的例子,如果向量y是一个m维的列向量,那么求导结果 ∂ y ∂ x \frac{\partial \bf{y}}{\partial x} ∂x∂y是一个m维行向量。如果向量y是一个m维的行向量,那么求导结果 ∂ y ∂ x \frac{\partial \bf{y}}{\partial x} ∂x∂y是一个m维的列向量。
可见,对于分子布局和分母布局的结果来说,两者相差一个转置。
(2)矩阵和向量
标量y 对**矩阵X(m×n)**求导:
如果是分子布局,则求导结果的维度为 n×m 。
如果按分母布局,则求导结果的维度和矩阵X的维度 m×n 是一致的。
这样,对于标量对向量或者矩阵求导,向量或者矩阵对标量求导这4种情况,对应的分子布局和分母布局的排列方式已经确定了。
(3)向量和向量
稍微麻烦点的是向量对向量的求导,本文只讨论列向量对列向量的求导,其他的行向量求导只是差一个转置而已。比如m维列向量y 对 n维列向量x 求导。对于这2个向量求导,那么一共有 mn个标量对标量的求导。求导的结果一般是排列为一个矩阵。
例如,假设 y 为 m 维列向量,x 为 n 维列向量。 ∂ y ∂ x \frac{\partial \bf{y}}{\partial \bf{x}} ∂x∂y如果采用的是分子布局,则是 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= a11a21…am1a12a22…am2………a1na2namn ,x= x1x2…xn ,那么AX= a11x1+a12x2+...+a1nxna21x1+a22x2+...+a2nxn...am1x1+am2x2+...+amnxn m=1∂x∂Ax= a11a21…am1a12a22…am2...a1na2n…amn =AT
对谁求导数,就以谁(分母)作为主序,得出结果。比如这里x是列向量,求Ax关于x求导数,那么对x的每个分量分别求偏导数(写成一行),然后整理排成一列(同x一样是列向量)。
同理有: ∂ A x ∂ x T = A \frac{\partial\mathbf{A}\mathbf{x}}{\partial\mathbf{x}^{\mathbf{T}}}=\mathbf{A} ∂xT∂Ax=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= y1y2⋮ym
在分子布局下,
∂ 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} ∂x∂y= ∂x∂y1∂x∂y2⋮∂x∂ym
而在分母布局下,
∂ 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} ∂x∂y=[∂x∂y1∂x∂y2…∂x∂ym]
在接下来的部分将默认使用分母布局,除非是在一些很特殊的情形,这些到时候再详述。
相对于数量变量的微分
(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
分母布局:
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,x2⋯xn]Tdxdf(x)=[∂x1∂f∂x2∂f⋯∂xn∂f]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)=[∂x1∂f∂x2∂f⋯∂xn∂f]
对 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