城南老街的“宝器裁缝铺”里,王师傅有一件传了三代的工具,外号“一尺通”。学徒小陈第一次见到时很好奇:它就一把软尺,怎么既能量布料的尺寸,又能量裁剪线之间的夹角?王师傅笑呵呵地说:“秘密不在尺子本身,而在量法——你拿起两段线,把它们的刻度一格格对起来。第一段的第 1 寸对着第二段的第 1 寸相乘,第 2 寸对着第 2 寸相乘……最后全部加起来。这个数字,就是两段线在彼此眼中的分量。有了它,长度算得出来,夹角也算得出来。” 王师傅说的这“一尺通”,数学上就叫内积。把任意两个向量送进去,它吐出一个实数,这个数同时携带了“长度”与“角度”的信息。向量空间一旦装上内积这把尺子,就升级成了内积空间。本文我们跟着王师傅学手艺:先拆开尺子看构造,再学会它量长度、量夹角、判断正交,认识柯西不等式这条“量程天花板”,最后见识两把常用尺——点积与加权内积。

岗位关联

对 AI 从业者而言,内积是相似度与相关性的底层语言:文本检索的余弦相似度、注意力机制的打分公式、PCA 中的正交投影,全是这把软尺的延伸。看懂内积空间,你就拿到了理解向量世界“距离与方向”的钥匙。

目录
  1. 可视化演示
  2. 内积定义
  3. 向量长度
  4. 向量夹角
  5. 正交概念
  6. 柯西不等式
  7. 常见内积
  8. AI 应用场景
  9. Python 演示
  10. 常见误区
  11. 面试题

可视化演示

本节配有交互动效(进入视口后自动加载,约 3KB)。

内积定义

王师傅把“一尺通”放在桌上,对小陈说:“你看这把尺子,它其实是一台小机器——喂进去两条裁剪线,它吐出一个数。”在数学里,这个“喂两个进一个”的运算就叫内积。它接收两个向量,输出一个实数,我们记作 ⟨u, v⟩。那它具体怎么算?在常见的坐标系里,规则非常简单:把两个向量的对应坐标一对对地相乘,再把所有乘积加起来。

不过,光会算还不够。王师傅强调,一把合格的软尺必须符合三条“工匠准则”:第一,对称——你用尺子量它,它量你,结果一样,即 ⟨u, v⟩ = ⟨v, u⟩;第二,配合良好——向量可以拆开算、拉长算,即“双线性”;第三,正定——任何一条线自己量自己,结果一定不小于 0,只有零向量才会量出 0。

小陈点点头:“原来尺子的刻度不是天生刻死的,只要满足这三条规矩,就是一把好尺子。”王师傅满意地笑了:“没错,规矩定得好,后面量长度、量角度才不会打架。”

⟨u,v⟩=∑i=1nuivi=u1v1+u2v2+⋯+unvn\langle \mathbf{u}, \mathbf{v} \rangle = \sum_{i=1}^{n} u_i v_i = u_1 v_1 + u_2 v_2 + \cdots + u_n v_n
这三条公理保证了“尺子”公平、稳定、可靠。任何满足这三条规则的二元运算,都配叫内积。
  1. 对称性内积的结果不因两个向量的前后顺序而改变,量布料时正着量、反着量都一样。
    ⟨u,v⟩=⟨v,u⟩\displaystyle \langle \mathbf{u}, \mathbf{v} \rangle = \langle \mathbf{v}, \mathbf{u} \rangle
  2. 非负性向量与自己内积,等于“长度平方”,必然大于等于零。
    ⟨v,v⟩≥0\displaystyle \langle \mathbf{v}, \mathbf{v} \rangle \ge 0
  3. 零元条件只有零向量自己内积自己才会得到 0,其余向量都有正的“自乘积”。
    ⟨v,v⟩=0  ⟺  v=0\displaystyle \langle \mathbf{v}, \mathbf{v} \rangle = 0 \iff \mathbf{v} = \mathbf{0}

向量长度

有了软尺,第一件要学的事就是量“尺寸”。王师傅把软尺对折,让一段线跟自己比量:“一段线自己量自己,得到的是长度的平方。再开个根号,长度就出来了。”这就是范数——由内积诱导出的“长度概念”。

有了长度,就能把“尺寸”归一化。把任意向量除以自己的长度,就得到单位向量——长度为 1,只保留方向,好比把布料裁剪线浓缩成一根“方向针”。而两个点之间的距离,其实就是它们差向量的长度。

小陈恍然大悟:“原来二维里的勾股定理,到高维只是把每条坐标差都平方加总再开根号罢了!”

∥v∥=⟨v,v⟩\|\mathbf{v}\| = \sqrt{\langle \mathbf{v}, \mathbf{v} \rangle}
两点间的距离 = 差向量的长度,这是“距离”在 n 维空间中的自然推广。
  1. 作差向量u − v 表示从 v 的终点指向 u 的终点的连线,全部坐标逐位相减。
    u−v=(u1−v1,  u2−v2,  …,  un−vn)\displaystyle \mathbf{u} - \mathbf{v} = (u_1 - v_1, \; u_2 - v_2, \; \dots, \; u_n - v_n)
  2. 对差向量取范数对差向量套用长度定义,就得到两点间的距离。
    ∥u−v∥=(u1−v1)2+⋯+(un−vn)2\displaystyle \|\mathbf{u} - \mathbf{v}\| = \sqrt{(u_1 - v_1)^2 + \cdots + (u_n - v_n)^2}

向量夹角

光知道长度还不够,裁缝还得知道两条裁剪线朝哪个方向叉开。王师傅说:“夹角不用额外找量角器,内积本身就藏着答案。”把两段线的内积除以两段线长度的乘积,得到的是夹角的余弦值——也就是两段线“方向对齐”的程度。

根据余弦值的正负,夹角分为三类:余弦接近 1 时,两向量几乎同向(夹角接近 0°);余弦为 0 时,两向量垂直(夹角 90°);余弦接近 −1 时,两向量反向(夹角接近 180°)。这个“方向对齐程度”,正是机器学习里大名鼎鼎的余弦相似度——它只关心方向,不关心长短,所以很适合比较文本向量、用户向量这类“只看比例不看绝对大小”的对象。

王师傅叮嘱小陈:“量角度时别被长度干扰。长短不一的线,方向一样,算出来的余弦仍是 1。”

cos⁡θ=⟨u,v⟩∥u∥⋅∥v∥\cos \theta = \frac{\langle \mathbf{u}, \mathbf{v} \rangle}{\|\mathbf{u}\| \cdot \|\mathbf{v}\|}
这个公式把“角度”翻译成了内积的语言:方向越一致,内积越接近长度之积,余弦越接近 1。
  1. 归一化的内积内积除以两个长度之积,消除了“尺子长短”带来的影响,只留下方向信息。
    cos⁡θ=⟨u,v⟩∥u∥⋅∥v∥\displaystyle \cos \theta = \frac{\langle \mathbf{u}, \mathbf{v} \rangle}{\|\mathbf{u}\| \cdot \|\mathbf{v}\|}
  2. 余弦值的范围由柯西不等式保证,等式右边的比值永远落在 [−1, 1] 之间,这正好是余弦函数的值域。
    −1≤cos⁡θ≤1\displaystyle -1 \le \cos \theta \le 1
  3. 反解夹角对等式两边取反余弦,就得到两个向量的夹角 θ。
    θ=arccos⁡(⟨u,v⟩∥u∥⋅∥v∥)\displaystyle \theta = \arccos\left(\frac{\langle \mathbf{u}, \mathbf{v} \rangle}{\|\mathbf{u}\| \cdot \|\mathbf{v}\|}\right)

正交概念

裁缝铺里最精细的活儿,是裁直角。王师傅的老规矩是:两条裁剪线要是互相垂直,那把尺子量出来的数字必须恰好是 0。这个在向量世界里叫正交——它比“垂直”更广,因为 n 维空间里我们没法直接画“垂直”,但可以通过内积来判定。

一组向量如果两两正交,就天然形成一个好用的坐标系,叫正交基。在这个坐标系里,研究任意向量可以像拆布一样沿着各个基方向拆开,这个操作叫正交分解。若把向量 v 沿着非零向量 u 的方向拆,公式如下:

在正交基下,这个分解尤其漂亮:每个坐标都可以独立计算,互不牵连。机器学习中的特征去相关、PCA 找出“主方向”,用的都是这个思想。小陈感叹:“原来裁布时沿经纬线拆开,数学上也有一套一模一样的讲究。”

⟨u,v⟩=0  ⟺  u⊥v\langle \mathbf{u}, \mathbf{v} \rangle = 0 \iff \mathbf{u} \perp \mathbf{v}
正交分解把向量拆成两部分:一部分与 u 平行,一部分与 u 垂直。拆完之后,两个分量互相正交,互不干扰。
  1. 投影系数分子是 v 与 u 的内积,分母是 u 的长度平方,这个系数决定“影子”的长短。
    ⟨v,u⟩⟨u,u⟩\displaystyle \frac{\langle \mathbf{v}, \mathbf{u} \rangle}{\langle \mathbf{u}, \mathbf{u} \rangle}
  2. 平行分量把上面系数乘上向量 u,得到 v 在 u 方向上的投影向量。
    proj⁡uv=⟨v,u⟩⟨u,u⟩u\displaystyle \operatorname{proj}_{\mathbf{u}} \mathbf{v} = \frac{\langle \mathbf{v}, \mathbf{u} \rangle}{\langle \mathbf{u}, \mathbf{u} \rangle} \mathbf{u}
  3. 余项正交v 减去投影后剩下的部分 $v_{\perp}$ 与 u 正交,两者垂直。
    ⟨v⊥,u⟩=0\displaystyle \langle \mathbf{v}_{\perp}, \mathbf{u} \rangle = 0

柯西不等式

王师傅的尺子有一道铁律:两段线再怎么完全对齐,读数也超不过“两段长度的乘积”。用行话说,就是内积的绝对值永远不超过两个向量长度的乘积——这就是柯西不等式,它是内积空间的“量程天花板”。

这个“天花板”还带出一个重要推论——三角不等式:两边之和至少等于第三边,这正是内积空间中的“三角形边长关系”。

王师傅把天花板的故事讲完,小陈恍然大悟:“难怪余弦相似度永远在 −1 到 1 之间——因为有这把尺子的量程锁着!”

∣⟨u,v⟩∣≤∥u∥⋅∥v∥|\langle \mathbf{u}, \mathbf{v} \rangle| \le \|\mathbf{u}\| \cdot \|\mathbf{v}\|
三角不等式由柯西不等式推导而来,说明“走折线不会比直达更短”。
  1. 展开平方将左边范数平方用内积展开。
    ∥u+v∥2=⟨u,u⟩+2⟨u,v⟩+⟨v,v⟩\displaystyle \|\mathbf{u} + \mathbf{v}\|^2 = \langle \mathbf{u}, \mathbf{u} \rangle + 2\langle \mathbf{u}, \mathbf{v} \rangle + \langle \mathbf{v}, \mathbf{v} \rangle
  2. 交叉项放缩用柯西不等式替换交叉项,得到上界。
    2⟨u,v⟩≤2∥u∥⋅∥v∥\displaystyle 2\langle \mathbf{u}, \mathbf{v} \rangle \le 2\|\mathbf{u}\| \cdot \|\mathbf{v}\|
  3. 开方得结论两边同时开平方,三角不等式成立。
    ∥u+v∥≤∥u∥+∥v∥\displaystyle \|\mathbf{u} + \mathbf{v}\| \le \|\mathbf{u}\| + \|\mathbf{v}\|

常见内积

同样是量布,绸缎庄和粗布坊的尺子刻度其实不一样。王师傅的铺子里备了两把常用尺:第一把是标准点积,每个坐标一视同仁,权重都是 1;第二把是加权内积,给不同的方向配上不同的权重,好比丝绸用细密刻度、麻布用粗犷刻度。

除了处理离散坐标的尺子,还有一把专门伺候连续函数的尺子——函数内积。把函数想象成有无穷多个坐标的点,两个函数在每一点的函数值相乘,再全部“累加”(积分)起来:

小陈看着两把尺子感叹:“原来选哪把尺子,取决于布料是什么材质。做 AI 也一样——处理词向量用标准点积,强调重点特征就用加权内积,分析连续信号就用函数内积。”

⟨u,v⟩w=w1u1v1+w2u2v2+⋯+wnunvn,wi>0\langle \mathbf{u}, \mathbf{v} \rangle_{w} = w_1 u_1 v_1 + w_2 u_2 v_2 + \cdots + w_n u_n v_n, \qquad w_i > 0
函数内积把“每个 x 处的函数值”当作坐标,用积分代替求和,让函数之间也能谈夹角、谈正交。
  1. 连续坐标相乘在每个点 x 上,把 f(x) 与 g(x) 相乘。
    f(x)⋅g(x)\displaystyle f(x) \cdot g(x)
  2. 积分代替求和对区间 [a, b] 上所有点的乘积进行积分,相当于对无穷多个坐标做“累加”。
    ∫abf(x) g(x) dx\displaystyle \int_{a}^{b} f(x) \, g(x) \, \mathrm{d}x

AI 应用场景

用余弦相似度做智能客服问答匹配

阶段:语义特征表示与相似度计算

解决的问题:传统关键词检索遇到“同义不同形”就失灵,比如用户问“运费谁出”,而知识库里写的是“包邮政策”。把句子转成向量后用内积算夹角,语义接近的文本即使表面用词不同,余弦相似度依然很高。

具体案例:某电商平台把 5000 条标准问答转成 TF-IDF 向量存入向量数据库。用户提问时,系统计算问题向量与每条标准问答的余弦相似度,取 Top-5 返回给人工客服参考。实测相似问题命中率从关键词匹配的 61% 提升到 88%。

用正交化做特征去相关

阶段:特征工程与数据预处理

解决的问题:原始特征之间往往高度相关(比如“房屋面积”和“房间数量”),导致模型冗余、训练不稳。利用内积为 0 判定正交,可以找到互相独立的方向,把特征投影到正交基上。

具体案例:在房价预测项目中,数据科学家对 20 个原始特征做 PCA 主成分分析,本质就是找一组互相正交的主方向。取前 5 个正交主成分后,模型训练时间减少 40%,验证集精度反升 2 个百分点。

用加权内积做个性化推荐打分

阶段:推荐系统的用户偏好建模

解决的问题:标准点积把所有维度平等对待,但不同用户对内容类型的偏好权重不同。用加权内积给每个维度配上用户专属权重,可以更精准地刻画出“个性化的相似度”。

具体案例:视频推荐系统中,把用户向量、视频向量分别映射到“剧情、演技、特效、题材”四个维度。对偏爱特效的用户,特效维度权重设为 3,其他维度权重为 1;内积打分比标准点积的推荐点击率提升 17%。

Python 演示

python44 行
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. 内积空间是在哪种结构上额外定义了内积?

单选题 · easy

  • A.一种标量乘积运算← 正确答案
  • B.一种矩阵乘法运算
  • C.一种坐标求和运算
  • D.一种向量叉乘运算

答案:A。内积空间 = 向量空间 + 内积运算。它把“长度”和“角度”装进了向量空间,而不是增加矩阵乘法等别的结构。就好比裁缝铺有了布料(向量空间),再配上软尺(内积),才能量尺寸和夹角。

Q2. 向量 v=(3,4) 在标准内积下的长度是多少?

单选题 · easy

  • A.5,平方和再开根号← 正确答案
  • B.7,两坐标直接相加
  • C.12,两坐标相乘就行
  • D.25,平方和不开根号

答案:A。长度 = √⟨v,v⟩ = √(3²+4²) = √25 = 5。这就是勾股定理在高维的推广:先对自己做内积得到长度平方,再开根号。直接相加或相乘都没有度量“几何距离”的意义。

Q3. 若 ⟨u,v⟩=0 且 u、v 均为非零向量,则两者?

单选题 · mid

  • A.相互正交(垂直)← 正确答案
  • B.完全同向平行
  • C.长度恰好相等
  • D.坐标完全相同

答案:A。内积为 0 是正交的定义,意味着 v 在 u 方向上的投影长度为 0,两者“方向互不包含”。同向时内积为正且取到最大值,长度是否相等、坐标是否相同都与内积是否为 0 无关。

Q4. 柯西不等式断言内积的绝对值不超过?

单选题 · mid

  • A.两个向量的长度之积← 正确答案
  • B.两个向量的长度之和
  • C.内积自身的平方值
  • D.两个向量的坐标之和

答案:A。|⟨u,v⟩| ≤ ‖u‖·‖v‖,这就是量程天花板。两向量完全对齐时取等号,任何情况下都超不过“两段长度相乘”。B 是三角不等式的领域,C 和 D 与柯西不等式的形式不符。

Q5. 加权内积的权重 w₁,…,wₙ 必须满足什么条件?

单选题 · easy

  • A.全部大于零← 正确答案
  • B.全部小于零
  • C.全部等于一
  • D.全部随机取值

答案:A。权重全部为正,才能保证任何非零向量“自己内积自己”都大于 0,正定性这条公理才成立。全部等于一是标准点积的特例,但不代表加权内积必须如此;权重为负会破坏尺子的可靠性。

Q6. 两向量夹角接近 0° 时,余弦相似度趋近于?

单选题 · hard

  • A.1,表示几乎同向← 正确答案
  • B.0,表示几乎无关
  • C.-1,表示几乎反向
  • D.2,表示方向加倍

答案:A。cos 0° = 1,方向完全一致时相似度取到最大值。0 是正交时的值,−1 是方向相反时的值。余弦相似度被柯西不等式锁死在 [−1,1],不可能出现 2。

Q7. 标准内积下,u=(1,2) 与 v=(2,−1) 的关系是?

单选题 · mid

  • A.两向量相互正交← 正确答案
  • B.两向量方向同向
  • C.两向量方向相反
  • D.两向量夹角六十度

答案:A。内积 = 1×2 + 2×(−1) = 0,因此两者正交。同向时内积应为正,反向时内积应为负且夹角取到 180°,都不符合这里计算结果。

Q8. 以下哪些属于内积必须满足的公理?

多选题 · mid

  • A.对称性:结果与顺序无关← 正确答案
  • B.双线性:可拆加和数乘← 正确答案
  • C.正定性:自内积非负← 正确答案
  • D.幂等性:内积不改变向量

答案:ABC。内积的三条核心公理是对称性、双线性、正定性。幂等性不是内积的性质——内积输出一个实数,不会“不改变向量”。这三条公理保证软尺公平、稳定、可靠。

Q9. 关于正交基,以下说法正确的有哪些?

多选题 · hard

  • A.基向量两两正交← 正确答案
  • B.任意向量可正交分解← 正确答案
  • C.基向量长度必须是一
  • D.分解结果唯一确定← 正确答案

答案:ABD。正交基要求两两内积为 0,借由投影公式可以把任意向量沿着基方向分解,且分解结果唯一。但“长度为 1”是标准正交基的额外要求,普通正交基允许非单位长度的基向量。

Q10. 函数内积 ⟨f,g⟩ = ∫f(x)g(x)dx 可以用于做哪些事?

多选题 · easy

  • A.判断两个函数是否正交← 正确答案
  • B.衡量两个信号的相似度← 正确答案
  • C.计算离散坐标的点积
  • D.直接输出函数的零点

答案:AB。函数内积用积分代替求和,把函数当无穷维向量。判断正交(内积为 0)和衡量信号相似度都是它的典型应用。C 是离散点积的领域,D 与内积毫无关系,函数零点需要单独求解 f(x)=0。