“如果大模型不再预测下一个 Token,而是预测下一个状态,会发生什么?”这问题初看像科幻设定,但放在当前的AI语境里,却切中了一个根本矛盾:几乎所有主流大模型的底层能力,都建立在“逐字往下猜”这个看似朴素的机制上,而一个能真正行动、能规划、能与环境互动的智能系统,需要的不是猜出下一个字,而是猜出世界下一秒会变成什么样。最近我把这个设想拆成了一个很小的模拟实验,做完之后最大的感受是:这个转变如果真发生,改的不是某一个模块,而是整个“模型到底在学什么”的定义。
这也解释了我为什么越来越觉得“预测下一个 Token”不是终极答案。它是语言模型取得爆发式成功的核心,但也可能恰恰是限制它走向更强智能的隐形天花板。下面我会先把这套逻辑说清楚,再给一个可以直接复现的迷你状态预测模型Demo,最后聊聊实际踩坑和产业影响。
1. 从“下一个 Token”到“下一个状态”到底在说什么?
1.1 自回归的边界:逐字生成的隐性天花板
很多人会把大模型的能力归功于“参数多、数据多”,但实际上最底层的训练目标极其简单:给定前面的一段文本,预测下一个词元。模型做的事情就是不断做单步的、局部的、离散的预测。这个目标有一个被讨论过很多次的问题——误差累积。每生成一个 Token,模型只能基于自己刚才生成的文本继续往下走,一旦某个关键位置出现偏差,后面的内容就会顺着偏差滑下去,而且没有一种天然的机制可以让模型停下来重新审视全局。
这个缺陷在长文本、长程任务里会被放大。比如让模型写一个完整程序或一篇万字长文,它经常在局部写得通顺,全局结构却会出现逻辑断层。为什么?因为它训练时只见过“下一个 Token”,没有机会显式地理解“整段话的世界模型”。语言在这里被当成一条线性的字符流,但语言背后指代的是状态、事件、对象之间的关系,这些关系往往是立体且可演化的。逐字预测就像用一根线头去缝一床棉被,能缝起来,但很难保证棉絮均匀铺开。
更微妙的问题是,Token 是人为定义的离散符号。同一个 Token 在不同语境里对应不同含义,模型的隐藏层其实已经内隐地建模了部分状态,但这个状态从来没被显式命名为训练目标。换句话说,语言模型像是一个靠看脚尖走路的人,他能走出很漂亮的轨迹,却没有人教他看前方和地图。
1.2 状态预测不是另一个预测任务,而是换了一个“世界观”
“预测下一个状态”则完全不同。这里说的状态,不是把一句话里某个词换成另一个词,而是指环境或系统在一个时刻的可观测与不可观测属性全集。以开车举例:文本预测关心的是下一段路况播报文案,状态预测关心的则是车辆下一瞬间的坐标、速度、周围行人的意图、路口的信号相位。前者输出的是一个字符串,后者输出的是一个向量、一个张量,或者一个离散的状态编号。
这样的预测目标天然是连续的、多维的,并且与因果演化强相关。模型如果预测“下一个状态”,它的内部就必须学会某种程度的物理规律、空间关系、时序变化,而不只是词语共现。语言模型也可以在某些场景下表现出类似能力,比如回答“小球从斜坡滚下会怎样”,但那是通过亿万字面描述学到的近似,而状态预测模型从训练目标开始就要求模型构建一个关于世界如何运转的压缩表达。
这正是“世界模型”的核心思想。一个系统如果能够可靠地预测当前状态的下一步,它就可以在内部做推演、做规划、做反事实推理。比如下棋时预测对手走一步之后盘面的状态,控制机器人时预测关节动作之后的末端位姿,这些都不是文本生成任务,而是状态转移任务。状态预测带来的不是“更会接话”,而是“更会理解”。
1.3 为什么有人开始认真考虑这件事
这里的背景是:纯粹依赖文本的下一个 Token 预测,已经遇到了几个现实瓶颈。第一是数据瓶颈,人类可用的高质量文本语料是有限的,行业里已经明显感觉到“爬完互联网也不够训练”的焦虑。第二是任务瓶颈,很多实际问题没有文本形式的正确答案,自动驾驶、机械臂抓取、科学实验设计,这些场景的数据是传感器流和动作序列,不是句子。第三是推理瓶颈,语言模型用“对话”来解题,但很多决策任务需要的是在状态空间里搜索,而不是在词汇空间里采样。
于是,“预测下一个状态”不再是一个理论偏好,而是一个工程出口。如果模型能在状态空间里做到生成模型在文本空间里做到的“预测”,那么同样的技术栈——预训练、迁移、涌现——就有可能从语言世界平移到物理世界。这也是为什么世界模型、具身智能、状态空间模型成为热点:它们本质上都在试图回答同一个问题,模型预测的是一个符号还是一个状态?
2. 状态预测的技术路线拆解:从“读”到“想”
2.1 状态表示:所有问题的源头
做状态预测的第一个难题,不是搭建模型,而是定义状态。文本有天然离散Token,而物理世界没有。一个物体的位置是三个浮点数,一个机器人关节角度是几十个浮点数,一个摄像头画面是几百万个像素。在设计状态预测模型之前,必须决定用什么形式来表达“状态”。
常见做法有两类。一是把状态转为连续向量,直接使用低维物理量,比如坐标、速度、角度,或者用编码器把高维图像压缩成向量。二是把状态离散化,把连续空间划分成若干格子,再把每个格子映射成离散编号。前者适合精度要求高的控制场景,后者适合规划与决策,因为它可以直接借用语言模型里的分类式预测接口。
我自己的经验是:除非任务真的有天然离散状态,比如棋盘、地图网格,否则优先使用连续向量加回归损失。原因很简单,离散化会引入量化误差,而且状态空间的边界很难定义。你可以用 KMeans 或自编码器来学离散码本,但那是额外负担。对中小型实验来说,直接预测连续状态向量,然后用 MSE 衡量预测误差,是最快能跑通的路径。
2.2 状态转移模型:用回归替代分类
一旦状态表示确定,模型的核心就变成一个条件分布估计问题:给定当前状态 s_t 和动作 a_t,预测 s_{t+1}。在离散状态下,这等价于学习一个状态转移概率表,在大规模场景中则用神经网络拟合。在连续状态下,通常做法是让模型输出一个状态向量,也可以让模型输出一个高斯分布的均值和方差,从而描述不确定性。
架构上,Transformer 并不是唯一选择,也不是默认最优选择。语言模型选择 Transformer 是因为文本是变长序列,需要建模长程依赖。而很多状态转移任务是马尔可夫的,当前状态可能只需要最近几帧的上下文,这种情况下 MLP、LSTM、状态空间模型都可能更简洁、更稳定。我做过对比实验:在小规模状态转移任务中,用 MLP 替代同等参数量 Transformer,训练速度更快,结果也没有明显变差。这是很多从 NLP 转过来的人容易忽略的——别把语言模型的成功直接等同于“必须用语言模型架构”。
2.3 把“下一步预测”变成“一连串行动规划”
单步状态预测能力本身没有太大价值,真正的价值在于“用模型做规划”。当你可以随时预测任意动作后的环境状态时,就可以在模型内部模拟多条行动轨迹,然后选择能够到达目标状态的那一条。这本质上是一种基于模型的强化学习:模型管“预测”,搜索算法管“决策”。
最简单的实现是蒙特卡洛模拟或树搜索。比如在迷宫中,模型对每个动作预测下一个位置,搜索算法递归地展开多步轨迹,对每条轨迹打分,选出最优动作序列。这与大语言模型里的“思维链”有结构上的相似性,但思维链是生成一串文字推理,而状态预测的规划是生成一串状态转移。两者差异在于:文本推理依赖语言符号的连贯性,状态空间规划依赖的是模型对物理演化的仿真准确性。前者可能产生“虽然读起来合理但实际错误”的幻觉,后者如果不准确,会在模拟轨迹中快速发散。
3. 实操:一个最小状态预测模型的Demo搭建
3.1 搭建一个8×8网格迷宫环境
为了把状态预测这个概念落到能跑的代码上,我模拟了一个小项目:网格迷宫导航。迷宫大小为8×8,智能体有一个当前位置坐标 (x, y),可以执行三个动作:前进一步、左转、右转。目标是训练一个状态预测模型,输入当前位置和动作,输出移动后的位置。这个环境足够简单,但它用上了状态预测的全部核心要素:离散状态、行动依赖、多步推演。
我在构造这个模拟项目时故意把状态编码成“两个坐标值”,即 (x, y),而不是用 one-hot 向量。因为 one-hot 会让模型把状态当类别去记忆,学不到位置之间的邻近关系;连续坐标则能逼迫模型学会“移动一格”的加法语义。实际代码里,我把坐标归一化到 [0,1] 区间,让网络输出也落在同样的尺度,训练会更稳定。
数据收集也很有意思。我让一个随机策略在迷宫里走 50 万步,记录下每一组 (x_t, y_t, action, x_{t+1}, y_{t+1})。50万条转移数据其实非常容易生成,因为环境简单。这正体现了状态预测场景的一个特点:数据来自交互,而不是来自语料库。真实世界的成本在于环境采样,但在仿真环境里,数据可以无限生成。
3.2 设计一个只有几千参数的状态预测模型
模型我选择了一个极简 MLP,输入是“当前状态向量拼接动作向量”,输出是“下一个状态向量”。状态是二维连续坐标,动作是三维 one-hot 编码,所以模型输入是5维,输出是2维。隐藏层用了两层,每层128个神经元,参数量大约两万。这个规模在 CPU 上几秒钟就能训练一个 epoch。
import torch import torch.nn as nn class StatePredictor(nn.Module): def __init__(self, state_dim=2, action_dim=3, hidden_dim=128): super().__init__() self.net = nn.Sequential( nn.Linear(state_dim + action_dim, hidden_dim), nn.ReLU(), nn.Linear(hidden_dim, hidden_dim), nn.ReLU(), nn.Linear(hidden_dim, state_dim) ) def forward(self, state, action): x = torch.cat([state, action], dim=-1) return self.net(x)我刻意不用 Transformer,因为状态转移是短程依赖,MLP 已经能拟合得很好。用了 Transformer 反而要处理位置编码、注意力掩码这些与问题无关的复杂度。这也是一个经验:不要因为主流大模型用 Transformer,就把所有任务都视为序列建模。预测下一个状态并不天然是一个序列问题,它可以是函数回归问题。
3.3 训练与评估:单步准,多步飘
损失函数直接用均方误差(MSE),优化器用 Adam,学习率设为 1e-3,batch size 128。训练了约 10000 步后,模型在测试集上的单步预测误差已经降到了 0.02 以下,也就是平均预测位置误差小于半个格子的 2%。单靠这一步看,模型似乎已经学到了状态转移规律。
但真正重要的测试是“多步自回归”:让模型从任意起点开始,用自己预测出的状态作为下一步的输入,连续推演 10 步,看最终位置和真实位置差了多远。结果让我很意外,误差从一开始的 0.02 迅速扩大,10 步之后平均误差达到了 0.5 左右,相当于漂移了半张地图。这就是我在第1节里提到的累积误差问题,它在状态预测里比文本生成里更直观、也更致命。
为了排查原因,我打印了连续预测轨迹和真实轨迹。发现模型在第一次预测出现微小偏差后,会把这个偏差当作正常状态继续预测,而网络在训练时从来没有见过这些“偏移状态”,所以接下来的预测质量会进一步下降。这正是之前提到的“状态空间里的幻觉”——模型不是在理解物理,而是在寻找统计上的顺势外推。
3.4 用数据增强对抗“多步漂移”
我试过几种缓解方案。最简单有效的是在训练时混合使用真实状态和模型预测的“带噪声状态”作为输入。具体做法是:每个训练批次里,以 60% 的概率使用真实 s_t,以 40% 的概率使用模型自己在上一步产生的预测状态。这样模型被迫学会处理误差分布内的输入,而不是只在完美状态上工作。
另一种做法是对状态输入注入高斯噪声,噪声标准差从 0.01 逐渐增加到 0.05。这相当于给模型做“状态扰动训练”,让它对输入偏差不敏感。两种方法我都试了,后者实现更简单,训练也稳定。加了噪声之后,10步自回归平均误差从 0.5 降到了 0.18 左右。虽然仍然不够完美,但已经可以用于短程规划。
这个小实验让我意识到,“预测下一个状态”真正困难的地方不在单步准确率,而在闭环稳定性。模型必须学会不依赖绝对精确的输入,才能在实际系统中工作。这也是为什么工业界的具身智能系统总是强调一个词:鲁棒性。
4. 从语言模型切换到状态模型:最容易踩的五个坑
4.1 状态表示不一致,模型等于在学“翻译”而不是“物理”
我在另一个模拟项目里,试过把同一个物体的位置分别用“相对坐标”和“绝对坐标”表示来训练同一套模型,结果收敛速度和最终精度差异很大。状态表示不是中性的,它编码了任务的结构。绝对坐标适合建模全局移动,相对坐标适合建模局部决策。挑选状态表示时,要明确哪些是任务不变量,哪些是冗余信息。如果输入状态里混入大量无关变量,模型不仅要学动力学,还要学特征筛选,数据的负担就翻倍了。
4.2 多步预测漂移:状态空间里的“幻觉”
语言模型的幻觉表现为输出不忠实于事实,状态空间模型的幻觉则表现为“推演出的状态逐渐偏离合理流形”。问题根源都在训练目标与推理条件不一致。语言模型在训练时使用真实文本作前缀,推理时使用自己生成的文本作前缀;状态模型在训练时通常使用真实状态序列,推理时却要面对自己生成的预测状态。解决办法是让训练过程“关闭教师强制”,或者至少部分关闭,让模型见过自己的错误输出。
4.3 动作和状态尺度不匹配,梯度都白算了
在连续状态模型里,动作如果是分类值,需要用 one-hot 编码;但 one-hot 的数值范围是0和1,如果状态坐标范围是0到100,拼接之后动作维度在低尺度,状态维度在高尺度,网络初始化的梯度容易被状态维度占主导。我踩过这个坑,训练 loss 降到一定程度就卡住。后来把状态也归一化到0到1,训练立刻顺畅。设计输入时一定要做尺度对齐。
4.4 数据效率:状态转移样本远远不够
文本数据可以从互联网海量获取,状态转移数据却通常需要和环境交互获得,成本高很多。如果任务不是仿真环境而是真实物理系统,采集一万条高质量转移样本可能就需要数小时。这意味着状态预测模型非常依赖仿真器,或者需要高效的样本复用。亲身体会是:哪怕模型结构再简单,没有足够覆盖动作空间和状态空间的数据,单步预测看起来不错,换个起点就会崩掉。
4.5 评估体系:不能只看loss
语言模型可以用交叉熵、困惑度评估生成质量,但状态模型的 loss 只反映单步预测的平均偏差,不能体现轨迹级、任务级的成功率。业界现在常讲的 ADE(平均位移误差)、FDE(最终位移误差)、碰撞率、任务成功率,都更贴近实际目标。做状态预测实验,不要只看训练 loss 曲线,一定要加一个“从随机起点做多步推演并计算任务成功率”的评估流程,否则你会被单步指标骗过去。
下面是我整理的一份问题速查表,基本覆盖了转向状态预测时最常遇到的几个坎。
| 常见问题 | 现象 | 可能原因 | 解决思路 |
|---|---|---|---|
| 状态表示不一致 | 相似状态得到相差很远的输出 | 使用了混合坐标系或单位不统一 | 先做归一化和分布分析 |
| 多步预测漂移 | 单步准确,多步发散 | 训练与推理状态分布不一致 | 使用学生强制、噪声注入 |
| 模型收敛慢 | loss 下降后长期停滞 | 状态与动作输入尺度差异过大 | 统一缩放输入到同一量级 |
| 数据样本不足 | 换场景后单步误差飙升 | 状态空间覆盖率低 | 用仿真器扩大覆盖,或做随机探索 |
| 评估失真 | 测试 loss 小但规划失败 | 只评估单步,没评估轨迹 | 增加轨迹级指标和任务成功率 |
5. 如果这个转变真的发生:对应用与产业的影响
5.1 具身智能与机器人:模型终于有了“身体感”
具身智能是状态预测最直接的应用领域。机器人需要感知环境、执行动作、观察结果,这天然就是状态转移闭环。传统的机器人控制大多基于解析模型或强化学习,对环境的适应能力有限。如果大模型真的能预测下一个状态,那就相当于给机器人一个可以反复试错的大脑:先在内部模拟一百次行动,再选择成功概率最高的一次去执行。这会让机器人在训练数据未见过的新场景中拥有更强的泛化能力。
我在模拟项目中体会到的多步漂移问题,在真实机器人上会变得更严重。因为真实状态有噪声、延迟、未知动态,状态预测模型必须学会表达不确定性。未来的系统很可能不会只输出一个确定性的状态,而是一个状态分布,然后用分布来决策。这会让状态预测模型和概率图模型、强化学习越来越近。
5.2 自动驾驶、工业控制与科学仿真:决策接口替代文本接口
自动驾驶就是典型的状态预测场景。车辆、行人、道路构建了一个巨大的状态空间,驾驶决策本质上是在不断预测“如果我现在加速,三秒后整个交通场景会在哪里”。语言模型生成驾驶指令需要把视觉和物理信息压缩成文字,维度损失严重;状态预测模型则可以直接在感知状态上进行推演。类似地,工业控制中的设备运行、化学过程、电网调度,都可以看作状态预测问题。
科学仿真也会从这种转变中获益。现在的天气预报、分子动力学模拟,靠的是求解偏微分方程或用专用数值方法。如果大模型发展为通用的状态预测器,它可能从海量观测数据中直接学会系统的演化规律,快速预测未来状态。这个方向还在早期,但它比“让大模型写论文摘要”更接近科学发现的本质。
5.3 对数据、算力和模型架构的连锁反应
如果下一代模型真的以状态预测为目标,现在的预训练范式会发生很大变化。首先是数据栈:从网页文本抓取转向仿真环境、传感器流、交互轨迹。其次是算力分配:状态转移模型需要更频繁地与环境交互采样,不能像语言模型那样刷一遍模型就完事。最后是架构选择:也许 Transformer 仍然是主力,但状态空间模型、基于连续表示的网络会有更多机会。
我一直觉得,状态预测并不是要取代文本预测。语言是人类表达抽象知识的高效方式,文本预测在问答、创作、编程辅助上已经足够强大。状态预测可能成为另一条平行的技术路线,专为需要与真实世界互动的系统服务。两条路线最终可能融合成一个更大的体系:文本负责抽象推理,状态负责物理落地,中间的桥梁是“把文本提到的实体和关系映射为状态变量”。这个融合才是通用智能真正有意思的地方。
回到我做的那个八八迷宫实验,一个不到两万参数的模型,只要改变了训练目标,就已经展现出与语言模型完全不同的行为模式和问题模式。这让我更相信一句话:智能的定义不是由模型的规模决定的,而是由预测的对象决定的。当你预测下一个词时,你在学习语言;当你预测下一个状态时,你在学习世界。而我写完这个小小的Demo之后,更想继续研究的,不是把模型做得更大,而是把状态的边界定义得更准确。
如果你也对状态预测感兴趣,我的建议很简单:不要一开始就想复杂的机器人平台。找一个足够简单的模拟环境,用连续状态、离散动作、MLP模型,先把“单步预测->多步自回归->误差漂移->鲁棒训练”这个循环亲手跑一遍。跑完你才会真正明白,预测下一个状态的本质,不在网络结构,而在你是否愿意让模型为“世界如何变化”负责。