前言
学机器人真是啥都要掌握呢,线性代数,概率论,泛函,实分析,优化理论,还有编程,仿真…感觉一年半载才能入门。
这个栏又要开一个新坑,线性代数,包括矩阵分析,矩阵计算,向量和矩阵的各种性质blabla。
基础的线性代数比如矩阵是啥向量是啥就略过了,直接进入与机器学习紧密相关的矩阵求导。
分子和分母布局
许多矩阵求导解析中都会谈到布局的概念,也就是分子布局分母布局,但是我记不住啊!不过也有好记的方法:
谁转置,就不是谁的布局;谁是列向量,就是谁的布局。
当然,以上这个方法得满足一些约定条件,可是记忆这些约定又很麻烦(我还是记不住),因此还是直观的展示布局方法,不整这些耗费脑细胞的布局命名。
标量,向量,矩阵
默认字母带数字下标 x 0 x_0 x0是标量。默认向量 x = ( x 1 , x 2 , … , x n ) T x=(x_1,x_2,\dots,x_n)^T x=(x1,x2,…,xn)T是列向量, x T x^T xT是行向量, x ∈ R n x \in R^n x∈Rn。默认大写字母 X X X是矩阵。
为了简化公式,输入的矩阵不超过二阶,输入的向量不超过三维。
函数
将函数输出的类型作为函数类型,函数的输入可以是标量、向量和矩阵(有点C++里函数重载的意思)。
因此,可以将矩阵求导问题,看作是函数对矩阵的求导。
标量函数
输出是标量的函数就是标量函数。那么三种输入的标量函数举例:
f
(
x
0
)
=
3
x
0
f
(
x
)
=
x
1
2
+
2
x
2
2
+
2
x
1
x
2
+
x
3
f
(
X
)
=
x
11
2
+
2
x
11
x
12
+
x
21
x
22
+
2
x
22
2
\begin{aligned} f(x_0)&=3x_0 \\ \quad \\ f(x)&= x_1^2+2x_2^2+2x_1x_2+x_3 \\ \quad \\ f(X)&=x_{11}^2+2x_{11}x_{12}+x_{21}x_{22}+2x_{22}^2 \end{aligned}
f(x0)f(x)f(X)=3x0=x12+2x22+2x1x2+x3=x112+2x11x12+x21x22+2x222
可以看出,标量函数,实际上就是输入分量之间的各种组合多项式。
向量函数
假设向量函数的输出是三维的,则不同的输入对应的函数举例:
f
(
x
0
)
=
[
2
x
0
x
0
2
x
0
+
2
]
f
(
x
)
=
[
x
1
2
+
2
x
2
2
x
2
2
+
2
x
3
2
x
3
+
2
x
1
x
2
]
f
(
X
)
=
[
x
11
2
+
2
x
22
2
x
12
2
+
x
21
x
22
2
x
21
]
\begin{aligned} f(x_0)&= \begin{bmatrix} 2x_0 \\ x_0^2 \\ x_0+2 \end{bmatrix} \\ \quad \\ f(x)&= \begin{bmatrix} x_1^2+2x_2^2 \\ x_2^2+2x_3^2 \\ x_3+2x_1x_2 \\ \end{bmatrix} \\ \quad \\ f(X)&= \begin{bmatrix} x_{11}^2+2x_{22}^2 \\ x_{12}^2+x_{21}x_{22} \\ 2x_{21} \end{bmatrix} \end{aligned}
f(x0)f(x)f(X)=⎣⎡2x0x02x0+2⎦⎤=⎣⎡x12+2x22x22+2x32x3+2x1x2⎦⎤=⎣⎡x112+2x222x122+x21x222x21⎦⎤
矩阵函数
假设输出的矩阵是3x2的,则不同输入类型的函数举例:
f
(
x
0
)
=
[
2
x
0
x
0
x
0
2
1
x
0
+
2
x
0
2
+
2
x
0
]
f
(
x
)
=
[
x
1
2
+
2
x
2
2
x
1
x
2
+
3
x
2
2
+
2
x
3
2
x
2
2
+
2
x
1
x
3
+
2
x
1
x
2
x
3
]
f
(
X
)
=
[
x
11
2
+
2
x
22
2
x
11
+
2
x
12
2
+
x
21
x
22
2
x
21
2
+
2
x
21
2
x
21
x
22
2
]
\begin{aligned} f(x_0)&= \begin{bmatrix} 2x_0 & x_0 \\ x_0^2 & 1 \\ x_0+2 & x_0^2+2x_0\\ \end{bmatrix} \\ \quad \\ f(x)&= \begin{bmatrix} x_1^2+2x_2^2 & x_1x_2+3 \\ x_2^2+2x_3^2 & x_2^2+2x_1\\ x_3+2x_1x_2 & x_3\\ \end{bmatrix} \\ \quad \\ f(X)&= \begin{bmatrix} x_{11}^2+2x_{22}^2 & x_{11}+2\\ x_{12}^2+x_{21}x_{22} & 2x_{21}^2+2x_{21}\\ 2x_{21} & x_{22}^2 \\ \end{bmatrix} \end{aligned}
f(x0)f(x)f(X)=⎣⎡2x0x02x0+2x01x02+2x0⎦⎤=⎣⎡x12+2x22x22+2x32x3+2x1x2x1x2+3x22+2x1x3⎦⎤=⎣⎡x112+2x222x122+x21x222x21x11+22x212+2x21x222⎦⎤
函数求导
标量函数求导
以向量输入为例,如果输入是列向量,则求导公式为:
∂
f
∂
x
=
[
∂
f
∂
x
1
∂
f
∂
x
2
∂
f
∂
x
3
]
\frac {\partial f}{\partial x}=\begin{bmatrix} \frac {\partial f}{\partial x_1 } \\ \frac {\partial f}{\partial x_2}\\ \frac {\partial f}{\partial x_3}\\ \end{bmatrix}
∂x∂f=⎣⎢⎡∂x1∂f∂x2∂f∂x3∂f⎦⎥⎤
如果输入是行向量,则有:
∂
f
∂
x
T
=
[
∂
f
∂
x
1
,
∂
f
∂
x
2
,
∂
f
∂
x
3
]
=
(
∂
f
∂
x
)
T
\frac {\partial f}{\partial x^T}=\begin{bmatrix} \frac {\partial f}{\partial x_1}, \frac {\partial f}{\partial x_2}, \frac {\partial f}{\partial x_3} \end{bmatrix} = (\frac {\partial f}{\partial x})^T
∂xT∂f=[∂x1∂f,∂x2∂f,∂x3∂f]=(∂x∂f)T
由以上公式可以看出,标量函数求导后的布局,和输入的布局是相同的,输入是列向量,求导布局也是列向量。
注意:在部分机器学习的求导中,标量对列向量求导是行向量,这就是所谓的分子布局。但是分母布局和分子布局只是计算的约定不同而已,因此在这里不会使用思维方式更复杂的分子布局(甚至我都不想提到这点)。
向量函数求导
以向量输入为例,假定输入是列向量,输出也是列向量,我们考虑对三个输出标量分别求导,然后把结果以列的形式拼在一起:
∂
f
∂
x
=
[
∂
f
1
∂
x
∂
f
2
∂
x
∂
f
3
∂
x
]
=
[
∂
f
1
∂
x
1
∂
f
1
∂
x
2
∂
f
1
∂
x
3
∂
f
2
∂
x
1
…
∂
f
3
∂
x
3
]
\frac {\partial f}{\partial x}= \quad \begin{bmatrix} \frac {\partial f_1}{\partial x } \\ \frac {\partial f_2}{\partial x}\\ \frac {\partial f_3}{\partial x}\\ \end{bmatrix} = \quad \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}\\ \dots \\ \frac {\partial f_3}{\partial x_3}\\ \end{bmatrix}
∂x∂f=⎣⎡∂x∂f1∂x∂f2∂x∂f3⎦⎤=⎣⎢⎢⎢⎢⎢⎢⎢⎡∂x1∂f1∂x2∂f1∂x3∂f1∂x1∂f2…∂x3∂f3⎦⎥⎥⎥⎥⎥⎥⎥⎤
m维列向量对n维列向量求导之后,变成了mn维列向量,新的向量空间很难与原向量空间进行变换,因此列向量对列向量求导,行向量对行向量求导都是不规范的。
因此,一般使用行向量对列向量求导(也就是所谓的分母布局):
∂
f
T
∂
x
=
[
∂
f
1
∂
x
,
∂
f
2
∂
x
,
∂
f
3
∂
x
]
=
[
∂
f
1
∂
x
1
,
∂
f
2
∂
x
1
,
∂
f
3
∂
x
1
∂
f
1
∂
x
2
,
∂
f
2
∂
x
2
,
∂
f
3
∂
x
2
∂
f
1
∂
x
3
,
∂
f
2
∂
x
3
,
∂
f
3
∂
x
3
]
\frac {\partial f^T}{\partial x}= \begin{bmatrix} \frac {\partial f_1}{\partial x }, \frac {\partial f_2}{\partial x}, \frac {\partial f_3}{\partial x} \end{bmatrix} \\ =\begin{bmatrix} \frac {\partial f_1}{\partial x_1}, \frac {\partial f_2}{\partial x_1}, \frac {\partial f_3}{\partial x_1}\\ \frac {\partial f_1}{\partial x_2}, \frac {\partial f_2}{\partial x_2}, \frac {\partial f_3}{\partial x_2}\\ \frac {\partial f_1}{\partial x_3}, \frac {\partial f_2}{\partial x_3}, \frac {\partial f_3}{\partial x_3}\\ \end{bmatrix}
∂x∂fT=[∂x∂f1,∂x∂f2,∂x∂f3]=⎣⎢⎡∂x1∂f1,∂x1∂f2,∂x1∂f3∂x2∂f1,∂x2∂f2,∂x2∂f3∂x3∂f1,∂x3∂f2,∂x3∂f3⎦⎥⎤
或者,也可以使用列向量对行向量求导(也就是所谓的分子布局),得到雅可比矩阵:
∂
f
∂
x
T
=
[
∂
f
1
∂
x
∂
f
2
∂
x
∂
f
3
∂
x
]
=
[
∂
f
1
∂
x
1
,
∂
f
1
∂
x
2
,
∂
f
1
∂
x
3
∂
f
2
∂
x
1
,
∂
f
2
∂
x
2
,
∂
f
2
∂
x
3
∂
f
3
∂
x
1
,
∂
f
3
∂
x
2
,
∂
f
3
∂
x
3
]
\frac {\partial f}{\partial x^T}= \begin{bmatrix} \frac {\partial f_1}{\partial x }\\ \frac {\partial f_2}{\partial x}\\ \frac {\partial f_3}{\partial x}\\ \end{bmatrix} \\ =\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}\\ \frac {\partial f_3}{\partial x_1}, \frac {\partial f_3}{\partial x_2}, \frac {\partial f_3}{\partial x_3}\\ \end{bmatrix}
∂xT∂f=⎣⎡∂x∂f1∂x∂f2∂x∂f3⎦⎤=⎣⎢⎡∂x1∂f1,∂x2∂f1,∂x3∂f1∂x1∂f2,∂x2∂f2,∂x3∂f2∂x1∂f3,∂x2∂f3,∂x3∂f3⎦⎥⎤
于是,我们就成功的将标量对向量求导,延伸到了向量对向量求导。
矩阵函数求导
因为矩阵对矩阵、矩阵对向量的求导用的很少,因此这里仅仅举一个求导思路,矩阵函数对列向量求导:
∂
f
∂
x
=
[
∂
f
∂
x
1
∂
f
∂
x
2
∂
f
∂
x
3
]
=
[
[
∂
f
11
∂
x
1
,
∂
f
12
∂
x
1
∂
f
21
∂
x
1
,
∂
f
22
∂
x
1
]
[
∂
f
11
∂
x
2
,
∂
f
12
∂
x
2
∂
f
21
∂
x
2
,
∂
f
22
∂
x
2
]
[
∂
f
11
∂
x
3
,
∂
f
12
∂
x
3
∂
f
21
∂
x
3
,
∂
f
22
∂
x
3
]
]
\frac {\partial f}{\partial x}= \begin{bmatrix} \frac {\partial f}{\partial x_1}\\ \frac {\partial f}{\partial x_2}\\ \frac {\partial f}{\partial x_3}\\ \end{bmatrix} \\ =\begin{bmatrix} \begin{bmatrix} \frac {\partial f_{11}}{\partial x_1}, \frac {\partial f_{12}}{\partial x_1}\\ \frac {\partial f_{21}}{\partial x_1}, \frac {\partial f_{22}}{\partial x_1}\end{bmatrix}\\ \quad \\ \begin{bmatrix} \frac {\partial f_{11}}{\partial x_2}, \frac {\partial f_{12}}{\partial x_2}\\ \frac {\partial f_{21}}{\partial x_2}, \frac {\partial f_{22}}{\partial x_2}\end{bmatrix}\\ \quad \\ \begin{bmatrix} \frac {\partial f_{11}}{\partial x_3}, \frac {\partial f_{12}}{\partial x_3}\\ \frac {\partial f_{21}}{\partial x_3}, \frac {\partial f_{22}}{\partial x_3}\end{bmatrix}\\ \end{bmatrix}
∂x∂f=⎣⎢⎡∂x1∂f∂x2∂f∂x3∂f⎦⎥⎤=⎣⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎡[∂x1∂f11,∂x1∂f12∂x1∂f21,∂x1∂f22][∂x2∂f11,∂x2∂f12∂x2∂f21,∂x2∂f22][∂x3∂f11,∂x3∂f12∂x3∂f21,∂x3∂f22]⎦⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎤
结果是个张量。
后记
本次介绍了矩阵求导里最基础内容,布局。原因是部分教程里总是会说分子分母布局,搞得人稀里糊涂,因此不如直接从求导的形式与列向量联系起来,反而更容易理解。
矩阵求导中,最重要的是标量函数与向量、矩阵输入,以及向量函数与向量输入的求导,这部分将是下篇博客的主题。
最后,雅可比矩阵后续需要单独拿出来进行研究,它与移动机器人控制息息相关。