大模型挑字之前,词表里每个候选都会先领到一个原始分,这份分数表叫 logits。它是概率的前身,也是一切解码参数的起点——温度、重复惩罚动的都是它,本文讲它从哪来、怎么变成概率、调试时为什么要看它。
原始分从哪来:最后一层的输出
文字向量穿过权重文件里的层那篇讲的一整栋楼之后,在出口处与一个投影矩阵相乘,得到一个与词表等长的分数向量:词表五万,分数就五万个。这些分数没有上下限,可以是负数,彼此之间只有相对大小有意义。用张量是什么那篇的视角看,它就是一个形状为词表长度的一维张量。进来的信息是模型对上下文的理解,出去的就是这份原始分,一个字的胜负在这里只差几分之一。
从分数到概率:只差一步归一化
把 logits 喂给 softmax,先逐个取指数把分数变成正数,再除以总和归一,就得到概率分布。分数差决定概率差:两名候选原始分差 3,指数之后的概率差能达到约二十倍。EOS 是怎么判定的那篇讲的停止判定、束搜索那类路线规划,全都在这份分布上做文章。温度参数也在这步进场——对分数先除以温度再归一,压平或拉尖分布,官方接口里调的采样参数动的是同一份数据。
logits 速查表
- 身份:概率出炉前的原始分,一维、与词表等长
- 特点:无上下限、可为负、只有相对差有意义
- 上游:最后一层输出乘投影矩阵
- 下游:softmax 变概率,随后才轮到采样拍板
- 调参前先想清这句:你调的是分数形状,概率只是它的影子
为什么调试总盯着它看
回答质量异常时,logits 是很直观的体检报告:分数过于平均说明模型拿不准,过于尖说明分布近乎唯一。重复惩罚那篇讲的扣分、约束解码的格式拦截,本质都是在归一化之前改写这份分数表。注意力的计算量为什么随长度平方涨的成本发生在上游,多查询注意力是怎么省缓存的的优化也在上游,到 logits 这一层,计算量只剩词表大小,便宜但关键——一字的去留全由它定。
| 手段 | 在哪一步动手 | 动的是谁 |
|---|---|---|
| 温度 | 归一化之前 | 全表分数之间的差距 |
| 重复惩罚 | 归一化之前 | 出现过的词的分数 |
| 约束解码 | 归一化之前 | 非法候选的分数 |
关于logits的三个常问问题
- logits 和概率是一回事吗?:前者是任意实数的原始分,后者是归一化后的正值分布;同一份 logits 配不同温度能变出不同概率,两个词别混用。
- 为什么分数可以是负数?:它只是相对强弱的度量,不表示出现次数或占比,负数照样能在归一化后拿到很高的概率。
- 普通用户能查到它吗?:多数对话产品不开放,走接口或本地部署时部分服务会返回前列候选的分数,调试采样参数时很有用。
一句话定位:logits 是分数,概率是翻译,采样才是拍板的人。再补一个常见误区:原始分本身没有概率意义,两个分数之差除以温度之后再过归一化才得到相对概率,所以某一个分数单独拿出来什么都不能说明,必须放在同一次输出的全体候选里比较。温度旋钮作用的正是这个比较过程:温度越低,分数之间的差距被放大,分布更尖;温度越高,差距被抹平,低分候选也有机会。调试输出异常时,把原始分原样打出来看,比只看最终概率更容易定位是分布问题还是采样问题。再往上一层,排序类策略作用于分数,长度惩罚、重复惩罚同样在这一层做手脚,它们共同的特点是改分数不改模型——想调控行为,先从这一层入手。


