news 2026/10/2 2:26:13

240、【AI】【模型部署】基座模型研究:logits 与 softmax

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
240、【AI】【模型部署】基座模型研究:logits 与 softmax

【声明】本博客所有内容均为个人业余时间创作,所述技术案例均来自公开开源项目(如Github,Apache基金会),不涉及任何企业机密或未公开技术,如有侵权请联系删除

标题

240、【AI】【模型部署】基座模型研究:logits 与 softmax

背景

上篇 blog
【AI】【模型部署】基座模型研究:反向传播的已知、所求与场景
把反向的工程视角讲清了:已知的是前向的产物、求的是每个参数的梯度,并完整推导了"softmax + 交叉熵的梯度恰好是p − y p-yp−y"——交叉熵的导数与 softmax 的导数相乘后相消,只剩预测减真实。

那个推导里有两个反复出现的符号:z zz(logits)和p pp(softmax 后的概率)。上篇直接用了它们,却没有解释 logits 到底是什么、softmax 又为什么要长成指数归一化的样子。本篇把这两个基础部件单独讲透——它们也是理解温度、采样与p − y p-yp−y的前提。

模型部署

只要有语言模型,就绕不开一条最基础的分工:输出头吐出 logits,softmax 把它变成概率。这条线上的每个性质——为什么 logits 可以是负数、为什么同加一个常数概率不变、为什么要减最大值、温度到底在调什么——都由 softmax 的数学形式决定。理解它,后面谈采样与损失都会顺很多。


🧩logits 是什么:一组未归一化的分数

logits是模型最后一层(输出头)输出的未归一化分数,形状是( B , S , V ) (B,S,V)(B,S,V)——批大小 × 序列长度 × 词表大小。也就是说,每个位置、每个候选 token,各对应一个实数分数。

它有两个容易困惑的性质:

  • 可以为负:分数本来就该是任意实数,“负分"只是"相对不太可能”;
  • 绝对值没有意义:z = [ 2 , 1 , 0.1 ] z=[2,1,0.1]z=[2,1,0.1]和z = [ 102 , 101 , 100.1 ] z=[102,101,100.1]z=[102,101,100.1]描述的是同一个偏好顺序,真正决定概率的是分数之间的差。

所以 logits 可以理解为"原始打分"——它保留了模型的全部偏好,但没有"非负且和为 1"的约束。


🧩logits 从哪来

输出头本质上是一个线性映射:把隐藏向量(维度d dd)投影到词表维(维度V VV)。以第 231 篇的微型模型为例,最后一步是

returnself.lm_head(self.norm(x))# (B,S,d) → (B,S,V)

这里的lm_head是一个不带偏置的线性层。它输出的每一行,就是该位置对全部V VV个 token 的打分。有的模型会让输出头与输入嵌入矩阵共享权重(权重绑定,weight tying),既省参数,也让"表示"与"打分"共用同一套向量。

顺着形状看这一步更直观:归一化后的隐藏向量是( B , S , d ) (B,S,d)(B,S,d),lm_head的权重是( V , d ) (V,d)(V,d),一次线性映射就把最后一维从d dd换成V VV,得到( B , S , V ) (B,S,V)(B,S,V)——词表维正是在这里第一次出现。


📊logits 怎么变成概率:softmax

softmax 把一组 logits 压成一组概率:

p i = e z i ∑ j e z j p_i = \frac{e^{z_i}}{\sum_j e^{z_j}}pi​=∑j​ezj​ezi​​

图 1 是一个 4 个候选的例子:logits[ 2.0 , 1.0 , 0.1 , − 1.0 ] [2.0,\,1.0,\,0.1,\,-1.0][2.0,1.0,0.1,−1.0]经过 softmax,变成概率[ 0.64 , 0.23 , 0.10 , 0.03 ] [0.64,\,0.23,\,0.10,\,0.03][0.64,0.23,0.10,0.03]——全部非负、加起来正好为 1,而且大小顺序不变。

用图 1 的数字走一遍算法:先对每个 logit 取指数,e 2.0 ≈ 7.39 e^{2.0}\approx7.39e2.0≈7.39、e 1.0 ≈ 2.72 e^{1.0}\approx2.72e1.0≈2.72、e 0.1 ≈ 1.11 e^{0.1}\approx1.11e0.1≈1.11、e − 1.0 ≈ 0.37 e^{-1.0}\approx0.37e−1.0≈0.37,总和约11.59 11.5911.59;再各自除以总和,就得到下面的概率:

tokenlogitz zze z e^{z}ez概率p pp
A2.07.390.64
B1.02.720.23
C0.11.110.10
D-1.00.370.03

同一条链上,三个量容易混,放在一起对照:

量取值范围求和角色
logits任意实数无约束模型原始打分
概率p pp[ 0 , 1 ] [0,1][0,1]1归一化后的偏好
标签y yy{ 0 , 1 } \{0,1\}{0,1}1one-hot 真实答案

它为什么长这样?三个设计都各有目的:

  • 取指数:把任意实数映射到正数,天然满足"概率非负";
  • 除以总和:把所有值归一化,抓住"概率之和为 1";
  • 指数放大差距:z zz差 1,概率就差e ≈ 2.7 e\approx 2.7e≈2.7倍,让"更偏好"体现得更明显。

📊softmax 的一个关键性质:平移不变

把上面三个 logits同时加 3,会得到什么?答案是概率完全不变:

图 2 说明了原因:softmax 分子分母里都有e z e^{z}ez,同乘一个因子e c e^{c}ec后上下约掉。也就是说,只有 logits 之间的差进入了概率,绝对值被彻底消掉。

这个性质有两层用处:一是解释了"为什么 logits 的绝对大小没意义";二是直接带来了工程上的稳定写法——既然减去一个常数不影响结果,那就减去最大值,让指数都不至于太大。


🧩数值稳定:先减最大值再取指数

如果不做处理,直接算e z e^{z}ez,一旦某个 logit 很大(比如 1000),指数就会溢出成无穷大,概率变成一堆nan:

图 3 对比了两种算法:直接算会溢出,先减最大值再算则安全——因为平移不变保证了结果一致。等价地,交叉熵也可以写成log-sum-exp形式(第 235 篇提过):

loss = log ⁡ ∑ j e z j − z 正确 \text{loss} = \log\sum_j e^{z_j} - z_{\text{正确}}loss=logj∑​ezj​−z正确​

这样就不必先算出一个极小的概率、再取对数导致下溢。


🧩三个常见疑问

softmax 的形式看起来"绕",其实每个设计都在回答一个反问:

  • 为什么不用 argmax:argmax 只留一个 1、其余全 0,会丢掉"第二可能是什么"的信息,而且不可导;softmax 保留全部偏好、处处可导;
  • 为什么不用简单归一化(除以总和):logits 可正可负、总和甚至可能为 0,直接除没有意义;取指数先把它们变成正数,归一化才有定义;
  • 为什么非要用指数放大差距:放大让"更偏好"更突出,也让损失对"错得离谱"的惩罚更陡——这正是交叉熵能快速纠正错误的来源。

🧩温度:在 logits 上做除法

温度T TT的用法很简单:先把 logits 除以T TT,再做 softmax:

p i = e z i / T ∑ j e z j / T p_i = \frac{e^{z_i/T}}{\sum_j e^{z_j/T}}pi​=∑j​ezj​/Tezi​/T​

因为只有"差"有意义,除以T TT相当于把 logits 的差距整体放大或缩小:

  • T < 1 T<1T<1:差距被放大,分布更尖,更接近"只选最大";
  • T > 1 T>1T>1:差距被缩小,分布更平,低概率 token 也有机会。

图 4 是同一个 logits 在T = 0.5 / 1 / 2 T=0.5/1/2T=0.5/1/2下的概率:T = 0.5 T=0.5T=0.5时最高项达到0.86 0.860.86,T = 2 T=2T=2时降到0.45 0.450.45——温度就是"确定与多样"之间的旋钮(第 236 篇讲过它如何调节生成)。注意它只改分布形状,不改 logits 的排序。


🧩同一个 softmax,也用在注意力里

softmax 并不只服务于输出层。注意力机制里,查询与键的相似度分数算出后,同样用 softmax 把它们变成"权重",再用这些权重对值向量v vv加权求和(第 242 篇展开)。可以说:凡是"把一组分数变成一组权重或概率",几乎都会用到 softmax。


🧩和p − y p-yp−y的联系

最后把话题接回上篇。反向里那个漂亮的梯度p − y p-yp−y,其中的p pp就是本节的 softmax 输出:

  • 如果模型预测p i p_ipi​高于真实y i y_iyi​,梯度为正,把该 logit 往下压;
  • 如果低于真实y i y_iyi​,梯度为负,把它往上抬。

这也从另一个角度解释了 softmax 的意义:它不只是"把分数变成概率",还让损失对 logits 的梯度恰好等于概率与标签之差——预测越自信、错得越离谱,梯度就越大。这正是交叉熵"好训练"的数学根源(推导见第 239 篇)。


📌一句话记忆

logits 是输出头给出的、未归一化的分数(形状( B , S , V ) (B,S,V)(B,S,V),可负、绝对值无意义、只有差值有意义);softmax 用"取指数、除以总和"把它压成非负且和为 1 的概率,同时放大差距;由于平移不变,工程上先减最大值再取指数以保证数值稳定;温度是在 softmax 前对 logits 除法,用来调"确定与多样";softmax 输出的p pp与真实标签y yy之差,正是交叉熵对 logits 的梯度。


OK,本篇先到这里,如有疑问,欢迎评论区留言讨论,祝各位功力大涨,技术更上一层楼!!!更多内容见下篇 blog
【AI】【模型部署】基座模型研究:loss 面面观(交叉熵 / NLL / KL / 最大似然)

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/2 2:25:43

Android 离线录音 APP 推荐:断网录音工具有哪些

很多线下记录场景会遇到网络不稳定的情况&#xff0c;会场屏蔽信号、野外采访无蜂窝网络&#xff0c;常规录音转写工具依赖云端服务&#xff0c;网络中断后音频无法保存&#xff0c;直接造成记录内容丢失。Android 平台上的录音工具能力差异集中体现在离线录音引擎的实现方式&a…

作者头像 李华
网站建设 2026/10/2 2:24:10

案例 4.4 微信小程序 swiper 和 switch 组件(swiper 共 4 个滑动项)

前言本次案例《4.4 swiper 和 switch 组件》&#xff0c;学习小程序轮播swiper轮播组件与开关switch组件。在基础功能上&#xff0c;给 swiper 新增一项&#xff0c;一共 4 个滑动页面&#xff0c;实现轮播切换&#xff0c;使用 switch 控制轮播自动播放。一、知识点介绍swiper…

作者头像 李华
网站建设 2026/10/2 2:23:38

RVC WebUI UVR5 人声分离实战指南:三步拿到干净人声与伴奏

RVC WebUI UVR5 人声分离实战指南&#xff1a;三步拿到干净人声与伴奏 【免费下载链接】Retrieval-based-Voice-Conversion-WebUI Easily train a good VC model with voice data < 10 mins! 项目地址: https://gitcode.com/GitHub_Trending/re/Retrieval-based-Voice-Con…

作者头像 李华