下面是工科数学基础系列文章的总链接,本人发表这个系列的文章链接均收录于此
下面是专栏地址:
这个系列的文章是分享工科数学基础系列
在高等数学里面,我们已经学过了标量对标量的求导,比如标量 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维列向量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?=
?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?
分母布局:
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?