https://www.youtube.com/watch?v=6YnLB0XbTnI
CS329A 的第一堂課,講者花了大半時間講過去五年這條線怎麼走過來。2018 到 2024 年,大家靠更多算力、更多資料、更多參數,把 test loss 一路壓下去;2024 年前後這條路開始飽和,下一個把模型變強的來源搬到了推論端:同一個模型不動,讓它多生幾個答案,再用 verifier 把對的那個挑出來,挑出來的東西接回訓練,就變成自我改進的迴圈。agent 則是把單輪的 chat 拉長成多步驟的真實任務,要它自己規劃、動手、看回饋、決定什麼時候停。這門課要處理的,是這條鏈上每一段還卡在哪裡。
課是秋季班第一堂。台上兩位講者是 Akanksha 與 Azalia Mirhoseini。Akanksha 是史丹佛的兼任教授,同時在 Reflection AI 做研究;Azalia 是資工系助理教授。兩人是當年在 Google Brain 認識的,後來都在 Google DeepMind,Azalia 另外在 Anthropic 做過 Claude。這是這門課第二次開,教材與課程進行方式都改過。
2018 到 2024:三條曲線,一條往下掉的 loss
GPT-3 之後最讓人吃驚的事很單純:參數變多,模型就變好。BERT 和 T5 已經是不錯的模型,但參數加上去之後,表現是另一個檔次。這件事後來被寫成一組 scaling law,畫成三張圖,x 軸分別是 compute、資料集大小、參數量,y 軸都是 test loss,三條線一致往右下走。這是 GPT-3 之後 ChatGPT、PaLM、Gemini 那一整代模型的共同基礎。
模型尺寸的實際演進,講者也列了一輪:BART 3.4 億個參數,GPT-2 15 億,GPT-3 1750 億,PaLM 5400 億,GPT-4 外界估計已經到上兆。2018 到 2024 年,這條線幾乎是照指數在長,large 這個字說的就是它一直在變大。講者自己也說,這張圖有點過時了;而這條路在最近一年開始碰到某種飽和點。
變大之後,benchmark 成績持續變好,也冒出了以前沒見過的能力。few-shot learning 是一個,以前要為一個特定領域微調一個模型,現在只要給幾個例子,它就能照著同樣的格式推理,做原型變得非常快;emergent behavior 是另一個,某些能力只在夠大的模型上才冒出來。講者順手把 zero-shot 與 few-shot 分清楚:只給任務描述(例如 translate English to French)然後直接問答案,是 zero-shot;描述之外再附幾個範例,是 few-shot。這兩個能力是 GPT-3、PaLM 那一代解鎖的,後面的推理進展可以說是從這裡長出來的。
CoT 不是誰設計出來的,是模型變大之後冒出來的
scaling law 是可以預測的曲線,但有些行為是模型變大之後才出現,事前沒人預測得到。Azalia 說,這裡面最重要的是 chain of thought。
她用的例子是一個小學數學題:Roger 有五顆網球,又買了兩罐,每罐三顆,總共幾顆?一種 prompt 是只給答案 11;另一種是把過程寫出來,5 加上 2×3 等於 11。把推理過程示範過一次,模型就比較知道怎麼走到答案,也能把這個過程套到新題目上。這題現在任何 10 億參數的模型都會做,不需要範例、也不需要 CoT;但 CoT 這個性質一路留到現在,是這一年 reasoning model 與 thinking model 進展的關鍵。
它跟模型大小有關。LaMDA 8B、當時 GPT 系列大約 7B 的版本,套上 CoT 幾乎沒差;要 PaLM 這種規模的模型才開始吃到好處。其他 emergent 能力也是這樣,模組化算術、字母重排(unscramble)這類題目,要在某個尺寸之上才突然會做。講者說,frontier lab 之所以還願意繼續推 scaling law,就是為了這些現在還看不到、但遲早會冒出來的能力。
這些能力不是被設計出來的。Akanksha 的說法是,當初把難題丟給模型,是看到「把推理寫出來」之後表現變好才發現的。第一個給出跡象的是 GSM8K 那篇論文,到了 PaLM 這種規模才變成一件大事,其中一個讓人印象深刻的例子是它會解釋笑話。Azalia 補了一個區分:CoT 本身是 emergent,但今天的 reasoning model 是被訓練成要思考的,模型會慢慢收斂到「知道什麼時候該想很久、什麼時候不必」。
ChatGPT 那一跳:pre-training 之上的三步
ChatGPT 2022 年 11 月發表,五天達到一百萬個使用者,比先前那些知名服務都快。Azalia 說,除了把參數變大,還有兩塊創新是它跟 GPT-3 拉開差距的關鍵:instruction tuning 與 RLHF。她把整條管線從頭走了一遍。
pre-training 是最簡單的一步,就是拿各種文本與資料訓練模型預測下一個 token。這樣練出來的模型讀過整個網路與書本,但沒有是非概念,只有對世界的統計知識,也不特別會照指令走。接著是把模型對齊人類偏好:用大量人工整理的高品質資料(書、創意散文,企業願意花幾百萬甚至上億美元買的那種)繼續做 next-token prediction 的微調,把模型往人類的目標與價值推。講者強調,對齊到現在都還是沒有被解決的大問題。
再來是 instruction tuning。資料是 instruction 加上問答配對,來源是人工產的、模板產的,加上合成資料;除了單純的問答,也有 CoT 式的 fine-tuning,把解題過程與答案一起示範給模型。這個階段的資料品質與涵蓋廣度,直接決定模型最後的品質。走到這裡,模型已經很接近今天的樣子:能來回對話,知道怎麼理解一個問題、怎麼走一段流程給出答案。
最後一步是 RLHF,跟前面最大的差別是資料與目標函數的產生方式。不再是「題目配標準答案」的監督式資料,而是請人(有時是專家,有時是一般人)對模型的產出評分,做出一個 reward model,再用它引導 LLM 往「reward model 說好」的方向走。評分維度可以是正確性、helpfulness、specificity、無害性,看你在意什麼就給哪個維度多少權重。這幾步合起來,就是 ChatGPT 跟 GPT-3 之前那些模型的差別。
推論端也要 scaling:一萬個樣本,一顆 verifier
一年半以前,pre-training 加 fine-tuning 是主要戰場;現在 inference 也是能力的前沿。Azalia 說,這條線她實驗室去年夏天就開始做了,專案叫 Large Language Monkeys,靈感來自無限猴子定理:讓猴子一直打字,總有一天會打出莎士比亞。她們把 LLM 當那隻猴子:同一個題目問很多次(parallel sampling),再靠一個 verifier 或選擇機制挑出對的那個當輸出。verifier 可以是 unit test,程式題跑測試,看哪一份程式碼全過。
這件事可行的原因是模型的生成不是決定性的,同一個 prompt 每次答案都不一樣,而 temperature 可以控制變異的程度。實驗在 math 與 coding benchmark 上把每題的樣本數從 1 拉到 10,000,量的是 coverage,也就是至少有一個樣本解對的比例。結果是 Llama 3 8B 與 70B 在只給一個樣本時都比 GPT-4o 差,樣本數一多,兩者都反超 GPT-4o。講者的說法是,模型知道的其實比只問它一次拿到的多很多。有些題目一萬個樣本裡只有三、四個是對的,這也說明了把 inference 拉大有多重要。
有兩個邊界要講清楚。verifier 只在可驗證的領域好用;沒有 verifier 的地方,得靠 LLM-as-judge、把 LLM 當 reward function,或讓 LLM 拿工具去驗,這門課有一整堂在講 verifier。另外,temperature 不是越高越好,太高會變亂碼,一般超過 1.2 就不太行,想要更多樣性得用別的方法。至於延遲,平行採樣的好處是可以同時跑,latency 相對不是問題,真正的取捨在成本,而成本跟題目的類型與複雜度有關。這不是暴力搜尋:可能答案的空間比一萬大得多,而且答案得先被模型生出來才存在,10,000 個樣本其實算是取樣效率很高,尤其 IMO 等級的難題,一顆 7B 的 Llama 偶爾也能解出來。
推理模型:把推論端的算力接回訓練
DeepSeek、Gemini 的 thinking 系列,核心創新是把 fine-tuning 跟 test-time scaling 接在一起。有了 test-time scaling,模型本身就是一台合成資料的引擎:數學題有標準答案,就讓模型在推論時生出一堆通往那個答案的推理;程式題就生出大量可用的高品質資料。這些產出回頭變成訓練集,拿去微調模型。這就是「自我改進」最核心的一塊,Azalia 說這是她們最興奮的地方,因為 test-time scaling 看起來沒有明顯的天花板。
O1 則示範了另一件事:test-time compute 拉高,pass@1 在 AIME(一組很難的數學題)上以對數線性往上走。過去這種曲線只有訓練端看得到,現在不改變參數量,光在推論端加算力也成立。
推理模型在做的事,講者用人類來比擬:難題要想比較久、要試不同策略。它會先分析題目要什麼,再把大題拆成好處理的小題;中間會自己評估,跑個測試、按個計算機,或自己判斷答案再拿回饋調整;這條路走不通就回溯,換一條替代方案。其中一部分是人工整理的訓練資料教會模型的,但很大一部分是模型在 fine-tuning 與 RL 的過程裡,從合成資料自己學到的。
課堂上播了 O1 寫 bash 腳本把矩陣轉置的例子。模型先自言自語:使用者要的是 bash script,先弄清楚輸入輸出的格式;接著拆解:解析輸入、把矩陣建成 array of arrays;中間還出現「等等,這裡的形式不對」這種自我修正。Azalia 說,這跟 prompt 裡的 CoT 差別在於,這串思考是模型自己生的。她也比較了推理模型與 GPT-4o:數學計算、資料分析、程式設計這類推理任務上全面勝出,個人寫作、文字編輯這類就不一定。
至於推理模型的進步,是「把思考講出來」這個動作造成的,還是資料造成的,課堂上也討論過。Akanksha 的說法是,pre-training 完的 base model 其實已經會做一些推理,但它會生出很多條不同的推理鏈,而且不知道哪一條對;訓練端與推論端的 scaling,有一大部分在教它「哪一條是對的」,所以 pass@1 往上走,對照組是 repeated sampling 的 pass@K 或 coverage。
拆成兩顆模型的話,推理鏈通常交給大的那一顆,再讓小的模型把答案整理出來;推理能力本來就是隨模型大小上升的。有意思的是,模型比較喜歡自己的推理痕跡,就算是更好的模型產的也一樣。至於推理模型是怎麼被教會推理的,Akanksha 直說沒有公開研究講清楚,大概是兩者都有:base model 本來就有思考的底子,instruction tuning 的資料裡又充滿 CoT 的示範,剩下的靠模型自己泛化;課程會講 outcome reward model 與 process reward model 怎麼給回饋。
從 chat 到 agent:目標、工具、驗證、停手
Akanksha 把線拉到 agent。她說,LLM 不管是當 chatbot 還是 reasoning model,基本還是單輪、還是 chat 格式:好玩,但沒有真的替你把一件事做完。這一年的變化是 Claude Code、Deep Research 這類 agent 開始跑真實世界的工作流。她舉的例子是,如果你要到史丹佛上一門課、想找個地方住一年,agent 會去看很多網站、做分析,最後給你幾個選項的優缺點。這種事以前做不到。Claude Code 或 OpenAI 的 Codex 也一樣:用英文下指令,它就改檔案、想測試案例,已經是工程師日常的生產力工具。
chatbot 跟 agent 的分界,她定義得很清楚:agent 拿到一個目標,會自己規劃步驟、跟環境互動、根據回饋修正,直到達成目標,或回來告訴你做不到。有目標、有動作、有回饋、知道自己什麼時候該停,這四件事湊齊才算。過程中它要用模型以外的工具、從工具拿輸入,還要有某種記憶來追蹤任務。
現實是,簡單的情境(例如 deep research)可以端到端做完,但多數場景還是很靜態的工作流。今天存在的東西比較接近 agentic workflow:一顆模型給出解法,另一顆當評審決定收不收;或是像 deep research 那樣,對多個輸入平行呼叫 LLM,再把結果聚合成一份摘要。她形容投影片上的方塊和箭頭簡化到有點卡通,但業界多半真的是這樣:與其做開放式的迴圈,不如先照人類的做法把手繪的流程圖搭起來,回饋交給 LLM evaluator。
她把工作流拆成幾種呼叫:問模型、用 verifier 或 judge 收件(也就是 LLM-as-judge),需要的時候再叫搜尋、查天氣這類 tool call,最後把它們編排起來。最簡單的編排是 prompt chaining,把任務拆成子任務串起來;難度分流(routing)決定要跑複雜還是簡單的流程;平行化適合 deep research 這類多個關鍵字同時查再聚合的工作;orchestrator 則是用一顆中央的 LLM 做規劃,Claude Code 就有一個先產出計畫、再照計畫發後續 LLM call 的結構。這些工作流對模型的要求是一組新的能力:更會規劃、更會多步推理,還要更會自我改進,也就是犯錯之後能自己修回來。
coding agent 的迴圈是課堂上最具體的例子:LM agent 透過終端機跟電腦互動,你叫它實作一個測試,它去翻 repo、搜檔案、看檔案、改行,然後在終端機跑一串指令;看輸出再決定要去改另一個檔案,還是去看別的檔案。Akanksha 說這個迴圈去年還不太可靠,這一陣子才開始穩定。架構其實沒大改,改變的是模型本身與 RL:可驗證獎勵的 RL 有效,training-time scaling 有效,而且自我改進的迴路會接手,因為模型現在生得出測試,測試又可以拿來驗模型自己生的程式碼。去年課程講過的 Code Monkeys 就是這個做法:讓模型為自己產出的程式碼生 unit test,再看這些測試有沒有讓東西變好。
卡點在驗證:generator-verifier gap
Azalia 把問題講白:如果有好的 verifier,模型就能生出對的程式碼;問題是要怎麼得到好的 verifier。Akanksha 接著講 generator-verifier gap:模型很容易生出一堆胡說八道,或是一堆看起來合理的推理痕跡、看起來有用的內容;但到底有沒有用,需要回饋迴路才知道。創意寫作能拿到多少回饋?到最後人類回饋會變成瓶頸。有客觀回饋的領域可以持續進步,但要拿到 robust 的驗證很難,而驗證一直是這個領域的瓶頸之一。Azalia 在課堂上會講她實驗室的一篇論文,談怎麼把不同的 verifier 組合起來。
至於 RL 有用還是 pre-training 的資料有用,課堂上沒有共識,能確定的是兩邊都有幫助。有個直覺是這樣:如果 pre-training 已經讓模型在大量樣本裡至少生得出一個正確答案,那 RL 給的回饋應該只是教它把那個答案挑出來,也就是提升 pass@1(只問一次就答對的機率),不該改變模型本身的能力才對。Akanksha 說這個迴圈還沒有被完全理解,一邊開始商業化、一邊還有很多研究空間,但也有一些跡象顯示,持續做 RL 確實能繼續把模型變好。
Agent 已經在這些地方工作
課堂後半把 agent 的用途講得很實在。重複性高的工作最適合:code migration、版本升級、重構 codebase,還有資料清理與資料倉儲搬遷這類工程。客服是另一個大宗,即時轉錄、knowledge assist(客服不必背下所有知識,讓 LLM 查出來並把相關文章推到面前)、通話摘要,每一段都能拆給 LLM,端到端的部分也開始出現。再往上一層是研究報告:以前要自己做文獻回顧、逐篇摘要、再合成,現在可以整包交出去;課堂舉的例子是 2022 冬季奧運開幕式,agent 會先找出該讀哪些參考資料、排出大綱、逐篇摘要,最後合成一篇長文,這學期有一份作業就是做這件事。最遠的一格是 AI scientist:從發想、實驗迭代到論文撰寫都插手。講者自己也說模型會幻覺,但讀過整個網路讓它常常提出框外的點子,當腦力激盪的夥伴意外好用。
O3 這類模型在訓練裡看過大量完整的任務軌跡,所以能自己規劃、推理、多步推理,再給出結論;而把一個目標交出去的時候,第一件事往往是把使用者的意圖問清楚,因為需求常常沒講清楚,連「怎麼算做完」都得先講好。
課的後半,與還沒解完的那一題
課程的後半回到課堂規矩:這學期三次作業加一個專案,各佔一半成績,專案二到四個人一組,海報發表排在 12 月 12 日下午;客座講師會找 frontier lab 的人來講 post-training 的演變、機器人上的多模態 agent 這類題目。
整堂課收在一個還沒解完的問題上:驗證。模型生得出東西已經不是瓶頸,能不能便宜、可靠地判定它生出來的東西對不對,才是現在的瓶頸。驗證這一塊沒有進展,generator-verifier gap 就會一直是這條鏈上最窄的一段。