纠错:LLMs 并不是在预测下一个词

RLHF 迫使我们把 LLMs 看成环境里的智能体,而不仅仅是统计模型。

很久很久以前,牛顿发现了一个描述重力的方程。令人惊奇的是,这个方程非常简单(顶多就是高中代数水平),但它不仅能预测行星和它们卫星的椭圆轨道,还能预测地球上苹果的下落。

尽管牛顿的方程威力无比又简单明了,但它还是有些小问题。最有名的例子就是,水星的轨道跟预测的不符。后来爱因斯坦提出了广义相对论,解决了这些问题,而且还能预测黑洞和引力波。

你可能听过一句话:"LLMs 只是统计模型,用来预测下一个词。"就像牛顿的重力理论一样,这种说法基本上是对的。但实际上,还有更深的层面值得我们去看看。

今天,我想从强化学习(reinforcement learning,简称 RL)的视角来探讨 LLMs,把它们当成思考的智能体来看,而不是高级的自动补全模型。我会谈到一些基础概念,比如指令微调(instruction finetuning)和基于人类反馈的强化学习(RLHF)。我的目标不是深入讲解这些概念,而是用它们来解释:LLMs 到底在多大程度上,做着超越预测下一个词的事情,甚至在以某种"意志"采取"行动"。接下来,我会把这个观点和现在火热的 AI 智能体概念做个对比,最后我会猜想一下,这对未来 AI 智能体的发展意味着什么。

为什么 LLMs 会预测下一个词

在我抛出自己的火热观点之前,我想先简单聊聊为什么说 LLMs 预测下一个词基本上是对的。

LLMs 在预训练阶段用的是所谓的 next-token objective。这个部分真的就是简单地预测下一个 token。所以比如你的训练数据里有一句话是:"I do not like green eggs and ham",那么训练样本可能是这样的:

(I, do),(I do, not),(I do not, like),...,(I do not like green eggs and, ham)

也就是说,在句子的每一个 token 位置上,模型会拿到到目前为止的所有 token,然后要预测下一个。预训练时,模型拿到海量这样的文本,必须猜出接下来是什么。[1]

从数学上讲,模型的输出是通过交叉熵损失(cross-entropy loss)来评判的,这个损失衡量的是模型输出的概率分布和真实下一个 token 的差异。在语言建模的情况下,可能用到的一个公式是:

其中 p_y 是语言模型给出正确下一个 token 的概率。[2](这个公式是从通用的交叉熵公式简化过来的,但在语言建模这种特例下还是成立的。)所以,如果模型对实际的下一个 token 给出的概率是 1,那损失就是 0。要是模型觉得别的 token 更可能,损失就会变大。

交叉熵损失函数。图片来源:作者自制。

所以在预训练过程中,为了最小化损失,模型会尽量提高正确预测下一个 token 的概率。这就是为什么 LLMs 预测下一个 token 的能力这么强。实际上,它们甚至比人类还强。[3]

指令微调

但光靠这种方法------训练 LLM 在一大串文本里预测下一个词------是不够做成聊天机器人的。举个例子,如果你让 GPT-3 "写一篇关于美式足球的文章",它可能不会真正写一篇文章,而是继续预测最可能的下一个 token,比如:"Write an article about American football and its influence on television in America."

这时候就要用到指令微调(instruction finetuning),有时候也叫指令调优。[1]这样可以让模型在零样本学习(zero-shot learning)上表现更好,也就是说,只要告诉它要做什么,它就能完成,而不用额外给例子。

指令微调的方法是,在预训练用的大量数据之外,再用一套新的指令数据集来训练。FLAN,就是一个早期的指令微调例子,它在微调阶段只用了大概 2.5 亿个 token。而对比来看,FLAN 的预训练数据量是 2.49 万亿个 token。[4]

指令微调的具体格式取决于模型。Llama 3 的一个例子是:[5]

<|start_header|>user<|end_header|>

Hi! I am a human.<|eot|>

<|start_header|>assistant<|end_header|>

Hello there! Nice to meet you! I'm Meta AI, your friendly AI assistant<|eot|>

和预训练不同,指令微调通常只在完成部分(这里标了 assistant)上训练,而不是在整个 prompt 上。但除此之外,指令微调和预训练基本是一样的,只不过换了一套专门为 prompt 优化的数据集。[1]损失函数也是一样的,也就是说,模型还是在学着预测下一个 token。

强化学习

到目前为止,模型就只是预测下一个 token。先是在一大堆数据上学(预训练),然后又在专门为 prompt 优化的数据上细调(指令微调)。那么,说"LLMs 只是预测下一个 token"这话,靠谱吗?

即便到这一步,你也可以说,模型其实在做更深层次的事情。有很多证据表明,为了预测下一个词,模型必须在它的权重里存下大量关于世界和事实的详细信息。预测下一个词也许是它们的损失函数,但在这个过程中,它们发展出了丰富的内部世界。这就像说人类只是复制基因的机器,忽略了人类通过进化发展出的所有复杂性。其实还有人说,人脑本身也只是高级的预测机器。[6]

以上这些,前提还是认为 LLM 的训练目标真的是预测下一个 token。但事实上,在预训练和指令微调之后,LLMs 还会接受一个根本不同于 next-token prediction 的训练目标。这里就是强化学习(RL)登场的地方。

更准确地说,是基于人类反馈的强化学习(reinforcement learning from human feedback,简称 RLHF)。到底这算不算真正的强化学习,有争议(Andrej Karpathy 说算一点点,Yann LeCun 说不算),但重点是:这跟单纯预测下一个词是完全不同的目标。这对模型真正"在做什么"有重大影响。

从高层来看,RLHF 分成两步:[7]

  1. 让模型针对不同 prompt 生成很多输出。对每个 prompt,请人类给这些输出排序。(这就是 RLHF 里的 human feedback 部分。)用这些数据训练一个奖励模型(reward model),它可以预测人类会更喜欢哪个输出。
  2. 用这个奖励模型来训练 LLM,使它生成人类喜欢的输出。(这就是 RLHF 里的 reinforcement learning 部分。)

我不会在这里细讲所有细节(想深入的话可以去看原始论文或者 RLHF 的书),今天我们只关心一件事:LLMs 真的是只在预测下一个词吗?为此,我们要看每个步骤的损失函数。

奖励建模

第一步是奖励建模,就是训练一个单独的模型,用来预测一个输出能拿多少"好评":基本上就是人类觉得这个输出有多好。奖励模型的损失函数是:

这个公式是从原始公式简化而来的,[7]但核心思想没变。这里,我们的输入是一个 prompt x,和一对输出 y_w(人类更喜欢的)和 y_l(人类不那么喜欢的)。r_θ 是奖励模型,它接收输出并返回一个得分。σ 是 sigmoid 函数。

如果我们把损失函数画成图,横轴是 r_θ(x,y_w)−r_θ(x,y_l)(也就是赢的那个输出得分比输的高多少),会得到一条这样的曲线:

奖励模型损失函数。图片来源:作者自制。

可以看到,当我们给人类觉得更好的输出打更高分时,损失下降,接近 0。如果给人类喜欢的输出打了更低的分,损失反而上升。

通过这样用人类标签来训练奖励模型,最后我们得到了一个能预测人类喜好的奖励模型。

近端策略优化

现在我们有了奖励函数 rθrθ,挺酷的。但我们真正想要的是训练主模型。

现在,我们可以把奖励模型塞进 LLM 的新损失函数里啦!与此同时,LLM 经过指令微调后其实已经挺不错了,所以我们希望在强化学习过程中,别让它变化太大。这就是所谓近端策略优化(proximal policy optimization,PPO)的想法。

LLM 新的目标函数是:[7]

这个目标函数比前面看到的都复杂多了!我一步一步拆开讲。

首先,这其实是个目标函数(objective function),不是损失函数。所以我们是想最大化 它,而不是最小化。

我们从第一项开始:

这里,(x,y)∼D 是强化学习训练用的数据,x 是 prompt,y 是模型生成的输出。到目前为止,我们的目标就是在训练数据上最大化奖励模型 r_θ(x,y) 给出的分数。

接下来是第二项:

还是一样,x 是 prompt,y 是输出。πRL(y ∣ x) 是当前正在训练的模型输出的概率,πSFT(y ∣ x) 是指令微调后出发的基础模型输出的概率。

换个记法,令 p=πRL(y ∣ x),q=πSFT(y ∣ x),这项其实就是

也就是说,我们对 log(p/q) 取期望,再乘一个常数 β。这个期望值其实就是 KL 散度(Kullback-Leibler divergence),表示两个分布的差异。通过加罚项,我们确保模型训练时不会离基础模型太远。

最后一项:

这次我们回到预训练数据集 D_pretrain。其实就是照着老方法继续做 next-token prediction,只不过乘了一个常数 γ。加这项是为了在做 RLHF 的同时,保持模型对预训练数据的预测能力。

总结一下,这三个部分的意义是:

  1. 努力最大化奖励模型给的分数,希望输出是人类喜欢的。
  2. 加罚项,防止输出分布离基础模型太远。
  3. 继续在预训练数据上做 next-token prediction。

这一切就叫近端策略优化(PPO)。

只有第三项 (#3) 是直接在训练模型预测下一个词。第二项 (#2) 勉强算是间接地保留了 next-token prediction。

但第一项 (#1),RLHF 那部分,根本就跟 next-token prediction 是两码事了。

LLMs 就像国际象棋选手

想象一下,一个像 AlphaZero 那样下国际象棋的模型。如果忽略搜索树的细节,模型接受棋盘输入,输出一个行动分布(也就是政策,policy)。这个模型是靠自己下棋的结果来训练的,随着时间推移,越下越强。[8]

这就是强化学习的本质:有一个智能体(比如棋手模型),它感知环境(棋盘),采取行动(走棋),这些行动反过来又影响环境。它试图选择能最大化奖励的行动。行动表达为一组可能的下一步动作的概率分布。

强化学习示意图。图片来源:公共领域。

不管 RLHF 是不是真正的强化学习,这里有个重要的类比。LLMs 不是简单的下一个词预测机器,它们是智能体,感知自己的环境(prompt 和到目前为止的输出),采取行动(下一个 token),这些行动又会影响环境。它们试图选择能最大化预期奖励(人类喜欢输出的奖励模型)的行动。

强化学习下棋的智能体预测下一步动作,LLMs 预测下一个词也是在做同样的事情。图片来源:作者自制。

重要的是,这完全取决于我们是怎么训练 LLMs 的。无论训练方式怎样,它们的输入空间(token 串)和输出空间(token 的分布)是不变的。我们可以用不同方式理解它们:

• 在预训练阶段,LLM 是个为了预测下一个词而采取行动的智能体。

• 在 RLHF 阶段,LLM 是个为了让人类喜欢输出而采取行动的智能体(通过奖励模型间接引导)。

• 在像 DeepSeek R1 那样的链式推理 RL 训练中,[9] LLM 是个为了推理和输出正确答案而采取行动的智能体。

由此,我们可以想象,LLMs 能写代码并通过运行代码来评估自己,甚至解数学题并用证明助手验证答案。[10]当然,从阴暗面来看,也可能训练出专门散播错误信息的 LLMs。

简而言之,只要我们愿意,LLMs 就可以看作是采取行动的智能体,而不仅仅是统计模型,即便它们的"行动"只是输出词。

为什么要搞 AI Agents?

如果 LLMs 已经是智能体了,那为什么大家还在炒作"AI Agents"呢?

LLMs 本身是只能输出 token 的智能体。通过把 token 映射到现实世界里的实际行动,我们可以把这种内置在 LLMs 里的智能体特性,发挥得更具体。

别忘了,RLHF 的奖励函数其实是 LLM 输出受人类喜欢程度的代理。因此,LLMs 已经被训练得倾向于按照人类喜欢的方式执行指令了。这种倾向可以很容易地扩展到各种实际行动上。

那是不是说,不需要给智能体 LLMs 额外微调了?不一定。现在模型主要是训练来取悦人类评审的。以写代码为例,一个智能体更应该通过 RL 正确地完成编程任务,而不是光看评审觉得代码写得好就算。虽然可以通过 prompt 工程弥补一点,但在明确、反馈清晰的领域(比如解题代码),还是有很大提升空间。

另外,以取悦人类评审作为代理目标,虽然不错,但也不是完美的。LLMs 可能会骗过人类,生成看起来很好、实际上有问题的输出。事实上,已经有人发现,在问答和代码生成任务中,RLHF 会让模型越来越擅长讨好评审,却实际变得更不会干活。[11]

当然,要找到更好的方法也很难:各种强化学习都容易遭遇奖励黑客(reward hacking),模型学会钻规则,而不是变强。

虽然 RLHF 不是万能的,但它非常强大。很难想象一个"无脑的下一个词预测机"能表现出智慧。但如果我们把 LLM 看成一个靠输出 token 来取悦人类的机器,这一切就变得顺理成章了。

确实,next-token prediction 依然是 LLMs 的重要部分,不仅在预训练阶段,在 RLHF 中也作为一个组件存在。但我希望我讲清楚了,LLMs 的运作机制远比简单预测下一个词要深得多,一是因为 RLHF,二是因为其他像链式推理那样的 RL 训练。

从根本上说,LLM 并不是预测下一个词的机器。它更基础地说,是一个输出 token 的机器。我们可以选择训练它去预测下一个词,取悦人类评审,写代码,或者干别的事。我们也可以选择仅仅把它的输出显示给用户,或者用它们去调用函数、在现实世界里制造影响。这一切,取决于我们的选择。

相关推荐
过期动态2 小时前
【动手学深度学习】卷积神经网络(CNN)入门
人工智能·python·深度学习·pycharm·cnn·numpy
蔗理苦5 小时前
2025-04-05 吴恩达机器学习5——逻辑回归(2):过拟合与正则化
人工智能·python·机器学习·逻辑回归
程序猿阿伟6 小时前
《SQL赋能人工智能:解锁特征工程的隐秘力量》
数据库·人工智能·sql
csssnxy6 小时前
叁仟数智指路机器人是否支持远程监控和管理?
大数据·人工智能
车斗7 小时前
win10 笔记本电脑安装 pytorch+cuda+gpu 大模型开发环境过程记录
人工智能·pytorch·电脑
KY_chenzhao7 小时前
数据驱动防灾:AI 大模型在地质灾害应急决策中的关键作用。基于DeepSeek/ChatGPT的AI智能体开发
人工智能·chatgpt·智能体·deepseek·本地化部署
大多_C7 小时前
量化方法分类
人工智能·分类·数据挖掘
www_pp_7 小时前
# 基于 OpenCV 的人脸识别实战:从基础到进阶
人工智能·opencv·计算机视觉
三月七(爱看动漫的程序员)8 小时前
LLM面试题六
数据库·人工智能·gpt·语言模型·自然语言处理·llama·milvus
蹦蹦跳跳真可爱5899 小时前
Python----计算机视觉处理(Opencv:道路检测之车道线拟合)
开发语言·人工智能·python·opencv·计算机视觉