第七部分 · 表示与几何
相似与投影:内积、范数与最小二乘的几何
上一课把每个样本变成了空间里的一个点,把学习变成了"最小化损失"。可"点"光摆在那儿还不够用——我们得能量它们:两个点像不像?一个点离一条线多远?这一课造出量长度、量相似、量投影的三件工具,并发现最小二乘的真身原来是一次几何投影。
留下的问题:样本成了点,可点与点之间还没有几何。两封邮件的特征向量"像不像"?一套房子离"模型预测的那条线"有多远?甚至上一课最小二乘到底在几何上做了什么,我们都还没看清。要回答这些,先得给向量空间装上一把尺子和一个量角器。
本课新增:内积(点积,量两个向量的相似度与夹角)、范数(量向量的长度/大小)、余弦相似度,以及正交投影——把一个点垂直地"压"到一条线或一个子空间上。最后用它们揭穿最小二乘的几何真相。
内积:把两个向量配成一个数
给两个向量 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‖)
它的取值在 −1 到 1 之间,含义极其直观:cos θ = 1(夹角 0°)方向完全相同、最相似;= 0(夹角 90°)毫不相关;= −1(夹角 180°)完全相反。它除掉了长度的影响,只比方向——这正是为什么搜索引擎、推荐系统、词向量都用它来判断"两份文档/两个用户/两个词像不像":一篇长文和一篇短文只要谈的是同一主题,方向就一致,不该因为长短被判成不同。
正交:内积为零,就是互相垂直
枢纽公式里藏着一个干净的特例。当 cos θ = 0,即夹角恰好 90° 时,内积为零:
⟨x, y⟩ = 0 ⇔ x ⊥ y(x 与 y 正交/垂直)
"正交"是线性代数里一个分量极重的词。垂直意味着两个方向毫无重叠、彼此独立——沿 x 方向走再多,也不会在 y 方向上前进一分。把一堆两两正交的向量当坐标轴,是最舒服的局面:每个方向互不干扰,可以分头处理。这条"正交 = 不相关"的直觉,会一路贯穿到第 23 课的主成分、第 30 课的协方差。而它的第一个大用场,就在下一节。
正交投影:最近的那个近似
现在来回答开头的问题:一个点 y,离一条过原点的直线(方向为单位向量 u)最近的落点在哪?答案是从 y 向直线放一条垂线,垂足就是最近点。这个垂足,叫 y 在 u 上的正交投影:
proj_u(y) = ⟨y, u⟩ · u (u 是单位向量,‖u‖ = 1)
读作"y 在 u 上的投影,等于 y 与 u 的内积,乘以 u"。这里内积 ⟨y, u⟩ 算出"该往 u 方向投多少",再乘回 u 给出落点。为什么垂足就是最近?因为误差向量 y − proj_u(y) 恰好垂直于那条直线——任何别的落点,误差都得"斜着"走,按勾股定理只会更长。这是一条会反复出现的黄金法则:
下面的小实验让你拖动向量 y,实时看它在一条可调方向的直线上的正交投影:那条永远保持垂直的虚线(误差),和实时跳动的内积、夹角、投影长度。
揭穿最小二乘:原来是一次投影
带着投影的眼光,重看上一课的回归。把 n 个样本的真值竖排成一个 n 维向量 y,把每一列特征也排成 n 维向量。线性模型 f(x) = w·x 在全体样本上的预测,是这些特征列的线性组合 Xw——它能取到的所有可能值,恰好张成一个子空间(所有特征列能拼出的那块)。可真值 y 通常带着噪声,不落在这个子空间里。那"最好的预测"是什么?
就是把 y 正交投影到这个子空间!因为投影点是子空间里离 y 最近的点,而"最近"按上一课的定义就是平方误差最小。于是:
最小二乘的解 ⇔ Xw 是 y 在特征子空间上的正交投影 ⇔ 误差 (y − Xw) ⊥ 每一列特征
"误差垂直于每一列特征"写成内积为零,整理一下就是著名的正规方程 XᵀX w = Xᵀy(Xᵀ 读作"X 的转置")。你不必背它——只要记住那幅画面:最小二乘,就是从带噪声的真值 y 向"模型能表达的子空间"放一条垂线。上一课你用滑块辛辛苦苦凑的"损失最小",几何上不过是找这条垂线的垂足。代数的优化题,被几何一眼看穿。
常见误解
- "内积就是个计算公式,没什么含义。"恰恰相反,它是整个几何的发动机:长度(‖x‖=√⟨x,x⟩)、夹角(cos θ = ⟨x,y⟩/(‖x‖‖y‖))、垂直(⟨x,y⟩=0)、投影,全是它派生出来的。没有内积,向量空间只是一堆没有形状的箭。
- "相似就该看距离。"看情况。距离 ‖x−y‖ 在乎"差多少",余弦相似度只在乎"方向一不一致"。一篇长文和一篇短文谈同一主题,距离可能很大,但方向几乎一致——这时该用余弦。选哪把尺,取决于你的任务在乎大小还是方向。
- "投影是把向量随便挪到线上。"不是随便挪,是垂直地压下去。正因为放的是垂线,垂足才恰好是线上离它最近的点。"垂直"和"最近"是同一件事——这正是最小二乘成立的根。
- "正交就是不平行。"太弱了。正交是夹角恰好 90°、内积为 0,意味着两个方向完全独立、毫无重叠。把正交方向当坐标轴,每个方向能分头处理、互不干扰——这种"干净"是后面 PCA、协方差反复追求的东西。