点积将特征变成分数
展开点积以查看各特征的贡献,构建线性分类器分数,并使用 NumPy 排查顺序和概率方面的误解。
AI 模型可以打印出 这样的分数,却不说明哪些输入特征让这个数字上升或下降。点积让我们可以一次查看这个计算的一小部分:将每个特征乘以同一坐标上的权重,再把各个乘积相加。
学完本课后,你将能够把点积展开为带符号的特征贡献,使用 NumPy 实现点积,并读取二元线性分类器内部的原始分数,而不会把它误认为概率。
学习目标: 将点积解释为加权特征分数。
本课建立在第 041 课:内积度量对齐程度之上;在那一课中,同一个运算描述了两个向量彼此指向的相对方向。Mathematics for Machine Learning第 3.2 节提供了数学参考。这里的特征名称、数字、代码、视觉内容、分类器演示和练习题均为原创。
点积将特征与权重配对
令 为一个特征向量:它是一个按固定顺序排列、表示某个输入的数字列表。令 为一个权重向量:它是一个按固定顺序排列、说明模型如何组合这些特征的参数列表。两个向量都有 个坐标,并且两个列表中的坐标 必须表示同一件事。
转置记号让形状检查变得直观。如果把 看作一个 的列向量,那么 是 ,而 是 的结果——一个标量分数。求和式以更容易检查的形式表达了同一件事:每个坐标进行一次乘法,然后沿着一条加法链相加。
顺序是数据契约的一部分。如果 是错误率,那么 就必须是错误率权重。两个数组即使长度相同,只要坐标被调换,也可能描述错误的模型。
点积也是上一课介绍的标准实内积,但这里的角色不同。一个向量是输入表示,另一个向量是学习得到的或人为选择的评分参数。这样的角色分配使每个乘积 都值得检查。
一个完整的分数示例让每项贡献都可见
使用一个小的特征向量和权重向量:
四个坐标已经是模型的数值输入。它们的名称只是这个示例中的标签;在真实流程中,预处理决定每个数字表示什么以及使用什么尺度。
坐标 的贡献是 。当特征与权重同号时,它为正;当二者异号时,它为负;当其中一个为零时,它为零。正贡献会把分数向上推,负贡献会把分数向下拉。大小 表示在这个特定分数中该坐标的直接影响有多大。
跟踪每个特征乘积如何形成点积总和
| 特征 | 数值 xᵢ | 权重 wᵢ | 贡献 wᵢxᵢ |
|---|---|---|---|
| 覆盖率 | 2.00 | 1.20 | 正 +2.40 |
| 错误指示量 | 0.50 | −0.80 | 负 −0.40 |
| 参考偏差 | 4.00 | 0.00 | 零 0.00 |
| 已验证信号 | 3.00 | 0.40 | 正 +1.20 |
| 点积总和 | 3.20 | ||
从上到下阅读表格,即可跟随每个数值、权重、符号和贡献,无需依赖图表的颜色或几何形状。
该表是权威的备用呈现:贡献图快速展示运行总和的视觉轨迹,但不会把任何数字隐藏在颜色、悬停文本或客户端状态中。即使特征值为 ,零权重特征对这个模型分数也没有贡献。
如果模型还有偏置 ,要把这个偏移量与特征乘积分开。令 ,仿射分数变为
偏置会让每个输入的分数都平移相同的量。它不表示四个特征中的某一个贡献了 。
为什么坐标乘积有用,但也有局限
这个和严格具有可加性。如果只有特征 改变了 ,那么
其中 是第 个位置为 、其他位置为 的向量。因此,固定线性分数会改变 ——这个变化与其他坐标之间没有隐藏的交互项。
这使得 成为解释这一次线性计算的有用方式。但它并不意味着这个乘积就是完整的因果归因。训练好的系统可能包含相关特征、预处理步骤或后续非线性层。此外,不同单位或尺度的特征之间不能直接比较权重大小。标准化特征可能改变数值权重,但在相应更新参数后仍可保持模型预测等价。
线性分类器对分数进行阈值判断
二元线性分类器使用仿射分数
然后应用如下的决策规则:
对于上面的输入,,因此零阈值会将其分配到类别 。阈值是第二步;点积本身只提供加权分数。改变阈值会改变决策,但不会改变特征乘积。
满足 的点集在二维中是一条直线,在更高维度中是一个超平面。在标准欧几里得几何下,权重向量 垂直于这条边界。沿着与 对齐的方向移动输入会提高分数;逆着它移动会降低分数。这正是点积能把一列特征变成相对于分类器边界的位置的原因。
这种区别也出现在 scikit-learn 中。它的线性模型指南将预测写成截距加特征的加权组合(线性模型),而 LogisticRegression.decision_function 返回与到超平面的带符号距离相关的置信分数(LogisticRegression 文档)。这些分数不是概率。逻辑模型可以应用 sigmoid 函数:
它会把 映射为约 。这个数值是由模型链接函数产生的概率估计;它不是点积本身的含义,而估计是否校准良好是另一个问题。在同一份文档中,返回概率估计的 API 是 predict_proba。
同一个运算也可以表示注意力中的兼容性
在注意力计算中,查询 和键 都是表示向量。它们的点积 是一个兼容性分数,用于把这个键与该查询的其他键进行比较。算术运算没有改变:配对对应坐标,乘法,再求和。
这里的解释不同于特征示例。在 中, 扮演参数角色, 扮演输入角色,所以 是一个模型分数的坐标贡献。在 中,两个向量都来自表示,因此一个乘积只是兼容性计算的一部分,并不自动构成某个词元为何重要的因果解释。第 041 课继续讲解这个分数如何经过缩放和 softmax;原始点积仍然是第一步。
NumPy 让实现贴近代数
对于一维数组,numpy.dot 计算两个向量的内积并返回一个标量。当目标是在求和前检查贡献时,逐元素乘法很有用:
import numpy as np
x = np.array([2.0, 0.5, 4.0, 3.0])
w = np.array([1.2, -0.8, 0.0, 0.4])
b = -1.7
contributions = w * x
raw_score = np.dot(w, x)
classifier_score = raw_score + b
assert np.allclose(contributions.sum(), raw_score)
print(contributions)
print(raw_score)
print(classifier_score)
输出为:
[ 2.4 -0.4 0. 1.2]
3.2
1.5
assert 检查的是核心恒等式:对可见的坐标乘积求和,应与紧凑的点积调用一致。在调试笔记本中同时保留这两种形式,比把 dot 当作黑盒更容易审计分数。
边界情况能发现看似合理的错误
四项检查可以避免大多数初学者错误:
- 形状相同不代表含义相同。 如果特征顺序改变而权重顺序没有改变,NumPy 仍然可以将形状为 的数组相乘。例如,将上面的权重与 配对,会得到 ,而不是 。代码可以运行,但模型输入错了。
- 零向量的点积为零。 如果每个特征都是零,那么对任意 都有 。有偏置时,分类器分数仍然是 。因此,分数为零并不能证明所有特征彼此抵消,而且零向量没有方向,无法进行基于角度的解释。
- 负数不自动代表坏事。 负特征与负权重相乘会得到正贡献。例如,。符号描述的是这个模型中的乘积,而不是给特征贴上道德标签。
- 分数不是概率。 原始值可以是 、 或 。只有明确选择的输出规则——例如阈值、sigmoid 或 softmax——才会把这个分数变成决策或归一化估计。
下一课将从一个加权分数转向另一个几何问题:当选定的大小概念改变时,两点相距多远?Math for AI 课程页面将第 043 课:距离取决于所选择的几何列为下一步。
检查你的理解
Question 1
Show the step-by-step solution
令 且 。计算三个坐标贡献和点积。哪一项会降低分数?
对应的乘积为
按坐标顺序相加:
第二项和第三项会降低总和,因为它们为负。第三项向下的幅度更大,为 而不是 。
Question 2
Show the step-by-step solution
对于 和 ,计算分数,并解释第三个特征为什么不改变分数。
逐坐标相乘:
因此分数为
第三个特征的值为 ,但它的权重为零,所以乘积为零。对于这个拟合出的分数,该坐标会被忽略;这不意味着底层信号在另一个模型中或重新训练后永远不会有作用。
Question 3
Show the step-by-step solution
一个分类器的 、 且 。计算它的仿射分数,并应用零阈值。
先计算点积:
然后加上偏置:
分数恰好位于阈值上。按照 的规则,该输入被分配到类别 。如果规则使用严格的 ,就会明确边界约定,并可能分配不同的类别。
Question 4
Show the step-by-step solution
正确的特征顺序是 ,权重为 。一个 bug 传入了 。计算两个分数并指出故障。
按预期顺序时,
使用调换后的特征向量时,
两个数组的形状都是 ,因此单独的形状检查无法发现这个错误。乘积把权重与错误的特征含义配对了;数据模式不仅要保持数组形状,也必须保持坐标顺序。
Question 5
Show the step-by-step solution
一个中心化特征的值为 ,其学习得到的权重为 。这个坐标会降低分数吗?
不要只根据特征的符号判断,而是计算乘积:
它会让分数提高 。两个负号相互抵消。在中心化或以其他方式变换后的特征空间中,负特征值是普通数字,不是错误。
Question 6
Show the step-by-step solution
原始分类器分数为 。 是概率吗?如果模型明确使用 sigmoid 链接函数,在讨论校准之前它会产生什么数字?
原始分数不是概率:它可以超出区间 。sigmoid 给出
因此,链接函数产生约 。称其为有用的概率估计,需要模型及其校准假设;点积本身只产生了分数 。
Question 7
Show the step-by-step solution
在 NumPy 中,x.shape == (4,) 且 w.shape == (4,),但数据流程重构后分数突然改变。请使用这个完整示例给出一个能揭示坐标顺序错误的数值检查。
重新计算逐元素乘积,并将它们的和与预期的有序分数比较:
然后在点积之前打印特征名称及其数值。如果流程产生了 ,而权重仍保持原顺序,那么可见乘积会变为 ,总和为 。数组仍然具有兼容的形状,所以除了形状检查,还需要贡献表或带名称的特征顺序断言。
Question 8
Show the step-by-step solution
一种注意力式比较使用 和 。计算 ,并解释它与分类器中的 有何不同的一种含义。
配对并相加:
结果是查询与键之间的兼容性分数。在分类器中, 是参数向量, 是输入,因此每个 都是特征分数的坐标贡献。在注意力中, 和 都是表示;坐标乘积会贡献于二者的比较,但不自动构成因果特征归因。