# CoT & 强化学习

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

### 背景和方法

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

1. 基础模型的训练（预训练和后训练）遇到瓶颈了
2. 通过推理阶段的不断自我逻辑判断和思考实现更强的推理能力
    1. 自洽，在这个过程中前后的因果关系是自洽的
    2. 可以实现，更多深层次的思考
    3. 动态性，可以在思考的过程中不断的调整思考方向
3. 把训练迁移到推理（运行态）
    1. **在大模型、大数据的规模不能持续增长的情况下，通过增加计算规模来提升整体精度**
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. 虽然自然语言看似比较复杂
    1. 但是**表达灵活性非常的高**，
    2. 能表达任何东西，人类所有的知识科学都是通过语言来表达的
    3. 所以一旦有了足够的样本数源就是一种**非常有性价比的接口**。
2. CoT提供了在推理的时候进行逻辑演绎的机会
    1. 把**具体的实际的表达**转换为**抽象的总结性**的描述
    2. 不断迭代运行上面的步骤，直到得到想要的答案
    3. 依赖于已经掌握的抽象总结的数量和深度，AI已经从大量的自然语言中学到了
    4. 依赖于逻辑思维和推理，AI已经通过预测下一个token初步掌握
3. **目前的模型不能有很长的、很深的思考路径，只能进行有限步数的推理**
    1. 比如，带目标的成语接龙任务很难实现，这是当前模型的缺点
    2. 需要利用KV cache进行打草稿，然后慢慢演绎
4. 是不是有个更适合机器思考的接口/工具？
    1. 人类不能用自然语言思考任何东西，比如数学和代码
    2. 这种语言的设计更适合 LLM，因此会减少为满足人类需求而设置的语法糖
    3. 赋予大模型在CoT的时候不仅仅具有通过语言的推理能力，还具有使用工具（计算机）的能力
        1. o1-ioi模型能在推理期间编写和执行c++程序，通过迭代运行和优化解决方案
5. 自然语言接口似乎也有局限性
    1. 表达不够准确，氛围感
    2. 冗余不够精炼
    3. 多义，同义
6. 例子
    1. 带CoT的模型就能很好的计算两个多位数的乘法，模型会在CoT里面拆分计算过程，和学校学的乘法过程很像

### 把CoT引入训练

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

### CoT的问题

1. CoT分散模型「注意力」，「想太多」了，在需要遵守指令或格式的任务中，使用CoT推理，模型遵守指令的准确率会下降！
2. 大模型越擅长复杂推理，越容易忽略用户的指令要求，“**聪明**”和“**听话**”之间存在明显的矛盾。更长的推理过程，其遵循指令的准确率会明显下降
3. 在复杂问题中因“单一路径选择”而犯错，人类大脑思考时并非依赖明确的语言符号，而是通过**抽象概念的灵活整合**进行推理。
4. 只是对输入的信息按照**预设的思考（分析）方式**进行语言层面的表达，预设的模式比较单一，难以试用所有情况。
    1. 基于马尔可夫假设的强化学习范式存在天然的局限——探索（exploration）仅发生在训练阶段，代理在部署（测试）时通常只会利用（exploit）训练中学到的确定性策略
    2. 显式的对信息进行格式化的表达，“格式化”能力从权重利用语言表达到思维链里面，比较低效
    3. **动态的自适应的调整思考的模式，将又增加一层动态性，**可能极大提升模型能力
        1. 自适应RL框架 BARL
5. CoT看似在思考问题，但是有没有可能只是在给给定的prompt进行一些token以便进行更好的推理，提高信噪比？
    1. Google Research一项新研究发现：想让大模型在不启用推理设置时更准确，只需要把问题复制粘贴再说一遍，就能把准确率从21.33%提升到97.33%！

6. 模型牺牲了对输入问题的一般语言理解能力，换取了对特定答案的精准记忆。
    1. https://mp.weixin.qq.com/s/qMg2rVabnqS5QbAIaO37pQ

### 强化学习

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

强化学习（RL）本质上也是在对模型进行**先验信息（约束）的最大化似然**

参考： [https://mp.weixin.qq.com/s/rDJdgKS\_qSfUwqCuoEjJsA](https://mp.weixin.qq.com/s/rDJdgKS_qSfUwqCuoEjJsA)

当然会可以采用很多方面来解释这种现象，在数学上可以表示成，对概率和信息熵等多种不同的形式来说明问题

强化学习的激励太稀疏， 信噪比不高， 对分步骤的自洽学习没有帮助