F09|概率、指数与softmax:把分数变成比例
从具体对象与小例子开始,理解计算过程与适用条件。
本章目录
Softmax不是直接把分数除以它们的和
怎样从同一组三个分数,一步不跳走到抽样?
先把分数变成正的相对强度,再除以总量,就能读成候选份额。减最大值像把刻度原点一起移动;所有项的相对差值不变。最后按概率抽样还包含一次选择动作,概率本身不是选出的答案。
输入与适用条件:全程固定候选A/B/C、分数[2,1,0]、温度1、不做Top-k/Top-p裁剪;只在最后给定u=0.70。
1 / 5 · 分数不是份额
窄屏可左右滑动图形,或点击“放大图形”。文字解释紧随图后。
候选A、B、C的原分数是2、1、0。2不是200%,它只是尚未转换的分数。
logits = [2,1,0]logits = [2,1,0]
默认静止。用“下一步”看完解释再继续;播放到最后一步自动停止。键盘聚焦播放器后,可用左右键逐步查看、空格播放/暂停。图中颜色辅助区分,含义同时用文字注明。
为什么需要
需要把任意分数变成可比较的份额,并避免大指数溢出。
怎样实现
先减最大值、取指数、求和、归一化,再按明确规则选项。
可能的代价与误解
这不是整句答案正确率;中间显示的四舍五入数不应反复拿去算下一步。
如何判断是否做对
与未平移的精确计算比较概率;概率和为1,u=0.70应选B。
分数不是概率
本章从头到尾只使用同一组三个候选Token:候选A、B、C,模型分别给它们打分[2,1,0]。这些值叫logits(未归一化分数),不是概率:例如2不能读成200%,三个数相加也不等于1。实际logits也可能是负数,但为了方便核对,本章始终使用[2,1,0]。
概率在这里表示模型为候选分配的比例:每项不小于0,总和为1。0.2表示20%。它是模型在当前条件下的预测,不自动等于现实中答案正确的概率。
先学指数和对数需要的那一点
2³=8是指数;exp(x)是e^x,底数e约为2.71828。指数把任意实数转成正数:exp(0)=1,exp(1)约2.718,exp(-1)约0.368。
自然对数ln是反过来问“e的几次方等于这个正数”。所以ln(1)=0,ln(e)=1。ln(2)约0.693,ln(3)约1.099。后面的损失函数会用到对数,现在先认识它与指数互为反操作。
softmax一步不跳地算
Softmax把模型给三个候选的分数转成三项概率。从这里到本章的抽样示例,输入始终是[2,1,0],并没有换另一组数据。逐步计算如下。计算机通常先减去最大值以避免指数过大,具体原因下一节会证明。
① 候选Token: A B C
② 原始分数 z: 2 1 0
③ 减最大值2: 0 -1 -2
④ 分别取指数: 1 0.367879 0.135335
⑤ 指数求总和: S = 1 + 0.367879 + 0.135335 ≈ 1.503215
⑥ 各自除以 S: 0.665241 0.244728 0.090031
⑦ 累计概率: 0.665241 0.909969 1.000000
抽样时取一个位于 [0,1) 的随机数,例如 u=0.70:
A 区间:[0, 0.665241)
B 区间:[0.665241,0.909969) ← 0.70 落在这里
C 区间:[0.909969,1)
所以本次抽中 B;但每次随机数可能不同。
表格只显示6位小数,程序使用更高精度的内部值。
通用写法是p_i = exp(z_i) / Σ_j exp(z_j)。i指当前候选,j遍历全部候选,Σ表示求和。分母相同,因此所有项会一起竞争比例。
若A的分数增大而B、C不变,Softmax归一化后B、C的概率就会下降,因为三者共享同一个分母。这也解释了注意力中的一个工程细节:仅把补齐位置(PAD)的Embedding设为零,不保证它不影响注意力。若它仍是可访问的Key位置,就可能参与注意力的Softmax分母;应通过合适的Attention Mask排除无效位置。这里说的是注意力Softmax,不是当前三个候选Token的生成概率。
为什么要减最大值
很大的指数可能超出有限精度能表示的范围。可以把所有分数减去同一个最大值m,再算softmax:
exp(z_i-m) / Σ exp(z_j-m)
= [exp(z_i)/exp(m)] / [Σexp(z_j)/exp(m)]
= exp(z_i) / Σexp(z_j)
分子分母的共同因子抵消,因此数学上结果不变,却能避免指数过大。用同一组分数[2,1,0]核对:不减最大值时,指数为[7.389056,2.718282,1],总和约11.107338;逐项相除,仍是约[0.665241,0.244728,0.090031]。减最大值不是“删掉最大候选”,也不会改动原来的概率。
取最大与按概率抽样不是一回事
argmax选择分数或概率最大的候选;采样(sampling)按概率随机抽一个。概率为[0.665241,0.244728,0.090031]时,argmax总选第一项A;按上述概率采样时,也可能选B或C。例如随机数0.70选中B。这解释了为什么同一分布可以产生不同文字。
Temperature(温度)是在softmax前把分数除以正数τ。τ较小常使分布更集中,较大更分散。τ=0不能真的执行除零;接口若用0表示贪心,是另外的处理约定。
Top-k保留前k项;Top-p通常保留累计概率达到门槛的最小高概率候选集合,再在其中归一化采样。p是阈值而非Token数量。这些策略在生成时改变候选选择,不会让错误的矩阵计算变正确。
同一个softmax在两处出现
Attention中的softmax把“对输入各位置的分数”变为聚合权重;最后输出的softmax把“对词表各候选的分数”变为下一Token概率。算法可以相同,但归一化的轴、候选集合和用途不同,不能把注意力权重当作最终答案置信度。
三个分数怎样一步步变成抽样概率
输入与条件。继续沿用本章唯一的三个候选A、B、C,对应分数仍为[2,1,0]。下面的表是前面逐项计算的同数据核对表,不是另一道换了分数的题。
| 步骤与对象 | 内部动作 | 中间结果 / 新状态 |
|---|---|---|
| 1平移分数 | 减去最大值2 | 得到 [0,-1,-2],保持相对差值。 |
| 2取指数 | 逐项计算exp | 约 [1,0.367879,0.135335]。 |
| 3求总和 | 把指数相加 | 约1.503215。 |
| 4各除总和 | 归一化 | 约 [0.665241,0.244728,0.090031],和为1。 |
| 5按区间取样 | 把[0,1)分成三段 | 分段为A:[0,0.665241),B:[0.665241,0.909969),C:[0.909969,1)。随机数0.70落入B区间,所以选择B;argmax则选择A。 |
把过程连起来。此表与上方“Softmax一步不跳地算”完全对应:分数、指数、分母和概率没有变化。减最大值不会改变数学上的概率;抽样也允许选中非最大项。这里的概率是模型对下一Token的预测分布,不是整句回答真实正确的概率。
边界与反例。使用未舍入数计算,表格只展示有限小数;随机数0.70是人为给定的示例输入。
依据与适用范围:[SDPA]。示例输入和场景由本书明确设定。
课后自检
分数[0,0]经softmax是什么?
查看参考答案收起参考答案
三个候选概率为[0.2,0.3,0.5],模型给第三项0.5是否表示答案有50%真实正确?
查看参考答案收起参考答案
延伸阅读:相关系统问题
01|输入究竟是什么:从用户的一句话到模型张量02|一次Transformer前向:逐张量、逐算子讲明白
04|输出是怎样一个Token一个Token生成的
05|训练的一步:从正确标签到参数真正改变
06|后训练、MoE与模型定制:能力和行为如何改变
机制依据:[F-PROB][TR]。本节数值与情景除另注外均为原创教学示例;来源不代替中文讲解。