城南老街的“宝器裁缝铺”里,王师傅有一件传了三代的工具,外号“一尺通”。学徒小陈第一次见到时很好奇:它就一把软尺,怎么既能量布料的尺寸,又能量裁剪线之间的夹角?王师傅笑呵呵地说:“秘密不在尺子本身,而在量法——你拿起两段线,把它们的刻度一格格对起来。第一段的第 1 寸对着第二段的第 1 寸相乘,第 2 寸对着第 2 寸相乘……最后全部加起来。这个数字,就是两段线在彼此眼中的分量。有了它,长度算得出来,夹角也算得出来。” 王师傅说的这“一尺通”,数学上就叫内积。把任意两个向量送进去,它吐出一个实数,这个数同时携带了“长度”与“角度”的信息。向量空间一旦装上内积这把尺子,就升级成了内积空间。本文我们跟着王师傅学手艺:先拆开尺子看构造,再学会它量长度、量夹角、判断正交,认识柯西不等式这条“量程天花板”,最后见识两把常用尺——点积与加权内积。
对 AI 从业者而言,内积是相似度与相关性的底层语言:文本检索的余弦相似度、注意力机制的打分公式、PCA 中的正交投影,全是这把软尺的延伸。看懂内积空间,你就拿到了理解向量世界“距离与方向”的钥匙。
可视化演示
本节配有交互动效(进入视口后自动加载,约 3KB)。
内积定义
王师傅把“一尺通”放在桌上,对小陈说:“你看这把尺子,它其实是一台小机器——喂进去两条裁剪线,它吐出一个数。”在数学里,这个“喂两个进一个”的运算就叫内积。它接收两个向量,输出一个实数,我们记作 ⟨u, v⟩。那它具体怎么算?在常见的坐标系里,规则非常简单:把两个向量的对应坐标一对对地相乘,再把所有乘积加起来。
不过,光会算还不够。王师傅强调,一把合格的软尺必须符合三条“工匠准则”:第一,对称——你用尺子量它,它量你,结果一样,即 ⟨u, v⟩ = ⟨v, u⟩;第二,配合良好——向量可以拆开算、拉长算,即“双线性”;第三,正定——任何一条线自己量自己,结果一定不小于 0,只有零向量才会量出 0。
小陈点点头:“原来尺子的刻度不是天生刻死的,只要满足这三条规矩,就是一把好尺子。”王师傅满意地笑了:“没错,规矩定得好,后面量长度、量角度才不会打架。”
- 对称性内积的结果不因两个向量的前后顺序而改变,量布料时正着量、反着量都一样。
- 非负性向量与自己内积,等于“长度平方”,必然大于等于零。
- 零元条件只有零向量自己内积自己才会得到 0,其余向量都有正的“自乘积”。
向量长度
有了软尺,第一件要学的事就是量“尺寸”。王师傅把软尺对折,让一段线跟自己比量:“一段线自己量自己,得到的是长度的平方。再开个根号,长度就出来了。”这就是范数——由内积诱导出的“长度概念”。
有了长度,就能把“尺寸”归一化。把任意向量除以自己的长度,就得到单位向量——长度为 1,只保留方向,好比把布料裁剪线浓缩成一根“方向针”。而两个点之间的距离,其实就是它们差向量的长度。
小陈恍然大悟:“原来二维里的勾股定理,到高维只是把每条坐标差都平方加总再开根号罢了!”
- 作差向量u − v 表示从 v 的终点指向 u 的终点的连线,全部坐标逐位相减。
- 对差向量取范数对差向量套用长度定义,就得到两点间的距离。
向量夹角
光知道长度还不够,裁缝还得知道两条裁剪线朝哪个方向叉开。王师傅说:“夹角不用额外找量角器,内积本身就藏着答案。”把两段线的内积除以两段线长度的乘积,得到的是夹角的余弦值——也就是两段线“方向对齐”的程度。
根据余弦值的正负,夹角分为三类:余弦接近 1 时,两向量几乎同向(夹角接近 0°);余弦为 0 时,两向量垂直(夹角 90°);余弦接近 −1 时,两向量反向(夹角接近 180°)。这个“方向对齐程度”,正是机器学习里大名鼎鼎的余弦相似度——它只关心方向,不关心长短,所以很适合比较文本向量、用户向量这类“只看比例不看绝对大小”的对象。
王师傅叮嘱小陈:“量角度时别被长度干扰。长短不一的线,方向一样,算出来的余弦仍是 1。”
- 归一化的内积内积除以两个长度之积,消除了“尺子长短”带来的影响,只留下方向信息。
- 余弦值的范围由柯西不等式保证,等式右边的比值永远落在 [−1, 1] 之间,这正好是余弦函数的值域。
- 反解夹角对等式两边取反余弦,就得到两个向量的夹角 θ。
正交概念
裁缝铺里最精细的活儿,是裁直角。王师傅的老规矩是:两条裁剪线要是互相垂直,那把尺子量出来的数字必须恰好是 0。这个在向量世界里叫正交——它比“垂直”更广,因为 n 维空间里我们没法直接画“垂直”,但可以通过内积来判定。
一组向量如果两两正交,就天然形成一个好用的坐标系,叫正交基。在这个坐标系里,研究任意向量可以像拆布一样沿着各个基方向拆开,这个操作叫正交分解。若把向量 v 沿着非零向量 u 的方向拆,公式如下:
在正交基下,这个分解尤其漂亮:每个坐标都可以独立计算,互不牵连。机器学习中的特征去相关、PCA 找出“主方向”,用的都是这个思想。小陈感叹:“原来裁布时沿经纬线拆开,数学上也有一套一模一样的讲究。”
- 投影系数分子是 v 与 u 的内积,分母是 u 的长度平方,这个系数决定“影子”的长短。
- 平行分量把上面系数乘上向量 u,得到 v 在 u 方向上的投影向量。
- 余项正交v 减去投影后剩下的部分 $v_{\perp}$ 与 u 正交,两者垂直。
柯西不等式
王师傅的尺子有一道铁律:两段线再怎么完全对齐,读数也超不过“两段长度的乘积”。用行话说,就是内积的绝对值永远不超过两个向量长度的乘积——这就是柯西不等式,它是内积空间的“量程天花板”。
这个“天花板”还带出一个重要推论——三角不等式:两边之和至少等于第三边,这正是内积空间中的“三角形边长关系”。
王师傅把天花板的故事讲完,小陈恍然大悟:“难怪余弦相似度永远在 −1 到 1 之间——因为有这把尺子的量程锁着!”
- 展开平方将左边范数平方用内积展开。
- 交叉项放缩用柯西不等式替换交叉项,得到上界。
- 开方得结论两边同时开平方,三角不等式成立。
常见内积
同样是量布,绸缎庄和粗布坊的尺子刻度其实不一样。王师傅的铺子里备了两把常用尺:第一把是标准点积,每个坐标一视同仁,权重都是 1;第二把是加权内积,给不同的方向配上不同的权重,好比丝绸用细密刻度、麻布用粗犷刻度。
除了处理离散坐标的尺子,还有一把专门伺候连续函数的尺子——函数内积。把函数想象成有无穷多个坐标的点,两个函数在每一点的函数值相乘,再全部“累加”(积分)起来:
小陈看着两把尺子感叹:“原来选哪把尺子,取决于布料是什么材质。做 AI 也一样——处理词向量用标准点积,强调重点特征就用加权内积,分析连续信号就用函数内积。”
- 连续坐标相乘在每个点 x 上,把 f(x) 与 g(x) 相乘。
- 积分代替求和对区间 [a, b] 上所有点的乘积进行积分,相当于对无穷多个坐标做“累加”。
AI 应用场景
用余弦相似度做智能客服问答匹配
阶段:语义特征表示与相似度计算
解决的问题:传统关键词检索遇到“同义不同形”就失灵,比如用户问“运费谁出”,而知识库里写的是“包邮政策”。把句子转成向量后用内积算夹角,语义接近的文本即使表面用词不同,余弦相似度依然很高。
具体案例:某电商平台把 5000 条标准问答转成 TF-IDF 向量存入向量数据库。用户提问时,系统计算问题向量与每条标准问答的余弦相似度,取 Top-5 返回给人工客服参考。实测相似问题命中率从关键词匹配的 61% 提升到 88%。
用正交化做特征去相关
阶段:特征工程与数据预处理
解决的问题:原始特征之间往往高度相关(比如“房屋面积”和“房间数量”),导致模型冗余、训练不稳。利用内积为 0 判定正交,可以找到互相独立的方向,把特征投影到正交基上。
具体案例:在房价预测项目中,数据科学家对 20 个原始特征做 PCA 主成分分析,本质就是找一组互相正交的主方向。取前 5 个正交主成分后,模型训练时间减少 40%,验证集精度反升 2 个百分点。
用加权内积做个性化推荐打分
阶段:推荐系统的用户偏好建模
解决的问题:标准点积把所有维度平等对待,但不同用户对内容类型的偏好权重不同。用加权内积给每个维度配上用户专属权重,可以更精准地刻画出“个性化的相似度”。
具体案例:视频推荐系统中,把用户向量、视频向量分别映射到“剧情、演技、特效、题材”四个维度。对偏爱特效的用户,特效维度权重设为 3,其他维度权重为 1;内积打分比标准点积的推荐点击率提升 17%。
Python 演示
import numpy as np def dot_product(u, v): """标准点积:对应坐标相乘后累加。""" return float(np.sum(u * v)) def weighted_dot(u, v, w): """加权内积:每个坐标乘积前乘上权重。""" return float(np.sum(w * u * v)) def norm(v, w=None): """向量的长度(范数):对自身做内积再开根号。""" if w is None: return float(np.sqrt(dot_product(v, v))) return float(np.sqrt(weighted_dot(v, v, w))) def angle(u, v, w=None): """两个向量的夹角(弧度):用余弦公式反推。""" inner = weighted_dot(u, v, w) if w is not None else dot_product(u, v) cos_theta = inner / (norm(u, w) * norm(v, w)) return float(np.arccos(np.clip(cos_theta, -1.0, 1.0))) def is_orthogonal(u, v, w=None, eps=1e-8): """判断两个向量是否正交:内积绝对值小于阈值。""" inner = weighted_dot(u, v, w) if w is not None else dot_product(u, v) return abs(inner) < eps if __name__ == "__main__": u = np.array([1.0, 2.0, 3.0]) v = np.array([3.0, 0.0, -1.0]) w = np.array([1.0, 2.0, 0.5]) print("标准点积:", dot_product(u, v)) print("加权内积:", weighted_dot(u, v, w)) print("u 的长度:", norm(u)) print("夹角(度):", np.degrees(angle(u, v))) print("是否正交:", is_orthogonal(u, v)) print("加权后是否正交:", is_orthogonal(u, v, w))
常见误区
误区我以为正交就是在纸上画两条互相垂直的线,角度必须是 90°。所以当老师告诉我两个函数也“正交”时,我整个人都懵了——函数怎么垂直?
正解正交是“垂直”在抽象空间里的推广,严格定义是内积为零。在标准坐标系的几何空间里,正交恰好就是 90° 的垂直;但在函数空间、加权空间中,“垂直”不再有直观图像,只能靠“内积是否为 0”来判断。
为何常见:初学线性代数时最先接触的是二维、三维几何,直觉先入为主,容易把“垂直”这一特例当作定义。
误区我一直觉得向量的长度就是勾股定理算出来的 √(x²+y²),换了内积之后长度还能变吗?
正解长度(范数)是由内积诱导的:‖v‖=√⟨v,v⟩。内积定义变了,长度的算法也随之改变。比如加权内积下,某些坐标的贡献被放大,同一向量的“长度”自然不同。欧氏长度只是标准点积下的特例。
为何常见:高中阶段只接触标准点积,长度公式的唯一形象被固化,忽略了“长度”本质上依附于内积的选取。
误区我觉得内积就是点积,点积就是内积,两个词只是叫法不同,没有任何区别。
正解标准点积只是内积的一种,就像“红木尺”只是“尺”的一种。内积是满足三条公理的抽象运算,加权内积、函数内积都是它的合法实现。说“内积是点积”相当于说“尺子必须是红木做的”。
为何常见:初学阶段用到的几乎都是标准点积,抽象定义接触得少,概念层级没建立起来。
误区有时候两个向量方向看起来特别一致,我觉得它们的相似度应该能到 1.5 或者 2,分数越高越相似嘛。
正解余弦相似度 = 内积 ÷ 两长度之积,而柯西不等式保证 |内积| ≤ 长度之积,所以比值永远落在 [−1, 1]。方向完全一致是 1,完全相反是 −1,毫无规律是 0。相似度不是强度,而是“方向对齐的比例”。
为何常见:日常打分习惯是“越高越好”,忽略了余弦相似度的数学天花板,其实它是被柯西不等式锁死的。
面试题
Q1. 内积空间是在哪种结构上额外定义了内积?
- A.一种标量乘积运算← 正确答案
- B.一种矩阵乘法运算
- C.一种坐标求和运算
- D.一种向量叉乘运算
答案:A。内积空间 = 向量空间 + 内积运算。它把“长度”和“角度”装进了向量空间,而不是增加矩阵乘法等别的结构。就好比裁缝铺有了布料(向量空间),再配上软尺(内积),才能量尺寸和夹角。
Q2. 向量 v=(3,4) 在标准内积下的长度是多少?
- A.5,平方和再开根号← 正确答案
- B.7,两坐标直接相加
- C.12,两坐标相乘就行
- D.25,平方和不开根号
答案:A。长度 = √⟨v,v⟩ = √(3²+4²) = √25 = 5。这就是勾股定理在高维的推广:先对自己做内积得到长度平方,再开根号。直接相加或相乘都没有度量“几何距离”的意义。
Q3. 若 ⟨u,v⟩=0 且 u、v 均为非零向量,则两者?
- A.相互正交(垂直)← 正确答案
- B.完全同向平行
- C.长度恰好相等
- D.坐标完全相同
答案:A。内积为 0 是正交的定义,意味着 v 在 u 方向上的投影长度为 0,两者“方向互不包含”。同向时内积为正且取到最大值,长度是否相等、坐标是否相同都与内积是否为 0 无关。
Q4. 柯西不等式断言内积的绝对值不超过?
- A.两个向量的长度之积← 正确答案
- B.两个向量的长度之和
- C.内积自身的平方值
- D.两个向量的坐标之和
答案:A。|⟨u,v⟩| ≤ ‖u‖·‖v‖,这就是量程天花板。两向量完全对齐时取等号,任何情况下都超不过“两段长度相乘”。B 是三角不等式的领域,C 和 D 与柯西不等式的形式不符。
Q5. 加权内积的权重 w₁,…,wₙ 必须满足什么条件?
- A.全部大于零← 正确答案
- B.全部小于零
- C.全部等于一
- D.全部随机取值
答案:A。权重全部为正,才能保证任何非零向量“自己内积自己”都大于 0,正定性这条公理才成立。全部等于一是标准点积的特例,但不代表加权内积必须如此;权重为负会破坏尺子的可靠性。
Q6. 两向量夹角接近 0° 时,余弦相似度趋近于?
- A.1,表示几乎同向← 正确答案
- B.0,表示几乎无关
- C.-1,表示几乎反向
- D.2,表示方向加倍
答案:A。cos 0° = 1,方向完全一致时相似度取到最大值。0 是正交时的值,−1 是方向相反时的值。余弦相似度被柯西不等式锁死在 [−1,1],不可能出现 2。
Q7. 标准内积下,u=(1,2) 与 v=(2,−1) 的关系是?
- A.两向量相互正交← 正确答案
- B.两向量方向同向
- C.两向量方向相反
- D.两向量夹角六十度
答案:A。内积 = 1×2 + 2×(−1) = 0,因此两者正交。同向时内积应为正,反向时内积应为负且夹角取到 180°,都不符合这里计算结果。
Q8. 以下哪些属于内积必须满足的公理?
- A.对称性:结果与顺序无关← 正确答案
- B.双线性:可拆加和数乘← 正确答案
- C.正定性:自内积非负← 正确答案
- D.幂等性:内积不改变向量
答案:ABC。内积的三条核心公理是对称性、双线性、正定性。幂等性不是内积的性质——内积输出一个实数,不会“不改变向量”。这三条公理保证软尺公平、稳定、可靠。
Q9. 关于正交基,以下说法正确的有哪些?
- A.基向量两两正交← 正确答案
- B.任意向量可正交分解← 正确答案
- C.基向量长度必须是一
- D.分解结果唯一确定← 正确答案
答案:ABD。正交基要求两两内积为 0,借由投影公式可以把任意向量沿着基方向分解,且分解结果唯一。但“长度为 1”是标准正交基的额外要求,普通正交基允许非单位长度的基向量。
Q10. 函数内积 ⟨f,g⟩ = ∫f(x)g(x)dx 可以用于做哪些事?
- A.判断两个函数是否正交← 正确答案
- B.衡量两个信号的相似度← 正确答案
- C.计算离散坐标的点积
- D.直接输出函数的零点
答案:AB。函数内积用积分代替求和,把函数当无穷维向量。判断正交(内积为 0)和衡量信号相似度都是它的典型应用。C 是离散点积的领域,D 与内积毫无关系,函数零点需要单独求解 f(x)=0。