当前位置: 首页 > news >正文

【论文阅读】AdaptThink: Reasoning Models Can Learn When to Think

AdaptThink: Reasoning Models Can Learn When to Think

  • 3 Motivation
    • 3.1 理论基础
    • 3.2 NoThinking在简单问题中的优势
    • 3.3 动机总结
  • 4. AdaptThink
  • 4.1 约束优化目标
    • 数学建模
      • 基本定义
      • 原始优化问题
      • 惩罚项转换
      • 归一化处理
    • 策略梯度实现
      • 优势函数定义
      • PPO风格损失函数
  • 4.2 重要性采样策略
    • 问题背景
      • 冷启动问题
    • 重要性采样设计
      • 采样分布定义
      • 训练流程修改
    • 技术优势
      • 解决冷启动
      • 持续平衡
    • 数学特性
      • 重要性权重分析
      • 模式选择动态
    • 实现细节
      • 工程优化
      • 超参数选择
    • 效果验证
      • 训练曲线分析
      • 模式比例演化
  • 4.3 损失函数的理解视角

AdaptThink: Reasoning Models Can Learn When to Think 这篇论文提出了一种名为AdaptThink的新方法,旨在让AI模型学会"什么时候该动脑"。AdaptThink教会大型推理模型根据题目难度自动选择两种模式:直接给出答案的"快速模式"(NoThinking)或详细推理的"深度思考模式"(Thinking)。通过创新的强化学习算法,该方法不仅能显著减少不必要的计算消耗(响应长度最高减少53%),还能提升整体解题准确率(最高提升4.1%),在数学推理任务上实现了效率与性能的双赢。

本篇博客聚焦于文章的方法部分
在这里插入图片描述

3 Motivation

3.1 理论基础

论文首先对推理模型的生成过程进行了数学形式化定义:

  • πθπ_θπθ表示参数为θθθ的推理模型
  • 给定输入提示x=[x1,...,xn,<think>]x = [x_1,...,x_n,\texttt{<think>}]x=[x1,...,xn,<think>],其中:
    • [x1,...,xn][x_1,...,x_n][x1,...,xn]代表问题描述
    • <think>是触发思考过程的特殊标记
  • 模型生成响应y=[y1,...,yl,</think>,yl+2,...,ym]y = [y_1,...,y_l,\texttt{</think>},y_{l+2},...,y_m]y=[y1,...,yl,</think>,yl+2,...,ym],其中:
    • [y1,...,yl][y_1,...,y_l][y1,...,yl]是思考过程(包含探索、反思和自我验证的长链推理)
    • </think>标记思考结束
    • [yl+2,...,ym][y_{l+2},...,y_m][yl+2,...,ym]是最终解答(仅包含正确步骤和答案)

从概率角度,响应yyy是从条件概率分布πθ(⋅∣x)π_θ(·|x)πθ(x)中采样的结果。由于采用自回归生成方式,条件概率可分解为:
πθ(y∣x)=∏t=1mπθ(yt∣x,y<t)(1)π_θ(y|x) = \prod_{t=1}^m π_θ(y_t|x,y_{<t}) (1)πθ(yx)=t=1mπθ(ytx,y<t)(1)

3.2 NoThinking在简单问题中的优势

当前主流推理模型(如OpenAI o1和DeepSeek-R1)默认对所有问题采用Thinking模式。虽然增强了复杂问题的推理能力,但对于简单问题会产生不必要的计算开销。

Ma等人(2025)提出的NoThinking方法通过伪思考提示(如"Okay, I think I have finished thinking.")让模型跳过思考直接生成答案。本文进一步简化该方法:

  • 使用空思考提示(强制第一个生成标记为</think>

在MATH500数据集上的对比实验发现:

  1. 准确率

    • 对于难度1-3级的简单问题,NoThinking与Thinking准确率相当
    • 在最简单的1级问题上,NoThinking准确率反而更高(+1.2%)
  2. 响应长度

    • NoThinking平均响应长度显著更短(减少65-82%)
  3. 通过率

    • Thinking仅对不到50%的1-4级问题提升了通过率

关键结论:Thinking模式仅在解决高难度问题时展现出明显优势,而NoThinking在简单问题上具有更高的效率和相当的(甚至更好的)性能。

3.3 动机总结

基于上述发现,本文提出核心研究问题:

能否教会推理模型根据问题难度自适应选择Thinking或NoThinking模式,从而在不牺牲(甚至提升)性能的前提下显著提高推理效率?

这一思路催生了AdaptThink算法的设计,其核心是通过强化学习实现:

  1. 对简单问题优先采用NoThinking提升效率
  2. 对复杂问题自动切换至Thinking模式保证准确性

4. AdaptThink

AdaptThink算法的核心包含两大创新组件:首先是一个约束优化目标,通过强化学习机制激励模型优先选择无需思考的"NoThinking"模式,同时设置性能保障约束确保整体准确率不会下降;其次是重要性采样策略,该策略在策略训练过程中动态平衡"Thinking"和"NoThinking"样本的比例,既解决了模型初始阶段缺乏NoThinking样本的冷启动问题,又保证了在整个训练过程中模型能持续探索和利用两种思维模式的优势,最终实现根据问题难度自适应选择最优推理方式的能力。

在这里插入图片描述

4.1 约束优化目标

数学建模

基本定义

给定以下关键要素:

  • 推理模型πθπ_θπθ,表示可训练的参数化模型
  • 参考模型πθrefπ_{θ_{ref}}πθref,作为性能基准的固定模型(训练过程中不更新)
  • 奖励函数R(x,y)R(x,y)R(x,y),用于评估响应质量(在数学问题中为二元准确率指标,正确得1分,错误得0分)
  • 模式指示函数𝕀(y1=</think>)𝕀(y_1=\texttt{</think>})I(y1=</think>),用于判断响应是否采用NoThinking模式(当首标记为时取值为1,否则为0)

原始优化问题

max⁡θEx∼D,y∼πθ(⋅∣x)𝕀(y1=</think>)(2)约束条件:Ex∼D,y∼πθ(⋅∣x)R(x,y)≥Ex∼D,y′∼πθref(⋅∣x)R(x,y′)\max_{θ} \mathbb{E}_{x∼\mathcal{D},y∼π_θ(·|x)} 𝕀(y_1=\texttt{</think>}) (2) \\ \text{约束条件:} \mathbb{E}_{x∼\mathcal{D},y∼π_θ(·|x)} R(x,y) ≥ \mathbb{E}_{x∼\mathcal{D},y'∼π_{θ_{ref}}(·|x)} R(x,y') θmaxExD,yπθ(x)I(y1=</think>)(2)约束条件:ExD,yπθ(x)R(x,y)ExD,yπθref(x)R(x,y)

解释

  1. 目标函数追求最大化NoThinking模式的使用概率
  2. 约束条件要求优化后的模型整体性能不低于参考模型

惩罚项转换

引入拉格朗日乘子λ≥0λ≥0λ0,将约束优化转化为无约束形式:
max⁡θE[𝕀(y1=</think>)+λ(R(x,y)−R(x,y′))](3)\max_{θ} \mathbb{E} \left[ 𝕀(y_1=\texttt{</think>}) + λ \left( R(x,y) - R(x,y') \right) \right] (3) θmaxE[I(y1=</think>)+λ(R(x,y)R(x,y))](3)

超参数说明

  • λλλ控制性能约束的严格程度:
    • λ→0λ→0λ0:完全偏向缩短响应长度
    • λ→∞λ→∞λ:严格保证准确率

归一化处理

δ=1/λδ=1/λδ=1/λ,通过代数变形得到更稳定的数值形式:
max⁡θEx∼D,y∼πθ(⋅∣x)[δ⋅𝕀(y1=</think>)+R(x,y)−Rˉref(x)](4)(6)\max_{θ} \mathbb{E}_{x∼\mathcal{D},y∼π_θ(·|x)} \left[ δ·𝕀(y_1=\texttt{</think>}) + R(x,y) - \bar{R}_{ref}(x) \right] (4) (6) θmaxExD,yπθ(x)[δI(y1=</think>)+R(x,y)Rˉref(x)](4)(6)

其中Rˉref(x)\bar{R}_{ref}(x)Rˉref(x)通过预采样估计:
Rˉref(x)=1K∑i=1KR(x,y′i),y′i∼πθref(⋅∣x)(5)\bar{R}_{ref}(x) = \frac{1}{K}\sum_{i=1}^K R(x,y'^i), \quad y'^i ∼ π_{θ_{ref}}(·|x) (5) Rˉref(x)=K1i=1KR(x,yi),yiπθref(x)(5)

工程实现

  • 实际训练时K=16K=16K=16,即每个问题采样16个参考响应
  • Rˉref(x)\bar{R}_{ref}(x)Rˉref(x)在训练开始前计算并缓存

策略梯度实现

优势函数定义

A(x,y)=δ⋅𝕀(y1=</think>)+R(x,y)−Rˉref(x)A(x,y) = δ·𝕀(y_1=\texttt{</think>}) + R(x,y) - \bar{R}_{ref}(x) A(x,y)=δI(y1=</think>)+R(x,y)Rˉref(x)

三项含义

  1. δ⋅𝕀(...)δ·𝕀(...)δI(...):NoThinking模式的直接奖励
  2. R(x,y)R(x,y)R(x,y):响应正确性奖励
  3. −Rˉref(x)-\bar{R}_{ref}(x)Rˉref(x):基线项(降低方差)

PPO风格损失函数

采用clip机制的策略梯度:
L(θ)=−E[min⁡(πθ(y∣x)πθold(y∣x)A(x,y),clip(πθ(y∣x)πθold(y∣x),1−ϵ,1+ϵ)A(x,y))](7)\mathcal{L}(θ) = -\mathbb{E} \left[ \min\left( \frac{π_θ(y|x)}{π_{θ_{old}}(y|x)}A(x,y), \\ \text{clip}\left(\frac{π_θ(y|x)}{π_{θ_{old}}(y|x)},1-ϵ,1+ϵ\right)A(x,y) \right) \right] (7) L(θ)=E[min(πθold(yx)πθ(yx)A(x,y),clip(πθold(yx)πθ(yx),1ϵ,1+ϵ)A(x,y))](7)

关键参数

  • πθoldπ_{θ_{old}}πθold:采样分布(每次参数更新后同步)
  • ϵ=0.2ϵ=0.2ϵ=0.2:控制策略更新的保守程度
  • 省略了PPO中常见的KL散度惩罚项

4.2 重要性采样策略

问题背景

冷启动问题

在标准策略梯度训练中,初始模型πθoldπ_{θ_{old}}πθold几乎不会生成"NoThinking"响应(即πθold(y1=</think>∣x)≈0π_{θ_{old}}(y_1=\texttt{</think>}|x)≈0πθold(y1=</think>x)0)。这导致:

  1. 训练初期无法获得"NoThinking"样本
  2. 模型仅从"Thinking"样本学习,永远无法探索"NoThinking"模式

重要性采样设计

采样分布定义

构建新的采样分布πIS(⋅∣x)π_{IS}(·|x)πIS(x)
πIS(yt=a∣x,y<t)={0.5,t=1,a=</think>(强制NoThinking)0.5,t=1,a=wstart(强制Thinking)πθold(yt=a∣x,y<t),t>1(后续token按原模型生成)(8)π_{IS}(y_t=a|x,y_{<t}) = \begin{cases} 0.5, & t=1, a=\texttt{</think>} \quad (\text{强制NoThinking}) \\ 0.5, & t=1, a=w_{start} \quad (\text{强制Thinking}) \\ π_{θ_{old}}(y_t=a|x,y_{<t}), & t>1 \quad (\text{后续token按原模型生成}) \end{cases} (8) πIS(yt=ax,y<t)=0.5,0.5,πθold(yt=ax,y<t),t=1,a=</think>(强制NoThinking)t=1,a=wstart(强制Thinking)t>1(后续token按原模型生成)(8)

关键参数

  • wstartw_{start}wstart:思考模式起始词(如"Alright")
  • 0.5/0.5的分割比例确保两种模式样本均衡

训练流程修改

  1. 对每个batch中的每个prompt xxx

    • πIS(⋅∣x)π_{IS}(·|x)πIS(x)采样K=16K=16K=16个响应
    • 确保50%样本以开头(NoThinking)
    • 50%样本以wstartw_{start}wstart开头(Thinking)
  2. 计算损失时使用重要性权重:
    LAT(θ)=−Ex∼D,y∼πIS(⋅∣x)[min⁡(πθ(y∣x)πIS(y∣x)A(x,y),clip(πθ(y∣x)πIS(y∣x),1−ϵ,1+ϵ)A(x,y))](9)\mathcal{L}_{AT}(θ) = -\mathbb{E}_{x∼\mathcal{D},y∼π_{IS}(·|x)} \left[ \min\left( \frac{π_θ(y|x)}{π_{IS}(y|x)}A(x,y), \\ \text{clip}\left(\frac{π_θ(y|x)}{π_{IS}(y|x)},1-ϵ,1+ϵ\right)A(x,y) \right) \right] (9) LAT(θ)=ExD,yπIS(x)[min(πIS(yx)πθ(yx)A(x,y),clip(πIS(yx)πθ(yx),1ϵ,1+ϵ)A(x,y))](9)

技术优势

解决冷启动

  • 强制探索:即使初始模型不生成NoThinking,通过人为注入样本打破僵局
  • 早期学习:从第一轮训练开始即可学习两种模式的特征

持续平衡

  • 防止模式坍塌:避免模型过早收敛到单一模式
  • 动态适应:随着训练进行,模型能自主评估两种模式的优劣

数学特性

重要性权重分析

权重比πθ(y∣x)πIS(y∣x)\frac{π_θ(y|x)}{π_{IS}(y|x)}πIS(yx)πθ(yx)的作用:

  1. 当模型偏好某种模式时(如πθπ_θπθπISπ_{IS}πIS更倾向NoThinking):

    • 权重>1,但被clip机制限制在[1−ϵ,1+ϵ][1-ϵ,1+ϵ][1ϵ,1+ϵ]范围内(ϵ=0.2ϵ=0.2ϵ=0.2
  2. 保持梯度稳定性:

    • 避免个别样本的极端权重主导训练

模式选择动态

通过优势函数A(x,y)A(x,y)A(x,y)实现:

  • NoThinking优势:δ+Rnothing(x)−Rˉref(x)δ + R_{nothing}(x) - \bar{R}_{ref}(x)δ+Rnothing(x)Rˉref(x)
  • Thinking优势:Rthink(x)−Rˉref(x)R_{think}(x) - \bar{R}_{ref}(x)Rthink(x)Rˉref(x)

当NoThinking优势超过Thinking时,梯度更新会提高πθ(y1=</think>∣x)π_θ(y_1=\texttt{</think>}|x)πθ(y1=</think>x)的概率。

实现细节

工程优化

  1. 并行采样:同时生成Thinking/NoThinking批次
  2. 缓存机制:预计算Rˉref(x)\bar{R}_{ref}(x)Rˉref(x)减少重复计算
  3. 梯度裁剪:设置ϵ=0.2ϵ=0.2ϵ=0.2防止过大更新

超参数选择

参数作用
KKK16每个prompt的采样数
δδδ0.05NoThinking奖励系数
ϵϵϵ0.2策略更新幅度限制

效果验证

训练曲线分析

如图4所示:
在这里插入图片描述

  • 传统方法(GRPO):响应长度仅降至3500token后反弹
  • AdaptThink:稳定降至2000token以下

模式比例演化

  1. 初期:强制50-50分布
  2. 中期:模型开始自主选择(简单问题偏向NoThinking)
  3. 后期:稳定在难度自适应的比例(如MATH500 Level1达90%+ NoThinking)

4.3 损失函数的理解视角

理论框架

为了更直观地理解AdaptThink的优化行为,本节从优势函数的角度分析模型如何进行模式选择。通过比较Thinking和NoThinking两种模式的优势差异,我们可以清晰地看到算法如何实现难度自适应的决策机制。

优势函数比较分析

首先,我们分别定义两种思考模式的优势函数。在给定输入问题x时,Thinking模式和NoThinking模式的平均优势可以表示为:

Aˉthink(x)=Rˉthink(x)−Rˉref(x)(Thinking模式优势)Aˉnothing(x)=δ+Rˉnothing(x)−Rˉref(x)(NoThinking模式优势)\begin{aligned} \bar{A}_{\text{think}}(x) &= \bar{R}_{\text{think}}(x) - \bar{R}_{\text{ref}}(x) \quad &\text{(Thinking模式优势)} \\ \bar{A}_{\text{nothing}}(x) &= \delta + \bar{R}_{\text{nothing}}(x) - \bar{R}_{\text{ref}}(x) \quad &\text{(NoThinking模式优势)} \end{aligned} Aˉthink(x)Aˉnothing(x)=Rˉthink(x)Rˉref(x)=δ+Rˉnothing(x)Rˉref(x)(Thinking模式优势)(NoThinking模式优势)

这里的关键在于δ\deltaδ项的引入,它相当于给NoThinking模式一个额外的奖励偏置,鼓励模型在性能相近时优先选择更高效的NoThinking模式。

模式选择条件

模型更新参数时,只有当NoThinking模式同时满足以下两个条件时,才会提高选择该模式的概率:

{Rˉnothing(x)+δ>Rˉref(x)Rˉnothing(x)+δ>Rˉthink(x)\begin{cases} \bar{R}_{\text{nothing}}(x) + \delta > \bar{R}_{\text{ref}}(x) \\ \bar{R}_{\text{nothing}}(x) + \delta > \bar{R}_{\text{think}}(x) \end{cases} {Rˉnothing(x)+δ>Rˉref(x)Rˉnothing(x)+δ>Rˉthink(x)

这个设计确保了模型选择行为具有以下特性:

动态选择机制

  1. 简单问题场景

    • 当NoThinking和Thinking的准确率相近时(Rˉnothing≈Rˉthink\bar{R}_{\text{nothing}} \approx \bar{R}_{\text{think}}RˉnothingRˉthink
    • δ项的加入使得Aˉnothing>Aˉthink\bar{A}_{\text{nothing}} > \bar{A}_{\text{think}}Aˉnothing>Aˉthink
    • 模型会优先选择更高效的NoThinking模式
  2. 困难问题场景

    • 当Thinking明显优于NoThinking时(Rˉthink≫Rˉnothing\bar{R}_{\text{think}} \gg \bar{R}_{\text{nothing}}RˉthinkRˉnothing
    • 即使有δ\deltaδ的补偿,仍然满足Aˉthink>Aˉnothing\bar{A}_{\text{think}} > \bar{A}_{\text{nothing}}Aˉthink>Aˉnothing
    • 模型会自动保留Thinking模式以保证准确性

超参数δ\deltaδ的核心作用

δ\deltaδ在算法中扮演着至关重要的角色,它实际上控制了效率与精度之间的权衡:

  • 增大δ\deltaδ:会显著提高模型选择NoThinking的倾向性,带来更大的长度缩减,但可能牺牲部分准确率
  • 减小δ\deltaδ:模型会更依赖原始准确率差异做决策,保守地选择Thinking模式

理论意义与创新性

这种基于优势比较的损失函数设计实现了三个重要特性:

  1. 难度感知能力:通过实时比较Rˉthink\bar{R}_{\text{think}}RˉthinkRˉnothing\bar{R}_{\text{nothing}}Rˉnothing,模型可以感知问题难度
  2. 动态权衡机制δ\deltaδ参数提供了明确的效率-精度调节旋钮
  3. 训练稳定性:重要性采样确保两种模式都能获得足够的梯度更新

与动机章节的呼应

这个设计完美实现了第3章的核心发现:

  • 对简单问题(如MATH500 Level1-3)优先使用NoThinking
  • 对复杂问题(如AIME2024)自动保留Thinking模式
  • 通过δ参数可以灵活调节模式选择的激进程度

这种基于优势比较的决策机制,使得AdaptThink能够智能地在不同难度的问题上自动选择最优的思考模式,实现了效率与性能的最佳平衡。

http://www.dtcms.com/a/277607.html

相关文章:

  • muduo概述
  • DVWA CSRF漏洞分析与利用
  • Leaflet面试题及答案(61-80)
  • 梯度下降算法:像下山一样找到最优解
  • opencv4.12 vs2022 cmake contrib编译
  • (一)SAP GROUP REPORTING(集团报表)集团财务合并解决方案套件
  • ERA5的UV合并成矢量并按时间维度转为nc或tif
  • Excalidraw:一款颠覆传统思维的免费开源绘图工具
  • 28.安卓逆向2-frida hook技术-逆向os文件(一)
  • 零基础完全理解视觉语言模型(VLM):从理论到代码实践
  • TASK2 夏令营:用AI做带货视频评论分析
  • 【算法】递归、搜索与回溯
  • docker运行redis指定配置+jdk17安装在centos7
  • sklearn study notes[1]
  • uView UI 组件大全
  • spring-ai-alibaba 1.0.0.2 学习(十六)——多模态
  • Python 的 MRO
  • JDBC相关知识点
  • 查看ubuntu磁盘占用方法
  • Prometheus Operator:Kubernetes 监控自动化实践
  • 对测试左移的一些总结和思考
  • Python 数据挖掘实战概述
  • python代码块的表示方法
  • 【惟一最接近10位小数的分数】2022-8-15
  • 06.计算两个日期之间的差值
  • 数学与应用数学核心课程有哪些?全文解析!
  • 【Linux庖丁解牛】— 信号量ipc管理!
  • AI(学习笔记第五课) 使用langchain进行AI开发 load documents(web)
  • 【算法】贪心算法:柠檬水找零C++
  • 基础数论学习笔记