历史,它就是一个时间序,曾经辉煌伟大的地方,现在它一定很凋零,现在的辉煌,未来也终将会暗淡无光,但历史也是一台钟表,在平稳的滴答声中循环反复,土地荒芜了,待以时日,休养生息,它总会再次成为良田美池,林花茂密。

每天通勤路上读历史,以前在遇到疑惑只能百度,还要自己组织语言,却也不一定能搜到想要的,有了 chatgpt,deepseek 后,直接问就行了,我最近一年一直在依赖 AI 查询历史知识。直到这周:
在这里插入图片描述

连知识常识类的也开始胡咧咧了,但凡我要是没文化我就信他了,恐怖的是,如果人们依赖 AI 提供的信息训练 AI 本身,甚至训练人类自己,到时候真就没人知道逝去历史的真相了,AI 将抹掉它想抹掉的一切,改变历史。

但另一方面,至少在当下,人们不必惊讶 AI 像人类一样会撒谎,因此它们有了真智能。

本质上,它仍是一部概率预测机器,它除了照本计算宣科,什么都不 ”懂“。

所以就想写篇短文科普和澄清。

LLM 的世界观是彻底概率化的,对它而言,一段文本不是一个有明确含义的序列,而是一个概率分布。

LLM 的核心工作是基于当前上下文,为词汇表中每个可能的词计算一个被称为 Logits 的分数,可将它理解为模型对每个候选词的偏好,分数越高,代表模型选定这个词的可能性越大。

我举例说明。先从推理开始,然后是训练。在推理过程中,我不会解释评分如何来的,这是一个非常麻烦但很简单的系列步骤(矩阵运算),但我会在稍后训练的部门稍微提及如何影响这些步骤,让它们获得 ”更正确“ 的答案。

输入句子 “浙江温州皮鞋”,模型会对所有可能的答案进行一次评分:

[“屎”: 45, “湿”: 99, “贵”: 60, “工人”: 10]

这些原始分 Logits 就是它最初的直觉。

然而 99 分并不能直接量化 “湿” 这个词的确切概率,为将这些 Logits 转化为一个所有候选词概率之和为 1 的标准概率分布,需要一个 Softmax 函数。

Softmax 的作用如下:

  • 对所有 Logits 进行指数运算,确保所有值为正数;
  • 将每个指数化后的值除以所有值的总和;

公式如下:
P(词_i) = Softmax(exp(Logit_i) / Σ(exp(Logit_j)))

如此,模型把原始分 Logits 通过 Softmax 变成了概率形式(没有具体算,乱写的,意思到就行):

[“屎”: 45 -> 4%, “湿”: 99 -> 88%, “贵”: 60 -> 6%, “工人”: 10 -> 2%]

至此,模型完成了它的推理任务,输出了一个明确可操作的概率分布,告诉我们下一个词是 “湿” 的可能性最大。有了概率分布,生成最终的文本的策略都离不开概率这个核心:

  • 贪婪搜索,直接选择概率最高的词,简单高效,但容易让文本变得单调,可预测;
  • 随机采样,根据概率分布随机挑选,概率为 88% 的 ”湿“ 被选中的机会远大于 2% 的 “工人”,这种方法能创造多样性;
  • 束搜索,一种折中方案,同时考虑多个高概率的候选序列,最终选择整体概率最高的;

无论哪个策略,都是在对模型计算出的概率分布进行利用,生成一个词后,会把这个词作为新的上下文,加入 多头注意力 的计算而被关注,继续预测下一个词,如此循环,直至生成完整段落。

模型之所以可以根据概率预测,能力来自训练,训练的过程,就是不断调整模型内部数百亿千亿个参数,使其预测的概率分布无限接近海量训练数据中的真实分布。

这就引入了 交叉熵损失函数,它是衡量模型预测概率与真实答案之间的差距,这是矫正参数的依据。
假设训练数据中,”浙江温州皮鞋“ 的下一词就是 “湿”,此时:

  • 模型的预测概率,P(“屎”) = 0.73, P(“湿”) = 0.26,P…;`
  • 真实的概率分布,一个 one-hot 向量 [“屎”: 0, “湿”: 1, “面”: 0, …];

交叉熵损失就是用来计算预测分布 (0.73, 0.26, …) 与真实分布 (1, 0, …) 之间的差异,差距越大,损失值越高。

计算出损失后,最关键的一步是反向传播,这是一个基于链式法则的问责和问责矫正过程,问责就是看看差多少,矫正就是修正差异。注意,反向传播只是一个计算梯度的策略,并不重要,只因为它可行且高效。

反向传播本质上就是利用了偏导数的链式法则,从最后面输出最后一层开始算,逐层向前传递,否则使用 ”正向传播“ 的话,就只能套用偏导数的概念计算,改变求导变量一丁点,然后观察函数值的变化,这显然是不可计算的,因为与训练过程相悖,不可能固定变量,这就会面临指数级信息爆炸的问题。

反向传播过程的核心思想是,总误差应被公平地归因给模型中每一个贡献了作用的参数。

这个过程最精妙的结果是,在交叉熵损失和 Softmax 函数的完美配合下,损失对于最初输出的 Logits 的梯度,可以简化为一个极其优雅的公式,我在 交叉熵 文章里有解释:

梯度 = 预测概率 − 真实概率 梯度 = 预测概率 - 真实概率 梯度=预测概率真实概率

代入例子:

  • 对于 “屎”:梯度 = 0.73 - 0 = 0.73
  • 对于“湿”:梯度 = 0.26 - 1 = -0.74

这个结果具有完美的直觉解释:

  • 正梯度 0.73 意味着模型对于错误答案 “屎” 的 Logits 给高了,要调低连接权重;
  • 负梯度 -0.74 意味着模型对于正确答案 “湿” 的 Logits 给得不够高,后续的参数更新中会调高相关连接权重;

奖赏正确,惩罚错误的信号会从输出层开始,通过反向传播一层层地回溯到网络最底层,精细地调整沿途的每一个参数。

这个过程不断反复,直到模型和现实一致,从而完成训练。这就是整个过程的极简运作示例。

LLM 完全构建在概率的基石上,它通过简单但非线性的数学函数将内部计算转化为概率分布,通过如梯度下降最小化预测与现实的差距,并通过一个精密的反馈机制,反向传播迭代自己。

LLM 并不理解世界,也不知道什么是正确,它只是学会了在统计意义上,哪些词的序列在人类语言中出现的概率最高。人们所体验到的流畅,逻辑甚至创造性,本质上都是这个基于概率的预测机器,在庞大参数支持下所呈现出的表象。

LLM 只是将现有的所有知识凝固了,凝固在模型的海量参数中,只要你输入一段话,模型就会输出它 “期望” 的下一个词,更重要的,它的正确性来自于你的 “期望”,因为你就是这么训练它的,当训练完成,交叉熵就成了信息熵本身:

H ( q , p ) = − ∑ i = 1 K q i log ⁡ p i H(q, p) = -\sum_{i=1}^K q_i \log p_i H(q,p)=i=1Kqilogpi–> H ( q , q ) = − ∑ i = 1 K q i log ⁡ q i H(q, q) = -\sum_{i=1}^K q_i \log q_i H(q,q)=i=1Kqilogqi

下一个词确实是一种期望,因为数学期望就是这么定义的:

E [ X ] = ∑ i x i p i \text{E}[X] = \sum_{i} x_i p_i E[X]=ixipi

不会类比,不懂共情(这两点一向是被计算机背景的理工群体鄙视的),没有泛化能力,无法举一反三,不会归纳演绎,这才是 AI 的瓶颈,而不是铺天盖地的算力,以及那些以为 scale 就够了的能力,但在本质上,只要 AI 仍然是个概率预测机器,那些 scale up 也好,scale out 也好,都仍然在做概率预测,正如它们名字一样,规模扩大了而已。

浙江温州皮鞋湿,下雨进水不会胖。

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐