线性方程组数学原理、矩阵原理及矩阵变换本质、机器学习模型参数求解相关原理讨论

1. 线性方程组

0x1:无处不在的线性方程组

日常生活或生产实际中经常需要求一些量,用未知数 x1,x2,....,xn表示这些量,根据问题的实际情况列出方程组,而最常见的就是线性方程组(当然并不是说只能用线性方程组,深度神经网路里就是非线性方程组)。

需要特别理解和思考的是,数学的各个分支以及自然科学、工程技术中,有不少问题都可以归纳为线性方程组的问题,养成抽象思维非常重要。 

1. 问题场景

某食品厂收到了某种食品2000kg的订单,要求这种食品含脂肪5%,碳水化合物12%,蛋白质15%。该厂准备用5种原料配置这种食品,其中每一种原料含脂肪、碳水化合物、蛋白质的百分比如下表示:

现在的问题是:能否用上述5种原料配置出2000kg的这种食品?如果可以,那么有多少种这种配方?如果不可以,那么如何在满足营养成分的情况下,尽量的靠近目标产量(2000kg)。

这是一个非常贴近现实业务的问题,我们从这个例子出来,来一起体会下机器学习是如何运用线性方程组来解决这种问题的。

2. 将具体问题抽象为行线性方程组

设每种原料(A1、A2、A3、A4、A5)所需要的的量分别为 x1,x2,x3,x4,x5,则将上述问题场景抽象为如下线性方程组:

这个方程是我们在初高中学习中非常熟悉的行方程组,从行视角来看,4行方程组5个未知数,无法完全消元,因此方程组的解有无数多个。对应到问题本身的现实场景就是,在实数域空间(强调重点)有无数种搭配方案可以满足题目的要求。

3. 以列向量形式重写线性方程组

笔者思考:列向量相比行向量,有一种瞬间穿透事物表面,洞悉事物全部内核的哲学意味。如果把行向量比作量的累计,那么列向量则是质的变化,直接纵向穿透事物的所有维度

上面的问题还可以用代数学的视角来重新思考,接下来我们用线性代数的相关知识来重写上述线性方程组。

我们把上述方程组的系数和常数项以列向量的形式抽象为一个增广矩阵:

在这个场景中,列向量的物理意义还是相对明确的,即:每kg原料中包含了4个维度的物质量,这4个维度分别为【原料重量,脂肪量,碳水化合物量,蛋白质量】。A1,A2,A3,A4,A5这5种原料构成了5个实例(样本),每个数据样本的特征维度是4

将改增广矩阵中系数据很和常数矩阵分别写成列向量组的形式:

,其中,。注意向量的转置。

将要求解的未知量用向量组w来表示:

,一个w行向量4个维度都相同,即一个w行向量是一个1维向量。 

它的物理意义是:每kg原料中,对4个维度的物质分别包含多少kg的原料

用向量组简写形式表达上面增广矩阵:

这个公式就是从列向量的角度重新看线性方程组。

笔者思考:在这题的特定场景下,这里w1必须是1维的列向量,因为这是一个现实物理世界中的问题,我们不能说我们取了1kg的原料,我们同时也取了2kg的原料,这是不符合现实的。

但是在其他的抽象逻辑场景中,参数向量w常常可以是高维向量,例如深度神经网络中,参数权重向量w常常是上百甚至上千维的向量,从这个例子也可以更直观地体会到,更高维度的w向量,意味着我们对输入向量X中的不同维度可以由更细粒度的“取舍和控制”,more dimension,more complex

0x2:围绕线性方程组的数学问题

围绕上述线性方程组,需要研究下列几个问题:

1. 线性方程组是否一定有解?如果有解,有多少个解?
2. 如何求线性方程组的解?如何高效地求解?
3. 线性方程组有解时,它的每一个解是否都符合实际问题的需求,就像上面第一小节的线性方程组,在是属于上这个线性方程组有无穷多的解,但是实数域在现实世界往往不太实用,大多时候我们会选择整数域或者一个有限精度的浮点数域,这样解的个数就是有限的了。
4. 线性方程组的解不只一个时,这些解之间有什么关系?

我们在实际业务场景中遇到的建模和机器学习问题,基本上可以归纳为上述问题的抽象和组合。

文章的接下来部分,我们会围绕上面的几个问题展开讨论。

Relevant Link: 

http://liyangbit.com/math/jupyter-latex/
《简明线性代数》 - 丘维声教授
https://zhuanlan.zhihu.com/p/33691914 内含B站的一组线性代数教学视频,讲的超级通俗易懂

2. 线性方程组理论

0x1:线性方程组是否有解的等价问题 - 常数项是否可以由系数矩阵的列向量组线性表出

利用向量的加法运算和数乘运算,我们可以把数域K上的n元线性方程组:

写成:

令:

则该线性方程组可写成:

于是,数域K上的线性方程组有解,等价于下面两种表达:

K中存在一组数,c1,c2,...,cn,使得成立;即 β 可以由a1,a2,...,an线性表出

0x2:线性相关与线性无关的向量组

在上一小节中,我们把线性方程组有没有解的问题归结为:常数项列向量能不能由系数矩阵的列向量线性表出。接下来问题就是,如何研究中一个向量能不能由一个向量组线性表示呢?

这个问题涉及到向量组的线性相关性的讨论,我们由浅入深,借助我们容易理解的3维几何空间来逐渐理解这个概念。

1. 从3维集合空间出发讨论一个向量能否由向量组线性表出的问题

实数域R上的3维向量空间的元素是3元有序实数组。在几何空间(由所有以原点为起点的向量组成)中,取定一个做个坐标系后,每个3元有序实数组表示一个向量。因此可以把看成几何空间。这样我们可以从几何空间出发,来研究中一个向量能否由向量组线性表出的问题。

在几何空间中,设 a1 和 a2 不共线(这是向量基的充分条件)。

如果 a3 可以由 a1,a2 线性表出,则 a1,a2,a3 共面;

如果 a3 不能由 a1,a2 线性表出,则 a1,a2,a3 不共面;

从解析几何角度我们知道:

a1,a2,a3 共面的充分条件是有不全为零的实数 k1,k2,k3,使得 k1a1 + k2a2  +k3a3 = 0;

a1,a2,a3 不共面的充要条件是:从  k1a1 + k2a2  +k4a4 = 0,直接推出 k1 = 0,k2 = 0,k4 = 0,即只有零解。

从几何空间的上述例子受到启发,在中为了研究一个向量能否由一个向量组线性表出,就需要研究上述两种类型的向量组,即定义一组向量基,并且计算该向量能否由该向量基线性表出。

2. 向量组的线性相关性的抽象定义

下面给出向量组线性相关和线性无关的抽象定义公式,具体如何数值化计算该公式,我们文章后面继续深入讨论。

1)线性相关

中向量组称为线性相关的,如果有K中不全为零的数,使得

从线性组合视角来看:即它们有系数不全为零的线性组合等于零向量。

从线性表出视角来看:即向量组中至少有一个向量可以由其余向量线性表出,也可以说这个向量组存在冗余向量,后面讨论PCA的时候会再谈到这点。

从齐次线性方程组视角来看:即齐次线性方程组有非零解

从行列式视角来看:n个n维行向量线性相关当且仅当以为行向量组的矩阵的行列式等于零

2)线性无关

中向量组如果不是线性相关的,则称为线性无关的,即如果从可以推出所有系数全为0,则称向量组是线性无关的。

从线性组合视角来看:即它们只有系数全为零的线性组合才会等于零向量。

从线性表出视角来看:向量组中每一个向量都不能由其余向量线性表出。

从齐次线性方程组视角来看:即齐次线性方程组只有非零解

从行列式视角来看:n个n维行向量线性相关当且仅当以为行向量组的矩阵的行列式不等于零。 

根据上述定义以及解析几何的结论可以得到第一小节的问题:

1. 几何空间中,共面的3个向量是线性相关的,不共面的3个向量是线性无关的;
2. 共线的2个向量是线性相关的,不共线的2个向量是线性无关的;

3. 向量组的延伸组合缩短组的线性相关性性质

1)向量组的缩短组 

1. 如果一个向量组线性无关,则它的任何一个部分组也线性无关;

笔者思考:如果高维的向量组是线性无关的,则它的低维子集组同样也是”紧密的“,即线性无关。

2. 如果一个向量组线性相关,则该向量组中一定存在某个缩短组也线性相关;

我们可以借助3维空间来理解这个定义,下图中,向量E是一个(x,y,z)3维向量,B和C都是(-x,-y,0)的2维平面上的向量,D是(x,y,0)的2维平面向量,D的方向和B/C相反。

可以很容易理解,向量组(B,C,D,E)是线性相关的。同时该向量组的一个缩短组(B,C,E)是线性相关的。

但是也容易看到,另一个缩短组(B,C)是线性无关的。

笔者思考:一个向量组是线性相关的,可以理解为这个向量组中存在一个冗余结构,如果对应的部分组(缩短组)包含了这个冗余结果则该缩短组也同样是线性相关的,但如果该缩短组足够”小“,不包含该冗余结构,则该部分组是线性无关的。需要读者朋友注意的是,从3维几何空间来看线性相关和线性无关非常形象,但是到了更高维的空间就需要借助公式的推导和定义,因为高维空间超出人的想象空间了

2)向量组的延伸组

1. 如果一个向量组的一个部分组线性相关,则整个向量组(延伸组)也线性相关;

证明:

设向量组的一个部分组,例如说线性相关,则有数域K中不全为零的数 k1,k2,...,kt,使得

从而有

由于不全为零,因此线性相关。 

笔者思考:如果我们将线性相关理解为一个存在冗余的的空间结构的话,低维的部分组如果存在冗余结构,则维度升高到更高维后,这种冗余度必然是继续存在的(用真子集的概念来理解)

2. 如果一个向量组的一个部分组线性无关,存在一个它的延伸组也线性无关,同时也存在一个它的延伸组线性相关;

笔者思考:这个很容易理解,一个紧密结构的的向量组,当扩充新的向量进来后,有可能会破坏这种紧密结构。

4. 正交基向量组 - 一种特殊的线性无关向量组

我们来一起看一个特殊的线性无关向量组。

中,向量组”

是线性无关的。证明:

,即

从而:

由此得出,因此向量组是线性无关的。

值得注意的是,这个向量组不仅是相关无关的,而且向量组内的向量还是彼此正交的,这样的向量组可以作为其他向量组的正交基

0x3:向量组的秩

上个章节中我们讨论了向量组中部分组和由部分组线性表出一个另一个向量的话题。

接下来新的问题来了,部分组可以随意选取吗?随便一个部分组都可以线性表出原向量组中的其余向量吗?如果不是,那这个部分组的向量个数是多少呢?部分组的选取是唯一的吗?

带着这些问题,我们来讨论向量组的秩的问题。

1. 从2维几何空间中得到极大线性无关组的启发

如上图所示,几何空间中,设 a1,a2,a3 共面,并且 a1,a2,a3 两两不共线。

它的一个部分组 a1,a2 线性无关;
部分组 a1 也线性无关;

部分组 a1,a2 和部分组 a1 虽然都线性无关,但是它们有区别:

对于部分组 a1 来说,添加上 a3 后得到的部分组 a1,a3 仍然线性无关;
而部分组 a1,a2 添加上 a3 后得到的 a1,a2,a3 就线性相关的了;

从几何的视角来看,a1加上a3后,没有改变部分组的“线性无关紧密结构”。而 a1,a2 加上 a3 后,再也无法保持原部分组的”线性无关紧密结构“,变成了线性相关。

这个性质非常有趣,也非常有用,在很多算法中,我们都需要获取并利用这个极大线性无关组。

2. 极大线性无关组的抽象定义

中向量组的一个部分组称为一个极大线性无关组,当且仅当这个部分组本身是线性无关的,但是从向量组的其余向量(如果还有的话)中任取一个添加进去,得到的新的部分组都线性相关。

在上述例子中,a2,a3 和 a1,a3 都是 a1,a2,a3 的一个极大线性无关组。

可以看到,这2个极大线性无关组的向量个数是相等的,这个性质是普遍存在的吗?这2个极大线性无关组之间的关系是怎样的?互相等价的吗?

3. 向量组之间的等价性质

如果向量组的每一个向量都可以由向量组线性表出,则称向量组可以由向量组线性表出。

进一步,如果向量组可以由向量组可以互相线性表出,则称向量组可以由向量组等价,记作.

向量组的等价是向量组之间的一种关系,这种关系具有下述三条特性:

1. 反身性:任何一个向量组都与自身等价;
2. 对称性:
3. 传递性:

由上述基本特性可以推出:向量组的任意两个极大线性无关组等价

需要注意的是,向量组的等价性质,不是数值意义上的等价,而是解空间结构的等价性。 两个向量组等价,是在说这两个向量组的解空间结构相同。解空间结构相同,进而这两个向量组的秩也相同,秩可以理解为描述解空间结构维度的度量。

这里还是从空间几何角度来帮助理解。

1)情形1

设 a1,a2 不同线。如果可以由 a1,a2 线性表出,则一定共面,如下图所示:

可以看到,向量组虽然有3个向量,但是因为和向量组 a1,a2 等价,所以它的秩依然是2。

2)情形2

设 a1,a2 同线,如果可以由 a1,a2 线性表出,则一定共线,即秩为1,如下图:

由上述可以推出一个推论:等价的线性无关的向量组所含向量的个数相等。 

这个推论和我们本章的标题本质是一致的:

方程组(向量组)的解空间结构,就是由该向量组的所有等价的极大线性无关组组成的。其中每个极大线性无关组都是线性无关的,且他们的向量个数相同(等价的向量组有相同的秩),等于原向量组的秩

4. 向量组的秩的抽象定义

向量组的极大线性无关组所含向量的个数称为这个向量组的秩。

0x4:线性方程组有解的充分必要条件

有了上面章节的铺垫后,接下来可以来讨论我们如何直接用线性方程组的系数和常数项判断方程组有没有解,有多少解的问题。

1. 定理1 - 线性方程组有解判别定理

线性方程组有解的充要条件是:它的系数矩阵A与增广矩阵A'有相同的秩。这个定理可以这么理解,线性方程组有解,等价于:

存在一组不全为0的{a1,...,an},使得有解;

也即 β 可以由向量组线性表出;

也即向量组线性相关;

向量组是向量组的一个极大线性无关组,向量组和向量组等价;

需要注意的是,这个定理只能判断线性方程组是否有解,至于是有唯一解还是有无穷解无法判断。 

2. 定理2 - 线性方程组解个数判别定理

线性方程组有解时,如果它的系数矩阵A的秩等于未知量的个数n,则方程组有唯一解;

如果A的秩小于n,则方程组有无穷多个解;

3. 推论 - 齐次线性方程组有非零解条件

其次线性方程组有非零解的充要条件是:它的系数矩阵的秩小于未知量的个数;

齐次线性方程组比较特殊,如果它又唯一解那一定是零解,因此其次线性方程组要么无解,要么有无穷多个解。

3. n元齐次线性方程组解空间的结构

讨论了通用线性方程组解的一般性质之后,我们来缩小范围,将讨论视角集中在齐次线性方程组,齐次线性方程组是一类非常重要的方程组,在机器学习的很多算法和优化理论中都有它的身影。

0x1:从几何空间得到的启发

实数域R上一个3元齐次线性方程表示过原点的一个平面。

因此3元齐次线性方程组的解集W可能是以下几种情况:

1. 过原点的一条直线 l:W中每个向量可以由 l 中的一个方向向量线性表出;
2. 过原点的一个平面 ∏:W中每个向可以由平面∏上不共线的两个向量线性表出;
3. 原点(即零向量);

这表明在3元齐次线性方程组对应的3维空间中,解集W中无穷多个向量可以用W中一个或两个向量线性表出。

接下来讨论一般情况下,齐次线性方程组的解空间结构。

0x2:齐次线性方程组的解集的线性运算封闭特性

1. 性质1 - 其次线性方程组的任意两个解的和还是方程组的解 

齐次线性方程组的解空间(线性子空间)对加法封闭。

2. 性质2 - 其次线性方程组的任意一个解的倍数还是方程组的一个解 

齐次线性方程组的解空间(线性子空间)对数量乘法封闭。 

综合上述2个性质得出,齐次线性方程组的解集W是的一个子空间,称为方程组的解空间

0x3:齐次线性方程组的基础解系

齐次线性方程组有非零解时,此时方程组有无限多的解。但是这无限多的解可以由一组有限多个解来归纳表示,这组有限多的解满足以下条件:

1. 线性无关;

2. 方程组的每一个解都可以由线性表出;

则称是齐次线性方程组的一个基础解系

如果齐次线性方程组有一个基础解系,那么称为方程组的通解。

基础解析是用来表示所有解的一组解集,它本身具有归纳总结特性。

1. 定理1 - 基础解系向量个数

数域K上n元齐次线性方程组的系数矩阵A的秩小于未知量个数n时,它一定有基础解系。并且它的每一个基础解系所含解向量的个数等于 n - rank(A);

0x4:数域 K 上 n元齐次线性方程组的”基“和”维数“的概念 

1. 线性子空间的基

设U是的一个子空间,U中的向量组如果满足下述两个条件:

1. 线性无关;

2. U中每一个向量都可以由线性表出;

则称是U的一个(基可以有很多)。

于是,如果是齐次线性方程组的一个基础解系,则同时也可以被称为是解空间W的一个基(基的概念比基础解析的范围更泛)。

2. 线性子空间的标准基

由于线性无关,并且中每一个向量都可以由线性表出,因此的一个基,称它为的标准基。

几何空间中,任取三个不共面的向量a1,a2,a3,由于任何一个向量β 可以由 a1,a2,a3 线性表出,并且 a1,a2,a3 线性无关,因此 a1,a2,a3 是几何空间的一个基。

可以证明,的每一个非零子空间U 都有一个基。也就是说,任何一个解集,都可以通过对应的一个基(基础解析)来归纳表示。

3. 非零线性子空间中基所包含的向量个数

的非零子空间U的任意两个基所含向量个数相等,这两个基互相等价。

设U是的一个非零子空间,U的一个基所含向量的个数称为U的维数,记作或者简记为。特别的,零子空间的维数规定为0。

4. n维向量空间

由于的一个基,因此,因此我们也把称为n维向量空间

在几何空间中,任意三个不共面的向量是它的一个基,因此几何空间是3维空间;

过原点的一个平面,它的任意两个不共线的向量是它的一个基,因此过原点的平面是2维的子空间;

过原点的一条直线,它的一个方向向量是它的一个基,因此过原点的直线是1维的子空间;

数域K上n元齐次线性方程组有非零解时,它的解空间W的每一个基所含向量个数为 n - rank(A),其中A是方程组的系数矩阵。因此解空间的维数为

基对于决定子空间的结构起了非常重要的作用,如果知道了子空间U的一个基,那么U中每一个向量都可以由这个基线性表出,并且表出的方式是唯一的,其中系数组成的有序数组称为该向量在这个基下的坐标。 

5. 向量组的极大线性无关组和对应子空间维数的关系

中,向量组的一个极大线性无关组是子空间的一个基,从而:

该定理表明:向量组的秩等于由它生成的子空间的维数

从而将线性子空间的基/维数的概念和线性方程组/极大线性无关组/秩的概念联系了起来。

4. n元非齐次线性方程组解空间的结构

数域上n元非齐次线性方程组的一个解是中的一个向量,称它为方程组的一个解向量。

0x1:从几何空间得到的启发

3元非齐次线性方程组的解集是不过原点的一个平面,而相应的齐次线性方程组的解集是过原点的一个平面,如下图所示:

可以由沿着向量平移得到。

于是上每一个向量可以表示成:

0x2:齐次线性方程组的解结构

从上面3维几何空间的的例子我们受到启发,n元非齐次线性方程组的解集U,与相应的n元齐次线性方程组的解集W 有如下关系:

其中,是非齐次线性方程组的一个特解,W是方程组的导出组的解集。

1. 非齐次线性方程组的导出组

我们把n元齐次线性方程组称为非齐次线性方程组的导出组

1)性质1:n元非齐次线性方程组的两个解的差是它的导出组的一个解。

2)性质2:n元非齐次线性方程组的一个解与它的导出组的一个解之和,仍是非齐次线性方程组的一个解。

2. 非齐次线性方程组的通解

当n元非齐次线性方程组有无穷多个解时,它的导出组必有非零解。此时导出组的一个基础解系,其中 t 是导出组的系数矩阵A的秩。

则非齐次线性方程组的解集U为:

其中非齐次线性方程组的一个特解;解集U的代表元素称为非齐次线性方程组的通解。 

0x3:齐次线性方程组与非齐次线性方程组解向量性质的联系

齐次方程组的解与非齐次方程组的解关系是:

非齐次组的解向量等于齐次组的解+非齐次组的一个特解

也就是说只要求出齐次组的解空间的一组基础解系,比如是,一个非齐次组的特解比如是X1,,那么非齐次组所有解可以表示为

所以求非齐次组的通解只需求出其一个特解,再求出对应的齐次组的基础解系即可。

0x4:齐次线性方程组与非齐次线性方程组解向量性质的区别

区别是:

1)齐次组的解可以形成线性空间(不空,至少有0向量,关于线性运算封闭)

非齐次组的解不能形成线性空间,因为其解向量关于线性运算不封闭:任何齐次组的解的线性组合还是齐次组的解,但是非齐次组的任意两个解其组合一般不再是方程组的解(除非系数之和为1)而任意两个非齐次组的解的差变为对应的齐次组的解。

2)齐次组有基础解系,而非齐次只有通解

非齐次线性方程组的解集不能称为基础解系,因这些解不能生成解空间(线性运算不封闭)

Relevant Link: 

https://zhidao.baidu.com/question/478480630.html

4. 线性方程组的几何意义

0x1:线性方程组解的物理意义

假设一个维数为3的线性方程组(即基础解析的向量个数为3),该线性方程组包含若干个三元一次方程: 

其中每一个三元一次方程代表三维空间中的一个平面,也叫由3维基础解析张成的向量空间。

如果平面个数大于维度,称为超定方程

小于维度,称为欠定方程

等于维度,称为适定方程

满足这个线性方程组的解 x=[x1,x2,x3同时属于所有平面,接下来我们来讨论线性方程组的解的个数从0,1,无穷多时,分别对应的几何概念。

0x2:齐次方程组的解对应的几何意义

齐次方程组具有形式,每个方程对应的平面都是过原点的。根据系数矩阵A的秩不同,有以下三种情况。

1. 【情况1】r(A)=3 

A的每一行,即所有平面的法向量[a11,a12,a13],[a21,a22,a23],[a31,a32,a33]...能够张成一个三维空间。

平面只有一个交点:[0,0,0],线性方程有一个解,即零解。

2. 【情况2】r(A)=2

所有平面的法向量,都处于同一个平面内。 
由于三个平面都过同一个点[0,0,0],所以他们共有一条交线,线性方程有无穷多解。 

同时要注意的是,这些解共线,换句话说,解集构成了一个二维的子空间。

3. 【情况3】r(A)=1 

所有平面的法向量共线,整个线性方程组其实可以简化为一行。
由于三个平面都过同一个点,所有平面重合于过[0,0,0]的平面,线性方程有无穷多解。

0x3:非齐次方程组的解对应的几何意义

非齐次方程具有形式相当于把齐次线性方程组对应的若干平面进行整体平移。 

这种情况相当于所有平面都平移

写成矩阵形式:,即,常数项b可以表示成A的列的线性组合,即b处于A的列空间内。把A,b并列组成的增广矩阵[A;b]。

从矩阵的角度来说,增加一列不会减少矩阵的秩,即 r(A) ≤ r([A;b] 
如果 r(A) = r([A;b]),则 Ax = b 的解的情况和Ax=0相同;
如果 r(A) < r([A;b]),则 Ax = b 无解(参考文章前面对线性方程组解存在条件的讨论);

Relevant Link: 

https://blog.csdn.net/shenxiaolu1984/article/details/54893299
https://technology.cpm.org/general/3dgraph/ 

5. 矩阵运算数学原理

向量空间是为线性代数准备的舞台。而演员,就是矩阵。

矩阵在线性代数中是一个非常重要而又复杂的概念,从任何一个角度来阐述都是对的,笔者这里不纠结具体的公式定义,而是从各个视角来展示矩阵的本质,希望能给读者朋友构建一个全面的多维度认知,对矩阵建立感性和理性上的认识,从而在今后学习更多线性代数知识以及理解机器学习中核心算法时能有帮助。

0x1:矩阵是一个函数

1. 仿射函数与矩阵

我们最熟悉的仿射函数:ax=y
(x,0)点映射到(0,ax)点,如下图所示:
我们通过矩阵Avec{x}=vec{y}也可以完成这个映射,令:

从而原式可以重写为:

这样,矩阵A就不再是系数a了,而是一个函数(或者说是映射)了,矩阵是一个更泛化的概念。

0x2:矩阵对应了一种线性变换

1. 线性空间的定义

要讨论线性变换,首先需要定义线性空间。

空间这个概念是现代数学的核心概念之一。对于空间的理解需要更抽象一些,简单的说,能装东西的就是空间。

比如计算机内有存储单元,那么就有内存空间;我们上课有课表,那么就有课表空间;有一个能装载梦境的东西,我们可以叫它盗梦空间。对于数学来说,空间里装载的是能运算的东西。从拓扑空间开始,一步步往上加定义,可以形成很多空间。

线形空间相对是一种比较初级的空间;如果在里面定义了范数,就成了赋范线性空间;赋范线性空间满足完备性,就成了巴那赫空间;赋范线性空间中定义角度,就有了内积空间;内积空间再满足完备性,就得到希尔伯特空间;如果空间里装载所有类型的函数,就叫泛函空间。

我们从我们生活在其中的(按照牛顿的绝对时空观)的三维空间开始说起,逐步解释空间的数学定义,从数学上说,这是一个三维的欧几里德空间,这个三维的空间有如下几个特点:

1. 由很多(实际上是无穷多个)位置点组成;
2. 这些点之间存在相对的关系;
3. 可以在空间中定义长度、角度;
4. 这个空间可以容纳运动;

上面的这些性质中,最最关键的是第4条,也就是说:容纳运动是空间的本质特征

认识到了这些,我们就可以把我们关于三维空间的认识扩展到其他的空间。事实上,不管是什么空间,都必须容纳和支持在其中发生的符合规则的运动(变换)。比如拓扑空间中有拓扑变换,线性空间中有线性变换,仿射空间中有仿射变换,其实这些变换都只不过是对应空间中允许的运动形式而已。本质上来说,“空间”是容纳运动的一个对象集合,而变换则规定了对应空间的运动。

2. 线性空间是线性向量对象的集合

线性空间中的任何一个对象,通过选取坐标系(基)和坐标的办法,都可以表达为向量的形式。

只要找到合适的坐标轴(也就是基),就建立了一个坐标系,就可以用坐标(表示成向量的形式)表示线性空间里任何一个对象。换句话说,给你一个空间,你就能用基和坐标来描述这个空间中的对象。

向量表面上只是一列数,但是由于向量的有序性,除了这些数本身携带的信息之外,还在对应位置上携带信息。

3. 线性空间中的运动用线性变换来表达

线性空间中的运动,被称为线性变换。也就是说,从线性空间中的一个点运动到任意的另外一个点,都可以通过一个线性变化来完成。

在线性空间中,当选定一组基之后,不仅可以用一个向量来描述空间中的任何一个对象,而且可以用矩阵乘法来描述该空间中的任何一个运动(变换)。而使某个对象发生对应运动的方法,就是用代表那个运动的矩阵,乘以代表那个对象的向量。

简而言之,在线性空间中选定基之后,向量(坐标)刻画对象,矩阵刻画对象的运动(矩阵乘法的本质是运动的施加),用矩阵与向量的乘法施加运动。

4. 用三角几何旋转的例子来说明矩阵的本质是一种线性变换(transformation)

上面讨论的线性空间和矩阵乘法过于抽象,线性空间拥有向量夹角,向量旋转等概念,因此这个章节我们来三角几何旋转的角度来直观的呈现矩阵的本质。

平面上取定一个直角坐标系Oxy,所有以原点为起点的向量组成的集合记作V,让V中每个向量绕原点O旋转角度θ,如下图所示:

这个旋转是一个transformation动作,那如何通过数学来形式化定义这个旋转动作呢?

我们将上述旋转角度θ的这个动作记作σ

的坐标为(x,y),它在旋转 σ 下的像的坐标为(x',y')。设以 x 轴的正半轴为始边,以射线OP为终边的角为a,设,从三角函数的定义得:

由此得出:

上式就是旋转σ的公式,把公式中的系数写成矩阵的形式:

该矩阵就表示了转角为θ的旋转变换,即将输入向量的坐标整体移动一个角度。旋转变换是一种线性变换,它将所有向量点共同移动了一个相同的角度。

0x3:矩阵映射的本质是向量基的变换

从向量基(初等数学里叫坐标系)来讨论下矩阵映射的本质。

vec{x}所在平面为Vvec{y}所在平面为W,都是二维平面,即mathbb{R}^2

在下图中,我们把A也用一个灰色方块表示(代表了一个映射),V会通过A映射到W

设:

,其中vec{c_1},vec{c_2}A的列向量。

根据矩阵乘法的规则有:

Avec{x}相当于在A空间中,以vec{c_1},vec{c_2}为基,坐标为egin{pmatrix}x_1\x_2end{pmatrix}的向量,再将Avec{x}向量用自然基表示,变换过程如下动图所示:

整体来说,矩阵映射的本质是基改变,导致向量的坐标发生变化

风动?帆动?或者都没动。也许世界从来都没有变换,变的只是你看世界的方式。

0x4:矩阵是拉伸和旋转这两种运动的结合

我们前面的小节展示了三角旋转和矩阵的对应关系,实际上,矩阵不仅有旋转运动,同时还有拉伸运动。

我们知道,对于矩阵A可以对角化的话,可以通过相似矩阵进行下面这样的特征值分解:

A=PLambda P^{-1}

其中Lambda为对角阵,P的列向量是单位化的特征向量,我们拿个具体的例子来讲:

对于方阵而言,矩阵不会进行纬度的升降,所以矩阵代表的运动实际上只有两种:
  • 旋转
  • 拉伸
最后的运动结果就是这两种的合成。
我们再回头看下刚才的特征值分解,实际上把运动给分解开了:
我们来看看在几何上的具体表现是什么,因此相似矩阵的分解计算涉及到基的变换,这点读者朋友要注意:
原始向量如下图:

左乘P=egin{bmatrix}frac{-sqrt{2}}{2}&frac{sqrt{2}}{2}\frac{sqrt{2}}{2}&frac{sqrt{2}}{2}end{bmatrix}代表进行一个向量基的旋转:

继续左乘对角矩阵Lambda=egin{bmatrix}3&0\0&1end{bmatrix}

可以看到:

  • 特征值就是拉伸的大小
  • 特征向量指明了拉伸的方向 

反向变换(即求逆)也是同样道理

0x4:复合矩阵乘法是几何运动的叠加

1. 矩阵乘法的数学公式定义

,令,其中

则矩阵C称为矩阵A与B的乘积,记作 C = AB

矩阵乘法有几个要点:

1. 只有左矩阵的列数与右矩阵的行数相同的两个矩阵才能相乘;
2. 乘积矩阵的(i,j)元等于左矩阵的第 i 行与右矩阵的第 j 列的对应元素的乘积之和;
3. 乘积矩阵的行数等于左矩阵的行数,乘积矩阵的列数等于右矩阵的列数; 

进一步来说,矩阵的乘法本质上是将矩阵对应的变换应用到被乘的向量组上。如果是多个矩阵相乘,则可以理解为复合变换函数,即f(g(x...)),将所有的变换综合在一起整体作用于被作用向量组。

2. 复合矩阵乘法对应了多个几何旋转变换的叠加

继续上面三角旋转的例子,现在相继作旋转 θ 与 φ,总的效果是作了 θ + φ 的角度,同上理,可以用矩阵来表示这个叠加的旋转角度:

我们把相继旋转 θ 与 φ 角度的总效果称为  θ 与 φ 的乘积,即:θφ。

对应的,我们把矩阵C称为矩阵A与B的乘积,即 C = AB。

我们来一起仔细看下矩阵C的元素与矩阵A,B的元素之间有什么关系。

利用两角和的余弦、正弦公式得:

将这个公式转化为矩阵元素相乘的公式如下:

可以看到,这里就等于矩阵AB相乘的结果,读者朋友可以通过矩阵的行列乘法技巧自己在草稿纸上演算一下,相信和笔者第一次看到这个公式一样会有不一样的体会和感受。

当然,我们不能说矩阵的乘法就是代表了旋转,矩阵和乘法之间存在等价性还有更深层次的数学原理这里没有阐明,但是三角几何旋转这个视角让我们非常清晰的体会到了矩阵乘法的本质。

在构建深度神经网络的时候,我们脑子里可以复现出你构建出的一层层网络结果,正常不断的”拧转“、”扭曲“输入向量,使其从线性不可分,逐渐成为一个在另一个向量基(线性变换改变了向量基)下线性可分的向量组,从而机器学习模型得到找到一个最佳超分界面进行二分类或者多分类。 

3. 矩阵对应的旋转变换的几何例子

下图展示了将原始向量组旋转180°对应的矩阵:

读者朋友可以自己修改矩阵的元素值,观察不同的矩阵元素值对应的不同的转换动作。

笔者这里手工调整了几个参数,通过gif图的方式来展示不同的矩阵对应的不同变换动作:

0x5:复合矩阵乘法是线性映射函数的复合叠加

通过Gvec{x}映射到G(vec{x})

再通过FG(vec{x})映射到vec{y}

矩阵的乘法FG可以如下图所示:

所以FG实际上就是复合函数:

FGimplies F(G)

Relevant Link: 

https://jingyan.baidu.com/article/425e69e6f6c290be14fc165c.html
https://www.geogebra.org/search/matrix%20transformation
https://www.geogebra.org/m/wsTPe55F 
https://www.geogebra.org/m/u6jD5As8 
https://www.yasuotu.com/gifhecheng 
https://blog.csdn.net/wenzhilu/article/details/79684667
https://www.matongxue.com/madocs/755.html
https://www.matongxue.com/madocs/555.html

  

6. 机器学习模型背后的数学原理的一些讨论

0x1:线性回归算法模型

1. 基于样本数据直接构建n元线性方程组的窘境

文章的开头,我们举了一个工厂生产某种食品的例子。在这个例子中,我们没有借助任何机器学习算法,而是直接基于样本输入数据,得到了一个线性方程组,然后尝试求解这个线性方程组。

这看起来毫无毛病,我按照你题目给的条件构建一个对应的方程组,然后求解,如果得到了唯一解,则该解就是最优解,也即唯一的可行解。

但遗憾的是,包括本例在内,现实世界中的几乎所有场景中,几乎不可能刚好得到一个唯一解,换句话说,99.99%的场景中,我们都无法得到一个100% recall,100% precision的model。

在很多时候,我们基于样本数据和对应的条件构建出的线性方程组是无解或者有无穷多的解的,这个时候我们如何该如何继续下去呢?宣布放弃,这个问题无法解决了吗?

2. 引入损失函数,求解一个等价的最优化问题

答案显然不是的,我们可以退而求其次,既然无法100%达到全局最优解,那我们可以尝试获得一个次优解,并使该次优解和最优解的“距离”在所有次优解中最接近。

引入损失函数的目的就是:将原始问题转换为另一个最优化问题,通过求解损失函数下最优解得到原始问题的一个次优解,损失函数(loss function)的作用就是完成这个”问题域转换“的桥梁。

引入损失函数后,我们的优化目标转换为了:求得一个使当前损失函数值最小的最优解。那接下来的问题就是,基于损失函数构建的新的方程长什么样?解空间结构如何?是否有解?如何求解?

损失函数有很多种选择,这里以linear regression最契合的MSE(均方损失函数)为例:

在线性回归问题中,假设模型为:

线性模型试图学得。同时在噪声符合高斯分布的假设前提下,均方误差是衡量 f(x) 和 y 之间的差别的最佳损失函数。

我们构建让均方误差最小化的公式,即:

可以看到,均方误差最小化公式是一个累加公式,将所有样本数据(通过下标 i 表示)对应的线性方程值和目标值的差值的平方进行了累计,即所有样本的误差的平方和。

读者朋友可以这么理解:将原本基于样本数据得到线性方程组,每一列(列向量)都减去一个目标值并计算平方,然后将所有方程都累加起来。注意,有的书籍或者paper在上述公式中还会加入一个1/N,但对最终结果是没有影响的,因为我们求的是对w的偏导数,实数在这里会被忽略。

求解 w 和 b 使最小化的过程,称为线性回归模型的最小二乘参数估计(parameter estimation)。我们可将分别对 w 和 b 求导,得到:

令上式等于零可得到 w 和 b 最优解的闭式(closed-form)解,同时损失函数中极值就是上式参数优化公式的最小值,线性规划问题得解。

3. 通过矩阵来简化线性回归中损失函数的微分/偏导数运算

上一小节中我们通过偏导数方式实现了对均方误差函数的求解,这很直观利于理解,但是在计算机科学中,求解偏导数的运算并不高效,像sklearn这种数学库采用的都是矩阵matrix的形式进行快速计算。 

Relevant Link: 

https://www.cnblogs.com/LittleHann/p/10498579.html
https://zhuanlan.zhihu.com/p/27664917
https://www.cnblogs.com/pinard/p/10750718.html 
http://www.cnblogs.com/pinard/p/10791506.html 

0x2:深度神经网络模型

1. 深度神经网络隐层结构 = 线性变换+非线性变换组合的多次叠加

我们将构建一个神经网络:包括五个全连接层,每层都含有不同数目的单元,结构如下:

对于单个神经元来说,计算过程对应的线性方程为:

整个一层隐藏层的权重参数向量组构成了一个向量矩阵W,为了清楚起见,以下是第二层的所有表达式:

从矩阵视角来看,一层隐藏层对应的矩阵运算公式如下:

上图中的a 是激活函数,激活函数是一种非线性变换,激活函数对输入向量组的扭曲是非线性的。

综上我们看到,深度神经网络的本质是线性变换的矩阵+非线性变换的激活函数,通过矩阵的拉伸/旋转,以及非线性函数的扭曲作用,原始输入空间的向量基会被转换到一个新的维度(一般是高维)中,在这个新的线性子空间中,原本线性不可分的向量组可能就可以变得线性可分,或者在一定的错误冗余下线性可分,进而得到一个解空间。 

2. 深度神经网络中不能继续用使用线性方程组的理论进行直接求解

大致的回答是,因为非线性性,和高维度的原因,矩阵偏导数运算、求逆变得十分困难,有时甚至无法计算。

举个例子,普通最小二乘的最佳参数表达为:

虽然我们可以获得解析表达,但是当数据量变得非常庞大的时候,连计算矩阵的逆、矩阵求偏导都会变得非常慢。

同时在很多情况下,我们无法获得参数的解析表达,就需要采用迭代的方式逼近最佳的参数值。

相关的一些讨论,可以参阅我另一篇blog.

https://www.cnblogs.com/LittleHann/p/10498579.html
2)梯度下降算法(Gradient decent)来求解线性回归模型参数

0x3:GD/SGD梯度下降的数学原理

1. 在小学习率下,GD梯度下降公式等价于一阶泰勒级数展开

我们从一阶泰勒级数展开这个话题开始讨论,逐步分析GD梯度下降成立的前提条件以及它的合理性。

首先,泰勒当年为什么要发明这条公式?因为当时数学界对简单函数的研究和应用已经趋于成熟,而复杂函数,比如:这种一看就头疼的函数,还有那种根本就找不到表达式的曲线(例如深度神经网络中,线性和非线性复合层叠,隐层的函数形式已经变得极度复杂)。除了代入一个x可以得到它的y,就啥事都很难干了。所以泰勒同学就迎难而上!决定让这些式子统统现出原形,统统变简单。

可以简单的理解为:泰勒级数展开和微积分的本质原理很类似,都是通过大量小区间的线性近似来模拟原始函数

我们以一阶泰勒展开式为例:

如下图所示:

凸函数f(θ)的某一小段[θo,θ]由上图黑色曲线表示,可以利用线性近似的思想求出f(θ)的值,如上图红色直线。该直线的斜率等于f(θ)在θo处的导数。则根据直线方程,很容易得到f(θ)的近似表达式为:

这就是一阶泰勒展开式的推导过程,主要利用的数学思想就是曲线函数的线性拟合近似。牛顿法的原理推导也是类似的原理,有兴趣的读者可以google相关内容。
讨论完一阶泰勒级数展开的公式后,我们接下里来看一下一阶泰勒级数展开和GD梯度下降的关系。

想要两个向量的乘积小于零,我们先来看一下两个向量乘积包含哪几种情况:

A和B均为向量,α为两个向量之间的夹角。A和B的乘积为:

由上述讨论可知,GD梯度下降过程中,就等价于不断进行一阶泰勒级数展开来”近似“地”沿着目标函数下降的方向“进行前进。但其实我们也可以看到,每次前进都伴随着一定的损失,这是一阶泰勒级数和真实函数之间的差值导致的。

要特别强调的是,这既是一个原理性的理解,也是一个工程实践中要谨记的要点,我们在使用pytorch/TensorFlow/keras进行项目开发的时候,学习率η一定要设置的足够小,设置的足够小,不仅仅是为了让我们足够靠近局部最优,这同时也是一阶泰勒级数展开的必要条件,如果不满足这个条件,GD梯度下降本身的误差就会很大,自然也就无法有效逼近全局次优解。

2. 为什么GD梯度下降不能避免误差

由上个小节的讨论我们知道,一阶泰勒级数展开本身也只是对原始函数的的一种近似线性模拟,即使你每次选择的是负梯度方向,也不能100%沿着原始函数的真实方向进行下降,每一次GD迭代都是存在误差的。

即使采用同二阶泰勒级数,误差也同样存在,只是会比一阶要小,但是阶数越往上,计算的复杂度就越大。在一般情况下,一阶泰勒级数展开已经可以获得比较好的近似度和优化速度了,工业场景中基本上默认采用一阶泰勒级数展开。

0x4:Hessian矩阵和梯度下降的关系

先抛出结论:以二维图像为例,对于二维图像的某点的Hessian矩阵,其最大特征值对应了其邻域二维曲线最大曲率的强度,该特征值对应的特征向量对应了邻域二维曲线最大曲率的方向,即山坡陡的那面,最小特征值对应的特征向量对应与其垂直的方向,即平缓的方向。简单来讲,图像某点的hessian矩阵特征值大小和符号决定了该点邻域内的几何结构。

在进行GD梯度下降的时候,梯度的方向就是最大特征值对应的特征向量方向,而特征值决定了GD学习的步长。

1. Hessian矩阵和GD学习方向的关系

GD中所谓的最大梯度方向,就是Hessian矩阵最大特征值对应的特征向量的方向。

那什么是最小梯度,注意不是加个负号就变成最小了,向量是一个带方向性的数学量。

最小梯度的方向是Hessian矩阵中最小特征值对应的特征向量方向,这个方向和最大梯度的方向是垂直的。

笔者提醒:Hessian矩阵本身也是一种近似,它的本质是二阶泰勒导数,而二阶泰勒展开本身也是一种近似模拟,只是说这种近似模拟的精确度已经相对比较高了。

2. Hessian矩阵和GD学习步长的关系

我们先来看下,在一阶情况下,梯度下降(GD)方法:
x_{t+1}= x_{t} -alpha g,      g = f^{'} (x_{t})

这里有一个问题是:如何动态控制步长alpha,当梯度大的时候缩短步长避免overstep,当梯度小的时候适当提高步长以尽早离开低谷区。

显然,我们需要将梯度的值引入步长的控制公式中,以得到动态调整步长alpha的能力。
将函数f(	heta)在局部极值点	heta ^ *附近进行二阶Taylor展开近似可得:
f(	heta ^ * + Delta 	heta) approx f(	heta ^*) + g^T Delta 	heta + frac{1}{2} (Delta 	heta)^T H(Delta 	heta),其中,g为梯度向量,H为Hessian矩阵。

对上式求导并置0,以求在二阶泰勒展开近似原函数的情况下快速求出函数极值点,可解得:
Delta 	heta = -H^{-1}g   Rightarrow   x_{t+1} = x_{t} -H^{-1}g, g=f^{'}(x_{t})

从上面公式可以看出,Hessian矩阵起到了控制步长alpha = H^{-1}的作用。 

继续推导H,我们有

H=E Lambda E^T,其中E=[e_1 e_2 ... e_n]是单位特征向量矩阵,Lambda=diag([lambda _1 lambda _2 ... lambda _n ])是对应特征值对角矩阵。

重写上面公式:

H^{-1}g=(E Lambda E^T)^{-1}g=E Lambda ^{-1} E^Tg=sum_{i}^{n}{ frac{e_{i}^Tg}{lambda _{i}} e_{i}}
可以看出,这里控制(每个特征方向)步长的,有两个因素:一阶梯度(作为分子)Hessian矩阵特征值(作为分母)

从上式也可以看到,当特征值间差异巨大,则有些方向学习缓慢,会不断波动,(二维情况就是你经常看到的那种蛇形曲线)。

Relevant Link:  

https://juejin.im/post/5a570c25518825734f529e3b
https://www.tinymind.cn/articles/1272?from=articles_commend 
https://blog.csdn.net/SoHardToNamed/article/details/80550935 
https://blog.csdn.net/sinat_15443203/article/details/82048888
https://www.zhihu.com/question/24623031

  

原文地址:https://www.cnblogs.com/LittleHann/p/10547355.html