當前,AI 大型語言模型在程式碼生成能力的提升上面臨多重瓶頸:高品質的人工標註數據稀缺、教師模型(Teacher Model)的能力存在上限,而強化學習(RL)方法則面臨流程繁瑣且穩定性不足等挑戰。
日前,蘋果(Apple)研究團隊提出了一種名為「簡單自蒸餾」(Simple Self-Distillation,簡稱 SSD)的新方法。該方法的核心在於以特定的溫度和截斷配置,直接從模型自身採樣解決方案,並使用這些未經外部驗證的樣本進行標準監督微調(SFT)。
實驗結果顯示,該方法在 Qwen 和 Llama 系列的多款模型上均取得了穩定的效能提升。在 LiveCodeBench v6 基準測試中,Qwen3-30B-Instruct 模型的 pass@1 指標從 42.4% 顯著提升至 55.3%,其中在處理高難度問題時的進步尤為驚人。SSD 為提升大型語言模型(LLM)的程式碼生成能力,提供了一個互補且高效的訓練後(Post-training)新方向。
論文連結:https://arxiv.org/abs/2604.01193
無需強化學習的「簡單自蒸餾」
1. 什麼是 SSD?
SSD 的實施流程主要包含三個步驟。首先是數據合成,研究者從基礎模型中以較高的溫度和特定的截斷配置採樣生成程式碼解決方案,每個問題僅採樣一個解;接著是訓練階段,直接使用這些未經人工或執行環境驗證的原始輸出作為目標,進行標準的監督微調;訓練完成後,使用經過微調的模型,並在特定的解碼參數配置下進行評估測試。
該方法具有顯著的獨特性。整個過程完全不依賴程式碼執行環境或測試用例來驗證答案的正確性。同時,它不需要引入更強大的教師模型,也不涉及複雜的強化學習演算法。在數據合成階段,甚至不需要過濾掉錯誤的解,模型生成的所有原始輸出都會直接用於訓練。
圖 | SSD 方法極其簡潔,但在涵蓋兩個系列、三種規模的五個模型中,無論是指令遵循(Instruct)還是思維鏈(Thinking)變體,都能在 LiveCodeBench v6 中帶來顯著提升。基礎模型的 SSD 樣本在訓練階段採用解碼溫度 $T_{train}$ 進行解碼,基於原始輸出數據進行微調,評估階段則使用 $T_{eval}$ 進行解碼;該模型未採用強化學習、驗證器、教師模型或程式碼執行環境。
2. 實驗結果
基於 SSD 方法,在 LiveCodeBench v6 基準上,Qwen3‑30B‑Instruct 模型經過 SSD 訓練後,pass@1 從 42.4% 提升至 55.3%,相對提升幅度達到 30.4%。在更大的 LCB v5 基準上,該模型的 pass@1 也從 45.8% 提升至 54.3%,增加了 8.5 個百分點。
圖 | LiveCodeBench v6 在 Qwen3-4B-Instruct 和 Qwen3-30B-Instruct 模型上的整體難度、中等難度及高難度測試集表現(橙色代表 4B 數據集,藍色代表 30B 數據集;斜線表示基準測試,實線表示+SSD 數據集)。底部註釋清晰呈現了整體趨勢:所有五個評估模型均取得進步,其中 Qwen3-30B-Instruct 的相對通過率提升幅度達 30%,且最大提升出現在高難度測試任務中。
這種提升具有普遍性。該方法不僅在 Qwen 系列模型上有效,在 Llama 系列模型上也表現良好。實驗覆蓋了 4B、8B 和 30B 等多種不同規模的模型。無論是 Instruct 版本還是 Thinking 版本,應用 SSD 後都能獲得性能的显著提升。
研究還發現了一些關鍵規律,性能提升主要集中在中等難度和困難題目上。在困難題目上,Pass@1 指標提升了 15.3 個百分點。值得注意的是,Pass@5 的提升幅度超過了 Pass@1。這表明 SSD 並沒有讓模型變得單一化,反而增強了模型的探索能力。
圖 | SSD 在 LiveCodeBench 上提升了所有被評估模型的性能,其中在中等難度和高難度問題上提升幅度最大。結果展示 LCB v6 和 LCB v5 數據集的表現,按難度分級並按推理風格(思考型與指令型)分組。在每個模型對中,第一行是基礎模型,第二行是加上 SSD 後的模型;單元格的陰影顏色表示相對於基礎行的變化(綠色表示改進,紅色表示下降)。
如此簡單的方法為何有效?
研究指出,SSD 的有效性源於它能夠重塑模型的內部機率分佈,從而解決了程式碼生成中精度與探索需求之間的衝突。
程式碼生成過程中存在兩類特定位置。第一種是鎖(lock),其分佈呈現尖銳峰態,其中極少數 token 攜帶大部分品質,而較長的干擾尾部則承載其餘部分,這類位置需要高度的精確性。第二種是叉(fork),分佈橫跨多個合理的 token 位置,可能導致下游延續產生顯著差異,這類位置需要探索性。
固定的全域解碼溫度難以同時滿足這兩者的要求。低溫設置能確保 lock 的精確,但會限制 fork 的多樣性;高溫設置雖然能促進 fork 的探索,卻會破壞 lock 的穩定性。
圖 | 兩種情境類型在低 $T_{eval}$ 與高 $T_{eval}$ 條件下的 token 分佈情況,其中頭尾品質分佈特徵被明確呈現。低 $T_{eval}$ 條件能保持 lock 的精確性,但會削弱 fork 的有效頭部(探索能力不足);高 $T_{eval}$ 條件雖能恢復 fork 的探索能力,卻會重新啟動 lock 的干擾尾部(精度降低)。
SSD 透過高溫採樣結合截斷操作,重塑了模型內部的機率分佈。該方法抑制了 lock 低機率的干擾項,保留了 fork 多種合理的可能性。這使得模型在推理階段能夠採用更高的溫度進行探索,同時不破壞 lock 的穩定性。
圖 | SSD 將 forks 轉變為平台狀態,將 locks 轉變為尖峰狀態。斜線條形圖與虛線曲線表示基礎模型;實心條形圖與實線曲線表示經過 SSD 優化後的模型;紅色虛線截斷線標記了 SSD 過程中保留的支持度。(a) 叉狀態:擴散尾部被修剪,但多個頂端延續結構仍保留且權重分佈更趨均衡,在可行分支上方形成寬闊平台期。(b) 鎖狀態:相同規則對尾部進行更激進的修剪,將品質集中於主導 token,形成更尖銳的尖峰形態。
研究人員透過一項極端實驗驗證了這一機制。他們將訓練溫度設定為 2.0 且不進行截斷,導致生成的數據中有 62% 無法提取有效程式碼。即便在這種訓練數據品質極低的情況下,SSD 依然提升了模型性能,Pass@1 指標提升了 5.7%。這一結果證明,SSD 的有效性並非依賴於生成程式碼的正確性,而是源於對機率分佈的重塑。
圖 | (a) 當訓練集比例 $T_{train}=2.0$ 且未進行數據截斷時,代表性樣本會退化為無意義序列;約 62% 的輸出結果無法提取有效程式碼。(b) 經過微調的模型仍優於基礎模型的 42.4%/53.5% pass@1/pass@5 指標,分別達到 48.1% 和 64.0%。
啟示
研究證實,模型可以透過僅在其自身的原始輸出上進行訓練,來實現程式碼生成能力的改進。在五個不同的模型上,SSD 均一致地提升了在 LiveCodeBench 上的表現,且收益主要集中在難度較高的問題上。
程式碼生成結合了「精度受限鎖」(precision-bound locks)和「探索受限叉」(exploration-bound forks)。SSD 透過重塑 token 分佈,使得解碼過程能夠探索有用的分支,同時避免了引入干擾噪聲。這些發現表明,現有的強大程式碼模型內部潛藏著尚未被利用的能力,這種能力可以透過簡單的方法「解鎖」,而無需依賴驗證器、教師模型或強化學習。
作者:王躍然
如需轉載或投稿,請直接在本文章評論區內留言。