笃行
首页
个人 & 心法
互联网/硬件后台
游戏基础架构
UE 引擎
游戏业务
AI / 大模型
数据结构与算法
机器学习数学
通用基础
GitHub
首页
个人 & 心法
互联网/硬件后台
游戏基础架构
UE 引擎
游戏业务
AI / 大模型
数据结构与算法
机器学习数学
通用基础
GitHub
  • 向量入门

    • 看得见的机器学习数学
    • 向量是什么
    • 向量的加减与数乘
    • 线性组合与张成
  • 矩阵与变换

    • 矩阵是一次变换
    • 矩阵乘法
  • 度量与求解

    • 行列式与面积
    • 解方程组就是倒着走回去
    • 特征向量的直觉
    • 点积与相似度
  • 高维与结构

    • 高维空间的直觉
    • 正交基与投影
    • 秩与低秩
    • 长度与归一化
    • 线性与非线性
  • 概率与信息

    • 概率分布与采样
    • 期望与方差
    • 指数与 softmax
    • 对数与信息量
    • 交叉熵
  • 学习与优化

    • 导数就是坡度
    • 梯度下降
    • 链式法则与反向传播

得分 1、2、3 分怎么分蛋糕:先拉开差距,再摊成一整块

三个人拿了 1 分、2 分、3 分,要分一个蛋糕。按 1 : 2 : 3 分吗?还是让高分的多拿一大截?你选哪种切法,决定了这场比赛是"重在参与"还是"赢者通吃"。

🧠 一句话结论

softmax 干两件事:先用指数把分数的差距放大(每多 1 分就翻若干倍),再除以总和摊成一整块蛋糕。temperature 是插在最前面的旋钮——分数先除以它再进指数,T 调大差距被抹平(蛋糕分得均匀),T 调小差距被拉爆(一段独占)。


场景问题

班里搞投票,三个候选人拿到 1 票、2 票、3 票。奖品是一个蛋糕,按票数分。

同学甲说:"简单,1 : 2 : 3 呗——一个人拿六分之一,一个拿六分之二,一个拿六分之三。"

听着挺合理。但有两件事马上不对劲了。

第一件事:如果打分不是"票数",而是评委给的分,可以是负的呢?比如三个人是 -2 分、0 分、3 分。按比例分,那个 -2 分的人要倒贴一块蛋糕?这不成话。

第二件事:3 分和 2 分只差一票,按比例分只差六分之一块蛋糕——差距太小了,赢和输几乎没区别。可有时候我们希望"赢就要赢得明显"。

于是问题变成:有没有一种切法,既能处理负分,又能让我自己决定"赢者通吃"还是"重在参与"?

有,而且就两步。

实现方案

第一步:用指数把差距拉开

先解决负分和"差距太小"这两件事,一招就够——先让每个分数过一遍"指数"。

指数是什么?就一句话:每多 1 分,就翻固定的若干倍。

比如约定"每多 1 分翻 2.7 倍"(这个 2.7 是数学里最顺手的那个倍数,写作 e):

原始分过一遍指数之后
-20.14
01
12.7
27.4
320

看这张表,两件事一下子都解决了:

  • 负分变成了正的小数(-2 分 → 0.14),再也不用倒贴蛋糕了。指数出来的数永远是正的,多小也不会变成负的
  • 差距被放大了:原来 2 分和 3 分只差 1,过完指数变成 7.4 和 20,差了将近 3 倍
原始分:1、2、3 —— 一级一级均匀往上过完指数:2.7、7.4、20 —— 最高那根被拉开了差距均匀差距被放大

上下对比看得很清楚:原始分是均匀往上一级一级,过完指数之后最高那根被拉得远远高出其余两根。

这就是指数在这里的全部作用:把负数变正数,顺便把差距放大。

第二步:除以总和,摊成一整块

现在手上是 2.7、7.4、20 这三个正数。它们加起来是 30.1,不是 1——还不是一块完整的蛋糕。

第十五篇讲过:一块蛋糕的所有段加起来必须正好是一整块。所以最后一步很朴素:每个数除以它们的总和。

  • 2.7 ÷ 30.1 ≈ 0.09
  • 7.4 ÷ 30.1 ≈ 0.25
  • 20 ÷ 30.1 ≈ 0.66

加起来正好是 1,一块完整的蛋糕切好了。

这两步合起来,就叫 softmax。 名字听着唬人,做的事就两件:

softmax=每个分数过一遍指数所有分数过完指数之后的总和\text{softmax} = \frac{\text{每个分数过一遍指数}}{\text{所有分数过完指数之后的总和}} softmax=所有分数过完指数之后的总和每个分数过一遍指数​

这行的意思是:先让每个分数过一遍指数(变正、拉开差距),再除以它们的总和(摊成一整块蛋糕)。

对比一下同学甲那种"直接按比例分":

直接按比例(1 : 2 : 3)softmax
三段各占0.17 / 0.33 / 0.500.09 / 0.25 / 0.66
负分怎么办没法办,要倒贴变成很小的正数,没问题
赢的那个只占一半占了三分之二

同样的原始分,softmax 让第一名明显更突出——因为差距在进蛋糕之前就已经被指数放大过了。

那个旋钮:temperature

现在还剩最后一件事:"赢者通吃"还是"重在参与",我能不能自己说了算?

能,而且只要在最前面插一个动作:所有分数先除以一个数 T,再进指数。

这个 T 就叫 temperature(温度)。它是个旋钮,转一转,蛋糕的形状就变:

同一组分数,转动 temperature 旋钮T 很小 → 第一名几乎独占(很确定)T 很大 → 三段接近均分(很随机)

盯住这个动画:同一组分数没变,只是转了转 T:

  • T 调小(比如 0.2):分数先被放大(除以 0.2 等于乘以 5),差距变得极大,指数一放大更是天差地别。结果是第一名几乎独占整块蛋糕——模型变得很"斩钉截铁",几乎每次都吐出同一个答案
  • T 调大(比如 2):分数先被压扁(除以 2),差距被抹平,指数放大的也就没那么夸张。结果是几段接近均分——模型变得"很随和",什么都有可能吐出来
  • T = 1:不除不乘,就是原始的 softmax

所以 temperature 调的不是随机数,而是蛋糕的形状。形状定了,落点还是要靠上一篇的采样去摸——T 决定蛋糕怎么切,采样决定这一下落在哪儿。

一个提醒:分数高不代表模型真有把握

softmax 出来的三个数加起来正好是 1,长得跟"机会"一模一样。于是很容易顺口说成:"模型有 66% 的把握选第一个。"

这话得打个折。 softmax 只是把一组分数塑造成了蛋糕的样子——它保证加起来是 1,但没保证这个 0.66 真的对应现实中的六成六。

一个模型完全可能对着一件它根本不懂的事,输出一个 0.99。分数是它自己算的,softmax 只负责把这组分数摊成一整块,并不核实这组分数靠不靠谱。

加起来是 1 是数学上的保证,"真有那么大把握"不是。

为什么这么做

为什么不能直接按比例分,非要先过一遍指数?

两个原因。一是负分没法按比例分——总不能让人倒贴蛋糕;指数把任何数都变成正数,这个问题直接消失。二是按比例分差距太小:1 分和 3 分按比例只差两倍,很多时候我们希望赢得更明显。指数在进蛋糕之前先把差距拉开,正好补上这一点。

为什么最后要除以总和?

因为蛋糕必须是一整块。第十五篇的第二条规则:所有段加起来正好是 1。不除的话,那三个数(2.7、7.4、20)加起来是 30,压根不是一块蛋糕,没法拿去采样。

为什么 temperature 是"先除以 T",而不是在最后调整蛋糕?

因为在指数之前动手,效果会被指数放大,一点点改动就能让形状变化很大——旋钮很灵敏。要是等蛋糕切好了再去调整每段宽度,既麻烦又不好保证加起来还是 1。在源头拧一下,比在末尾修补省事得多。

为什么别的选择不行

错误直觉一:以为 softmax 就是"除以总和"

只除以总和,两件事都办不到:负分会倒贴(-2 除以总和还是负的),差距不会被放大(1 : 2 : 3 除完还是 1 : 2 : 3)。

指数那一步不是可有可无的装饰,它承担了两件正事:把所有数变正,和把差距拉开。去掉它,softmax 就退化成同学甲那个一开始就被否掉的方案。

错误直觉二:以为 temperature 是随机数种子

这两件事完全不同:

temperature随机数种子
管什么蛋糕怎么切(形状)这一下落在哪儿(落点)
调它会让分布变尖或变平让同样的分布下摸出不同结果

把 temperature 当种子的后果是:你以为"调 T 只是换个随机结果",其实你在改变模型有多敢冒险。T 调到很大,它会开始吐出那些本来机会很小的字——这不是"换了个随机结果",是把小机会的选项拉到了台面上。

错误直觉三:以为 softmax 输出的数就是模型真实的把握

softmax 保证的只有一件事:加起来等于 1。它是把一组分数塑造成蛋糕形状的工具,不是一个测谎仪。

模型对着一件它完全不懂的事输出 0.99,softmax 照样忠实地把它摊成 0.99——它没有能力、也没有职责去核实那组分数靠不靠谱。

把"输出 0.99"当成"真有 99% 把握"的后果很具体:你会对着一个自信满满的错误答案深信不疑。数字的形状像概率,不等于它就是可信的概率。

沉淀结论

  1. softmax 就两步:先让每个分数过一遍指数(变正、拉开差距),再除以总和(摊成一整块蛋糕)
  2. 指数那一步不可省:它同时解决了"负分怎么分"和"差距太小"两个问题
  3. 除以总和那一步不可省:蛋糕必须是一整块,加起来正好是 1,才能拿去采样
  4. temperature 是插在最前面的旋钮:分数先除以 T 再进指数。T 小 → 一段独占(斩钉截铁);T 大 → 接近均分(很随和)
  5. softmax 输出加起来是 1,但不代表它真有那么大把握——它只负责塑形,不负责核实

记忆口诀

softmax 就两步:过指数,除总和。
指数管两件事:把负数变正,把差距拉开。
除总和是为了凑成一整块蛋糕。
temperature 是旋钮:小了一段独占,大了接近均分。
加起来是 1 是数学保证,"真有把握"不是。

延伸阅读

  • Attention 打分和输出层都用 softmax:一边是把"每个词该关注多少"摊成一整块,一边是把"下一个字是谁"摊成一整块——同一套两步走。详见大模型核心原理。
  • temperature 是生成时最常动的旋钮:它决定蛋糕的形状,采样决定这一下落在哪儿。两者配合才是"模型有多敢冒险"的完整答案。详见大模型核心原理。

自测:合上资料能说清楚吗?

  1. softmax 的两步分别是什么?各解决什么问题?
参考答案

第一步:过一遍指数——把负分变成正的小数(不用倒贴蛋糕),顺便把差距放大(赢得更明显)。

第二步:除以总和——把这些正数摊成一整块蛋糕,所有段加起来正好是 1,这样才能拿去采样。

两步缺一不可:少了指数,负分没法处理、差距也拉不开;少了除总和,凑不成一块完整的蛋糕。

  1. 为什么不能直接按 1 : 2 : 3 的比例分蛋糕?
参考答案

两个坏处。 一是负分没法办——评委给了 -2 分,按比例分难道让他倒贴一块蛋糕?二是差距太小——1 分和 3 分只差两倍,赢和输几乎没区别。

指数那一步同时补上了这两个窟窿:任何数过完指数都是正的,而且差距被明显放大了。

  1. temperature 调大调小,分别会发生什么?
参考答案

T 调小(比如 0.2):分数先被放大(除以 0.2 等于乘 5),差距变得极大,结果是第一名几乎独占整块蛋糕——模型很斩钉截铁,几乎每次吐同一个答案。

T 调大(比如 2):分数被压扁,差距被抹平,结果是几段接近均分——模型很随和,什么都可能吐出来。

T = 1 就是原始的 softmax,不除不乘。

  1. temperature 和随机数种子是一回事吗?
参考答案

完全不同。 temperature 管的是蛋糕怎么切(分布的形状),随机数种子管的是这一下落在哪儿(同样的分布下摸出哪个结果)。

把 T 当种子的后果是:你以为只是换了个随机结果,其实你在改变模型有多敢冒险——T 调很大时,那些本来机会极小的字会被拉到台面上来。

  1. softmax 输出 0.99,是不是说明模型真有 99% 的把握?
参考答案

不能这么说。 softmax 保证的只有一件事:加起来等于 1。它是个把一组分数塑造成蛋糕形状的工具,不是测谎仪。

模型对着一件它完全不懂的事输出 0.99,softmax 照样忠实地摊成 0.99——它没有能力也没有职责去核实那组分数靠不靠谱。数字的形状像概率,不等于它就是可信的概率。

最近更新: 2026/9/10 11:38
Prev
期望与方差
Next
对数与信息量