一个独立的小工具:把"一串任意分数"变成"一串加起来 =1 的权重"。学它是为了下一课把点积分数变成注意力权重——但本课只讲 softmax 本身。
| Topic | softmax:分数 → 归一化权重 |
| Objectives | 会算 softmax;理解它做的两步(指数化 + 归一化)和为什么 |
| Prerequisites | 会加减乘除、知道 e^x 是个越大越陡的增函数即可 |
| Outcome | 能把 [2,1,0] 这种分数手算成和为 1 的权重,并说清 softmax 的性质 |
| Warning | 本课不碰 attention / Q / K;那是下一课 |
很多时候我们手上有一串"分数"(可以是任意实数,有正有负),但我们想拿它当作"该分配多少比重"来用。比如把三个分数变成"分别占多少权重"。
直接拿原始分数当权重不行,因为我们通常想要权重满足两个条件:
softmax 就是把任意一串分数,转换成满足这两条的权重的标准工具。
拆成两个动作:
e^x。作用:把任何数变成正数,且大的被放得更大。e^x 除以它们的总和。作用:让结果加起来 =1。当某个分数明显大时,softmax 会接近"一个独大"。例如 softmax([9.1, 1.2, 4.0]) ≈ [0.994, 0.0004, 0.006]——几乎全给了第一个。
e^x 保证每项都是正数,归一化才干净;顺带它还会把"大的更突出"。这就是为什么是 softmax——放大差距、偏向大的。
先澄清:输入分数完全可以是负的,softmax 照收。会崩的是"直接每个 ÷ 总和"这种朴素归一化——遇负数就出问题:
| 分数 [-2, -5],总和 -7 | 权重 [0.29, 0.71] —— -5 更小却权重更大,顺序反了 ❌ |
| 分数 [3, -3],总和 0 | ÷ 0,除以零,未定义 ❌ |
| 分数 [-1, 2],总和 1 | 权重 [-1, 2] —— 负权重、还有 >1,不是合法比例 ❌ |
e^x 先把所有数变正,上面三种崩溃全避免:[-2,-5] → e^x → [0.14, 0.0067] → 归一化 [0.95, 0.045] ✅ 全正、和为 1、大的仍然大。
因为这组权重接下来是拿去做加权平均(按比例混合)的。和为 1,混合结果才会停在和原料同一个尺度上——不放大、不缩小。拿混合两个向量 A、B 举例:
| 权重 [0.7, 0.3](和=1) | 0.7·A + 0.3·B → 落在 A、B 之间,同尺度 ✅ 真正的平均 |
| 权重 [7, 3](和=10) | ≈ 放大 10 倍 ❌ 不是平均了 |
| 权重 [0.07, 0.03](和=0.1) | ≈ 缩小 10 倍 ❌ |
还有个好处是可比性:一个词关注 2 个词、另一个词关注 50 个词,若权重不归一,后者输出会因"数量多"而虚高;和为 1 让两者站在同一起跑线。
下一课:把上一课的点积相似度分数喂给 softmax,就得到注意力权重("该给每个词多少注意力",加起来 =1)。本课到此为止,softmax 本身你已经会了。
点积分数 →〔softmax〕→ 注意力权重
softmax([1, 1]) 等于多少?(提示:两个分数一样大)e^x,而不是直接"每个分数 ÷ 总和"?答完这 3 题,我们进 B. 朴素注意力——只用点积 + softmax,先把"按相似度混合上下文"的核心直觉立住(还不引入 Q/K/V)。