笔者说明: 笔者的数学知识和能力有限, 本文的主要目的是为了尝试从数学角度讨论一下机器学习模型求解的本质思想, 机器学习和深度学习领域中如此众多的模型背后, 其共同的核心思想是什么. 相关数学原理方面不会也做不到讨论非常深刻, 相关数学公式, 推导, 定义全部来自丘维声教授的《简明线性代数》, 不得不说这本书是笔者近几月以来认为最好的一本机器学习相关书籍了, 也推荐读者朋友阅读. 如果文章中有错误的地方, 也请读者朋友一定要在评论区指出, 特此感谢.
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: 围绕线性方程组的数学问题
围绕上述线性方程组, 需要研究下列几个问题:
线性方程组是否一定有解? 如果有解, 有多少个解?
如何求线性方程组的解? 如何高效地求解?
线性方程组有解时, 它的每一个解是否都符合实际问题的需求, 就像上面第一小节的线性方程组, 在是属于上这个线性方程组有无穷多的解, 但是实数域在现实世界往往不太实用, 大多时候我们会选择整数域或者一个有限精度的浮点数域, 这样解的个数就是有限的了.
线性方程组的解不只一个时, 这些解之间有什么关系?
我们在实际业务场景中遇到的建模和机器学习问题, 基本上可以归纳为上述问题的抽象和组合.
文章的接下来部分, 我们会围绕上面的几个问题展开讨论.
- 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 维行向量 线性相关当且仅当以 为行向量组的矩阵的行列式不等于零.
根据上述定义以及解析几何的结论可以得到第一小节的问题:
几何空间中, 共面的 3 个向量是线性相关的, 不共面的 3 个向量是线性无关的;
共线的 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)情形 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 可能是以下几种情况:
过原点的一条直线 l:W 中每个向量可以由 l 中的一个方向向量线性表出;
过原点的一个平面 ∏:W 中每个向可以由平面∏上不共线的两个向量线性表出;
原点(即零向量);
这表明在 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: 用三角旋转的例子来说明矩阵的本质是一种变换(transformation)
平面上取定一个直角坐标系 Oxy, 所有以原点为起点的向量组成的集合记作 V, 让 V 中每个向量绕原点 O 旋转角度θ, 如下图所示:
这个旋转是一个 transformation 动作, 那如何通过数学来形式化定义这个旋转动作呢?
我们将上述旋转角度θ的这个动作记作σ
设 的坐标为 (x,y), 它在旋转 σ 下的像 的坐标为(x',y'). 设以 x 轴的正半轴为始边, 以射线 OP 为终边的角为 a, 设, 从三角函数的定义得:
由此得出:
上式就是旋转σ的公式, 把公式中的系数写成矩阵的形式:
该矩阵就表示了转角为θ的旋转, 即将输入向量的坐标整体移动一个角度.
0x2: 矩阵乘法的几何意义
设
, 令
, 其中
则矩阵 C 称为矩阵 A 与 B 的乘积, 记作 C = AB
矩阵乘法有几个要点:
只有左矩阵的列数与右矩阵的行数相同的两个矩阵才能相乘;
乘积矩阵的 (i,j) 元等于左矩阵的第 i 行与右矩阵的第 j 列的对应元素的乘积之和;
乘积矩阵的行数等于左矩阵的行数, 乘积矩阵的列数等于右矩阵的列数;
进一步来说, 矩阵的乘法本质上是将矩阵对应的变换应用到被乘的向量组上.
矩阵乘法也可以被称为线性转换. 矩阵相当于一个转换函数, 而向量组是一个输入, 已知了输入和函数, 我们就可以知道输出, 如果是多个矩阵相乘, 则可以理解为复合变换函数, 即 f(g(x...)).
0x3: 矩阵对应的旋转变换的几何例子
下图展示了将原始向量组旋转 180° 对应的矩阵:
读者朋友可以自己修改矩阵的元素值, 观察不同的矩阵元素值对应的不同的转换动作.
笔者这里手工调整了几个参数, 通过 gif 图的方式来展示不同的矩阵对应的不同变换动作:
- Relevant Link:
- https://jingyan.baidu.com/article/425e69e6f6c290be14fc165c.html
- https://www.geogebra.org/search/matrix transformation
- https://www.geogebra.org/m/wsTPe55F
- https://www.geogebra.org/m/u6jD5As8
- https://www.yasuotu.com/gifhecheng
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: 深度神经网络的隐层结构 = 线性变换 + 非线性变换组合的多次叠加
我们将构建一个神经网络: 包括五个全连接层, 每层都含有不同数目的单元, 结构如下:
对于单个神经元来说, 计算过程对应的线性方程为:
整个一层隐藏层的权重参数向量组构成了一个向量矩阵 W, 为了清楚起见, 以下是第二层的所有表达式:
从矩阵视角来看, 一层隐藏层对应的矩阵运算公式如下:
上图中的 a 是激活函数, 激活函数是一种非线性变换, 激活函数对输入向量组的扭曲是非线性的, 因此提供了更好的适应性, 并且能在学习过程中提供一些复杂的函数.
通过多层的隐层对应的线性变换和非线性变换的组合迭代后, 原始输入空间的向量基会被转换到一个新的维度 (一般是高维) 中, 在这个新的线性子空间中, 原本线性不可分的向量组可能就可以变得线性可分, 或者在一定的错误冗余下线性可分, 进而得到一个解空间.
0x3: 为什么深度神经网络中不能继续用复合非线性方程组的理论进行直接求解
关于这个话题的讨论, 笔者目前的理解也不是完全吃透, 等以后对凸优化理论的理解更透彻之后会再回来把这部分完善补全, 呈现给读者朋友.
大致的回答是, 因为非线性性, 和高维度的原因, 矩阵偏导数运算变得十分困难, 有时甚至无法计算.
相关的一些讨论, 可以参阅我另一篇 blog.
https://www.cnblogs.com/LittleHann/p/10498579.html
2)梯度下降算法 (Gradient decent) 来求解线性回归模型参数
0x4: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 迭代都是存在误差的.
即使采用同二阶泰勒级数, 误差也同样存在, 只是会比一阶要小, 但是阶数越往上, 计算的复杂度就越大. 在一般情况下, 一阶泰勒级数展开已经可以获得比较好的近似度和优化速度了, 工业场景中基本上默认采用一阶泰勒级数展开.
- 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.cnblogs.com/LittleHann/p/10547355.html