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})
1 2.0 (\mathrm{e}^{2.0} \approx 7.389)
2 1.0 (\mathrm{e}^{1.0} \approx 2.718)
3 0.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)

python 复制代码
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**)
相关推荐
学弟11 小时前
【快捷】通过指定CPU的分配解决A100服务器上多训练任务核心争抢导致的训练速度慢的问题
人工智能·深度学习·机器学习
PNP Robotics1 天前
领军军者|PNP机器人包文涛:以具身智能定义机器人的“生命直觉”
人工智能·深度学习·学习·机器学习·机器人
lkforce1 天前
MiniMind学习笔记(三)--train_pretrain.py(预训练)
笔记·机器学习·ai·预训练·minimind·train_pretrain
lwf0061641 天前
DeepFM 学习日记
深度学习·机器学习
数据智能老司机1 天前
学习 AutoML——理解 AutoML 流水线
机器学习
我是大聪明.1 天前
大模型Tokenizer原理:深入理解BPE与WordPiece子词编码技术
人工智能·深度学习·机器学习
人工智能培训1 天前
工程科研中的AI应用:结构力学分析技巧
人工智能·深度学习·机器学习·docker·容器
Mr数据杨1 天前
飞船乘客状态预测与金融风控建模启发
大数据·机器学习·数据分析·kaggle
wayz111 天前
Day 18:Keras深度学习框架入门
人工智能·深度学习·神经网络·算法·机器学习·keras