Softmax 是机器学习中一个非常重要且常用的函数,它的核心任务是将一个包含任意实数的向量转换为一个概率分布,使得每个元素的值都在 (0,1) 范围内,并且所有元素的和为 1。
为了让你快速抓住核心,我先用一个表格来总结它的关键特性:
| 特性维度 | Softmax 的核心要点 |
|---|---|
| 函数类型 | 归一化指数函数 |
| 输入 | 任意实数向量(也称为 Logits) |
| 输出 | 概率分布向量(所有元素∈(0,1)且和为1) |
| 核心功能 | 将原始分数转化为概率,突出较大值 |
| 主要应用 | 多分类模型的输出层,注意力机制 |
| 数值稳定性 | 通过减去最大值(z - max(z))技巧保证 |
🧠 数学原理与计算过程
Softmax 的数学公式非常直观。对于一个包含 K 个类别的输入向量 ( z = [z_1, z_2, …, z_K] ),第 i 个类别的 Softmax 值计算公式如下:

这个计算过程可以理解为两步:
- 指数化:对每个原始分数 ( z_i ) 进行指数运算 ( e^{z_i} )。这是因为指数函数永远为正,确保了输出概率的非负性;同时它能放大数值间的差异,使得较大的输入值在输出概率中占据更大优势。
- 归一化:将每个指数化后的结果除以所有指数的总和。这一步保证了所有输出概率之和为 1,满足概率分布的定义。
举例来说,假设模型对三个类别的原始输出分数为 [1.0, 2.0, 0.1]:
- 计算指数:
e^1.0 ≈ 2.72,e^2.0 ≈ 7.39,e^0.1 ≈ 1.11 - 计算指数和:
2.72 + 7.39 + 1.11 ≈ 11.22 - 归一化得到概率:
- 类别1:
2.72 / 11.22 ≈ 0.24 - 类别2:
7.39 / 11.22 ≈ 0.66 - 类别3:
1.11 / 11.22 ≈ 0.10
可以看到,得分最高的类别2获得了最大的概率(0.66)。
- 类别1:
⚙️ 实际应用与注意事项
在实践中,应用 Softmax 时有几个关键点:
-
与交叉熵损失搭档:在训练分类模型时,Softmax 通常与交叉熵损失函数结合使用。交叉熵衡量的是模型预测的概率分布与真实的概率分布(通常是 one-hot 编码的标签)之间的差异。通过最小化交叉熵损失,模型被驱动去调整参数,使得预测概率分布更接近真实分布。在 PyTorch 等框架中,通常使用
CrossEntropyLoss,它内部已经包含了 Softmax 计算,因此无需在网络最后一层显式添加 Softmax。 -
确保数值稳定:直接计算指数 ( e^{z_i} ) 在 ( z_i ) 很大时可能导致数值溢出。因此,实际的实现会使用一个数值稳定的技巧:在指数计算前,将每个 ( z_i ) 减去向量中的最大值 ( \text{max}(z) )。

这个操作不会改变最终的计算结果,但能有效防止数值溢出问题。
Softmax在神经网络和Transformer中的应用场景
Softmax 函数在神经网络,尤其是在像 Transformer 这样的现代架构中,扮演着至关重要的角色。它核心的将任意实数向量转换为概率分布的能力,为许多任务提供了直观的概率解释和决策基础。
下面这个表格汇总了它的主要应用场景和核心作用,帮你快速建立整体印象:
| 应用领域 | 具体场景 | Softmax 的核心作用 | 输出形式与意义 |
|---|---|---|---|
| 神经网络 | 多分类问题的输出层 | 将模型的原始输出 (logits) 转换为每个类别的预测概率 | 一个概率分布,所有类别概率之和为 1,概率最高的类别即为预测结果 |
| Transformer | 自注意力机制 (Self-Attention) | 将查询和键计算出的注意力分数转换为注意力权重 | 一个概率分布,表示在生成当前输出时,模型应关注输入序列中各个位置的程度 |
| Transformer | 解码器输出层 (Next Token Prediction) | 将解码器最终的隐藏状态表示转换为词表中每个词是下一个词的概率 | 一个概率分布,所有候选词概率之和为 1,基于此分布可采样或选择下一个词 |
🧠 神经网络:多分类任务的输出层
在传统的神经网络处理图像分类、文本情感分析等多分类问题时,网络的最后一层通常会输出一个被称为 logits 的原始分数向量。这些值可能很大、很小、有正有负,难以直接理解为概率。
Softmax 函数的作用于此体现:
- 功能:将这些 logits 转换成一个清晰的、所有元素之和为 1 的概率分布。
- 过程:通过指数函数放大不同分数之间的差异(使得高分值获得的概率显著更高),然后进行归一化确保所有输出值在 [0,1] 范围内且和为 1。
- 结果:转换后的每个值都代表了样本属于对应类别的概率。在预测时,我们选择概率最高的类别作为模型的最终输出。
并且,在训练阶段,这个 Softmax 输出概率会与真实标签(通常是 one-hot 编码)一起送入交叉熵损失函数,来计算模型的预测误差,从而指导模型参数的更新。
⚡️ Transformer:自注意力机制的核心
Transformer 模型极大地依赖 Softmax 函数来实现其核心的自注意力机制。
- 计算注意力分数:首先,模型会计算查询向量 (Query) 和键向量 (Key) 之间的点积或相似度,得到一个初始的“注意力分数”矩阵。这个分数矩阵需要被转换成合理的权重。
- 转换为注意力权重:Softmax 函数沿着分数矩阵的每一行(通常是对应于一个特定的 Query 向量)进行计算,将该行所有的原始分数转换为一个概率分布。这使得模型可以动态地决定在生成当前位置的输出时,应该“注意”或“聚焦”于输入序列中的哪些部分。
- 加权求和:得到的这个概率分布(注意力权重)随后用于对值向量 (Value) 进行加权求和,最终产生注意力机制的输出。权重越高,对应的 Value 信息在最终输出中占的比重就越大。
📝 Transformer:解码器输出与下一步词预测
在 Transformer 的解码器(例如用于机器翻译或文本生成的模型)末端,Softmax 再次发挥着关键作用:
- 线性变换:解码器最终的隐藏状态会通过一个线性层,投影到一个维度与词表大小相同的向量上。这个向量中的每个值对应词表中一个词的原始分数(logits)。
- 应用 Softmax:Softmax 函数将这些 logits 转换为一个概率分布,词表中每个词作为“下一个词”出现的概率。
- 生成策略:模型可以基于这个概率分布,通过贪婪搜索(总是选择概率最高的词)、束搜索(Beam Search)或随机采样(根据概率随机选择,增加多样性)等策略来生成下一个词。
💡 数值稳定与温度调节
在实际实现中,直接计算指数 ezie^{z_i}ezi 可能会因为数值过大而导致计算不稳定(溢出)。因此,一个常见的技巧是在计算 Softmax 之前,先将向量中的每个元素减去该向量的最大值:

这样做不会改变计算结果,但能显著提升数值稳定性。
此外,Softmax 函数还可以引入一个温度参数 (Temperature, T) 来控制输出分布的“尖锐”或“平滑”程度:

- 降低温度 (T < 1):会使输出分布更加“尖锐”,模型对其预测更加“自信”,概率更集中在最大值上。
- 提高温度 (T > 1):会使输出分布更加“平滑”,模型给出的概率分布更均匀,增加生成结果的多样性。
Softmax 函数中的温度参数 ( T ) 完全可以大于 1。实际上,通过调节 ( T ) 大于 1 或小于 1,是控制模型输出行为的关键手段。为了让你快速把握其影响,请看下表:
| 温度 ( T ) 取值 | 对概率分布的影响 | 模型输出行为特点 | 典型应用场景 |
|---|---|---|---|
| ( T > 1 ) (高温) | 分布更平缓/均匀 | 创造性、多样性增强,更具探索性 | 创意写作、开放式对话、模型蒸馏中的教师模型 |
| ( T = 1 ) | 标准 Softmax 分布 | 保持模型原始输出的概率关系 | 通用设置,作为调整的基准 |
| ( T < 1 ) (低温) | 分布更尖锐/集中 | 确定性、一致性增强,更倾向于最高概率项 | 代码生成、事实性问答、逻辑推理 |
🔢 数学原理与示例
温度参数 ( T ) 的引入方式是在 Softmax 函数的指数运算中,将原始的 logits 向量 ( z ) 的每个元素除以 ( T ):

当 ( T > 1 ) 时,由于除数变大,所有 ( z_i / T ) 的值会相对变小且彼此靠近。指数函数 ( e^x ) 在 ( x ) 值较小时的变化相对不敏感,这使得经过指数化和归一化后,各个类别的概率差异会减小,分布变得更加平缓。
举个例子,假设模型对三个候选词的原始 logits 为 [2.0, 1.0, 0.1]。
- 当 ( T = 1 ) 时,计算出的概率可能大约是
[0.65, 0.24, 0.11]。 - 当 ( T = 2 ) (( T > 1 )) 时,概率会变得更均匀,可能类似于
[0.44, 0.33, 0.23]。原本概率较低的词(如第三个词)其概率显著提升,模型选择它的可能性也随之增大。
💡 主要应用场景
-
增加生成多样性(如创意写作或开放式对话)
在使用大语言模型进行文本生成时,将 ( T ) 设置为大于 1(例如 0.7 到 1.2 之间)可以鼓励模型选择一些非最高概率的词汇,从而产生更富创意、更出人意料且不那么呆板的文本内容。这就像提高了模型的“兴奋度”,使其思维更加发散。 -
知识蒸馏(Knowledge Distillation)
这是 ( T > 1 ) 的一个非常重要的应用。在知识蒸馏中,一个庞大的“教师模型”产生的软标签(即经过高温 Softmax 处理后的概率分布)被用来指导一个较小的“学生模型”进行训练。高温 (( T > 1 )) 产生的更平滑的概率分布包含了丰富的“暗知识”,比如类别之间的相似性关系(例如,一张猫的图片可能比一张汽车的图片更接近于一张狗的图片),学生模型通过学习这些信息,往往能获得比直接学习原始硬标签更好的泛化能力。
⚠️ 注意事项
虽然提高温度有用,但也需注意:
- 过高温度的风险:如果 ( T ) 设置得过高(例如远大于 2),可能会导致概率分布过于均匀,使得模型的输出看起来几乎是随机的,甚至产生无意义的胡言乱语,损害输出的连贯性和质量。
- 与 ( T < 1 ) 的对比:反之,当 ( T < 1 ) 时,概率分布会变得更加尖锐,模型会变得极其“自信”,几乎总是选择概率最高的选项。这适用于需要高准确性和确定性的任务,如代码生成或事实性问答,但代价是会牺牲输出的多样性。
这个T跟大模型参数中的T是什么区别
你这个问题问得非常到位,这确实是初学者容易混淆的一个地方。简单来说,这两个 T 指的是同一个参数,它们都是 Softmax 函数中的温度参数(Temperature)。之所以会在不同语境下听到它,是因为它扮演的角色略有侧重,但核心的数学原理和作用机制是完全相同的。
为了让你一目了然,我用一个表格来总结它们的“同一性”和微妙的“差异性”。
| 对比维度 | Softmax 中的 T (作为数学函数参数) | 大模型参数中的 T (作为推理超参数) |
|---|---|---|
| 根本身份 | 同一个温度参数,是 Softmax 公式的一部分 | 同一个温度参数,是 LLM 生成文本的一个可调设置 |
| 核心作用 | 调节输出概率分布的平滑度(熵): · ( T > 1 ):平滑分布,降低高分值的相对优势,增加随机性。 · ( T < 1 ):尖锐分布,放大高分值的优势,增加确定性。 | 控制生成文本的“性格”: · 高 T → 更多样、有创意、不可预测(如创意写作)。 · 低 T → 更专注、一致、可靠(如事实问答、代码生成)。 |
| 应用场景 | 任何使用 Softmax 进行概率归一化的场景,如分类模型、注意力机制等。 | 特指大语言模型(LLM)或生成式模型在推理(生成)阶段,用于控制解码策略。 |
| 你的视角 | 从数学模型的视角看它。 | 从应用工程的视角看它。 |
💡 实际应用中的选择与组合
在实际使用大模型(如通过 API 或聊天界面)时,你通常可以直接调节这个 ( T ) 值:
-
如何选择 T 值:
- 创意写作、写诗歌、头脑风暴:可以尝试较高的温度,如 ( T = 1.2 ) 或更高,让模型给出更出人意料的答案。
- 技术问答、代码生成、总结摘要:建议使用较低的溫度,如 ( T = 0.2 ) 到 ( T = 0.7 ),确保输出的准确性和可靠性。
- 通用对话:可以从默认值 ( T = 1.0 ) 开始尝试。
-
与其他参数配合:温度(T)经常与 Top-p(核采样)和 Top-k 等采样策略共同使用,从而对生成过程进行更精细的控制。例如,你可以同时设置
temperature=0.8和top_p=0.9,在保持一定创造性的同时,避免从概率极低的“长尾”词中采样,保证文本质量。
💎 总结
所以,请记住这个核心结论:Softmax 函数中的温度 T 和你在调整大模型行为时设置的温度 T,是同一个参数在不同上下文中的体现。它就像一个控制生成文本“性格”的旋钮,理解其原理能帮助你更有效地使用大模型。
所以大模型的T也能设置超过1 ?
是的,大模型的 Temperature 参数完全可以设置为超过 1 的数值。这个参数就像一个控制模型“想象力”的旋钮,数值越高,生成内容的随机性和多样性通常也越高。
为了让你快速了解不同温度设置的效果,我整理了一个表格:
| 温度 (T) 范围 | 模型行为特点 | 典型适用场景 |
|---|---|---|
| 低温度 (T < 0.5) | 输出保守、确定,倾向于选择概率最高的词。回答一致性强,但可能显得呆板、重复。 | 事实问答、代码生成、技术翻译、逻辑推理 |
| 中温度 (0.5 ≤ T ≤ 0.9) | 在创造性与可靠性间取得平衡,输出既有变化又保持连贯。 | 日常对话、内容总结、邮件撰写、创意推荐 |
| 高温度 (T > 1.0,如1.0-1.5) | 输出高度随机、多样化,会考虑更多低概率词,创造力强。 | 诗歌创作、故事生成、头脑风暴、实验性艺术创作 |
| 极高温度 (T >> 1.0,如>1.6) | 随机性极强,输出极易不连贯、不合逻辑,甚至胡言乱语。 | 主要用于研究模型行为极限,实际应用慎用 |
🔥 当 T > 1 时会发生什么
当温度参数超过 1 时,模型预测下一个词的概率分布会被“熨平”。这意味着,那些在原始分布中概率较低的词(平时不太会被选中的词)被选中的机会大大增加了。
- 效果:这会让模型的输出变得非常出人意料和多样化。对于同一个问题,每次都可能得到截然不同的回答,非常天马行空。
- 风险:但这种高随机性是一把双刃剑。温度设置过高(例如超过 1.6),模型为了追求新颖性可能会牺牲逻辑和事实准确性,生成的内容可能变得前言不搭后语、缺乏连贯性,甚至包含事实错误。有研究表明,当温度超过 1.0 时,模型在解决问题任务上的准确率可能会开始下降。
💡 如何合理调整温度参数
选择什么样的温度值,完全取决于你的具体目标。
- 追求准确与可靠时:如果任务是解答技术问题、生成代码或进行翻译,建议使用较低的温度(如 0.1 - 0.3),以确保输出的准确性和一致性。
- 需要创意与多样性时:如果任务是写故事、想广告标语或进行头脑风暴,可以尝试较高的温度(如 0.7 - 1.0 甚至略高于 1),以激发模型的创造力。
- 实用建议:
- 从小范围开始:如果不确定,可以从默认值或中间值(如 0.7)开始尝试,然后根据输出效果微调。
- 进行对比实验:针对你的任务,分别设置 T=0.3, T=0.7, T=1.0 等不同参数,直观对比生成结果的差异,从而找到最适合的“火候”。
1813

被折叠的 条评论
为什么被折叠?



