all_lessons/数学的逻辑/20第 21 课 / 共 44 课

第七部分 · 表示与几何

相似与投影:内积、范数与最小二乘的几何

上一课把每个样本变成了空间里的一个点,把学习变成了"最小化损失"。可"点"光摆在那儿还不够用——我们得能量它们:两个点像不像?一个点离一条线多远?这一课造出量长度、量相似、量投影的三件工具,并发现最小二乘的真身原来是一次几何投影。

线性回顾
上一课:我们把"从数据中学习"逼成了一道数学题——每个样本是 ℝᵈ 里的一个特征向量,学习就是在一族函数里挑参数、让损失最小。
留下的问题:样本成了点,可点与点之间还没有几何。两封邮件的特征向量"像不像"?一套房子离"模型预测的那条线"有多远?甚至上一课最小二乘到底在几何上做了什么,我们都还没看清。要回答这些,先得给向量空间装上一把尺子和一个量角器
本课新增:内积(点积,量两个向量的相似度与夹角)、范数(量向量的长度/大小)、余弦相似度,以及正交投影——把一个点垂直地"压"到一条线或一个子空间上。最后用它们揭穿最小二乘的几何真相。
本课路线
(1) 内积:把两个向量配成一个数,它一口气编码了"长度"和"夹角"。(2) 范数:向量的长度,‖x‖ = √⟨x,x⟩。(3) 余弦相似度:只看方向、不看大小的"像不像",搜索与推荐的核心。(4) 正交:内积为 0 = 互相垂直 = 毫不相关。(5) 正交投影:把点垂直压到一条线上,是"最近的近似"。(6) 揭穿:最小二乘 = 把 y 投影到特征张成的空间——上一课的损失最小,几何上就是一条垂线。

内积:把两个向量配成一个数

给两个向量 x = (x₁,…,x_d)y = (y₁,…,y_d),最朴素的"合并"方式是:对应分量相乘,再全部加起来。这个数就是内积(也叫点积):

⟨x, y⟩ = x·y = x₁y₁ + x₂y₂ + … + x_dy_d

读作"x 与 y 的内积"。它看着平平无奇,却一口气藏着两条几何信息。先看最特殊的一种配法——一个向量和它自己:

⟨x, x⟩ = x₁² + x₂² + … + x_d²

由勾股定理,这正是向量长度的平方。所以内积里天然含着"长度"。更妙的是它和夹角的关系——这是本课的枢纽公式:

⟨x, y⟩ = ‖x‖ · ‖y‖ · cos θ

读作"x 与 y 的内积,等于 x 的长度乘 y 的长度再乘它们夹角 θ 的余弦"。一个简单的求和,竟然把两个向量的长度和它们之间的夹角全编码进了一个数。机器学习里成千上万次出现的 w·x(上一课线性模型的核心),本质就是在问一个几何问题:输入 x 在权重方向 w 上"投出"了多少?

范数:向量的长度

有了内积,长度就免费到手了。向量 x范数(即长度、大小)记作 ‖x‖(读作"x 的范数"):

‖x‖ = √⟨x, x⟩ = √(x₁² + x₂² + … + x_d²)

这就是把平面上"勾股定理求斜边"原封不动搬到 d 维。两点之间的距离,自然就是它们差向量的范数 ‖x − y‖——"x 减 y 这支箭有多长"。上一课的平方误差损失,现在有了几何身份:(f(x) − y)² 累加起来开根,正是"预测向量"到"真值向量"的距离。损失最小,就是让这两个点在高维空间里靠得最近。注意这种范数(叫 L2 范数)不是唯一选择,但它是默认、也是最贴合"普通距离"直觉的那把尺。

余弦相似度:只问方向,不问大小

把枢纽公式反解,就得到一个量"两个向量方向有多一致"的纯净指标——余弦相似度

cos θ = ⟨x, y⟩ / (‖x‖ · ‖y‖)

它的取值在 −11 之间,含义极其直观:cos θ = 1(夹角 0°)方向完全相同、最相似;= 0(夹角 90°)毫不相关;= −1(夹角 180°)完全相反。它除掉了长度的影响,只比方向——这正是为什么搜索引擎、推荐系统、词向量都用它来判断"两份文档/两个用户/两个词像不像":一篇长文和一篇短文只要谈的是同一主题,方向就一致,不该因为长短被判成不同。

为什么不直接用距离?
两个向量可以方向一致(很相似)却长度悬殊(距离很远)。判"内容像不像"时我们往往只在乎方向,于是用余弦相似度(看夹角);判"数值差多少"时才用距离(看 ‖x−y‖)。同一套内积,量出两种不同的"相似"——挑哪一种,取决于你的问题在乎什么。

正交:内积为零,就是互相垂直

枢纽公式里藏着一个干净的特例。当 cos θ = 0,即夹角恰好 90° 时,内积为零:

⟨x, y⟩ = 0 ⇔ x ⊥ y(x 与 y 正交/垂直)

"正交"是线性代数里一个分量极重的词。垂直意味着两个方向毫无重叠、彼此独立——沿 x 方向走再多,也不会在 y 方向上前进一分。把一堆两两正交的向量当坐标轴,是最舒服的局面:每个方向互不干扰,可以分头处理。这条"正交 = 不相关"的直觉,会一路贯穿到第 23 课的主成分、第 30 课的协方差。而它的第一个大用场,就在下一节。

正交投影:最近的那个近似

现在来回答开头的问题:一个点 y,离一条过原点的直线(方向为单位向量 u最近的落点在哪?答案是从 y 向直线放一条垂线,垂足就是最近点。这个垂足,叫 yu 上的正交投影

proj_u(y) = ⟨y, u⟩ · u (u 是单位向量,‖u‖ = 1)

读作"y 在 u 上的投影,等于 y 与 u 的内积,乘以 u"。这里内积 ⟨y, u⟩ 算出"该往 u 方向投多少",再乘回 u 给出落点。为什么垂足就是最近?因为误差向量 y − proj_u(y) 恰好垂直于那条直线——任何别的落点,误差都得"斜着"走,按勾股定理只会更长。这是一条会反复出现的黄金法则:

投影 = 误差最小
把一个点投影到一个子空间上,得到的是该子空间里离它最近的点,而且误差向量垂直于这个子空间。"最近"和"垂直"是同一件事的两面——这正是最小二乘的全部秘密。

下面的小实验让你拖动向量 y,实时看它在一条可调方向的直线上的正交投影:那条永远保持垂直的虚线(误差),和实时跳动的内积、夹角、投影长度。

正交投影:把一个点垂直压到一条线上
蓝箭是向量 y(拖蓝点移动它)。绿线是方向 u(拖绿点改方向)。橙点是 y 在这条线上的正交投影(最近落点),橙虚线是误差——注意它始终垂直于绿线。看右边:内积 ⟨y,u⟩、夹角 θ、投影长度怎么随你的手变化。
内积 ⟨y, u⟩
夹角 θ
余弦相似度 cos θ
投影长度

揭穿最小二乘:原来是一次投影

带着投影的眼光,重看上一课的回归。把 n 个样本的真值竖排成一个 n 维向量 y,把每一列特征也排成 n 维向量。线性模型 f(x) = w·x全体样本上的预测,是这些特征列的线性组合 Xw——它能取到的所有可能值,恰好张成一个子空间(所有特征列能拼出的那块)。可真值 y 通常带着噪声,不落在这个子空间里。那"最好的预测"是什么?

就是把 y 正交投影到这个子空间!因为投影点是子空间里离 y 最近的点,而"最近"按上一课的定义就是平方误差最小。于是:

最小二乘的解 ⇔ Xw 是 y 在特征子空间上的正交投影 ⇔ 误差 (y − Xw) ⊥ 每一列特征

"误差垂直于每一列特征"写成内积为零,整理一下就是著名的正规方程 XᵀX w = XᵀyXᵀ 读作"X 的转置")。你不必背它——只要记住那幅画面:最小二乘,就是从带噪声的真值 y 向"模型能表达的子空间"放一条垂线。上一课你用滑块辛辛苦苦凑的"损失最小",几何上不过是找这条垂线的垂足。代数的优化题,被几何一眼看穿。

常见误解

一句话带走
给向量空间装上内积,长度、夹角、垂直、投影就全有了:‖x‖=√⟨x,x⟩ 是长度,⟨x,y⟩/(‖x‖‖y‖) 是方向相似度,⟨x,y⟩=0 是正交(完全独立),正交投影给出子空间里最近的近似。而上一课的最小二乘,几何上就是把真值 y 垂直投影到特征张成的子空间——损失最小 = 误差垂直。
下一步
这一课反复说到一个词:"特征张成的子空间"。可我们还没认真问过:一堆向量到底张成一个什么空间——是一条线、一个平面,还是填满整个 ℝᵈ?方程 Ax = b 何时有解、何时解唯一?数据列若"重复了"会怎样?要看清最小二乘投影到的"那块空间"长什么样,得把子空间、基、秩、零空间这套语言建起来。→ 第 21 课《子空间、基与秩:线性方程组的几何》。