阅读建议
接下来,我们会逐步讨论一系列与向量、微积分、概率相关的概念和原理。设置"机器学习数学基础"这部分内容的目的是为了帮助读者回忆 曾经掌握,但现在已经遗忘了的数学基础。这些知识在大学的课程中往往会花费数个学期时间来讲解,笔者并没有什么捷径让人在几篇文章、几十分钟的阅读时间内从零掌握它们。另外,在后续章节用到相关数学概念的地方,会有超链接导航回到相应的知识点,现在先跳过,到时候带着具体的应用场景,再回来查看是完全可行的。
当我们谈论机器学习时,往往聚焦于复杂的算法模型和令人惊叹的应用场景,譬如 AlphaGo 击败围棋世界冠军、ChatGPT 生成流畅自然的对话、ADS 自动驾驶汽车在复杂的城市道路中穿行。我们都知道这是人工智能在背后驱动的结果,然而,继续深入人工智能本质,支撑这一切的底层语言正是数学与逻辑,或者更具体地说,主要是线性代数 (Linear Algebra)。
理解向量(Vector) 、矩阵(Matrix) 、张量(Tensor) 这些线性代数中的概念,不仅是对数学理论的探索,更是打开机器学习大门的钥匙。本章将从代数定义、几何视角两个维度,阐述线性代数为何能成为机器学习的语言。
机器学习的核心任务是让计算机从历史数据中学习到规律,然后应用于新的数据。那么,什么是数据?在机器学习的世界里,数据就是向量。无论数据的原始形式如何,是图像、文本、音频、表格记录,或者其他形式。它们最终都会被转化为数值向量,然后才能被后续的各种机器学习算法处理。
来考虑一个房价预测的简单例子。如果你要预测某套房子的价格,需要考虑哪些因素?可能包括房子的面积、卧室数量、卫生间数量、房龄、距地铁站距离,等等。这里每个因素就被称为一个特征 (Feature)。将所有特征组合起来,就得到了一个特征向量(Feature Vector,与矩阵中的 Eigen Vector 不是同一个概念):
x = ( 面积 , 卧室数 , 卫生间数 , 房龄 , 距地铁站距离 ) \mathbf{x} = (\text{面积}, \text{卧室数}, \text{卫生间数}, \text{房龄}, \text{距地铁站距离}) x = ( 面积 , 卧室数 , 卫生间数 , 房龄 , 距地铁站距离 ) 对于一套 90 平米、两室一卫、房龄 5 年、距地铁站 500 米的房子,其特征向量可以表示为:
x = ( 90 , 2 , 1 , 5 , 500 ) \mathbf{x} = (90, 2, 1, 5, 500) x = ( 90 , 2 , 1 , 5 , 500 ) 这就是一个五维向量。你听到有人说"要构建一个用于预测房价的机器学习模型",这句话的实际含义就是在这个五维空间中寻找规律,建立从特征向量 x \mathbf{x} x 到房价 y \mathbf{y} y 的映射关系。
标量 (Scalar)是一个只有数值的量,没有方向,在纯数学中也没有单位。标量可以是实数或复数,如 3 3 3 、− 5.7 -5.7 − 5.7 、π \pi π 等。标量用于表示大小或数量,是构成更复杂数学对象(如向量、矩阵 、张量 )的基本元素。
向量 (Vector)是由一组标量组成的有序序列。在数学上,n n n 维向量 v \mathbf{v} v 定义为 v = ( v 1 , v 2 , … , v n ) \mathbf{v} = (v_1, v_2, \ldots, v_n) v = ( v 1 , v 2 , … , v n ) 。在二维平面上,向量可以理解为一个从原点出发的有向箭头,譬如向量 ( 3 , 2 ) (3, 2) ( 3 , 2 ) 就表示从原点 ( 0 , 0 ) (0, 0) ( 0 , 0 ) 指向点 ( 3 , 2 ) (3, 2) ( 3 , 2 ) 的箭头。
图:二维空间中的向量
其中 v i v_i v i 称为向量的第 i i i 个分量 (Component),n n n 称为向量的维度 (Dimension),n n n 维向量只存在于 n n n 维空间中,意味着它需要 n n n 个坐标轴才能完整描述。譬如,v = ( 3 , − 1 , 2 ) \mathbf{v} = (3, -1, 2) v = ( 3 , − 1 , 2 ) 是一个三维向量,其三个分量分别为 v 1 = 3 v_1 = 3 v 1 = 3 ,v 2 = − 1 v_2 = -1 v 2 = − 1 ,v 3 = 2 v_3 = 2 v 3 = 2 。按数据科学的观点,特征向量的维度对应于特征的数量。举个例子,用"房屋面积、卧室数量、房龄"三个特征描述一套房子,就需要一个三维向量来表示。大数据体系中的"维表 "、DBMS 中的"MDD 多维数据库 "这些名字都是由此而来。
有一个与维度相关的易混淆概念是向量的元素个数,在编程语境中也常称为大小 (Size)或长度 (Length)。维度是几何视角看待向量所形成的概念,意为多少个坐标轴才能描述向量;而元素个数是编程视角下的概念,是指向量中包含的分量数量。在纯数学中,向量的长度通常指其模/范数 ,而非分量个数,这点与编程语境中有所差别。对于 n n n 维向量 v = ( v 1 , v 2 , … , v n ) \mathbf{v} = (v_1, v_2, \ldots, v_n) v = ( v 1 , v 2 , … , v n ) ,其长度也同样为 n n n ,与维度在数值上是相等的。但是后面讲到矩阵与张量时情况就不一样了,一个 3 × 4 3 \times 4 3 × 4 矩阵,可以说形状是 3 × 4 3 \times 4 3 × 4 (二维结构),但长度为 12(元素总数)。一个模型训练中的四维张量 ( b a t c h , c h a n n e l , h e i g h t , w i d t h ) (batch, channel, height, width) ( ba t c h , c hann e l , h e i g h t , w i d t h ) ,其维度是 4,长度则是 b a t c h × c h a n n e l × h e i g h t × w i d t h batch \times channel \times height \times width ba t c h × c hann e l × h e i g h t × w i d t h 。
向量、矩阵的长度决定了存储它们所需的存储空间大小,而维度则是进行向量、矩阵运算时检查兼容性的重要依据,举个例子,两个矩阵进行加法运算的前提是必须具有相同的维度,而非长度。譬如 2 × 6 2 \times 6 2 × 6 与 3 × 4 3 \times 4 3 × 4 的两个矩阵长度都是 12,但它们不能进行加法运算。
还有一个数学上不经常提起,但是编程和机器学习框架中(如 NumPy、PyTorch、TensorFlow)被频繁使用的概念:形状 (Shape),它描述的是向量在内存中的存储结构。形状以元组形式表示,指明数组在每个维度上的大小。如:
表示形式 形状 数学表示 说明 一维数组 (n,)[ v 1 v 2 ⋯ v n ] \begin{bmatrix} v_1 & v_2 & \cdots & v_n \end{bmatrix} [ v 1 v 2 ⋯ v n ] 只有长度,无行列之分 行向量 (1, n)v = [ v 1 v 2 ⋯ v n ] \mathbf{v} = \begin{bmatrix} v_1 & v_2 & \cdots & v_n \end{bmatrix} v = [ v 1 v 2 ⋯ v n ] 1 行 n n n 列的二维数组 列向量 (n, 1)v = [ v 1 v 2 ⋮ v n ] \mathbf{v} = \begin{bmatrix} v_1 \\ v_2 \\ \vdots \\ v_n \end{bmatrix} v = v 1 v 2 ⋮ v n n n n 行 1 列的二维数组
如无特殊说明,在大多数线性代数文献中,默认使用列向量。而在深度学习框架(如 PyTorch、TensorFlow)中,由于数据通常以行优先格式存储,默认更倾向于行向量的表示形式。在 Python 的 NumPy 框架中,一维数组既可以表示行向量也可以表示列向量:
▶ Run
import numpy as np
v = np. array( [ 3 , - 1 , 2 ] )
print ( f"形状: { v. shape} " )
row_vector = v. reshape( 1 , - 1 )
print ( f"行向量形状: { row_vector. shape} " )
col_vector = v. reshape( - 1 , 1 )
print ( f"列向量形状: { col_vector. shape} " )
点击 Run 按钮执行代码,点击代码区域可编辑
向量空间 (Vector Space)是一个更抽象的数学概念,设 V V V 是一个非空集合,F \mathbb{F} F 是一个数域(通常是实数域 R \mathbb{R} R ),如果 V V V 中元素定义了加法和数乘两种运算,且满足以下八条公理,则称 V V V 是 F \mathbb{F} F 上的向量空间:
加法公理(4 条) 数乘公理(4 条) 1. 交换律:u + v = v + u \mathbf{u} + \mathbf{v} = \mathbf{v} + \mathbf{u} u + v = v + u 5. 数乘对向量加法分配律:c ( u + v ) = c u + c v c(\mathbf{u} + \mathbf{v}) = c\mathbf{u} + c\mathbf{v} c ( u + v ) = c u + c v 2. 结合律:( u + v ) + w = u + ( v + w ) (\mathbf{u} + \mathbf{v}) + \mathbf{w} = \mathbf{u} + (\mathbf{v} + \mathbf{w}) ( u + v ) + w = u + ( v + w ) 6. 数乘对标量加法分配律:( c + d ) v = c v + d v (c + d)\mathbf{v} = c\mathbf{v} + d\mathbf{v} ( c + d ) v = c v + d v 3. 零向量存在:存在 0 \mathbf{0} 0 使得 v + 0 = v \mathbf{v} + \mathbf{0} = \mathbf{v} v + 0 = v 7. 数乘结合律:c ( d v ) = ( c d ) v c(d\mathbf{v}) = (cd)\mathbf{v} c ( d v ) = ( c d ) v 4. 逆元存在:对任意 v \mathbf{v} v ,存在 − v -\mathbf{v} − v 使得 v + ( − v ) = 0 \mathbf{v} + (-\mathbf{v}) = \mathbf{0} v + ( − v ) = 0 8. 单位元:1 ⋅ v = v 1 \cdot \mathbf{v} = \mathbf{v} 1 ⋅ v = v
以上八条公理严格保证了向量运算的基本性质,但对于非数学专业的读者,它们读起来就已经显得异常拗口。这里建议你不妨发挥些许想象力,将向量空间想成一张无限大的白纸,这张白纸上的每一个点都能进行"加法"和"数乘"两种动作:
加法 :从原点出发,先沿向量 a \mathbf{a} a 走、再沿向量 b \mathbf{b} b 走,等价于直接沿 a + b \mathbf{a} + \mathbf{b} a + b 走数乘 :可以把向量 a \mathbf{a} a 拉长 2 倍变成 2 a 2\mathbf{a} 2 a ,或反向翻转变成 − a -\mathbf{a} − a 显然,无论"加法"还是"数乘"如何折腾,所得结果仍然在这张无限大的白纸上(具有封闭性),并且这些运算还满足结合律、分配律等算术规则,那么,这张白纸就被称作是一个向量空间。无论是严格的八条公理,还是白纸上将加法、数乘理解为点移动的直观解释,其实都在说明同一件事:向量空间里面的元素能互相增减和缩放,且无论怎么操作都不会跑出这个集合外。在机器学习中,我们主要关注欧几里得空间 R n \mathbb{R}^n R n ,即所有 n n n 维实数向量的集合。
如果给定一组向量 v 1 , v 2 , … , v k \mathbf{v}_1, \mathbf{v}_2, \ldots, \mathbf{v}_k v 1 , v 2 , … , v k ,存在不全为零的标量 c 1 , c 2 , … , c k c_1, c_2, \ldots, c_k c 1 , c 2 , … , c k ,使得 c 1 v 1 + c 2 v 2 + ⋯ + c k v k = 0 c_1\mathbf{v}_1 + c_2\mathbf{v}_2 + \cdots + c_k\mathbf{v}_k = \mathbf{0} c 1 v 1 + c 2 v 2 + ⋯ + c k v k = 0 ,则称这组向量线性相关 (Linearly Dependent)。否则,如果只有 c 1 = c 2 = ⋯ = c k = 0 c_1 = c_2 = \cdots = c_k = 0 c 1 = c 2 = ⋯ = c k = 0 才能使上式成立,则称这组向量线性无关 (Linearly Independent)。
线性无关意味着没有任何一个向量可以被其他向量表示,好比一个由程序员、设计师、产品经理组成的团队,每个成员都有独特的技能,没有人能替代其他人。线性相关意味着至少有一个向量可以由其他向量的线性组合表示,相当于团队中有人是"多余的",他能做的工作别人也能做。以数据即向量的观点来看,线性相关就意味着数据集中存在冗余的数据。
数据科学中经常使用秩 (Rank)这个概念来衡量数据之间的相关性,秩的定义直接来源于对向量组线性无关程度的度量,它是指向量组中线性无关向量的最大个数。说一个矩阵满秩 ,意味每个数据都有其存在的意义,而不满秩 就可以理解为数据中存在可以移除的冗余量。只要想明白了秩的定义,即使现在还没有看后面关于线性代数应用场景的章节,相信读者也可以大致推断出下面常见的机器学习应用是在做些什么。
特征选择 :如果特征矩阵的秩小于特征数,说明存在冗余特征。数据压缩 :秩分解可以实现低秩近似,用更少参数近似原矩阵,降低维度,减少存储空间。奇异值分解 :秩等同于非零奇异值个数,决定了"有多少东西值得保留"。模型 LoRA 微调 :只训练"低秩适配器",不动原模型,用极少参数实现高效微调。…… 根据秩的定义,对于一个矩阵,其秩应等于其行向量组的秩,也等于其列向量组的秩。因此,可以通过如下代码,反过来判断若干向量是否线性相关。
▶ Run
import numpy as np
from numpy. linalg import matrix_rank
def is_linearly_independent ( vectors) :
"""
通过矩阵秩判断向量组是否线性无关
如果秩等于向量个数,则线性无关
"""
A = np. column_stack( vectors)
rank = matrix_rank( A)
return rank == len ( vectors)
v1 = np. array( [ 1 , 0 , 0 ] )
v2 = np. array( [ 0 , 1 , 0 ] )
v3 = np. array( [ 0 , 0 , 1 ] )
v4 = np. array( [ 1 , 1 , 0 ] )
print ( f"v1, v2, v3 线性无关: { is_linearly_independent( [ v1, v2, v3] ) } " )
print ( f"v1, v2, v4 线性无关: { is_linearly_independent( [ v1, v2, v4] ) } " )
点击 Run 按钮执行代码,点击代码区域可编辑
前面讲解向量空间时,已经以通俗解释的形式提到过加法与数乘。向量加法和数乘是向量空间中最基本的两种运算,它们共同构筑了线性代数的基础。向量加法 是对于两个同维向量 u = ( u 1 , … , u n ) \mathbf{u} = (u_1, \ldots, u_n) u = ( u 1 , … , u n ) 和 v = ( v 1 , … , v n ) \mathbf{v} = (v_1, \ldots, v_n) v = ( v 1 , … , v n ) ,其相加的代数为 u + v = ( u 1 + v 1 , u 2 + v 2 , … , u n + v n ) \mathbf{u} + \mathbf{v} = (u_1 + v_1, u_2 + v_2, \ldots, u_n + v_n) u + v = ( u 1 + v 1 , u 2 + v 2 , … , u n + v n ) 。向量加法有两种等价的几何解释,即"平行四边形法则"与"三角形法则",分别是:
平行四边形法则 :将两个向量 u \mathbf{u} u 和 v \mathbf{v} v 的起点放在同一点,以它们为邻边作平行四边形,从公共起点出发的对角线就是 u + v \mathbf{u} + \mathbf{v} u + v 。
三角形法则 :将 v \mathbf{v} v 的起点放在 u \mathbf{u} u 的终点,从 u \mathbf{u} u 的起点到 v \mathbf{v} v 的终点的向量就是 u + v \mathbf{u} + \mathbf{v} u + v 。
图:平行四边形法则与三角形法则
数乘 (Scalar Multiplication)也称标量乘法,定义即为标量与向量的乘积 c v = ( c v 1 , c v 2 , … , c v n ) c\mathbf{v} = (cv_1, cv_2, \ldots, cv_n) c v = ( c v 1 , c v 2 , … , c v n ) 。数乘的几何意义比加法更加直观,无需什么法则,直接就是对向量进行 c c c 倍的缩放操作:
当 c > 0 c > 0 c > 0 :向量的长度缩放为原来的 ∣ c ∣ |c| ∣ c ∣ 倍,方向不变 当 c < 0 c < 0 c < 0 :向量的长度缩放为原来的 ∣ c ∣ |c| ∣ c ∣ 倍,方向反向 当 c = 0 c = 0 c = 0 :结果为零向量 0 \mathbf{0} 0 几乎所有向量的操作都由这两种基本的运算组合而来。线性组合 (Linear Combination)便是一种向量加法和数乘的复合运算。给定向量 v 1 , v 2 , … , v k \mathbf{v}_1, \mathbf{v}_2, \ldots, \mathbf{v}_k v 1 , v 2 , … , v k 和标量 c 1 , c 2 , … , c k c_1, c_2, \ldots, c_k c 1 , c 2 , … , c k ,它们的线性组合即为 c 1 v 1 + c 2 v 2 + ⋯ + c k v k c_1\mathbf{v}_1 + c_2\mathbf{v}_2 + \cdots + c_k\mathbf{v}_k c 1 v 1 + c 2 v 2 + ⋯ + c k v k 。
子空间 (Subspace)在数学上是向量空间 V V V 的一个子集 W W W ,它满足如下性质:
包含零向量:0 ∈ W \mathbf{0} \in W 0 ∈ W 对加法封闭:u , v ∈ W ⇒ u + v ∈ W \mathbf{u}, \mathbf{v} \in W \Rightarrow \mathbf{u} + \mathbf{v} \in W u , v ∈ W ⇒ u + v ∈ W 对数乘封闭:v ∈ W , c ∈ R ⇒ c v ∈ W \mathbf{v} \in W, c \in \mathbb{R} \Rightarrow c\mathbf{v} \in W v ∈ W , c ∈ R ⇒ c v ∈ W 笔者照例给出一个通俗的解释,想象你站在室外操场上(这是一个三维空间)晒太阳,以你的脚尖为原点,你的影子被阳光投射在地面上,这个地面上的阴影就是你这个三维物体的一个二维子空间。影子上的任何一点都可以用"东 - 西"和"北 - 南"两个方向来描述,但是不再需要考虑"上 - 下"(高度)这个维度。如果用子空间的数学语言来描述以上场景应该是这样的:在三维空间 R 3 \mathbb{R}^3 R 3 中,所有形如 ( x , y , 0 ) (x, y, 0) ( x , y , 0 ) 的向量构成一个子空间,它就是 x y xy x y 平面。这个平面满足"包含原点 ( 0 , 0 , 0 ) (0,0,0) ( 0 , 0 , 0 ) "、"平面上两点相加仍在平面上"、"平面上任意点缩放后仍在平面上"三条规则。同理,在二维平面 R 2 \mathbb{R}^2 R 2 中,过原点的任意直线都是一个子空间。所有形如 ( t , 2 t ) (t, 2t) ( t , 2 t ) 的点(即直线 y = 2 x y=2x y = 2 x )构成一个一维子空间。这条直线穿过原点,直线上两点相加还在直线上,直线上任意点缩放后仍在直线上。
子空间的概念在降维、特征工程等机器学习任务中有非常广泛的应用。譬如,PCA 找到的主成分方向就构成一个低维子空间。
当把数的概念从标量扩展到向量后,构成向量的多个标量将以不同的规则相乘,会得出不同的结果,因此"乘法"对于向量(当然也包括后续的矩阵和张量)就是个需要根据上下文或数学符号才能准确分辨的词汇。譬如,两个同维向量对应位置元素相乘,结果仍是同维向量,这种称为逐元素积(Hadamard 积) ;一个 m m m 维列向量与一个 n n n 维行向量的各元素相乘,结果生成一个 m × n m \times n m × n 矩阵,这种称为外积(Outer Product) ,还有外积在更高维的张量上的推广克罗内克积(Kronecker Product) ;又或者局限于三维空间,但在计算机图形学中(计算表面法向量)、物理学中(力矩、角动量)都很常见的叉积(Cross Product) ,等等。
由于我们的讨论尚未涉及到矩阵、张量这些概念,因此这里只关注向量的内积 (Inner Product)和它的应用。内积也称为点积 (Dot Product),它的代数定义为 u ⋅ v = ∑ i = 1 n u i v i = u 1 v 1 + u 2 v 2 + ⋯ + u n v n \mathbf{u} \cdot \mathbf{v} = \sum_{i=1}^{n} u_i v_i = u_1v_1 + u_2v_2 + \cdots + u_nv_n u ⋅ v = ∑ i = 1 n u i v i = u 1 v 1 + u 2 v 2 + ⋯ + u n v n 。内积满足如下性质:
交换律:u ⋅ v = v ⋅ u \mathbf{u} \cdot \mathbf{v} = \mathbf{v} \cdot \mathbf{u} u ⋅ v = v ⋅ u 分配律:u ⋅ ( v + w ) = u ⋅ v + u ⋅ w \mathbf{u} \cdot (\mathbf{v} + \mathbf{w}) = \mathbf{u} \cdot \mathbf{v} + \mathbf{u} \cdot \mathbf{w} u ⋅ ( v + w ) = u ⋅ v + u ⋅ w 数乘结合:( c u ) ⋅ v = c ( u ⋅ v ) (c\mathbf{u}) \cdot \mathbf{v} = c(\mathbf{u} \cdot \mathbf{v}) ( c u ) ⋅ v = c ( u ⋅ v ) 非负性:v ⋅ v ≥ 0 \mathbf{v} \cdot \mathbf{v} \geq 0 v ⋅ v ≥ 0 ,等号成立当且仅当 v = 0 \mathbf{v} = \mathbf{0} v = 0 比起代数定义,内积的几何定义更为直观,它表示为 u ⋅ v = ∥ u ∥ ∥ v ∥ cos θ \mathbf{u} \cdot \mathbf{v} = \|\mathbf{u}\| \|\mathbf{v}\| \cos\theta u ⋅ v = ∥ u ∥∥ v ∥ cos θ 。其中 θ \theta θ 是两个向量之间的夹角,∥ ⋅ ∥ \|\cdot\| ∥ ⋅ ∥ 表示向量的模长(L2 范数 )。内积体现了两个向量几何上的夹角关系。当内积为零时,两个向量正交(垂直);内积为正时,夹角为锐角;内积为负时,夹角为钝角。这里的不同的角度实际上度量了两个向量在方向上的一致程度。两个向量指向相同方向时(θ = 0 ° \theta = 0° θ = 0° ),余弦值为 1(cos θ = 1 \cos\theta = 1 cos θ = 1 ),内积达到最大值,表示它们高度相关;当两个向量垂直时(θ = 90 ° \theta = 90° θ = 90° ),余弦值为 0(cos θ = 0 \cos\theta = 0 cos θ = 0 ),内积处于零值,表示它们相互独立、毫无关联;当两个向量方向相反时(θ = 180 ° \theta = 180° θ = 180° ),余弦值为 -1(cos θ = − 1 \cos\theta = -1 cos θ = − 1 ),内积为负的最大值,表示它们呈负相关。
图:向量内积的几何意义
机器学习中广泛使用由内积衍生的余弦相似度 (Cosine Similarity)来衡量文本、图像等数据相似性。余弦相似度的定义直接从内积几何定义而来:c o s i n e _ s i m i l a r i t y ( u , v ) = u ⋅ v ∥ u ∥ ∥ v ∥ cosine\_similarity(\mathbf{u}, \mathbf{v}) = \frac{\mathbf{u} \cdot \mathbf{v}}{\|\mathbf{u}\| \|\mathbf{v}\|} cos in e _ s imi l a r i t y ( u , v ) = ∥ u ∥∥ v ∥ u ⋅ v ,显而易见,它是内积去掉模长后的结果(内积公式 u ⋅ v = ∥ u ∥ ∥ v ∥ cos θ \mathbf{u} \cdot \mathbf{v} = \|\mathbf{u}\| \|\mathbf{v}\| \cos\theta u ⋅ v = ∥ u ∥∥ v ∥ cos θ 两边同时除以 ∥ u ∥ ∥ v ∥ \|\mathbf{u}\| \|\mathbf{v}\| ∥ u ∥∥ v ∥ )。这表明余弦相似度只关心向量的方向,并不关心向量的长度。这个特点使其在处理文本相似度中十分有用,它对应的现实是"一小段话与一大篇文章完全有可能在描述同一个意思"。
内积建立了代数与几何的桥梁。通过代数计算可以得到向量间夹角(cos θ = u ⋅ v ∥ u ∥ ∥ v ∥ \cos\theta = \frac{\mathbf{u} \cdot \mathbf{v}}{\|\mathbf{u}\| \|\mathbf{v}\|} cos θ = ∥ u ∥∥ v ∥ u ⋅ v )、向量长度(∥ v ∥ = v ⋅ v \|\mathbf{v}\| = \sqrt{\mathbf{v} \cdot \mathbf{v}} ∥ v ∥ = v ⋅ v )这些几何量,也可以用代数表达式精确描述正交(u ⋅ v = 0 \mathbf{u} \cdot \mathbf{v} = 0 u ⋅ v = 0 )、投影(proj u ( v ) = v ⋅ u u ⋅ u u \text{proj}_u(v) = \frac{v \cdot u}{u \cdot u} u proj u ( v ) = u ⋅ u v ⋅ u u )这样的几何概念。不夸张地说,内积让向量的"计算"与"看见"完全统一了起来。
投影 (Projection)是与内积密切相关的几何运算。向量 u \mathbf{u} u 在向量 v \mathbf{v} v 上的投影可表示为 proj v u = u ⋅ v v ⋅ v v = u ⋅ v ∥ v ∥ 2 v \text{proj}_{\mathbf{v}} \mathbf{u} = \frac{\mathbf{u} \cdot \mathbf{v}}{\mathbf{v} \cdot \mathbf{v}} \mathbf{v} = \frac{\mathbf{u} \cdot \mathbf{v}}{\|\mathbf{v}\|^2} \mathbf{v} proj v u = v ⋅ v u ⋅ v v = ∥ v ∥ 2 u ⋅ v v ,其长度(标量)为 u ⋅ v ∥ v ∥ \frac{\mathbf{u} \cdot \mathbf{v}}{\|\mathbf{v}\|} ∥ v ∥ u ⋅ v 。从几何意义上看,投影描述了向量 u \mathbf{u} u 在向量 v \mathbf{v} v 方向上的"影子",它是 u \mathbf{u} u 在 v \mathbf{v} v 方向上的分量,可以形象地理解为当一束垂直于 v \mathbf{v} v 的光线照射 u \mathbf{u} u 时,在 v \mathbf{v} v 所在直线上投下的影子。投影的结果 proj v u \text{proj}_{\mathbf{v}} \mathbf{u} proj v u 是一个与 v \mathbf{v} v 同向(或反向)的向量,其模长反映了 u \mathbf{u} u 在 v \mathbf{v} v 方向上的"影响力"大小。投影在各种科学领域中都有着广泛的应用场景,譬如:
数据降维 :在主成分分析中,数据点在主成分方向上的投影决定了该维度上的坐标值,通过保留高方差的投影维度实现降维。信号处理 :将信号投影到特定基函数上,用于滤波、噪声消除或特征提取,如傅里叶变换本质上是将信号投影到不同频率的正弦波上。机器学习 :最小二乘线性回归的求解过程,本质上就是将响应向量投影到设计矩阵的列空间上,找到最佳拟合超平面。计算机图形学 :3D 物体在 2D 屏幕上的显示需要通过投影变换,包括正交投影和透视投影。物理力学 :将力分解为沿某方向的分量(如斜面上物体的重力分解为下滑力和正压力)。…… 通过向量表示、加法、内积、投影等的几何直观讲解,揭示了线性代数几何与代数的完美对应,这种对应让人类可以使用几何特征来形象地理解数据的概念含义,又能使用代数方法来精确计算数据间的关联关系。要在十分有限的篇幅内讲清楚这些线性代数的概念,笔者主要凭借的手段也是以相对直观的几何解释来阐明原本抽象晦涩的代数原理。以下表格中还列出更多类似的例子。
几何概念 代数表示 现实含义 相加 u + v = ( u 1 + v 1 , … , u n + v n ) \mathbf{u} + \mathbf{v} = (u_1+v_1, \ldots, u_n+v_n) u + v = ( u 1 + v 1 , … , u n + v n ) 数据的叠加效果,如两个方向的合力、多个特征的综合影响 长度 ∣ ∣ v ∣ ∣ 2 = v 1 2 + ⋯ + v n 2 ||\mathbf{v}||_2 = \sqrt{v_1^2 + \cdots + v_n^2} ∣∣ v ∣ ∣ 2 = v 1 2 + ⋯ + v n 2 数据的"规模"或"强度",如信号的能量、向量的模长 夹角 cos θ = u ⋅ v ∣ ∣ u ∣ ∣ ∣ ∣ v ∣ ∣ \cos\theta = \frac{\mathbf{u} \cdot \mathbf{v}}{||\mathbf{u}|| ||\mathbf{v}||} cos θ = ∣∣ u ∣∣∣∣ v ∣∣ u ⋅ v 数据间的相关性,夹角越小表示越相似,如推荐系统和语义搜索 正交 u ⋅ v = 0 \mathbf{u} \cdot \mathbf{v} = 0 u ⋅ v = 0 数据相互独立、毫无关联,如 PCA 主成分分析 中正交主成分代表不相关的特征 投影 proj v u = u ⋅ v ∣ ∣ v ∣ ∣ 2 v \text{proj}_{\mathbf{v}} \mathbf{u} = \frac{\mathbf{u} \cdot \mathbf{v}}{||\mathbf{v}||^2} \mathbf{v} proj v u = ∣∣ v ∣ ∣ 2 u ⋅ v v 数据在某个方向上的"影子",如降维和特征提取 线性变换 矩阵乘法 A x \mathbf{Ax} Ax 数据的转换、旋转或缩放,如神经网络中的权重变换
面对更高维的场景,虽然我们无法直接看见四维、五维甚至更高维的空间,但线性代数的运算规则在任意维度都成立,这种抽象能力正是数学工具的强大之处。在处理机器学习问题时,我们经常面对高维向量。譬如 GloVe 词向量通常是 300 维,BERT 的句向量可达 768 维甚至更高。虽然无法可视化,但我们仍然可以应用内积、变换、投影等运算来寻找向量之间的关系。当然,高维空间也有一些反直觉的性质。譬如在高维空间中,大多数点都分布在"边角"附近,而不是中心区域,这对理解某些机器学习算法的行为有重要启示。
基 (Basis)是向量空间的一组线性无关向量,使得空间中任意向量都可以表示为这组向量的线性组合。就像我们平常在三维空间中用 x x x 、y y y 、z z z 轴描述任何位置一样,基提供了一套描述向量空间中所有向量的语言。譬如有一组二维平面 R 2 \mathbb{R}^2 R 2 的基向量 e 1 = ( 1 , 0 ) \mathbf{e}_1 = (1, 0) e 1 = ( 1 , 0 ) ,e 2 = ( 0 , 1 ) \mathbf{e}_2 = (0, 1) e 2 = ( 0 , 1 ) ,那么向量 ( 3 , 2 ) (3,2) ( 3 , 2 ) 就可以表示为 ( 3 , 2 ) = 3 ⋅ e 1 + 2 ⋅ e 2 = 3 ⋅ ( 1 , 0 ) + 2 ⋅ ( 0 , 1 ) (3, 2) = 3\cdot\mathbf{e}_1 + 2\cdot\mathbf{e}_2 = 3\cdot(1,0) + 2\cdot(0,1) ( 3 , 2 ) = 3 ⋅ e 1 + 2 ⋅ e 2 = 3 ⋅ ( 1 , 0 ) + 2 ⋅ ( 0 , 1 ) 。这里的 3 和 2 就是该向量在这个基下的坐标。
如同正方形与平行四边形、直角坐标系与笛卡尔坐标系的关系那样,在所有基向量中有一类两两正交的特殊子集,被称为正交基 (Orthogonal Basis)。上面举的例子 e 1 = ( 1 , 0 ) \mathbf{e}_1 = (1, 0) e 1 = ( 1 , 0 ) ,e 2 = ( 0 , 1 ) \mathbf{e}_2 = (0, 1) e 2 = ( 0 , 1 ) 就是一组正交基。进一步,如果正交基的每个向量都是单位向量(模长为 1),那我们就称其为标准正交基 (Orthonormal Basis)。根据正交与模长为 1 的定义,显然标准正交基 { e 1 , e 2 , … , e n } \{\mathbf{e}_1, \mathbf{e}_2, \ldots, \mathbf{e}_n\} { e 1 , e 2 , … , e n } 满足:e i ⋅ e j = { 1 , i = j 0 , i ≠ j \mathbf{e}_i \cdot \mathbf{e}_j = \begin{cases} 1, & i = j \\ 0, & i \neq j \end{cases} e i ⋅ e j = { 1 , 0 , i = j i = j 。最常用的标准正交基是自然基 ,即:
e 1 = ( 1 , 0 , 0 , … , 0 ) \mathbf{e}_1 = (1, 0, 0, \ldots, 0) e 1 = ( 1 , 0 , 0 , … , 0 ) e 2 = ( 0 , 1 , 0 , … , 0 ) \mathbf{e}_2 = (0, 1, 0, \ldots, 0) e 2 = ( 0 , 1 , 0 , … , 0 ) ... 标准正交基使得坐标计算变得简单,向量 v \mathbf{v} v 在标准正交基下的第 i i i 个坐标就是 v ⋅ e i \mathbf{v} \cdot \mathbf{e}_i v ⋅ e i 。对于非正交的基还得解线性方程组才能求得坐标,尽管也能达成目的,但就显得比较啰嗦。
范数 (Norm)的作用类似于尺子,是用来度量向量"大小"的量,可以理解为求向量的长度。前面提到过的模长 (Magnitude)就是范数的其中一种类型(特指 L2 范数)。"求向量长度"这句通俗描述的严谨定义是这样一个函数:∥ ⋅ ∥ : V → R \|\cdot\|: V \to \mathbb{R} ∥ ⋅ ∥ : V → R ,符号"∥ \| ∥ "看起来像绝对值"|"的"加强版",它就是范数符号,可以理解为绝对值在高维空间的推广。"⋅ \cdot ⋅ " 是一个占位符,表示这里要摆放一个向量。V → R V \to \mathbb{R} V → R 的含义是从向量空间 V V V (所有向量的集合)到实数集 R \mathbb{R} R 的一个映射,意思是范数把向量变成普通数字(度量长度大小的标量)。范数满足如下性质:
非负性:∥ v ∥ ≥ 0 \|\mathbf{v}\| \geq 0 ∥ v ∥ ≥ 0 ,等号成立当且仅当 v = 0 \mathbf{v} = \mathbf{0} v = 0 (含义:且只有零向量的范数是 0)。 齐次性:∥ c v ∥ = ∣ c ∣ ∥ v ∥ \|c\mathbf{v}\| = |c| \|\mathbf{v}\| ∥ c v ∥ = ∣ c ∣∥ v ∥ (含义:数乘后长度等比例缩放)。 三角不等式:∥ u + v ∥ ≤ ∥ u ∥ + ∥ v ∥ \|\mathbf{u} + \mathbf{v}\| \leq \|\mathbf{u}\| + \|\mathbf{v}\| ∥ u + v ∥ ≤ ∥ u ∥ + ∥ v ∥ (含义:三角的两边之和大于第三边)。 数学的内容讲完了,后面照例是通俗解释。不过到这里,可能已经会有读者先产生疑问,什么叫模长是范数的其中"一种"类型?既然长度已经是个标量,为什么还能有多种不同类型?还有什么是 L2 范数,还有其他 L1、L3 范数吗?
我们先来考虑这样一个现实场景:用户使用导航软件查询深圳市到珠海市的距离,在搜索列表中,导航显示距离大致是 67 千米,当点击导航按钮后,导航规划的路线长度是 112 千米。显然,产生差异的原因在于这两个距离意义并不相同,前者是空间上的直线最短距离,但用户无法凭空飞跃过去,后者才是考虑了实际通行线路后的"计程车距离"。
将这个现实场景类比到范数中,求两点之间的直线距离(为方便,我们将其中一点平移到向量空间的原点上,平移操作不改变距离大小)就是 L2 范数 (欧几里得范数)。从名字很容易联想到在初等几何中平面直角坐标系中的欧几里得距离公式 d = ( x 1 − x 2 ) 2 + ( y 1 − y 2 ) 2 d = \sqrt{(x_1-x_2)^2+(y_1-y_2)^2} d = ( x 1 − x 2 ) 2 + ( y 1 − y 2 ) 2 。当其中一点为原点时,计算另一点到原点的距离公式简化就是 d = x 1 2 + y 1 2 d = \sqrt{x_1^2+y_1^2} d = x 1 2 + y 1 2 。
更一般地,从二维平面扩展到高维空间,L2 范数计算的就是向量 v v v 到原点的直线距离,计算公式为 ∥ v ∥ 2 = v 1 2 + v 2 2 + ⋯ + v n 2 \|\mathbf{v}\|_2 = \sqrt{v_1^2 + v_2^2 + \cdots + v_n^2} ∥ v ∥ 2 = v 1 2 + v 2 2 + ⋯ + v n 2 。同样的类比,如果求两点之间只能沿坐标轴方向行走的总距离,就类似于导航路线中只能沿着道路行进的总距离,这被称为 L1 范数 (曼哈顿范数),计算方法就是对向量对应各个坐标轴中的分量进行绝对距离求和,计算公式为 ∥ v ∥ 1 = ∑ i = 1 n ∣ v i ∣ = ∣ v 1 ∣ + ∣ v 2 ∣ + ⋯ + ∣ v n ∣ \|\mathbf{v}\|_1 = \sum_{i=1}^{n} |v_i| = |v_1| + |v_2| + \cdots + |v_n| ∥ v ∥ 1 = ∑ i = 1 n ∣ v i ∣ = ∣ v 1 ∣ + ∣ v 2 ∣ + ⋯ + ∣ v n ∣ 。
在 L1、L2 范数的基础上,数学学者们进一步拓展产生了 L p L_p L p 范数 ,它的定义为 ∥ v ∥ p = ( ∑ i = 1 n ∣ v i ∣ p ) 1 / p \|\mathbf{v}\|_p = \left( \sum_{i=1}^{n} |v_i|^p \right)^{1/p} ∥ v ∥ p = ( ∑ i = 1 n ∣ v i ∣ p ) 1/ p 。不妨对比一下前面 L1、L2 范数的公式,易见这两条公式是 p = 1 、 p = 2 p=1、p=2 p = 1 、 p = 2 时 L p L_p L p 范数公式的特例。同理,如果我们将 p = 0 p=0 p = 0 代入,还能得到 L0 范数(∥ v ∥ 0 = ∑ i = 1 n 1 v i ≠ 0 \|\mathbf{v}\|_0 = \sum_{i=1}^{n} \mathbf{1}_{v_i \neq 0} ∥ v ∥ 0 = ∑ i = 1 n 1 v i = 0 )的计算公式,从公式可以看出这实际是求向量中非零元素的个数。严格来说,"L0 范数"不是真正的范数(它不满足齐次性 ∣ α x ∣ 0 ≠ ∣ α ∣ ⋅ ∣ x ∣ 0 |\alpha \mathbf{x}|_0 \neq |\alpha| \cdot |\mathbf{x}|_0 ∣ α x ∣ 0 = ∣ α ∣ ⋅ ∣ x ∣ 0 ),但由于其形式与 L p L_p L p 范数族相似,习惯上仍这样称呼。这里作为课间思考题,请读者想一下当 p = ∞ p=\infty p = ∞ 时,∥ v ∥ ∞ \|\mathbf{v}\|_\infty ∥ v ∥ ∞ 范数的公式是什么,从公式看它应当具备什么意义?
从几何视角理解 L p L_p L p 范数,最直观的方式是观察单位球 (Unit Ball)的形状。单位球是指所有满足 ∥ v ∥ p = 1 \|\mathbf{v}\|_p = 1 ∥ v ∥ p = 1 的向量构成的集合,即在给定范数定义下"距离原点恰好为 1"的所有点的边界。在二维平面上,单位球实际上是一条闭合曲线,称为单位球边界 。
图:不同 p p p 值下的单位球形状
观察上图,从左到右依次为 p = 0.25 , 0.5 , 1 , 2 , 3 , 4 , 6 , ∞ p=0.25, 0.5, 1, 2, 3, 4, 6, \infty p = 0.25 , 0.5 , 1 , 2 , 3 , 4 , 6 , ∞ ,展示了单位球从星形→菱形→圆→正方形的变化过程,从中可以发现如下几个关键特征:
p p p 值单位球形状 几何特征 p = ∞ p = \infty p = ∞ 正方形 边界平行于坐标轴,∣ v ∣ ∞ = max ( ∣ v 1 ∣ , ∣ v 2 ∣ , … , ∣ v n ∣ ) |\mathbf{v}|_\infty = \max(|v_1|, |v_2|, \ldots, |v_n|) ∣ v ∣ ∞ = max ( ∣ v 1 ∣ , ∣ v 2 ∣ , … , ∣ v n ∣ ) p = 2 p = 2 p = 2 圆 经典的欧几里得距离,各方向均匀度量,这是初等平面解析几何中认知的距离 p = 1 p = 1 p = 1 菱形 曼哈顿距离,四个顶点在坐标轴上 p < 1 p < 1 p < 1 星形 / 凹向原点 形状向原点"凹陷",此时 ∣ ⋅ ∣ p |\cdot|_p ∣ ⋅ ∣ p 不再是真正的范数(不满足三角不等式)
单位球的形状揭示了 L p L_p L p 范数的本质,p p p 值越大,单位球越"方正",越强调各分量的最大值。p p p 值越小,单位球越"尖锐",越倾向于稀疏的向量。从数学角度看,当 p ≥ 1 p \geq 1 p ≥ 1 时,单位球是凸集 ,这保证了范数的三角不等式成立。当 p < 1 p < 1 p < 1 时,单位球向原点凹陷,不再是凸集,因此严格意义上不能称为范数。
在机器学习中,范数贯穿于模型设计、训练、优化的全过程,以它在正则化 (Regularization)过程中的发挥的作用为例:模型训练的一类重要风险是过拟合现象。假设我们用大量高考试题训练一个学生做题模型,希望的是这个模型能理解解题思路和方法,在下一次高考能得高分,而不希望模型把历年高考题目答案全部背下来,面对历史高考题能得满分,遇到新题就懵了。这种只记住训练数据,泛化能力差的现象叫做过拟合。正则化实质是一种防止模型"死记硬背"训练数据,让它学会"通用规律"而不是"背诵答案"的手段。在机器学习中,正则化通过在损失函数中增加对模型复杂度的惩罚,迫使模型学习更简洁、更具泛化能力的规律。囿于当前我们还没有讲解过模型训练的相关知识,在这个问题上无法进一步展开,需后面学习模型训练的正则化章节中再继续展开讨论。
本章从向量这一线性代数最基本的研究对象出发,系统地构建了理解机器学习算法所需的数学基础。
向量的本质与表示 。向量是由标量组成的有序序列,是数据的结构化表示形式。理解向量的维度、长度与形状等概念,是正确使用机器学习框架(如 NumPy、PyTorch)进行数据操作的前提。列向量作为默认表示形式,贯穿后续矩阵运算的始终。
向量空间的代数结构 。向量空间通过八条公理严格定义了加法与数乘运算的封闭性,其中线性相关与线性无关的概念直接引出了"秩"这一核心度量。秩不仅衡量数据冗余程度,更是特征选择、数据压缩、LoRA 微调等技术的理论基础。
内积是连接代数与几何的桥梁 。内积的代数定义(对应分量相乘求和)与几何定义(模长乘积与夹角余弦的乘积)等价,这一性质使得我们可以通过纯代数运算获得向量的几何特征。基于内积的余弦相似度广泛用于文本相似度计算和推荐系统,而投影运算则是 PCA 降维 、信号处理、最小二乘回归的数学基础。
基的选取与坐标表示 。基提供了一套描述向量空间的语言,正交基和标准正交基因其良好的几何性质而被广泛使用。标准正交基使得坐标计算简化为内积运算,避免了求解线性方程组的繁琐过程。
范数是多角度的度量工具 。从 L1 范数的"曼哈顿距离"到 L2 范数的"欧几里得距离",不同范数反映了不同的度量视角。范数不仅是衡量向量大小的工具,更是正则化技术的核心,通过在损失函数中引入范数惩罚,有效防止模型过拟合,提升泛化能力。
这些概念相互关联、层层递进:向量空间定义了运算的舞台,线性相关性刻画了数据的冗余结构,内积建立了代数与几何的联系,正交基提供了最优的坐标系统,范数则赋予了我们多角度度量数据的能力。掌握这些基础,将为后续学习矩阵、线性变换以及更复杂的机器学习算法做好准备。
判断以下向量组是否线性相关,并说明理由:v 1 = ( 1 , 2 , 3 ) \mathbf{v}_1 = (1, 2, 3) v 1 = ( 1 , 2 , 3 ) ,v 2 = ( 2 , 4 , 6 ) \mathbf{v}_2 = (2, 4, 6) v 2 = ( 2 , 4 , 6 ) ,v 3 = ( 1 , 1 , 1 ) \mathbf{v}_3 = (1, 1, 1) v 3 = ( 1 , 1 , 1 ) 。
参考答案 这组向量线性相关。
观察可以发现 v 2 = 2 v 1 \mathbf{v}_2 = 2\mathbf{v}_1 v 2 = 2 v 1 ,即 v 2 \mathbf{v}_2 v 2 可以由 v 1 \mathbf{v}_1 v 1 线性表示。因此存在不全为零的系数 c 1 = 2 , c 2 = − 1 , c 3 = 0 c_1 = 2, c_2 = -1, c_3 = 0 c 1 = 2 , c 2 = − 1 , c 3 = 0 使得 2 v 1 − v 2 + 0 v 3 = 0 2\mathbf{v}_1 - \mathbf{v}_2 + 0\mathbf{v}_3 = \mathbf{0} 2 v 1 − v 2 + 0 v 3 = 0 。
用秩来判断:将这三个向量组成矩阵,其秩为 2(小于向量个数 3),故线性相关。这意味着数据集中存在冗余,v 2 \mathbf{v}_2 v 2 提供的信息完全被 v 1 \mathbf{v}_1 v 1 包含。
计算向量 u = ( 1 , 1 ) \mathbf{u} = (1, 1) u = ( 1 , 1 ) 和 v = ( 1 , 0 ) \mathbf{v} = (1, 0) v = ( 1 , 0 ) 的内积、各自模长、以及它们之间的夹角 θ \theta θ 。
参考答案 内积:u ⋅ v = 1 × 1 + 1 × 0 = 1 \mathbf{u} \cdot \mathbf{v} = 1 \times 1 + 1 \times 0 = 1 u ⋅ v = 1 × 1 + 1 × 0 = 1
模长:∥ u ∥ = 1 2 + 1 2 = 2 \|\mathbf{u}\| = \sqrt{1^2 + 1^2} = \sqrt{2} ∥ u ∥ = 1 2 + 1 2 = 2 ,∥ v ∥ = 1 2 + 0 2 = 1 \|\mathbf{v}\| = \sqrt{1^2 + 0^2} = 1 ∥ v ∥ = 1 2 + 0 2 = 1
夹角:cos θ = u ⋅ v ∥ u ∥ ∥ v ∥ = 1 2 × 1 = 1 2 \cos\theta = \frac{\mathbf{u} \cdot \mathbf{v}}{\|\mathbf{u}\| \|\mathbf{v}\|} = \frac{1}{\sqrt{2} \times 1} = \frac{1}{\sqrt{2}} cos θ = ∥ u ∥∥ v ∥ u ⋅ v = 2 × 1 1 = 2 1
因此 θ = 45 ° \theta = 45° θ = 45° (即 π 4 \frac{\pi}{4} 4 π 弧度)。
这个结果符合几何直观:向量 ( 1 , 1 ) (1, 1) ( 1 , 1 ) 位于第一象限的对角线上,与 x 轴方向 ( 1 , 0 ) (1, 0) ( 1 , 0 ) 的夹角确实是 45°。
在文本分析中,两个文档的词频向量分别为 d 1 = ( 3 , 0 , 1 , 2 ) \mathbf{d}_1 = (3, 0, 1, 2) d 1 = ( 3 , 0 , 1 , 2 ) 和 d 2 = ( 1 , 2 , 0 , 1 ) \mathbf{d}_2 = (1, 2, 0, 1) d 2 = ( 1 , 2 , 0 , 1 ) 。计算它们的余弦相似度,并解释其含义。
参考答案 内积:d 1 ⋅ d 2 = 3 × 1 + 0 × 2 + 1 × 0 + 2 × 1 = 5 \mathbf{d}_1 \cdot \mathbf{d}_2 = 3 \times 1 + 0 \times 2 + 1 \times 0 + 2 \times 1 = 5 d 1 ⋅ d 2 = 3 × 1 + 0 × 2 + 1 × 0 + 2 × 1 = 5
模长:∥ d 1 ∥ = 9 + 0 + 1 + 4 = 14 \|\mathbf{d}_1\| = \sqrt{9 + 0 + 1 + 4} = \sqrt{14} ∥ d 1 ∥ = 9 + 0 + 1 + 4 = 14 ,∥ d 2 ∥ = 1 + 4 + 0 + 1 = 6 \|\mathbf{d}_2\| = \sqrt{1 + 4 + 0 + 1} = \sqrt{6} ∥ d 2 ∥ = 1 + 4 + 0 + 1 = 6
余弦相似度:cos θ = 5 14 × 6 = 5 84 ≈ 0.545 \cos\theta = \frac{5}{\sqrt{14} \times \sqrt{6}} = \frac{5}{\sqrt{84}} \approx 0.545 cos θ = 14 × 6 5 = 84 5 ≈ 0.545
这表示两个文档在内容上有一定的相似性,但并非高度相似。余弦相似度只关注方向(词频分布的相对比例),忽略长度(文档总词数),因此长短不一的文档也可以比较相似度。
计算向量 u = ( 3 , 4 ) \mathbf{u} = (3, 4) u = ( 3 , 4 ) 在向量 v = ( 1 , 0 ) \mathbf{v} = (1, 0) v = ( 1 , 0 ) 上的投影。投影结果的几何意义是什么?
参考答案 投影公式:proj v u = u ⋅ v v ⋅ v v \text{proj}_{\mathbf{v}} \mathbf{u} = \frac{\mathbf{u} \cdot \mathbf{v}}{\mathbf{v} \cdot \mathbf{v}} \mathbf{v} proj v u = v ⋅ v u ⋅ v v
计算:u ⋅ v = 3 × 1 + 4 × 0 = 3 \mathbf{u} \cdot \mathbf{v} = 3 \times 1 + 4 \times 0 = 3 u ⋅ v = 3 × 1 + 4 × 0 = 3
v ⋅ v = 1 2 + 0 2 = 1 \mathbf{v} \cdot \mathbf{v} = 1^2 + 0^2 = 1 v ⋅ v = 1 2 + 0 2 = 1
因此投影为:proj v u = 3 1 × ( 1 , 0 ) = ( 3 , 0 ) \text{proj}_{\mathbf{v}} \mathbf{u} = \frac{3}{1} \times (1, 0) = (3, 0) proj v u = 1 3 × ( 1 , 0 ) = ( 3 , 0 )
几何意义:投影 ( 3 , 0 ) (3, 0) ( 3 , 0 ) 是向量 ( 3 , 4 ) (3, 4) ( 3 , 4 ) 在 x 轴上的"影子"。这相当于将向量分解为 x 方向分量 ( 3 , 0 ) (3, 0) ( 3 , 0 ) 和 y 方向分量 ( 0 , 4 ) (0, 4) ( 0 , 4 ) 。在降维应用中,投影保留了向量在目标方向上的信息,丢弃了其他方向的信息。
判断 R 3 \mathbb{R}^3 R 3 中所有形如 ( x , y , x + y ) (x, y, x+y) ( x , y , x + y ) 的向量集合是否构成子空间。需要验证哪些条件?
参考答案 需要验证三条条件:
包含零向量 :当 x = 0 , y = 0 x = 0, y = 0 x = 0 , y = 0 时,( 0 , 0 , 0 ) (0, 0, 0) ( 0 , 0 , 0 ) 属于该集合。✓
对加法封闭 :设 u = ( a , b , a + b ) \mathbf{u} = (a, b, a+b) u = ( a , b , a + b ) ,v = ( c , d , c + d ) \mathbf{v} = (c, d, c+d) v = ( c , d , c + d ) ,则 u + v = ( a + c , b + d , a + b + c + d ) = ( a + c , b + d , ( a + c ) + ( b + d ) ) \mathbf{u} + \mathbf{v} = (a+c, b+d, a+b+c+d) = (a+c, b+d, (a+c)+(b+d)) u + v = ( a + c , b + d , a + b + c + d ) = ( a + c , b + d , ( a + c ) + ( b + d )) ,仍满足 z = x + y z = x+y z = x + y 的形式。✓
对数乘封闭 :设 v = ( x , y , x + y ) \mathbf{v} = (x, y, x+y) v = ( x , y , x + y ) ,则 k v = ( k x , k y , k ( x + y ) ) = ( k x , k y , k x + k y ) k\mathbf{v} = (kx, ky, k(x+y)) = (kx, ky, kx+ky) k v = ( k x , k y , k ( x + y )) = ( k x , k y , k x + k y ) ,仍满足形式。✓
因此该集合构成子空间。几何上,这是一个过原点的平面,方程为 z = x + y z = x + y z = x + y (或 x + y − z = 0 x + y - z = 0 x + y − z = 0 )。
验证向量组 e 1 = ( 1 , 0 , 0 ) \mathbf{e}_1 = (1, 0, 0) e 1 = ( 1 , 0 , 0 ) ,e 2 = ( 0 , 1 , 0 ) \mathbf{e}_2 = (0, 1, 0) e 2 = ( 0 , 1 , 0 ) ,e 3 = ( 0 , 0 , 1 ) \mathbf{e}_3 = (0, 0, 1) e 3 = ( 0 , 0 , 1 ) 是否构成标准正交基,并写出向量 v = ( 2 , − 3 , 5 ) \mathbf{v} = (2, -3, 5) v = ( 2 , − 3 , 5 ) 在这组基下的坐标表示。
参考答案 验证正交性:e 1 ⋅ e 2 = 0 \mathbf{e}_1 \cdot \mathbf{e}_2 = 0 e 1 ⋅ e 2 = 0 ,e 1 ⋅ e 3 = 0 \mathbf{e}_1 \cdot \mathbf{e}_3 = 0 e 1 ⋅ e 3 = 0 ,e 2 ⋅ e 3 = 0 \mathbf{e}_2 \cdot \mathbf{e}_3 = 0 e 2 ⋅ e 3 = 0
验证单位长度:∥ e 1 ∥ = ∥ e 2 ∥ = ∥ e 3 ∥ = 1 \|\mathbf{e}_1\| = \|\mathbf{e}_2\| = \|\mathbf{e}_3\| = 1 ∥ e 1 ∥ = ∥ e 2 ∥ = ∥ e 3 ∥ = 1
因此这是一组标准正交基。
向量 v \mathbf{v} v 在这组基下的坐标为:v 1 = v ⋅ e 1 = 2 v_1 = \mathbf{v} \cdot \mathbf{e}_1 = 2 v 1 = v ⋅ e 1 = 2 ,v 2 = v ⋅ e 2 = − 3 v_2 = \mathbf{v} \cdot \mathbf{e}_2 = -3 v 2 = v ⋅ e 2 = − 3 ,v 3 = v ⋅ e 3 = 5 v_3 = \mathbf{v} \cdot \mathbf{e}_3 = 5 v 3 = v ⋅ e 3 = 5
即 v = 2 e 1 − 3 e 2 + 5 e 3 \mathbf{v} = 2\mathbf{e}_1 - 3\mathbf{e}_2 + 5\mathbf{e}_3 v = 2 e 1 − 3 e 2 + 5 e 3 。
标准正交基的优越性在于:坐标可以直接通过内积计算得到,无需解线性方程组。
在神经网络中,某一层的输入向量 x = ( 1 , 2 ) \mathbf{x} = (1, 2) x = ( 1 , 2 ) ,权重矩阵 W = [ 0.5 0.3 0.2 0.4 ] \mathbf{W} = \begin{bmatrix} 0.5 & 0.3 \\ 0.2 & 0.4 \end{bmatrix} W = [ 0.5 0.2 0.3 0.4 ] ,偏置向量 b = ( 0.1 , 0.2 ) \mathbf{b} = (0.1, 0.2) b = ( 0.1 , 0.2 ) 。计算该层的输出 y = W x + b \mathbf{y} = \mathbf{Wx} + \mathbf{b} y = Wx + b ,并从线性组合的角度解释这个计算过程。
参考答案 计算 W x \mathbf{Wx} Wx :W x = [ 0.5 0.3 0.2 0.4 ] [ 1 2 ] = [ 0.5 × 1 + 0.3 × 2 0.2 × 1 + 0.4 × 2 ] = [ 1.1 1.0 ] \mathbf{Wx} = \begin{bmatrix} 0.5 & 0.3 \\ 0.2 & 0.4 \end{bmatrix} \begin{bmatrix} 1 \\ 2 \end{bmatrix} = \begin{bmatrix} 0.5 \times 1 + 0.3 \times 2 \\ 0.2 \times 1 + 0.4 \times 2 \end{bmatrix} = \begin{bmatrix} 1.1 \\ 1.0 \end{bmatrix} Wx = [ 0.5 0.2 0.3 0.4 ] [ 1 2 ] = [ 0.5 × 1 + 0.3 × 2 0.2 × 1 + 0.4 × 2 ] = [ 1.1 1.0 ]
加偏置:y = W x + b = ( 1.1 , 1.0 ) + ( 0.1 , 0.2 ) = ( 1.2 , 1.2 ) \mathbf{y} = \mathbf{Wx} + \mathbf{b} = (1.1, 1.0) + (0.1, 0.2) = (1.2, 1.2) y = Wx + b = ( 1.1 , 1.0 ) + ( 0.1 , 0.2 ) = ( 1.2 , 1.2 )
线性组合解释: 权重矩阵的每一行定义了一个线性组合。输出向量的第一个分量 y 1 = 0.5 x 1 + 0.3 x 2 + 0.1 y_1 = 0.5x_1 + 0.3x_2 + 0.1 y 1 = 0.5 x 1 + 0.3 x 2 + 0.1 是输入向量的线性组合(加上偏置);同理 y 2 = 0.2 x 1 + 0.4 x 2 + 0.2 y_2 = 0.2x_1 + 0.4x_2 + 0.2 y 2 = 0.2 x 1 + 0.4 x 2 + 0.2 。
神经网络的本质就是通过大量这样的线性变换(加非线性激活函数)逐层处理数据,每一层都将上一层的输出重新组合,提取新的特征表示。