AdaptThink:推理模型的自適應思考范式
大家好,我是肆〇柒。我前幾天就看到這么一篇論文關于 AdaptThink。它主要講的是如何通過強化學習,來實現Reason Model(推理模型如o1,R1)根據問題難度自適應選擇思考模式(思考或不思考),以優化推理質量和效率的平衡。也就是快思考和慢思考的模型自適應。這篇論文讓我關注到它的原因在于,它所提出來的研究范圍,剛好是我曾經的又一個預判。(我猜我一定不會是獨家)
因為 AI 可以自適應快慢思考系統,并且可以自己定義思考預算(實現思考長短分級),這才是接近人類思考的樣子,這也理應是技術應該進化發展的方向。可以假設一下,當面對一個簡單的數學問題時,傳統模型可能會花費大量時間進行不必要的思考,而 AdaptThink 能夠迅速判斷問題的難度,并直接給出簡潔的答案。這種智能的自適應機制,不僅節省了計算資源,還為用戶帶來了更高效、更精準的體驗。接下來,我們一起了解一下 AdaptThink 的原理。
在 AI 領域,大型推理模型(如 OpenAI o1、DeepSeekR1 等)通過模擬人類的深度思考,在解決復雜任務時取得了顯著成果。然而,這一 lengthy thinking process 也帶來了推理開銷大幅增加的問題,成為效率提升的關鍵瓶頸。尤其是在處理簡單任務時,模型生成過多冗余思考步驟,導致用戶體驗不佳。例如,傳統推理模型面對一個簡單的加法問題,可能會花費數百個 token 進行反復的思考探索,而 AdaptThink 能迅速判斷其簡單性,直接輸出簡潔的最終答案,節省大量計算資源和時間,為用戶提供了一個高效精準的解決方案。
為解決這一問題,AdaptThink,作為一種新的強化學習(RL)思路,可使推理模型依據問題難度自適應選擇 optimal thinking mode,平衡推理質量和效率。
AdaptThink 使模型能夠根據問題難度自適應地選擇思考模式或非思考模式,從而提高推理效率,同時進一步提升整體性能
研究背景與動機
NoThinking 方法的提出為這一困境提供了新的解決思路。該方法通過 prompt 為空的思考片段(即 “<think></think>”)讓推理模型跳過思考過程,直接生成最終解決方案。研究表明,在相對簡單問題(如高中競賽水平及以下)上,NoThinking 的性能與 Thinking 模式相當甚至更優,且能顯著減少 token 使用量。只有在問題足夠難時,Thinking 的優勢才會凸顯。
NoThinking 方法的簡化主要體現在 prompt 的設計上。傳統的 NoThinking 方法通過一個固定的 prompt “Okay, I think I have finished thinking.</think>” 來引導模型跳過思考過程。然而,這種 prompt 在實際應用中可能會帶來一定的局限性,例如在不同語言或領域的問題中可能需要額外的適配。
為此,研究者們提出了一種更加簡潔和通用的 prompt 設計,即使用一個空的思考片段 “<think></think>”。這種簡化后的 prompt 不僅減少了對特定語言和領域的依賴,還提高了模型的通用性和適應性。通過實驗驗證,簡化后的 NoThinking 方法在保持性能優勢的同時,進一步降低了 token 使用量,提高了推理效率。
基于這一發現,研究者們提出了關鍵問題:能否讓推理模型基于輸入問題的難度,自適應選擇 Thinking 或 NoThinking 模式,以實現更高效的推理且不犧牲甚至提升性能?從而引出了 AdaptThink 算法。
AdaptThink 算法探索
約束優化目標
AdaptThink 的核心目標是鼓勵模型選擇 NoThinking 模式,同時確保整體性能不降低。具體而言,給定一個推理模型 πθ 和數據集 D,以及一個參考模型 πθref(初始 πθ,訓練過程中保持不變),定義獎勵函數 R(x, y, y? ) 衡量模型響應 y 的正確性(對于數學問題求解,R(x, y) 返回 0/1 表示 y 錯誤 / 正確)。引入指示函數 1(y1 =</think>) 判斷 y 是否為 NoThinking 響應(即首個 token 為 </think>)。
重要性采樣策略
在 on-policy training 初始階段,模型 πθ 自然地對所有問題應用 Thinking 模式,導致無法從 πθold 采樣到 NoThinking 樣本。為解決這一冷啟動挑戰,AdaptThink 引入重要性采樣技術,定義新的分布 πIS(·|x):
其中,wstart 為開始 long thinking 的常用詞(如 “Alright”)。訓練時,從 πIS(·|x) 采樣響應,使得每個 batch 中一半樣本為 Thinking 模式,另一半為 NoThinking 模式。這使模型從訓練伊始就能學習兩種模式,并在整個訓練過程中保持探索和利用兩種思考模式的機會,避免模型過早固定于單一模式。
算法流程總結
AdaptThink 算法的整體流程如下(參考 Algorithm 1):
**Algorithm 1 AdaptThink**
Input: policy model πθ; dataset D; hyperparameters K, δ, ?
Initialize: reference model πθref ← πθ
1: Sample K responses {y′i}K i=1 ~ πθref(·|x) and calculate ˉRref(x) for each x ∈ D (Equation 5)
2: for step = 1, . . . , M do
3: Update the old policy model πθold ← πθ and importance sampling distribution πIS (Equation 8)
4: Sample a batch Db from D
5: Sample K responses {yi}K i=1 ~ πIS(·|x) for each x ∈ Db and estimate LAT(θ) (Equation 9. Half of yi are Thinking responses and the other half are NoThinking responses.)
6: Update the policy model πθ by minimizing LAT(θ)
7: end for
Output: πθ
以上偽算法釋義如下:
算法 1 AdaptThink輸入:策略模型 πθ;數據集 D;超參數 K, δ, ?初始化:參考模型 πθref ← πθ1: 對每個 x ∈ D,采樣 K 個響應 {y′i}K i=1 ~ πθref(·|x),計算 Rref(x)(公式 5)2: for step = 1, ..., M do3: 更新舊策略模型 πθold ← πθ,更新重要性采樣分布 πIS(公式 8)4: 從 D 中采樣一批 Db5: 對每個 x ∈ Db,從 πIS(·|x) 采樣 K 個響應 {yi}K i=1,估計 LAT(θ)(公式 9,其中一半 yi 為 Thinking 響應,另一半為 NoThinking 響應)6: 通過最小化 LAT(θ) 更新策略模型 πθ7: end for
輸出:πθ
實驗設計與結果分析
實驗設置
實驗選用 DeepSeek-R1-Distill-Qwen1.5B 和 DeepSeek-R1-Distill-Qwen-7B 作為初始策略模型。訓練數據集為 DeepScaleR,包含 40K 道數學題,涵蓋 AIME 1983-2023、AMC、Omni-Math 和 STILL 數據集。評估使用的三個數學數據集 GSM8K(1319 道小學數學題)、MATH500(500 道高中競賽數學題)和 AIME2024(30 道奧林匹克數學題)難度遞進。評估指標包括準確率(accuracy)和響應長度(response length),并報告所有測試數據集上的平均準確率變化和平均長度減少率。
實驗基于 VeRL 框架實現,訓練上下文大小、批次大小、學習率等參數分別設置為 16K、128 和 2e-6。超參數 K、δ、? 分別設為 16、0.05 和 0.2。為公平比較,所有基線方法均使用 DeepScaleR 數據集重新實現。
基線方法對比
與 AdaptThink 對比的基線方法包括 DPOShortest、OverThink、DAST、O1-Pruner、TLMRE、ModelMerging 和 RFTMixThinking 等。每種方法的核心思想如下:
- DPOShortest:通過采樣多個響應,配對最短正確響應和最長響應,使用 DPO 算法微調模型。
- OverThink:以原始長思考響應為負例,保留思考中首次正確解答的前兩次嘗試為正例,使用 SimPO 算法微調模型。
- DAST:通過基于長度的獎勵函數對預采樣響應排序,使用 SimPO 算法微調模型。
- O1-Pruner:預采樣估計參考模型性能,使用離策略 RL 式微調,在準確率約束下鼓勵模型生成更短推理過程。
- TLMRE:在 on-policy RL 中引入基于長度的懲罰項,激勵模型生成更短響應。
- ModelMerging:通過加權平均推理模型與非推理模型的權重,減少推理模型的響應長度。
- RFTMixThinking:對每個訓練問題 x,分別以 Thinking 和 NoThinking 采樣多個響應,選擇正確 NoThinking 響應(若其實例級通過率 ≥ Thinking)或正確 Thinking 響應,用這些響應微調模型。
主要實驗結果
下表展示了不同方法在 GSM8K、MATH500 和 AIME2024 數據集上的準確率、響應長度以及 NoThinking 響應占比等關鍵指標結果。AdaptThink 在降低推理成本和提升模型性能方面表現突出,相比原始模型和其他基線方法具有明顯優勢。
以 DeepSeek-R1-Distill-Qwen-1.5B 為例,AdaptThink 將平均響應長度降低了 53.0%,同時平均準確率提升了 2.4%。在 GSM8K 數據集上,AdaptThink 的準確率達到 83.1%,響應長度縮短至 480,NoThinking 響應占比達 86.9%;在 MATH500 數據集上,準確率為 82.0%,響應長度 1782,NoThinking 響應占比 76.8%;在 AIME2024 數據集上,準確率為 31.0%,響應長度 6679,NoThinking 響應占比 40.4%。
對于 DeepSeek-R1-Distill-Qwen-7B,AdaptThink 同樣表現出色,平均響應長度降低了 40.1%,平均準確率提升了 2.3%。在 GSM8K 數據集上,準確率 91.0%,響應長度 309,NoThinking 響應占比 99.6%;在 MATH500 數據集上,準確率 92.0%,響應長度 1875,NoThinking 響應占比 76.6%;在 AIME2024 數據集上,準確率 55.6%,響應長度 8599,NoThinking 響應占比 6.3%。
AdaptThink 在簡單數據集(如 GSM8K 和 MATH500)中生成更多 NoThinking 響應,而在挑戰性數據集(如 AIME2024)中更多使用 Thinking 模式,且在大多數難度級別上一致性地取得更高準確率,論證了其自適應選擇思考模式的有效性。
使用“思考模式”和“無思考模式”對DeepSeek-R1-Distill-Qwen-7B在MATH500數據集不同難度級別上的比較
AdaptThink-7B在不同數學水平下選擇思考或不思考的比例
不同數學水平下,使用“思考”和“不思考”模式時AdaptThink-7B與DeepSeek-R1-Distill-Qwen-7B的準確率比較
AdaptThink 在不同難度級別問題上的性能差異主要源于其自適應選擇 thinking 模式的能力。對于簡單問題,模型傾向于選擇 NoThinking 模式以節省推理資源;而對于復雜問題,模型則會自動切換到 Thinking 模式以確保準確性。這種自適應機制使得 AdaptThink 能夠在不同的問題難度上實現最優的推理效率和性能平衡。
對于簡單問題,NoThinking 模式的優勢在于其能夠直接跳過冗長的思考過程,快速生成簡潔的最終答案。這得益于模型在訓練過程中對簡單問題特征的學習和識別,使其能夠在早期階段就確定問題的難度并選擇合適的推理策略。而對于復雜問題,Thinking 模式則通過多步推理和探索,逐步逼近正確答案,從而保證了模型的準確性。
更多分析
δ 參數的影響
通過在 1.5B 模型上實施不同 δ 值的 AdaptThink 實驗,分析 δ 增加對 NoThinking 響應比例、平均響應長度以及準確率的影響。結果表明,隨著 δ 增大,NoThinking 響應比例逐步上升,平均響應長度相應減少,但準確率提升逐漸放緩。這說明 δ 在推理效率和準確率提升間起到了權衡作用。即使 δ=0 時,模型在 GSM8K 和 MATH500 中超過 50% 的問題選擇 NoThinking,表明 NoThinking 在簡單問題上具有潛在優勢。
重要性采樣的效果
對比 AdaptThink 與直接從 πθold(·|x) 采樣的 naive GRPO 在訓練過程中準確率、響應長度和 NoThinking 響應比例的變化。由于初始 πθold 無法生成 NoThinking 樣本,GRPO 只能從 Thinking 樣本中學習,導致其響應長度僅能減少到約 3500(通過消除過長響應),隨后逐漸增加。而 AdaptThink 的重要性采樣策略使模型在訓練初期就能從兩種模式中學習,隨著模型逐漸學會為簡單問題生成更多 NoThinking 響應,最終響應長度降低到低于 2000 個 token。
在不同訓練步驟下,AdaptThink與樸素GPRO在MATH500上的準確率、回答長度以及“無思考”回答比例的對比
隱性思考比例檢查
針對 RL 可能在 NoThinking 模式下激活思考特征的潛在擔憂,對比 AdaptThink、原始模型的 NoThinking 響應以及原始模型 Thinking 響應的最終解決方案部分的隱性思考比例和平均長度。對于 1.5B 模型,AdaptThink 的隱性思考比例僅從原始 NoThinking 的 8.2% 略微增加到 7.9%,響應長度從 665 增加到 826。對于 7B 模型,隱性思考比例從原始 NoThinking 的 0.9% 增加到 4.2%,響應長度從 341 增加到 426。這表明 AdaptThink 的隱性思考增加有限。為完全消除此類行為,可在 RL 訓練中對隱性思考樣本賦予零獎勵。
Model | RatioIT | Length |
DeepSeek-R1-Distill-Qwen-1.5B | 8.2% | 665 |
AdaptThink-1.5B | 7.9% | 826 |
DeepSeek-R1-Distill-Qwen-7B | 0.9% | 341 |
AdaptThink-7B | 4.2% | 426 |
泛化能力評估
在 MMLU 數據集(包含 14K 道多項選擇題,涵蓋 57 個不同領域)上測試 AdaptThink 模型的泛化性能。結果表明,AdaptThink 通過生成約 16% 的 NoThinking 響應,將平均響應長度減少超 30%,同時取得比原始模型更高的準確率。例如,對于 DeepSeek-R1-Distill-Qwen-1.5B,AdaptThink 的準確率為 42.2%,較原始 Thinking 提升 6.5%,響應長度從 1724 減少到 1055;對于 DeepSeek-R1-Distill-Qwen-7B,準確率從 63.4% 提升到 63.6%,響應長度從 1257 減少到 856。這證明了 AdaptThink 在 out-of-distribution 場景下的良好適應性。
Method | MMLU Acc | MMLU Length | MMLU RatioNT |
DeepSeek-R1-Distill-Qwen-1.5B | 35.7 | 1724 | 0.00% |
OriginalNoThinking | 20.6 | 208 | 100.00% |
AdaptThink | 42.2 | 1055 | 16.43% |
AdaptiveThink-1.5B 在不同數學水平下選擇“思考”或“不思考”的比例
在不同數學水平下,使用有思考(Thinking)和無思考(NoThinking)模式時,AdaptiveThink-1.5B 與 DeepSeek-R1-Distill-Qwen-1.5B 的準確率對比
兩個自適應的例子
1. 對于GSM8K中的一個簡單數學問題,DeepSeek-R1-Distill-Qwen-7B在思考過程中大約消耗了3000個token,其中包含許多不必要的步驟和多余的嘗試。相比之下,AdaptThink-7B能夠自適應地選擇無思考模式,并直接生成一個簡潔的最終解決方案。
2. 對于2024年AIME中的一道富有挑戰性的問題,AdaptThink-7B能夠運用思考來解決,而不是直接生成最終答案。
開源倉庫介紹
為了幫助讀者更好地理解和使用 AdaptThink 算法,研究者們將其代碼和相關資源開源在 GitHub 上。開源倉庫提供了完整的實現細節,包括訓練代碼、預處理腳本、模型配置文件、評估腳本以及一些示例用例。以下是開源倉庫的主要內容和使用指南:
開源倉庫地址:見文末參考資料。https://github.com/THU-KEG/AdaptThink
倉庫內容
- 訓練代碼:基于 VeRL 框架實現的 AdaptThink 訓練代碼,支持單機和多機訓練,方便用戶根據自己的硬件配置進行選擇。
- 預處理腳本:用于處理訓練和測試數據集的腳本,包括數據格式轉換和預采樣等操作,確保數據集符合模型輸入要求。
- 模型配置:包含不同模型的配置文件,如 DeepSeek-R1-Distill-Qwen-1.5B 和 DeepSeek-R1-Distill-Qwen-7B 的訓練參數和超參數設置,用戶可以根據自己的需求進行調整。
- 評估腳本:用于評估模型性能的腳本,支持在不同數據集上的準確率和響應長度測試,幫助用戶全面了解模型表現。
- 案例展示:提供了一些簡單的使用示例,展示如何加載模型、生成推理結果以及評估模型性能,方便新手快速上手。
使用指南
1. 環境配置:使用 vLLM 0.8.2 和 Python 3.10 創建虛擬環境,并安裝相關依賴庫。具體步驟如下:
conda create -n adapt_think pythnotallow=3.10
pip install -r requirements.txt
pip install flash-attn --no-build-isolation
2. 數據準備:下載并預處理訓練和測試數據集,確保數據格式符合要求。可以使用倉庫中提供的預處理腳本進行數據處理:
bash scripts/preprocess_dataset.sh
3. 模型訓練:運行訓練腳本,根據需要調整超參數和訓練配置。例如,訓練 1.5B 模型的命令如下:
bash scripts/run_adapt_think_1.5b_deepscaler_16k_delta0.05_btz128_lr2e-6.sh
4. 模型評估:使用評估腳本測試模型性能,生成詳細的評估報告。可以使用以下命令將訓練好的模型轉換為 HuggingFace 格式并進行評估:
# 轉換為 HuggingFace 格式
bash scripts/convert_to_hf.sh
# 評估模型
bash scripts/run_eval_verl_hf.sh
5. 案例運行:參考案例展示,嘗試不同的輸入問題,觀察模型的推理過程和結果。這有助于用戶更好地理解 AdaptThink 的工作原理和實際效果。
開源倉庫不僅提供了完整的代碼實現,還通過詳細的文檔和示例幫助用戶快速上手。無論是研究人員還是開發者,都可以利用這些資源進行進一步的研究和開發工作。
實際應用場景和落地挑戰
雖然 AdaptThink 在實驗中展現出了顯著的優勢,但在實際應用場景中仍面臨一些挑戰。以下是一些常見的實際應用場景以及可能遇到的落地挑戰和相應的解決方案:
- 自動問答系統:AdaptThink 可以快速響應簡單問題,提高系統吞吐量和用戶體驗。然而,在面對復雜多輪對話時,可能需要進一步優化模型的上下文理解和推理能力。
- 智能輔導系統:AdaptThink 能夠根據習題難度自適應調整思考模式,為學生提供精準輔導。但在不同學科和知識點上的適配性需要進一步驗證和優化。
- 文本生成任務:在自然語言處理領域的文本生成任務中,AdaptThink 可以減少生成過程中的冗余內容,提高生成效率。但對于一些需要高度創造性和多樣性的文本生成任務,如何平衡推理質量和創意表達是一個挑戰。
- 圖像識別與分析:AdaptThink 的自適應推理機制也可以應用于圖像識別領域,例如在簡單場景中快速識別目標物體,在復雜場景中進行多步推理和分析。但在處理大規模圖像數據時,模型的計算資源需求和實時性要求需要特別關注。
針對這些實際落地挑戰,研究者們提出了以下解決方案和研究方向:
- 模型優化與壓縮:通過模型量化、剪枝等技術,降低模型的計算復雜度和存儲需求,提高其在資源受限環境中的適用性。
- 多領域數據訓練:利用多領域數據集對模型進行訓練,增強其在不同領域和任務上的通用性和適應性。
- 人機協作與反饋:引入人機協作機制,通過用戶反饋和交互進一步優化模型的推理策略和結果。
- 持續學習與更新:采用持續學習方法,使模型能夠不斷學習新的知識和技能,適應不斷變化的應用場景和用戶需求。
總結
AdaptThink 算法,實現了推理模型基于問題難度的 optimal thinking mode 自適應選擇,大幅降低了推理成本并提升了模型性能;最后,通過一系列實驗驗證了 AdaptThink 的有效性,為其作為優化推理質量和效率權衡的新型范式提供了有力支持。
用最簡短的語言來總結一下 AdaptThink 的原理:
AdaptThink 的原理是通過強化學習(RL)算法,利用獎懲機制來訓練模型在面對不同難度的問題時,自適應地選擇是否使用 <think></think> 這個 special token 來開啟或關閉思考模式,從而在推理質量和效率之間取得更好的平衡。
AdaptThink 在實際應用場景中具有巨大潛力。在自動問答系統中,它能夠快速響應簡單問題,提高系統吞吐量和用戶體驗;在智能輔導系統中,可根據不同難度的習題自適應調整思考模式,為學生提供精準且高效的輔導。此外,針對不同領域問題,如自然語言處理領域的文本生成任務、圖像識別領域的復雜場景分析等,AdaptThink 也有可能通過適應性調整,發揮其獨特優勢。
參考資料
https://arxiv.org/pdf/2505.13417
- Github repo - THU-KEG/AdaptThink