文章

Softmax算法使用简介

Softmax算法使用简介

Softmax算法使用简介

Softmax 函数把任意长度的实数向量(常称 logits)唯一地变换为同一长度的向量:各分量在 (0,1) 上,且和为 1,因而常作为多类分类输出层的归一化概率表示。与 Sigmoid 处理二分类或逐元素“概率”不同,Softmax 在类别之间是互斥、竞争的;实现上多配合 对数似然/交叉熵 作损失。在大语言模型中,同一形式还用于下一词分布注意力权重采样温度在推理中调节下一词 Softmax 的尖锐/平坦程度。本文从名称与来源、场景、定义与手算、温度等扩展LLM 与温度、与相近方法的差异及参考链接作一梳理。


一、名称由来与在学科中的位置

  • 统计力学 / 玻尔兹曼分布中,在能量状态 (E_i) 下占据概率与 (\exp(-E_i/kT)) 成比例、再归一化,与把 logits 作指数再归一化在形式上同源;化学势、配分函数的语境里常见这类「指数赋权 + 归一化」结构。
  • 计量经济学、离散选择中的 Multinomial Logit 把线性打分经 Softmax 得到各类别选择概率。
  • 机器学习里 Softmax 回归、卷积/全连接网络末端的 Softmax 层、以及 word2vec 的层次 Softmax 等,名称 softargmax 的“硬”选择形成对照:先保留各选项的相对大小,再平滑成可微的概率分布。

中文常直接称 软最大化 或音译/混用为 Softmax不是人名缩写,而是对「软化的最大值/类别分配」的习惯称呼。


二、数学定义与主要性质

对向量 (\mathbf{z}=(z_1,\ldots,z_C)^\top),其中 (C) 为类别数,Softmax 第 (k) 个分量为:

[ \mathrm{softmax}(z_k) = \frac{\mathrm{e}^{z_k}}{\sum_{j=1}^{C} \mathrm{e}^{z_j}}, \quad k=1,\ldots,C ]

主要性质

  • 非负(\sum_k \mathrm{softmax}(z_k)=1),可解释为类别分布。
  • 平移不变性:对任意常数 (c),用 (z_k+c) 代替 (z_k),结果不变(因分子分母同乘 (\mathrm{e}^{c}))。
  • 同比例放大放大差异:当某一 (z_k) 远大于其他分量时,对应概率趋近于 1;若各分量几乎相等,则各概率约 (1/C)
  • 数值实现上为防 (\mathrm{e}^{z}) 溢出,常先作 (\max_j z_j) 减到 logits 上(上式等价值不变),并常用 log-softmax 与负对数似然一体求梯度(见各框架文档)。

三、主要作用与典型使用场景

作用说明
多类概率输出将网络最后一层线性输出转为 C 个类的概率,与 交叉熵 损失自然衔接。
可微近似 argmax训练时保留梯度,推理时常取 (\arg\max_k) 作为预测类
注意机制中的权重Transformers 里对 Query–Key 打分常经 Softmax(沿 key 维) 得到注意力权重(行和为 1),语义是「在若干位置上分配比重」,与分类里的 Softmax 形式相同。

典型场景

  • 图像/文本/语音的 (C>2)监督学习 输出层。
  • 强化学习中 策略网络 对离散动作集合输出分布。
  • 多标签任务若允许多个类同时为真,通常不用单通道 Softmax,而改用 C 个 Sigmoid 或专用结构(见下节「与 Sigmoid 的对比」)。

四、与相近方法的对比

方法作用对象输出约束与 Softmax 的主要区别
Softmax向量 (\mathbf{z}\in\mathbb{R}^C)长度 (C),和为 1,互斥解释类别竞争、多类单选的规范输出。
Sigmoid / Logistic标量或逐分量每个在 (0,1)要求分量之和为 1二分类C 个独立二值(多标签);不是一条 (C)-元单纯形上的点。
Log-Softmax同 Softmax 输入(\log p_k)数值稳定、与 NLL 组合为单 kernel,数学上等价于先 Softmax 再 log(在稳定实现中更好)。
Sparsemax同维向量可为稀疏、部分分量为 0在「概率」与 0 之间可产生真稀疏分配,用于需清晰截断时注意力的场合。
Gumbel-Softmax同 Softmax 但带 Gumbel 噪声 + 温度可微近似离散采样用于可微离散选择、VAE 离散隐变量等。

选型提示

  • 单标签多类(每条样本恰属一类):输出层用 Softmax + 交叉熵。
  • 多标签多个类可同时对):用单 Softmax 表示联合分布;用 BCEWithLogits按类 Sigmoid 等。

五、超参数与常见扩展

标准 Softmax 本身没有「学习率式」的独立超参;logits 由上游网络产生温度标号平滑 等是工程上常用扩展

名称作用说明
温度(Temperature)(T>0)(\mathrm{softmax}(z_k/T)) 再归一化(T>1) 分布更平、更「不确定」;(T<1)、更自信。用于知识蒸馏校准探索 等。
Label smoothing在交叉熵目标上把 one-hot 改为带小概率的软分布不是改 Softmax 公式本身,而是改训练目标;与 Softmax 输出常共同使用。
Focal loss 等对难样本/类别加权损失形式变化,Softmax 仍产生 (p_k)。

注意temperature=0 在定义上等价于不合法的「除以零」;实现上避免将 (T) 取为 0。


六、数值示例:三分类 logits 手算

设最后一层在三个类别上得到 logits(未归一化打分)为:

[ \mathbf{z} = (z_1, z_2, z_3) = (2.0,\; 1.0,\; 0.1) ]

(1)计算 (\mathrm{e}^{z_i})(可保留 3~4 位小数)

类别(z_i)(\mathrm{e}^{z_i})
12.0(\mathrm{e}^{2.0} \approx 7.389)
21.0(\mathrm{e}^{1.0} \approx 2.718)
30.1(\mathrm{e}^{0.1} \approx 1.105)

(2)求和

[ S = 7.389 + 2.718 + 1.105 = 11.212 ]

(3)Softmax 概率 (p_i = \mathrm{e}^{z_i}/S)

类别计算概率 (p_i)(约)
1(7.389/11.212)0.659(约 65.9%)
2(2.718/11.212)0.242(约 24.2%)
3(1.105/11.212)0.099(约 9.9%)

校验:(0.659+0.242+0.099=1.000)。可见 类 1 的 logit 最大,概率也最大;三个 logits 差距不大时,概率不会出现「一类≈1」的极端尖峰

(4)与「减常数(数值稳定)」等价

若先令 (\tilde z_i = z_i - \max z = z_i - 2.0),则 ((\tilde z_1,\tilde z_2,\tilde z_3) = (0, -1, -1.9))。
(\mathrm{e}^0=1),(\mathrm{e}^{-1}\approx 0.368),(\mathrm{e}^{-1.9}\approx 0.150),和 (\approx 1.518);
(p_1=1/1.518\approx 0.659),与上表相同,说明 平移不变 在计算中的用法。

(5)温度 (T=2) 时(作对比,非原题必须)

用 (z_i/T = z_i/2),得 ((1.0, 0.5, 0.05))。指数和约为 (2.718+1.649+1.051=5.418),对应概率更均匀于三类的中间区域——直观上 T>1 软化了类别间的差距


七、代码示例(PyTorch)

1
2
3
4
5
6
7
8
9
10
import torch
import torch.nn.functional as F

# logits: 形状 (batch, C);此处 1 个样本 3 类
logits = torch.tensor([[2.0, 1.0, 0.1]])
probs = F.softmax(logits, dim=1)  # 在类别维上归一化
# tensor([[0.6590, 0.2424, 0.0993]])  # 与第六节手算在浮点下一致

# 实际训练更常用 log 概率 + NLL 或一次交叉熵(内部稳定)
# loss = F.cross_entropy(logits, target)  # target 为类索引 0..C-1

scikit-learn softmax 层封装时,逻辑回归多类在内部使用 logistic multinomial;与深度网络对接时,以框架(PyTorch / TensorFlow / JAX)文档为准


八、优点、缺点与使用注意

8.1 优点

  • 概率解释清晰,与最大似然/交叉熵一致,利于分类任务沟通与度量和校准(配合 ECE、温度标定 等)。
  • 处处可微(在实数域内),端到端反传自然。
  • one-hot 标签、KL、蒸馏 等标准流程兼容好。

8.2 缺点与注意

  • 大 logits 差 时,概率极尖,梯度在错误类上可能很小(饱和感与优化动态相关,可用更好的初始化、残差、LayerNorm、标签平滑、温度 等缓解)。
  • 互斥假设不符合多标签时误用,会导致理论目标与问题不匹配
  • 类不均衡 时单用 Softmax+CE 可能偏向多数类;可配合 重采样、loss 加权、Focal、LDAM 等,而非改动 Softmax 形式本身(视任务定)。

8.3 与聚类/预处理的说明

  • Z-score 等作用于特征尺度Softmax 作用于分类头 logits注意力权重的归一化,二者在流水线中的位置与目的均不同。
  • 聚类中若用 Softmax 式相似度(如 Gumbel/锐化),多属可微聚类/分配的特例,与 Z-score 同一层面的预处理问题。

九、大模型(LLM)中的 Softmax 与采样温度

大语言模型与视觉-语言大模型中,Softmax 的数学形式与第五节相同,但出现位置温度在推理中的用法值得单独说清,以免与分类头、蒸馏等语境混淆。

9.1 Softmax 在 LLM 中主要出现在哪里

位置维数/对象作用简述
下一词(token)分布词表大小 (V) 的 logits,经 Softmax 得 (P(t_{i+1}\mid t_{\le i}))自回归每步都是一次超大维多类 Softmax;贪心即对该分布取 arg max
自注意力key 维(或头内键位置维)Softmax将「与 query 的(缩放)点积分」归一为权重,在值向量上做凸组合。
专家路由、对比学习等因实现而异常见仍是 (\exp)归一竞争结构,有的带路由温度Top-k/Top-1 路由

要点分类网络的 Softmax 在「选一类」;生成式 LLM 的 next-token Softmax 在「在词表上选下一个离散单元(或再配合采样再选)注意力的 Softmax 在「在序列位置上分配权重——公式同类,语义不同。**

9.2 推理采样与温度:如何改变「下一词」分布

非贪心的随机解码中,常对 logits 先除以正数 (T)采样温度),再作 Softmax,再按该分布抽取下一 token:

[ P(w) \;=\; \frac{\exp(\ell_w / T)}{\sum_{w’\in\mathcal{V}}\exp(\ell_{w’}/T)} ]

其中 (\ell_w) 为词元 (w) 的 logit。这与第五节 (\mathrm{softmax}(z_k/T)) 的写法一致;在 LLM 语境下,温度调节的是「生成时」的探索性(实现上通常只改进入 Softmax 前的 logits 缩放)。

温度 (T)Softmax 概率 的影响文本的常见主观效果(不绝对)
很小((\to 0^+))**分布极度尖锐几乎 one-hot 在最大 logit 上接近贪心解码重复、套话风险有时更高。
(T=1)与「未再缩放的 logits 上的 Softmax」一致作为基线与不同 (T)、Top-p 组合对照。
(T>1)拉平相对差距,增大,长尾 token 更易被采到更随机、更多样;亦可能更不连贯,需任务与评测定夺。
(0<T<1)放大 logit 差距,分布更尖更聚焦头部词,更保守、确定性感增强。

与 Top-p / Top-k 的关系(简要)

  • 温度是对全词表上分布形状的整体调节;
  • Top-k 只保留概率最高的 k 个再归一化;Top-p(核采样) 自高概率起累加至累计概率 ≥ p 的集合内再采;二者多用来避免极低概率的劣质长尾,与温度常联用实现顺序以各引擎说明为准,如 Hugging Face GenerationConfig 中的 temperaturetop_ptop_k)。

9.3 与「知识蒸馏里温度」的区分

  • 蒸馏:训练阶段让学生网络的 logits 也除以 (T) 再 Softmax,与教师对齐软分布目的是迁移暗知识(见第五节及蒸馏论文)。
  • 推理采样温度:在已训练好的模型上,为控制随机性而设;不必然与蒸馏的 (T) 取同一数值含义。
  • 共同点:都使用 (\exp(\cdot/T)) + 归一 这一结构;勿混用「训练 T」与「部署时的 sampling temperature」的调参表

9.4 实践提示

  • 各框架默认值不同改温度前先读当下使用的 Ollama / vLLM / llama.cpp / 云 API 说明。
  • 束搜索、投机解码 等路径对「温度」的参与方式纯采样可能不同,以官方文档为准。
  • 注意力在实现里对 logits 有 (\sqrt{d_k})缩放,那是点积注意力的标度;与词表级采样的温度作用于不同张量,勿混为一谈。

十、小结

维度要点
本质对 logits 指数化再归一化,得到单纯形上的概率分布。
来源统计力学、多项 logit 同构;soft 相对 argmax 的“硬”选择
场景多类单标签、策略离散动作、注意权重 等。
大模型逐 token 的 (V) 类 Softmax、注意力 的键维 Softmax;采样温度在推理时调节 (\exp(\ell/T)) 分布的尖锐/平坦程度。
超参标准式无;温度标签平滑 为常见训练/采样侧扩展。
对比Sigmoid/多 Sigmoid 服务二值/多标签log-softmax 服务稳定与 NLLSparsemax 等 服务稀疏竞争

十一、参考与官方文档类链接

  1. PyTorch — torch.nn.functional.softmax
  2. PyTorch — torch.nn.CrossEntropyLoss(含 log-softmax + NLL 的常见用法)
  3. TensorFlow — tf.nn.softmax
  4. Wikipedia — Softmax function
  5. Stanford CS231n — Softmax 分类器Softmax 损失与数值计算提示)
  6. Goodfellow, Bengio, Courville — Deep Learning第 6 章 深度前馈网络 / Softmax 输出(以中译本或官网章节为准)
  7. scikit-learn — LogisticRegression(multinomial)线性多类 logit 与深度网络中 Softmax 在数学上同属一类,实现接口不同)
  8. Hugging Face Transformers — GenerationConfigtemperature / top_p / top_k推理采样参数说明,版本以当前文档为准)
  9. Attention Is All You NeedScaled Dot-Product AttentionSoftmax 的用法)
  10. Hinton 等,Distilling the Knowledge in a Neural Network蒸馏中的温度与 Softmax;与生成采样温度目的不同,可对照§9.3
本文由作者按照 CC BY 4.0 进行授权