You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何PyTorch的softmax计算单个权重分数与手动方式不同?

PyTorch Softmax计算结果疑问解答

问题内容

我创建了一个简单张量:

test_tensor = torch.tensor([[.1, .2, .3], [.4, .5, .6]])

当我使用softmax函数并设置dim=-1时:

weights = torch.softmax(test_tensor, dim=-1)

得到结果:

tensor([[0.3006, 0.3322, 0.3672],
        [0.3006, 0.3322, 0.3672]])

我原本以为手动计算第一个权重时,应该是0.1/(0.1+0.2+0.3)=0.166666,但PyTorch给出的是0.3006,请问我哪里操作错了?

原因说明

你搞混了Softmax和普通归一化的计算逻辑:

  • 你手动用的是普通归一化公式:x_i / sum(x),这并不是Softmax的计算方式。
  • PyTorch的torch.softmax采用标准Softmax公式:Softmax(x_i) = e^x_i / sum(e^x_j),其中j遍历指定维度的所有元素。

以第一行第一个元素0.1为例,正确计算步骤:

  1. 计算每个元素的指数值:e^0.1≈1.1052,e^0.2≈1.2214,e^0.3≈1.3499
  2. 对指数值求和:1.1052 + 1.2214 + 1.3499 ≈ 3.6765
  3. 计算Softmax结果:1.1052 / 3.6765 ≈ 0.3006,和PyTorch的输出完全匹配。

另外你会发现两行结果完全相同,这是因为Softmax具有平移不变性:给同一维度的所有元素加上相同数值,最终结果不变。第二行每个元素比第一行多0.3,计算时e^(x+0.3) = e^x * e^0.3,分子分母的e^0.3会相互抵消,所以两行的Softmax结果一致。

内容的提问来源于stack exchange,提问作者sunny

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.12 22:42:10