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

发布时间:2023年12月29日

工科数学基础系列文章

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

数学基础系列文章链接


下面是专栏地址:

工科数学基础系列专栏



前言

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


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

布局(Layout)

矩阵向量求导引入

在高等数学里面,我们已经学过了标量对标量的求导,比如标量 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?+x2?x1?+x3?x2?? ?
如果这里的 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维列向量yn维列向量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?= ?a11?a21?am1??a12?a22?am2???a1n?a2n?amn?? ?,x= ?x1?x2?xn?? ?,那么AX?= ?a11?x1?+a12?x2?+...+a1n?xn?a21?x1?+a22?x2?+...+a2n?xn?...am1?x1?+am2?x2?+...+amn?xn?? ?m=1??x?Ax?= ?a11?a21?am1?a12?a22?am2?...a1n?a2n?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= ?y1?y2??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)=dtdaT?b+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)=dtdA?B+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?,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)=dxdf?g+fdxdg?

文章来源:https://blog.csdn.net/qq_37648371/article/details/135299515
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。