Hacker News 中文摘要

RSS订阅

LLM 不应视为 next-token 预测器 -- “Next-token predictor” is the wrong mental model for LLMs

严格说,大语言模型(LLM)是“下一个词元预测器”这种说法并不算错,但不完整,只是零阶近似。它立足的真实情况是:基于 Transformer 的语言模型以自回归方式发出词元;预训练时,模型反复依照前序词元,让实际接续的那个词元更可能被采样。

正文

严格来说,“大语言模型是下一个词的预测器”这句话不算错,只是不完整。它算是一个零阶近似,也确实符合现实:基于Transformer的语言模型是一个接一个生成词的:

while not done: tokens.append(model.sample_next_token(tokens))

这确实是“下一个词预测器”该有的样子。预训练时,模型反复读取前面的词,对照实际出现的下一个词,让这个词下次更容易被选中。训练过程大致是这样的:

for tokens in training_data: for position in range(1, len(tokens)): prior_tokens = tokens[:position] actual_next_token = tokens[position] model.make_more_likely( actual_next_token, after=prior_tokens, )

make_more_likely 背后当然做了大量工作,涉及损失函数、梯度和参数更新,但本文只关心整体效果:现实中实际出现的那个词,会变得更容易被选中。

关键在于,每一个 actual_next_token 都来自训练数据中已有的序列。可以说,基础模型的行为确实像一个下一个词预测器:它的训练目标就是预测训练数据里已经出现的下一个词。

但我们实际使用的模型并不只是基础模型,它们都经过了后训练,而现代后训练的一个核心环节是“可验证奖励的强化学习”(RLVR)。预训练时,模型只从训练数据里已有的序列中学习;而RLVR阶段,模型会主动探索,生成全新序列,再根据结果学习。RLVR的训练过程大致是这样的:

for task in training_tasks: for explored_tokens in model.explore(task): reward = evaluate_outcome(task, explored_tokens) for position in range(len(explored_tokens)): prior_tokens = task + explored_tokens[:position] explored_next_token = explored_tokens[position] model.make_more_likely( explored_next_token, after=prior_tokens, according_to=reward, )

两个训练循环里的 make_more_likely 机制是一样的,但目的完全不同。预训练时,它让某个 actual_next_token 更容易出现,是因为这个词本来就在训练数据里;RLVR阶段,它让某个 explored_next_token 更容易出现,是因为包含这个词的整段序列拿到了高分。

所以,后训练后的大语言模型虽然看起来还是一个接一个生成词,但它已经不再只靠预测已有文本来学习了,它也会从自己探索生成的新序列中学习。

象棋类比

这个区别用象棋来理解会更直观。想象两个象棋系统。

第一个系统用大量大师对局数据训练,学习大师在不同棋局下的应对模式。面对新棋局,它会预测大师最可能走的那一步。这就是一个“下一步棋预测器”。

第二个系统是一个理想化的象棋引擎,它探索了所有可能的对局,从 exhaustive 的探索中知道了每一个棋局位置的胜率。面对一个局面,它会选择胜率最高的那一步。它和第一个系统不同,不只是跟着大师已经下过的棋学,也会从自己探索生成的棋局中学习。

把第二个系统叫成“下一步棋预测器”就很奇怪了:它并不是在预测数据集里出现过哪一步,而是在选能赢的那一步。

收尾思考

本文没有提及其他后训练技术,但它们同样重要。比如基于人类反馈的强化学习(RLHF),会让模型不再只是模仿预训练数据,而是转向模拟一个有用的助手。而正如本文所说,RLVR走得更远:它让大语言模型能够探索并学习训练数据中从未出现过的想法。

这就是为什么“下一个词预测器”是个错误的思维模型。它只描述了机制的外形——一个词接一个词地输出,却忽略了这个机制背后真正编码的内容。无论是对有用助手的模拟,还是通过探索发现的新知识,都可以被编码进同一个逐词生成的循环里。

评论

评论区几乎都围绕同一个问题撕裂:后训练、强化学习、工具调用等新发展,是否已经让“next-token predictor”这个称呼不再成立。一方认为模型越来越像在“选择能赢的一步”或“搜索一组能产生结果的 token”,另一方则坚持自回归推理的底层机制并没有变;少数人认为,这更像两种叙述框架,根本没有可观察实验能判胜负。

后训练和 RL 让“预测下一个词”不再是准确描述

文章的核心类比得到一些支持:不会把第二个下棋系统叫“下一步预测器”,因为它不是在复现数据里的走法,而是在寻找能赢的走法。进入 RLHF/RLVR 后,模型不再对训练集里的下一个词做统计预测,而是为奖励信号在高维空间中搜索一组能达成目标的 token;如果再叠上 agentic 循环、工具调用和递归调用,它更像是从若干简单规则里涌现出的复杂系统,而不是一个“预测器”。(认可度:较多人)

进入后训练阶段,它并不是在“预测”,而是在高维空间里搜索一组想法,再按正确顺序组合出结果(@danielmarkbruce)

不管训练方法怎么变,推理时依然是逐个 token 的自回归机制

另一批人认为,文章标题和正文是矛盾的。预训练、RLHF、RLVR 改变的只是权重或训练信号,但推理时模型仍然在给定上下文里逐个计算下一个 token 的条件概率,然后把它追加回去。如果强化学习让输出更好,那也只是让预测器更有能力,不是让它变成另一种机器。甚至有人调侃,所有生成输出的系统都可以叫“下一个 token 预测器”,这个称呼太普通,不足以成为罪状。(认可度:较多人)

更好的标题应该是“继续把 LLM 当成 next-token predictor”;后训练不改变这一点(@chrisjj)

这个说法常被用来贬低模型,掩盖规模化带来的涌现能力

还有人从修辞动机切入:强调 next-token 通常是为了削弱 LLM,暗示它有无法跨越的能力上限。可正如单细胞生物也能演化成复杂多细胞生物,局部机制简单不代表整体不能涌现出推理;人说话也时常要边想边说,没人因此把人脑称作“下一词预测器”。(认可度:较多人)

这就像因为单细胞是“生存和下一次分裂的优化器”,就断言它永远演变成不了复杂多细胞生物(@atleastoptimal)

标签之争没有可观察的裁决方式

一条更“元”的评论指出:争论“是不是 next-token predictor”并不是关于模型行为的经验命题。你说它是,我说它不是,可任何输出都不会让其中一方改变立场。因此它更像一种心智模型或叙述框架。真正值得担心的不是术语,而是 AI 如何被炒作、被商业和政治话语挪用。(认可度:少数人)

你说它是 next-token predictor,我说它不是;我看不出任何可观察行为能让任何一方改变主意(@emtel)

预训练内部机制也不能简化成“下一词预测”

即便不算后训练,也有人认为“预测下一个 token”低估了预训练本身。反向传播给某个中间位置的梯度来自上下文里后续所有 token 的预测损失,而不只是紧邻的下一个位置;每一层都会形成更抽象的语义表征,所以“下一个 embedding”或“下一个意义”可能比“下一个 token”更接近底层实际。(认可度:少数人,偏技术)

位置 i 的表示所收到的梯度,来自上下文里后续所有 token 的预测损失,而不仅是 i+1(@imenani)

有价值的补充

  • 把 LLM 叫“next-token predictor”,就像把导航仪叫“下一个路口预测器”:它把输出的串行格式和背后的路线计算混为一谈,相当于只看“下一步”而忽略地图、路线与目的地(@DonHopkins)。
  • 有人把预训练目标理解为“预测一切东西的下一个 token”:正因模型不可能记住所有可能性,它才被迫识别规则与结构,压缩本身就成了智能(@Dlemlo)。
  • 一个实际调试经验:让模型找意第绪语词 schmutz,它给出 schmuck;这类“提前锁死、难以自我修正”的错误,用 next-token 机制来解释反而最直观(@a3w)。
  • 棋类类比也有短板:棋类有“赢”的可验证启发式,强化学习可以直接围绕它搜索;语言没有同样客观的“正确 token”定义,所以用下棋证明 LLM 不是预测器并不完全成立(@kingjimmy / @Sprotch)。
  • 预训练的产出不是确定性的:即使训练数据和模型架构完全相同,随机初始化、样本顺序与学习率仍可能带来不同的内部结构,因此不能简单说它只是在“提取数据中的统计规律”(@xg15)。
  • 评论区也流露出对 AI 腔文本本身的警惕:有人讽刺文章像是用过度模仿 Claude 风格的腔调写成的,这种过敏本身成了讨论的一种情绪背景(@teekert)。