CoT & 强化学习
--用推理的“临时态”实现短暂的意识
背景和方法
众所周知,o1在推理阶段采用了一种思维链(Chain of Thought)的方法,将推理过程分解为多个离散的步骤。o1能够规划其推理步骤,评估中间结果,并在步骤出错或陷入僵局时进行回溯。
- 基础模型的训练(预训练和后训练)遇到瓶颈了
- 通过推理阶段的不断自我逻辑判断和思考实现更强的推理能力
- 自洽,在这个过程中前后的因果关系是自洽的
- 可以实现,更多深层次的思考
- 动态性,可以在思考的过程中不断的调整思考方向
- 把训练迁移到推理(运行态)
- 在推理的过程中实现“意识”,“意识”是AGI的关键能力
- 在self attention的基础上继续扩展了一个“动态性”的维度
- 严格意义上,RL和Test Time Scaling law并不应和预训练阶段Scaling Law等效,它们增强的主要是逻辑推理能力,所以RL Scaling Law其实是在原先预训练阶段Scaling Law组成成分之一的逻辑推理能力S型曲线后面,再接上了一个新的S型曲线,然后再接上Test Time阶段逻辑推理能力的新S型曲线,类似一个接力赛。
- 在推理过程中不断寻找思路,实践,判断效果,实现了自动化的“蒙特卡洛树算法”
需要实现的前提
- 能自动的在推理的过程中压缩KV cache
- 能暂停输出,接受外界的输入,拼接到当前的kv cache中
- 能对当前的结论和临时状态进行判断和总结
- 怎么训练(改变模型的权重)?
- 好像只能通过不断的调整提示词来找到输出合理结果的方法
- 可以通过推理过程中,插入特定的外界输入来改变中间结果(kv cache)的方式来调整/训练
测试时训练(TTT)技术
能显著提高LLM进行逻辑推理和解决问题的能力。让大语言模型在推理时「边思考边执行」,即测试时计算(test-time compute)。这种方式能带来巨大的回报
传统的LLM主要依靠的是检索存储模式,但o3处理问题时,却是靠实时创建新程序,来解决不熟悉的挑战。
在不提高算法效率的前提下,暴力增加算力消耗,边际效应会原来明显,需要的算力将是指数级别的增加
利用人类的语言作为思考(逻辑运行)的接口/工具
- CoT提供了在推理的时候进行逻辑演绎的机会
- 把具体的实际的表达转换为抽象的总结性的描述
- 不断迭代运行上面的步骤,直到得到想要的答案
- 依赖于已经掌握的抽象总结的数量和深度,AI已经从大量的自然语言中学到了
- 依赖于逻辑思维和推理,AI已经通过预测下一个token初步掌握
- 目前的模型不能有很长的、很深的思考路径,只能进行有限步数的推理
- 比如,带目标的成语接龙任务很难实现,这是当前模型的缺点
- 需要利用KV cache进行打草稿,然后慢慢演绎
- 是不是有个更适合机器思考的接口/工具?
- 人类不能用自然语言思考任何东西,比如数学和代码
- 这种语言的设计更适合 LLM,因此会减少为满足人类需求而设置的语法糖
- 赋予大模型在CoT的时候不仅仅具有通过语言的推理能力,还具有使用工具(计算机)的能力
- o1-ioi模型能在推理期间编写和执行c++程序,通过迭代运行和优化解决方案
- 例子
- 带CoT的模型就能很好的计算两个多位数的乘法,模型会在CoT里面拆分计算过程,和学校学的乘法过程很像
把CoT引入训练
- 预训练的数据先自动增加
CoT,CoT(生成CoT),再参与训练 - 有个额外的模型,动态的对输入生成CoT、逻辑分析片段,指导训练
- 实现自回归时,关键挑战在于能在没有外部干扰的情况下,判断何时进行反思、继续推理
- 增加一些特殊的token专门用于执行反思任务
- 在训练的时候就把“推理思考”作为作为回归的目标
- 直接把CoT的样本的思考过程用于预训练
- 迫使权重表达用于推理时组合后的输出,而不是简单的存储知识,会极大的扩展权重的表达维度,促进按照逻辑思维进行抽象,提高权重表达效率
- 怎么提高模型层级的灵活性,而不是固定的“抽象知识”+“逻辑推理”两个过程?
强化学习
强化学习是怎么激发出CoT的?