Skip to main content

CoT & 强化学习

--用推理的“临时态”实现短暂的意识

背景和方法

众所周知,o1在推理阶段采用了一种思维链(Chain of Thought)的方法,将推理过程分解为多个离散的步骤。o1能够规划其推理步骤,评估中间结果,并在步骤出错或陷入僵局时进行回溯。

  1. 基础模型的训练(预训练和后训练)遇到瓶颈了
  2. 通过推理阶段的不断自我逻辑判断和思考实现更强的推理能力
    1. 自洽,在这个过程中前后的因果关系是自洽的
    2. 可以实现,更多深层次的思考
    3. 动态性,可以在思考的过程中不断的调整思考方向
  3. 把训练迁移到推理(运行态)
  4. 在推理的过程中实现“意识”,“意识”是AGI的关键能力
  5. 在self attention的基础上继续扩展了一个“动态性”的维度
  6. 严格意义上,RL和Test Time Scaling law并不应和预训练阶段Scaling Law等效,它们增强的主要是逻辑推理能力,所以RL Scaling Law其实是在原先预训练阶段Scaling Law组成成分之一的逻辑推理能力S型曲线后面,再接上了一个新的S型曲线,然后再接上Test Time阶段逻辑推理能力的新S型曲线,类似一个接力赛。
  7. 在推理过程中不断寻找思路,实践,判断效果,实现了自动化的“蒙特卡洛树算法”

需要实现的前提

  1. 能自动的在推理的过程中压缩KV cache
  2. 能暂停输出,接受外界的输入,拼接到当前的kv cache中
  3. 能对当前的结论和临时状态进行判断和总结
  4. 怎么训练(改变模型的权重)?
    1. 好像只能通过不断的调整提示词来找到输出合理结果的方法
    2. 可以通过推理过程中,插入特定的外界输入来改变中间结果(kv cache)的方式来调整/训练
  5. 强化学习诱导实现:复杂的有针对的loss函数

测试时训练(TTT)技术

能显著提高LLM进行逻辑推理和解决问题的能力。让大语言模型在推理时「边思考边执行」,即测试时计算(test-time compute)。这种方式能带来巨大的回报

传统的LLM主要依靠的是检索存储模式,但o3处理问题时,却是靠实时创建新程序,来解决不熟悉的挑战。

在不提高算法效率的前提下,暴力增加算力消耗,边际效应会原来明显,需要的算力将是指数级别的增加

利用人类的语言作为思考(逻辑运行)的接口/工具

  1. CoT提供了在推理的时候进行逻辑演绎的机会
    1. 具体的实际的表达转换为抽象的总结性的描述
    2. 不断迭代运行上面的步骤,直到得到想要的答案
    3. 依赖于已经掌握的抽象总结的数量和深度,AI已经从大量的自然语言中学到了
    4. 依赖于逻辑思维和推理,AI已经通过预测下一个token初步掌握
  2. 目前的模型不能有很长的、很深的思考路径,只能进行有限步数的推理
    1. 比如,带目标的成语接龙任务很难实现,这是当前模型的缺点
    2. 需要利用KV cache进行打草稿,然后慢慢演绎
  3.  是不是有个更适合机器思考的接口/工具?
    1. 人类不能用自然语言思考任何东西,比如数学和代码
    2. 这种语言的设计更适合 LLM,因此会减少为满足人类需求而设置的语法糖
    3. 赋予大模型在CoT的时候不仅仅具有通过语言的推理能力,还具有使用工具(计算机)的能力
      1. o1-ioi模型能在推理期间编写和执行c++程序,通过迭代运行和优化解决方案
  4. 例子
    1. 带CoT的模型就能很好的计算两个多位数的乘法,模型会在CoT里面拆分计算过程,和学校学的乘法过程很像

把CoT引入训练

  1. 预训练的数据先自动增加CoT(生成CoT),再参与训练
  2. 有个额外的模型,动态的对输入生成CoT、逻辑分析片段,指导训练
    1. 实现自回归时,关键挑战在于能在没有外部干扰的情况下,判断何时进行反思、继续推理
    2. 增加一些特殊的token专门用于执行反思任务
  3. 在训练的时候就把“推理思考”作为作为回归的目标
    1. 直接把CoT的样本的思考过程用于预训练
    2. 迫使权重表达用于推理时组合后的输出,而不是简单的存储知识,会极大的扩展权重的表达维度,促进按照逻辑思维进行抽象,提高权重表达效率
    3. 怎么提高模型层级的灵活性,而不是固定的“抽象知识”+“逻辑推理”两个过程?

强化学习

强化学习是怎么激发出CoT的?