跳到正文

模型是如何算出 Token 概率的?

用简单公式、候选分数与 Softmax 类比模型如何得到 Token 的概率分布。

上一讲,我们细讲了下,模型是如何从一组概率分布里,选择一个 token 的。这一讲,我想讲一下模型是如何产生概率分布的。

一、用一个公式理解输入与参数

先从一个最简单的公式讲起。

y=ax+by = ax + b

x 是输入,y 是输出,a、b 就是参数。参数取什么值,决定这个公式怎样处理输入。

二、把输入代入公式,算出候选分数

拿第三章「今天雨天,出门记得带...」这个例子解释一下。不过我想换个角度来给大家解释。同时也先抛弃什么复杂的概率学。我们就用最朴实的乘法和加法来看看。

我们假设输出的是「伞」,但输入略有不同。分别输入「今天晴天,出门记得带...」以及 「今天雨天,出门记得带...」。

两次输入不同的地方是「晴天」和「雨天」,那我们就可以将其稍微简化一下,假设下雨为 1,晴天为 0。换句话说 x(下雨)= 1,x(晴天)= 0。同时经过模型训练我们知道参数 a = 2,b = 1。

套入前面的公式,得出伞的分数就是:

情况输入计算“伞”的分数
下雨x = 12 × 1 + 13 分
晴天x = 02 × 0 + 11 分

你可以将分数简单类比为概率。换句话来说,当输入是「下雨」时,「伞」作为「出门记得带」后接龙的可能性更高。

那既然有「伞」的分数公式 y(伞) = a(伞)x + b(伞),自然也会有其他 token 的计算公式,比如雨衣或帽子的计算公式,只是 a 和 b 会不一样。

候选ab代入公式算出的分数
伞212 × 1 + 13
雨衣111 × 1 + 12
帽子-23-2 × 1 + 31

三、把分数转换成概率

这样我们就得到了一个输入,多次运算,得出三个数字,最后通过 Softmax 的数学换算(不用细究,知道就好),把它们转换成加起来等于 100% 的概率。它会让分数较高的候选获得较高的概率。

候选公式算出的分数换算后的概率
伞3约 66.5%
雨衣2约 24.5%
帽子1约 9.0%

四、从简单类比到真实模型

当然实际的运算复杂得多,我只是想通过最简单的数学运算来解释模型是如何得出一组 token 的概率的。

那实际 LLM 预测下一个 token 的过程,可以理解为:

  1. 输入内容
    今天下雨,出门记得带…
  2. 大量相互连接的计算
  3. 得到很多分数
    1. 分数 1
      伞
    2. 分数 2
      雨衣
    3. 分数 3
      帽子
    4. …
      …
  4. 按采样策略选择一个 Token ID
    伞

五、搞懂这个概念有什么用?

第一,输入会影响模型算出的概率。

前面的例子里,同样一组参数,输入从「晴天」变成「雨天」,「伞」的分数就变了。实际使用时,你补充的背景、要求和示例,也会参与模型的计算,影响后续 Token 的概率。

正如我在 大语言模型如何生成回答的?中所说,你想要获得好的结果,就要给模型提供足够的信息,以及正确的信息。即使模型发展到现在,把目标、背景和要求写清楚仍会对结果有明显影响。

第二,Token 的概率不等于答案的正确率。

前面「伞」的概率是 66.5%,表示在这个简化例子里,它被选为下一个 Token 的概率。它不表示「带伞这个建议有 66.5% 的概率是正确的」,也不表示模型对整段回答有这么高的把握。

所以,一段话即使读起来流畅、语气很肯定,也可能包含错误。需要确认事实时,仍要核对来源;只让模型把话说得更肯定,并不能提高事实的可靠性。

六、成就挑战