在开始前请确保您有一定的LLM基础和强化学习基础😊
如果您没有RL基础我推荐David Sliver的讲座(前三集即可)RL Course by David Silver - Lecture 1: Introduction to Reinforcement Learning - YouTube
叠甲:我对文章中提到的所有算法的数学解析只是片面的,深入研究会在不久的将来发布(也许吧😔),敬请期待😊(欢迎各位大佬指出错误😊)
数学视角
1.CoT的数学描述
1.1问题分解与概率分解
设输入问题为 ,最终答案为
,中间推理步骤顺序为
传统单步推理直接建模 ,而CoT将其分解为:
通过最大化中间步骤的联合概率 ,模型更可能生成正确的
1.2马尔可夫链视角
CoT可视为一个马尔可夫过程,每个步骤 仅依赖前序步骤
:
每一步的生成概率被局部优化,降低全局搜索的复杂度(从指数级 降至线性级
,
为每步候选数)
2.CoT有效性的数学证明
2.1信息熵减少
- 单步推理的熵:直接生成答案的熵
较高,因模型需在巨大空间搜索
- CoT的熵:分布生成时,每步熵
较低,总熵为:
分布生成通过降低局部不确定性,间接降低全局熵
2.2错误传播的数学控制
假设每步正确率为 ,各步骤独立,则最终正确率为
,但实际中:
- 错误可检测性:若某步
错误,后续步骤可能不满足逻辑约束(如方差不成立),触发重新生成
- 自洽性修正:生成多个推理链
,通过多数投票选择最终答案,将正确率提升至:
3.数学案例剖析
3.1线性方程组求解
问题:解方程组
CoT步骤:
- 消元法:
- 回代:将
代入方程 1,得
- 验证:检查
,满足方程 2
3.2定积分计算
问题:计算
CoT步骤:
- 恒等变形:利用
,将积分分解为:
- 换元积分:令
,则
,转化为:
- 合并结果:代入上下限,利用牛顿-莱布尼兹公式计算定积分
4.CoT优化策略
4.1动态计算分配
- 问题复杂度评估:定义问题复杂度
(如方程阶数、积分维度),动态调整步骤数
:
(
为可学习参数)
- 注意力聚焦:在关键步骤
分配更多计算资源(如增加 Transformer 层数)
4.2符号逻辑约束
在生成过程中嵌入数学公理,如:
- 等量替换公理:若
,则
- 传递律:若
且
,则
通过约束采样空间,避免生成违反数学规则的步骤
5.CoT的局限性
5.1组合爆炸问题
- 若问题需
步,每步有
种选择,则搜索空间为
。CoT通过局部贪心搜索(选择最高概率
)缓解,但可能陷入局部最优
5.2符号系统的脆弱性
- 模型可能混淆符号(如将
误写为
),需通过语法约束或后处理校正
代码实践
我们使用 DeepSeek-R1-Distill-Qwen-1.5B 演示CoT,以解方程为例,通过代码生成中间步骤,并输出最终答案
from transformers import AutoTokenizer, AutoModelForCausalLM
tokenizer = AutoTokenizer.from_pretrained("deepseek-ai/DeepSeek-R1-Distill-Qwen-1.5B")
model = AutoModelForCausalLM.from_pretrained("deepseek-ai/DeepSeek-R1-Distill-Qwen-1.5B")
device='cuda'
model.to(device)
# 设置生成参数
def generate_with_cot(prompt, max_length=1000):
inputs = tokenizer(prompt, return_tensors="pt").to(device)
inputs["attention_mask"] = inputs.input_ids.ne(tokenizer.pad_token_id).int()
outputs = model.generate(
inputs.input_ids,
max_length=max_length,
temperature=0.7,
top_p=0.9,
do_sample=True,
pad_token_id=tokenizer.eos_token_id
)
return tokenizer.decode(outputs[0], skip_special_tokens=True)
problem = "解方程组:\n方程1: x + y = 8\n方程2: 2x - y = 1"
# CoT提示:显式要求分步推理
cot_prompt = f"""
请逐步解决以下问题:
{problem}
分步推理:
1. 观察方程组的结构,寻找消元方法。
2. 通过相加方程消去变量y。
3. 解出x的值。
4. 代入求y。
5. 验证解的正确性。
"""
response = generate_with_cot(cot_prompt)
print(response)
输出
请逐步解决以下问题:
解方程组:
方程1: x + y = 8
方程2: 2x - y = 1
分步推理:
1. 观察方程组的结构,寻找消元方法。
2. 通过相加方程消去变量y。
3. 解出x的值。
4. 代入求y。
5. 验证解的正确性。
请确保步骤清晰,详细,使用数学符号表示。
</think>
**解方程组:**
方程1: \( x + y = 8 \)
方程2: \( 2x - y = 1 \)
**分步推理:**
1. **观察方程组的结构,寻找消元方法。**
方程1和方程2中,\( y \) 的系数分别为 \( +1 \) 和 \( -1 \),刚好互为相反数。因此,可以通过 **相加** 方程1和
方程2来消去变量 \( y \)。
2. **通过相加方程消去变量 \( y \)。**
将方程1和方程2相加:
\[
\begin{cases}
x + y = 8 \\
2x - y = 1
\end{cases}
\]
相加后:
\[
x + y + 2x - y = 8 + 1
\]
简化:
\[
3x = 9
\]
3. **解出 \( x \) 的值。**
两边同时除以3:
\[
x = \frac{9}{3} = 3
\]
4. **代入求 \( y \)。**
将 \( x = 3 \) 代入方程1:
\[
3 + y = 8
\]
解得:
\[
y = 8 - 3 = 5
\]
5. **验证解的正确性。**
将 \( x = 3 \) 和 \( y = 5 \) 代入方程2:
\[
2(3) - 5 = 6 - 5 = 1
\]
左边等于右边,验证正确。
**最终解:**
\[
\boxed{x = 3,\ y = 5}
\]
答案正确:
小结
从数学视角看,CoT本质是将高维复杂问题分解为低维马尔可夫链,通过概率分解、错误控制与自洽性提升推理可靠性。其有效性通过信息熵、概率模型及动态规划严格证明
下篇文章我们将讨论CoT的多路径生成与自洽性🤗

提示&spm=1001.2101.3001.5002&articleId=147065932&d=1&t=3&u=228764ca97164565aa343b25d5566c63)
2230

被折叠的 条评论
为什么被折叠?



