大模型面试题25:Softmax函数把“得分”变成“概率”的归一化工具

Softmax函数:把"得分"变成"概率"的归一化工具

Softmax函数(也叫归一化指数函数)是深度学习里核心的归一化函数 ,专门用于把一组任意实数(常称"logits/对数几率/得分")映射成0到1之间、总和为1的概率分布,常作为分类模型的输出层激活函数。


一、数学定义

对输入向量(纯文本写法):

z = z₁, z₂, ..., zₙ

Softmax的计算式为(块级公式,支持LaTeX的编辑器可正常渲染):
Softmax ( z i ) = e z i ∑ j = 1 n e z j ( i = 1 , 2 , ... , n ) \text{Softmax}(z_i) = \frac{e^{z_i}}{\sum_{j=1}^{n} e^{z_j}} \quad (i=1,2,\dots,n) Softmax(zi)=∑j=1nezjezi(i=1,2,...,n)

纯文本兼容版:

Softmax(zᵢ)=e^zᵢ / (e^z₁ + e^z₂ + ... + e^zₙ) (i=1,2,...,n)

  • 分子:对单个得分做指数运算(保证非负)
  • 分母:所有得分指数的总和(做归一化,让结果之和=1)

示例计算

输入向量(纯文本):

z = 1, 2, 3

计算过程(块级公式):
Softmax ( z ) = e 1 , e 2 , e 3 e 1 + e 2 + e 3 = 2.718 , 7.389 , 20.085 2.718 + 7.389 + 20.085 ≈ 0.090 , 0.245 , 0.665 \begin{align} \text{Softmax}(z) &= \frac{e\^1, e\^2, e\^3}{e^1+e^2+e^3} \\ &= \frac{2.718, 7.389, 20.085}{2.718+7.389+20.085} \\ &\approx 0.090, 0.245, 0.665 \end{align} Softmax(z)=e1+e2+e3e1,e2,e3=2.718+7.389+20.0852.718,7.389,20.085≈0.090,0.245,0.665

纯文本兼容版:

Softmax(z) = e¹, e², e³ / (e¹ + e² + e³) ≈ 2.718, 7.389, 20.085 / 30.192 ≈ 0.090, 0.245, 0.665

输出是3个类别上的概率,总和=1。


二、核心作用

  1. 概率转换:把无界的得分(可正可负、可大可小)转成合法概率,方便理解和后续计算(比如交叉熵损失)。
  2. 突出差异:指数运算会放大输入向量中元素的相对差距------大的得分会对应更大的概率,小的得分对应更小的概率。
  3. 多分类适配:适合多分类任务(如10分类图像识别),输出每个类别的预测概率,取最大概率的类别作为预测结果。

三、关键特性 & 注意事项

  • 非负性 + 归一性:输出全在(0,1)区间,总和=1,是严格的概率分布。

  • 温度系数的影响 (和你之前的InfoNCE对应):

    常写成对输入得分先除以温度系数τ(tau)再做Softmax。

    带温度系数的完整公式(块级公式):
    Softmax τ ( z i ) = e z i τ ∑ j = 1 n e z j τ ( i = 1 , 2 , ... , n ) \text{Softmax}\tau(z_i) = \frac{e^{\frac{z_i}{\tau}}}{\sum{j=1}^{n} e^{\frac{z_j}{\tau}}} \quad (i=1,2,\dots,n) Softmaxτ(zi)=∑j=1neτzjeτzi(i=1,2,...,n)

    纯文本兼容版:

    Softmax_τ(zᵢ)=e^(zᵢ/τ) / (e(z₁/τ)+e(z₂/τ) + ... + e^(zₙ/τ)) (i=1,2,...,n)

    • τ > 1:软化分布,概率差异变小(比如InfoNCE训练初期)
    • τ < 1:锐化分布,概率差异变大(比如InfoNCE训练后期)
  • 数值稳定性问题 :当zᵢ很大时,ezᵢ会溢出(比如zᵢ=1000,e1000远超浮点数范围)。

    解决办法:对输入向量减去最大值max(z),即zᵢ' = zᵢ - max(z),再计算Softmax(结果不变)。

  • 不可导的边界情况:输入全相等时,输出均匀分布(如z=2,2,2,输出=1/3,1/3,1/3)。


四、和Sigmoid的区别(小白必看)

特性 Softmax Sigmoid
适用场景 多分类(互斥类别) 二分类 / 多标签分类(类别不互斥)
输出维度 和输入维度一致 和输入维度一致(逐元素转换)
输出总和 总和=1 无强制总和约束

五、极简Python实现(含数值稳定版)

python 复制代码
import numpy as np

def softmax(z, tau=1.0):
    # 数值稳定:减去最大值
    z_scaled=z/tau
    z_stable=z_scaled-np.max(z_scaled, axis=-1, keepdims=True)
    exp_z=np.exp(z_stable)
    return exp_z/np.sum(exp_z, axis=-1, keepdims=True)

# 测试
z=np.array([1, 2, 3])
print(softmax(z))          # 输出 [0.09003057 0.24472847 0.66524096]
print(softmax(z, tau=0.5)) # 锐化:[0.01587624 0.11731043 0.86681333]
print(softmax(z, tau=2.0)) # 软化:[0.21194156 0.26538793 0.52267051]

六、和你之前InfoNCE的关联

在InfoNCE损失中,Softmax的作用是把锚点与候选样本的相似度(得分)转成"候选样本是正例"的概率,再用交叉熵惩罚预测错误,温度系数τ正是用来调节这个概率分布的"尖锐程度"。


相关推荐
guhunyihan1 小时前
零代码快速搭建平台典型应用场景,恐象 AI 落地能力分析
大数据·人工智能
血小溅1 小时前
什么是 A2A?从协议原理到 AgentScope Java 最小实践
人工智能
wshzd1 小时前
LLM之Agent(114)|DeepSeek-Harness(二十一)内置工具全解析
人工智能
木圭的AI时代指南1 小时前
MiniCPM-V 4.7 35B-A3B 本地部署实录:RTX 3070 8GB 显存跑多模态,36 token/s
人工智能·ai·本地部署·openbmb·端侧大模型·minicpm-v 4.7
loulanyue_1 小时前
评估范式不变,自进化注定过拟合:大模型高维能力曲面探测与效用定律破局——读复旦大学曹艺馨机器之心AI Insider访谈
深度学习·机器学习
温迪的AI分享1 小时前
2026实测AI图片翻译工具:3款工具横向效果对比
人工智能
xianghongtao01161 小时前
arxiv_agents_review_2026-10-16
人工智能·深度学习·机器学习
wflynn1 小时前
Google Gemini 4 Argon:用一个模型完成机器人训练全流程
人工智能·ai
熊猫钓鱼>_>1 小时前
开源鸿蒙平台 KMP 三方库 kotlin-csv 适配全流程:从编码假设到沙箱真机互通验证
开发语言·人工智能·华为·kotlin·harmonyos·鸿蒙
金融小师妹1 小时前
多因子时间序列分析:美元与美债收益率变化对黄金价格+1.6%的影响
c语言·人工智能·git·决策树·pyqt