# [2025李宏毅ML] 第7講:DeepSeek-R1 這類大型語言模型是如何進行「深度思考」(Reasoning)的? :::success :+1: 筆記全集Book 請至: https://hackmd.io/@4j/r1U_UJ_pye/ ::: :::info 2025生成式AI時代下的機器學習_李宏毅 課程網站 https://speech.ee.ntu.edu.tw/~hylee/ml/2025-spring.php video: https://www.youtube.com/watch?v=bJFtcwLSNxI [[ppt]](https://docs.google.com/presentation/d/1lQwn837sXA9_sN0YFuPWScwFETbNbe6e/edit#slide=id.p1) [[pdf]](https://speech.ee.ntu.edu.tw/~hylee/ml/ml2025-course-data/reasoning.pdf) (20250502) ::: :::spoiler 目錄 [TOC] ::: ![image](https://hackmd.io/_uploads/ryqkvIzgll.png =500x) ## 深度思考 ![image](https://hackmd.io/_uploads/ryjlPLGxle.png =500x) ChatGPT o1/o3/o4、DeepSeek r1、Gemini 2 Flash Thinking、Claude 3.7 Sonnet ,... 以上這些模型系列 都有深度思考的行為 像內心的小劇場 ![image](https://hackmd.io/_uploads/HkLbvIMxel.png =500x) 深度思考的模型 會經過思考過程,才產生答案 ▪ 模型思考的過程包含: Verification 確認、Explore 探索、Planning 規劃 --> 這種行為稱為 **「推理」(Reasoning)** 是一種 **test-time compute** (在測試階段投入更多算力,可能可以得到更好的結果) >![image](https://hackmd.io/_uploads/HJXQDLzelx.png =500x) ex: AlphaGo 在測試階段進行了耗算力的 Monte Carlo Tree Search 腦內模擬下好幾步的狀況,找出勝率最高的位置 ![image](https://hackmd.io/_uploads/BJm4DUzegl.png =500x) ▪ **test-time scaling** 思考越多結果越好 把算力投注在 testing time(更深/廣的樹),可大量減少在 training time 的運算資源 ## ----打造「推理」語言模型的方法---- ![image](https://hackmd.io/_uploads/Hy04vLzxgx.png =500x) 不用微調參數:更強的思維鏈、給模型推論工作流程 需要微調參數:教模型推理過程、以結果為導向學習推理 ## 1.更強的思維鏈 (Chain-of-Thought, CoT) ![image](https://hackmd.io/_uploads/HyViPIMexg.png =500x) ![image](https://hackmd.io/_uploads/ryp0vIGgxl.png =500x) 先列出解題過程再給出答案 ▪ **Few-shot CoT**:給一些範例引導 ▪ **Zero-shot CoT**:不用給範例 直接跟他說"Let's think Step by Step" 上述22年以前的 都算 **"Short CoT"**,現今推理模型的算是 **"Long CoT"** (沒有固定的標準) ▪ **Supervised CoT**:把思考的方式跟流程寫在 prompt 內的方法 ![image](https://hackmd.io/_uploads/SyDkuUMeel.png =500x) ![image](https://hackmd.io/_uploads/ryXg_8feel.png =300x) ![image](https://hackmd.io/_uploads/rJy-dLMell.png =300x) 他會自己亂驗算再略過XD 不是所有模型都有能力根據複雜指令做 Long CoT --> **只適用於較強的模型** (ex: llama3 無法) ## 2.給模型推論工作流程 ![image](https://hackmd.io/_uploads/H1D-OIzele.png =500x) ![image](https://hackmd.io/_uploads/B1j7O8zxle.png =500x) 讓模型對同一個問題回答多次 ![image](https://hackmd.io/_uploads/r1SSOIGeex.png =500x) Large Language Monkeys 無限猴子 橫軸:解題次數 --> 讓他試更多次 總是會有機會賽到答案 (對於稍微好的模型) ![image](https://hackmd.io/_uploads/SJrrdLGeee.png =500x) but 哪一個才是正確答案? ▪ **Majority Vote**:多數決投票 (可先指定模型要將答案夾在特殊符號token中間, ex:`<answer></answer>`) ▪ **Confidence**:依產生答案時的 confidence 決定 ![image](https://hackmd.io/_uploads/HJxHHuLMeee.png =500x) Majority Vote 其實很強,常作為 baseline (圖)產生越多的結果後 再做 Majority Vote 可得到越高的準確率 ![image](https://hackmd.io/_uploads/HJGPdUGxee.png =500x) ▪ **Best-of-N**:加上 Verification 用一個 驗證器Verifier(也是語言模型) 來評分各個答案 ![image](https://hackmd.io/_uploads/ry_TdIGlge.png =500x) 也可以對驗證器加以訓練,用input跟gt 訓練他要輸出對應分數 ![image](https://hackmd.io/_uploads/Syj0u8fllx.png =300x) ![image](https://hackmd.io/_uploads/BkXyt8zlgl.png =300x) 模型解題 有分 **parallel** 與 **sequential** 也可以同時使用 **parallel+sequential** ⭡⭡⭡ 以上都是 產出結果後 才驗證 ⭡⭡⭡ ⭣⭣⭣ 以下為 **對中間的步驟進行驗證** ⭣⭣⭣ ![image](https://hackmd.io/_uploads/SJhkKIGelx.png =500x) 在中間想一半就邊驗算 ![image](https://hackmd.io/_uploads/S1ElFUfggl.png =500x) **- 怎麼停止** 讓他想完"一步",就先停止 (透過下 prompt 方式,遇到`<step>`就停止) 再用一個驗證器(process verifier)評分,是對的才往下做 ![image](https://hackmd.io/_uploads/ByJsC7Qlgx.png =300x) ![image](https://hackmd.io/_uploads/SkBWtIGegx.png =300x) **- 怎麼得到 precess 的 verifier** 因 training data 只知道 input 跟 gt, 不知中間產物 故要從 step1 繼續去解題做很多次,算正確的比例 把這個分數 拿來教 process verifier 訓練 --> **process verifier** 表示從這一步繼續做下去後得到正確答案的機率 ![image](https://hackmd.io/_uploads/SkLMt8Mllx.png =300x) ![image](https://hackmd.io/_uploads/S1b7tUGegl.png =300x) ![image](https://hackmd.io/_uploads/H1i7t8Mggx.png =500x) ▪ **Beam Search**:每次保留 N 條路徑 (ex:每次只選最好的兩條) ![image](https://hackmd.io/_uploads/SycEFUfege.png =500x) 結果 Majority Vote --> Best-of-N --> Beam Search 1B 的模型利用這些方法就有機會超越 8B 模型! ![image](https://hackmd.io/_uploads/SJXBYIzgll.png =500x) ▪ **Heuristic Search** 有更多變形解法套用在 LLM 推理中,可自行參考 ![image](https://hackmd.io/_uploads/H1D8YUMele.png =500x) 接下來兩種方法都是要做微調參數的 可視為上禮拜後訓練方法的特例 ## 3.教模型推理過程 (Imitation Learning) ![image](https://hackmd.io/_uploads/rkxDtUGggg.png =500x) 老師直接教模型怎麼做推理 (模仿老師) ![image](https://hackmd.io/_uploads/HksTtLzxgx.png =500x) 難點: 推論過程哪裡來? ### 想辦法生成推論過程的訓練資料 ![image](https://hackmd.io/_uploads/ByPCYIfxeg.png =500x) a. 當答案是對時,就假設推理過程也是對的,將此作為訓練資料 b. 找一個 verifier 判斷是不是對的 (確實也無法保證答案對 過程就對) ![image](https://hackmd.io/_uploads/BkgeqUflee.png =500x) ▪ **rSter-Math** (更確保中間步驟的正確) 展開樹 對每步做驗證 比較有可能的才會繼續走 應走到最後確認ans是對的 才會認為中間是好的過程 再將這些步驟和起來當 reasoning processing 給模型學習 ![image](https://hackmd.io/_uploads/BJ5gqIfexe.png =500x) 也可以像 Reinforce Learning 方法 直接跟他說 要 提高/降低這條 path 的機率 ### 發現不用每一步都是對的 ![image](https://hackmd.io/_uploads/r1NWqUfegl.png =300x) ![image](https://hackmd.io/_uploads/SJxMcUGgll.png =300x) o3 能找自己的問題 推論中間有錯沒關係 只要他最後能答對就好 如果只給他看每步是對的資料,會出問題! --> **他會沒看過錯誤的過程! 不知道遇到錯要改正** 要教他知錯能改 ![image](https://hackmd.io/_uploads/SJkXqIzgge.png =500x) ▪ **Stream of search** 故意走錯的路 再回頭走別的 中間插入一些verifier的回饋當連接詞 那這一串當訓練資料 ![image](https://hackmd.io/_uploads/ByimqUfxxx.png =500x) ▪ **Journey Learning** 不能只給每步都對的資料(shortcut learning) 要讓模型走一些錯誤的路徑 製造一些reasoning的過程 讓他學會逆轉勝 這樣的結果會好很多 ### Knowledge Distillation ![image](https://hackmd.io/_uploads/BJNN5Iflle.png =500x) 現在已有多種厲害的 reasoning model 我們只要對他學習就好了,不用自己產資料 ![image](https://hackmd.io/_uploads/Hk8rqIzeeg.png =500x) ex: 上方是厲害的模型 下方是 deepseek r1 當老師,去教紅框內模型怎麼做 reasoning 學習後在各個博士級項目賽上都可以相提並論了 ## 4.以結果為導向學習推理 (Reinforcement Learning, RL) ![image](https://hackmd.io/_uploads/S1JUc8zxxl.png =500x) 使用RL,以結果為導向來教模型 --> deepseek-r1 的做法 (這是 DeepSeek-R1 主打的方法,雖然其他三種在 DeepSeek-R1 的訓練過程中也有使用) ![image](https://hackmd.io/_uploads/SJT0q8zlxx.png =500x) 推理過程內容不重要,最後答案是對的就好,就給他 positive reward **完全不在意推論的過程** ex: 全用正確率當 reward 來訓練,得到 deepseek-r1-zero model ![image](https://hackmd.io/_uploads/SJj1i8Meee.png =500x) 藍色(r1-zero做一次就對的機率)可逼近綠線(o1做一次就對的機率) 做多數決的話 紅(r1-zero)可以超越紫(o1) --> 其實4個方法是不衝突的 可以併用,**訓練時用 RL 調整參數,inference 時用 majority vote 提升** ![image](https://hackmd.io/_uploads/rJrxoIfgxl.png =500x) Aha Moment 的出現證明 resoning 這是模型自己得到不是人為的 ![image](https://hackmd.io/_uploads/HyrWiLfeeg.png =500x) 但 r1-zero 的推論過程很難讀(混亂且夾雜各語言) 因為我們只在意答案結果 所以此版本並沒有釋出給大家用 ![image](https://hackmd.io/_uploads/B1kMoIMgxe.png =500x) ▪ **deepseek-r1 的產生** -由 deepseek-r1-zero 產生 resoning preocess,並人工修正 -用此組資料(僅千筆) imitaion learing 重新訓練 deepseek-v3-base,得到 model A -modle A 再做 RL 訓練出 model B,這邊除了用 accuracy 當 reward,還會在意 language coherence(推論時是用同一種語言) ![image](https://hackmd.io/_uploads/B1wGo8fxxg.png =500x) -讓 model B 學習各種任務,以 deepseek-v3 當 verifier -用此組資料(60w筆) imitaion learing 重新訓練 deepseek-v3-base,得到 model C -modle A 再做 RL 訓練,強化 safety 跟 helpfulness 的能力 ![image](https://hackmd.io/_uploads/BkYQoLflll.png =500x) resoning 過程沒有太多人類的監督,所以講話還是有點怪怪的 ![image](https://hackmd.io/_uploads/ByMNsLfllx.png =500x) ▪ **Foundation Model 很重要** -RL 很吃 Foundation Model 的能力 換成用 Qwen-32B-Base 就無法大幅強化其能力 :( -Imitation Learning (向 DeepSeek-R1學習) 對 Qwen-32B-Base 反而比較有效 **--> RL 是強化模型"原有的"能力** :+1: 想想RL的做法是 模型產生正確答案時你告訴他這是好的 那這個前提是模型要先能夠產生正確答案! ![image](https://hackmd.io/_uploads/SyrUjUMexl.png =500x) 所以有論文討論 aha 這些行為 其實是模型原有的能力 ![image](https://hackmd.io/_uploads/rk1wiLfxle.png =500x) --- ![image](https://hackmd.io/_uploads/SyUvoIGgex.png =500x) ex: 無謂的 reasoning (又臭又長) ![image](https://hackmd.io/_uploads/HkAPsLzgxl.png =300x) ![image](https://hackmd.io/_uploads/ryuOo8zxxl.png =300x) ![image](https://hackmd.io/_uploads/ryZFs8zexe.png =300x) ![image](https://hackmd.io/_uploads/r15FiUfxge.png =300x) ![image](https://hackmd.io/_uploads/r1r5iIMllg.png =300x) ![image](https://hackmd.io/_uploads/HkAqs8Gglg.png =300x) ![image](https://hackmd.io/_uploads/HJ3ss8fexl.png =300x) ![image](https://hackmd.io/_uploads/rkunsLGgge.png =500x) 下回預告:推理模型的挑戰與未來發展 真的需要產生這麼長的推論過程嗎?有沒有辦法縮短推論過程 --END--