“用 LLM 的世界知识帮强化学习冷启动”这个说法,最近被讲得越来越玄,什么“把常识注入智能体”,听着像给 AI 输血。我的判断:核心机制没那么玄,拆开看就是一次预习。今天画开它。
由头是 ProDVI,今年挂到 arXiv 上的一篇,cs.LG 分类。干的事一句话:不靠预先收集的数据集、不靠高保真模拟器、也不靠在相关任务上元学习,让代码生成模型写出可执行的 Python 函数,每个函数编码一份“这个环境的动力学大概长什么样”的粗略假设,然后拿这份假设去给价值网络热身。
我第一遍读完,脑子里冒出来的图是这样的:
LLM ──► 写一个"环境模拟器" ──► agent 在里面先练几万步 ──► 再进真环境
很顺,对吧。sim-to-real 的直觉直接搬运:先在假世界里练熟,再出去见世面。
等等等等,先别急着点头。我马上就卡住了。你让一个代码模型凭常识写环境动力学,它能写出什么?我脑子里过了一遍:大概是个定性没错、系数全靠拍脑袋的简化式子,方向对,数值肯定对不上。那问题来了:在一个不准的模拟器里训练,agent 学到的不是环境,是模拟器的癖好。这是 sim-to-real 玩了多少年的老坑,拿 LLM 换个填法,坑就不坑了?
我盯着这个矛盾看了半天,一度觉得这思路就是换皮。回去重读。读细了。发现是我第一版图画错了——人家根本不拿那段代码当模拟器用。
重来。真实的 pipeline 长这样:
prompt ──► 代码模型 ──► 可执行的 Python 函数
(对动力学的粗略猜测,不要求准)
│ 跑起来,合成转移样本
▼
构造辅助动态预测目标
│
▼
预训练 actor-critic 里价值网络的状态-动作编码器
│
▼
带着这个"懂点动态"的表示进在线 RL
(真实转移、真实奖励)—— 那个函数,退场
注意最后一行。生成的程序只活在预训练那一段,在线学习一开始它就不在了。它的错,永远污染不到策略更新那一层,策略学的是真环境的真反馈,预训练带进来的偏差,会被在线数据一点点磨掉。
💡 咔哒一下扣上了:这段代码不需要对,因为它不当考场,只当教材。
打个比方:LLM 写的那段动力学函数,像一本印错了不少数字的习题册。你不能拿它模考,在错题里刷出来的分数是假的,这正是我第一版图错的地方,把它当真题了。但拿它预习题型,绰绰有余:编码器先大致学会“这类状态配这类动作,下一步大概往哪边挪”。等真开考,卷子由真环境出,预习只要比一张白纸强,就是净赚。
这里有个细节我特意多看了一眼:为什么非要写成可执行的代码,而不是让 LLM 用文字描述动力学?因为要的是样本,不是描述。函数能跑,就能批量合成转移样本;一段文字描述合成不出任何一条数据。“可执行”这三个字,是把模型肚子里的常识变成训练信号的唯一通道,写不成代码的常识,在这条流水线里一文不值。
实验那边,Gym 和 DeepMind Control Suite 上,无模型算法的样本效率提起来了。数字我照例不背,方向我看懂了:表示先热过身,在线就学得快。顺便给“注入世界知识”那种说法也祛个魅,注入的不是一桶知识,是一个起跑姿势。
老规矩,这个比喻在这里漏风。习题册有两处对不上:一是习题册印好就不变了,而预训练出来的表示进在线学习后会被真数据继续改写,错预习会慢慢被纠正,这层“活的”在比喻里没有;二是“错到什么程度就帮不上忙”这条边界——习题册错太多当然不如不预习——这条线论文里怎么划,我还没完全画明白,先放在这儿,懂了再补。
画开完了。照例自检:你能不能给同行讲明白“为什么这段代码不需要写对”?要是讲一半卡住,多半是你心里还默认它在当模拟器,我卡的就是这儿。
下期候选有两个:把“归纳偏置”这个词本身画开(它被讲玄的程度不比今天这个低),或者画 KV cache。你说了算。这玩意儿真的太酷了,错的先验居然也能扶正学习,前提是把它放在对的位置上。
