所有分類全部 deep-dive guide debug project 預訓練完的模型很會接話,卻不一定會照指令做事。這一堂前半講 post-training 的兩步:instruction tuning 用大量不同任務教模型讀懂任務描述,RLHF 再讓模型朝人類偏好的整份回答靠攏,中間靠 reward model 與成對比較解決人力與評分不一致的問題,DPO 與 KTO 則把強化學習那一段拿掉。InstructGPT 與 ChatGPT 就是這兩步串起來。後半講 LLM adaptation:模型太大、整個微調太貴,所以只訓練少量參數,做法有 Adapter、LoRA 與 prompt tuning,沒有哪一種在所有任務都最好。
預訓練是在知道任務之前,先讓模型從大量無標註資料學通用能力。架構分三類:encoder 看兩邊、適合理解;decoder 只看左邊、能生成,是目前勝出的一類;encoder-decoder 用去噪預訓練。預訓練加微調有兩個難關:標註資料少、模型太大。GPT-3 的 in-context learning 不更新參數就能做任務,接著出現 hard prompt(template 加 verbalizer、LM-BFF)與直接訓練向量的 soft prompt(P-Tuning、Prefix-Tuning)。當時 soft prompt 效果較好,但最後留下來的是完全不訓練的 prompting。
語言模型把知識存在參數裡,冷門的記不熟、訓練後發生的不知道、公司內部文件沒看過,而且答案無從查證。RAG 的做法是讓它開書考:先依問題檢索相關段落,再連同問題一起交給模型回答。這一堂依序講檢索怎麼做(切段、sparse 與 dense retrieval、bi-encoder 與 cross-encoder、沒有標註資料時怎麼訓練 retriever)、檢索前後還能加什麼(改寫問題、重排序、多次檢索)、RAG 的幾條發展路線(檢索什麼、怎麼用、何時檢索),最後比較 prompting、RAG 與 fine-tuning 各適合什麼情境。
預訓練資料快用完之後,模型的進步改從「回答前多想一點」來。ADL 第 12 堂分兩半講這件事。前半是 test-time scaling:模型不動,推論時多花運算資源,做法有 short CoT、平行多答幾次再選(多數決、答案信心、outcome reward model)、用 process reward model 逐步評分並搭配搜尋,以及循序修改。後半是 learning to reason:要更新權重,資料可以來自人、來自模型自己產生再篩選、或來自更強的老師模型,也可以像 DeepSeek-R1-Zero 那樣只給答案對錯、用強化學習讓模型自己長出推理行為。
這一堂有一條主線:語言模型要估計一串詞出現的機率,做法是一次預測下一個詞。先講詞怎麼表示,從字典、one-hot、共現矩陣走到低維的 word embedding。再講語言模型的三代:n-gram 用數的,沒看過的組合機率是零;neural LM 用網路預測,相近的詞自動分到機率;RNN LM 把所有前文累積在 hidden state,每個時間點共用同一組權重。RNN 用 BPTT 訓練,同一個矩陣乘很多次會讓梯度消失或爆炸,爆炸用 clipping,消失靠 LSTM、GRU 的 gating。最後依輸入與輸出的形狀,把應用分成整句分類、tagging 與 encoder-decoder。
ADL Fall 2025 課程頁排了 7 堂助教課、10 支影片:Colab 與 PyTorch、ipdb 除錯 → NLP 專案的一生 → 四種 NLP 任務的資料格式 → LoRA 與 QLoRA → scaling law、LLaMA 架構與 MoE → 量化與評估 → 用 vLLM 部署。影片是助教在 2023 與 2024 年錄的,Fall 2025 沿用,影片裡說的作業一、作業三是當年的作業。課程頁上的 5 份講義連結都 404,同名檔在 Fall 2024 路徑可以打開,Deployment 只有影片。本文依影片口述逐堂整理助教實際示範的步驟與提醒,附可以手算的例子。
手上有 T 個假說 gₜ 時,除了用 validation 挑一個,還可以一人一票(uniform blending)、學一組票數(linear blending)或再學一個模型來組合(any blending,也叫 stacking)。這堂用一段六行的代數證明:平方誤差下,平均後的 G 不會比 gₜ 的平均表現差,差距就是 gₜ 之間的分散程度,也就是 variance。最後用 bootstrap 從唯一一份資料重抽出 T 份,各訓練一個 gₜ 再投票,就是 bagging。
基石用 16 堂回答四個問題:機器什麼時候學得會、為什麼學得會(Hoeffding、成長函數、VC 維度)、怎麼學(線性迴歸、邏輯迴歸、非線性轉換)、怎麼學得更好(正則化、驗證)。技法再用 16 堂講三種處理特徵的方法:kernel 把特徵嵌進高維(SVM)、aggregation 把多個假說合起來(AdaBoost、隨機森林、GBDT)、extraction 從資料學出隱藏特徵(神經網路、矩陣分解)。130 支 YouTube 影片免費;練習用 Fall 2024 公開的 HW0–HW7。
決策樹是邊學邊做 conditional aggregation 的模型:每條從根到葉的路徑是一個條件,葉子是一個常數。C&RT 每次用一個 decision stump 把資料切成兩份,挑加權不純度最小的切法,切到不能再切為止;這樣長出來的樹 E_in 幾乎都是 0,所以要用「E_in 加 λ 乘葉子數」剪枝,λ 用 validation 選。同一套遞迴還能處理多類別、類別特徵與缺值。
這堂課先證明只靠資料 D 推不出 D 以外的答案(No Free Lunch),再加上一個假設:資料與未來的輸入都從同一個分布獨立抽出。Hoeffding 不等式於是保證,一個事先固定的假說 h,E_in 與 E_out 相差超過 ε 的機率不超過 2exp(−2ε²N)。演算法要從 M 個假說裡挑,上界乘上 M 變成 2M exp(−2ε²N);假說有限、資料夠多、E_in 又小,學習就可行。
技法第 16 堂沒有新模型,它把前 15 堂的模型改用三個問題重新分類:特徵藏在哪裡(kernel、aggregation、extraction、低維投影)、誤差怎麼降下來(梯度、等價問題、拆成多步)、模型太強時怎麼踩煞車(正則化、驗證)。本文用八個點把 PCA 加 AdaBoost-Stump 從頭算完,三個問題各對一次答案;最後保留 Fall 2024 校內課補上的 ReLU、Xavier/He 初始化、momentum、RMSProp 與 Adam。
Fall 2024 的基石作業共六份:HW0 是 20 題數學先修選擇題;HW1–HW5 每份 12 題加 1 題 bonus,Q1–4 自動批改、Q5–12 助教批改,程式題用 LIBSVM 網站上的 rcv1、cpusmall、mnist 資料,HW5 要用 LIBLINEAR。HW1、HW2 各有一題要你拿 ChatGPT 類工具的回答來反駁。Fall 2026 已公開 hw0 與 hw1:hw1 改成 16 題全選擇題、抽 4 題由助教細改,資料換成課程自己給的 hw1_train.dat;新 policy 允許用 AI 與 vibe coding,但 AI 產生的程式要逐段用自己的話寫註解。兩個學期都沒有公開官方解答。
soft-margin SVM 的 ξₙ 可以直接寫成 max(1 − yₙ(wᵀzₙ + b), 0),整個問題就變成 ½wᵀw 加上 C 乘以 hinge 誤差的總和,是一個 L2 正則化模型,C 對應 1/(2λ)。hinge 誤差和邏輯迴歸的 cross-entropy 都是 0/1 誤差的凸上界,所以 SVM 近似於 L2 正則化邏輯迴歸。要機率輸出有兩條路:Platt 的兩層學習只多學兩個數字 A 與 B;representer theorem 則保證最佳的 w 是 zₙ 的線性組合,可以直接在 Z 空間做 kernel 邏輯迴歸,代價是 N 個 βₙ 通常都不是 0。
對偶 SVM 的變數個數已經和特徵維度 d̃ 無關,但 Q 矩陣的每個元素還是一次 d̃ 維內積。這堂課把「轉換+內積」合成一個 kernel 函數 K(x, x′),二次轉換的內積只要 O(d) 就能算完;訓練、算 b、預測三個地方全部換成 K 之後,SVM 不再碰 Z 空間。同一招推到極限,Gaussian kernel 對應無限多維的轉換,代價是 γ 選太大照樣過擬合。
基石第 1 堂把機器學習定義成「用資料算出一個接近目標 f 的假說 g」,並給出判斷該不該用它的三個條件:有可學的模式、寫不出程式定義、手上有資料。整堂課的骨架是一張流程圖:未知的 f 產生資料 D,演算法 A 從假說集合 H 裡挑出 g;A 加 H 合稱學習模型,之後 15 堂都在這張圖上換零件。
PLA、線性迴歸、邏輯迴歸都先算分數 s = wᵀx,三種誤差都能寫成 ys 的函數。平方誤差與換成 log₂ 的 cross-entropy 都壓在 0/1 誤差上面,所以把迴歸的 E_in 做小,分類的 E_out 也跟著有保證。接著把梯度裡的 N 筆平均換成隨機抽一筆,得到每步 O(1) 的 SGD;再用 OVA(K 個分類器、取分數最高)與 OVO(K(K−1)/2 個分類器、投票)把二元分類器組成多類別分類器。
把資料全部分對的線有很多條,這堂課挑離最近的資料點最遠、也就是最胖的那一條。把 (b, w) 縮放到 min yₙ(wᵀxₙ+b)=1 之後,最大的 margin 等於最小化 ½wᵀw,限制式是每個點 yₙ(wᵀxₙ+b)≥1,可以直接交給二次規劃的解算器。胖的好處有兩種解釋:它是 E_in=0 範圍內的 weight decay,也讓能產生的 dichotomy 變少。
線性迴歸把平方誤差寫成 (1/N)‖Xw − y‖²,令梯度為零就得到 w_LIN = X†y,不必迭代。hat matrix H = XX† 把 y 投影到 X 的直行張成的空間,trace(I − H) = N − (d+1),由此得到平均 E_in = σ²(1 − (d+1)/N)、平均 E_out = σ²(1 + (d+1)/N)。平方誤差又是 0/1 誤差的上界,所以 w_LIN 也能拿來做二元分類。
感知器的線性組合做得出 AND、OR,做不出 XOR;再疊一層就可以,這就是多層感知器。這堂課把中間的 sign 換成 tanh、輸出層接線性迴歸,再用連鎖律推出反向傳播:先正向算出每一層的輸出 x,再從輸出層往回算 δ,每個權重的梯度就是前一層的 x 乘上這一層的 δ。最後處理訓練的兩個麻煩:E_in 非凸,初始權重要小而且隨機;d_VC 大約是 O(VD),要靠 weight elimination 與提早停止防過擬合。
過擬合指的是換到更強的模型時 E_in 下降、E_out 卻上升的過程。這堂課用只會 2 次與會 10 次多項式的兩位學習者做實驗,得到四個成因:資料太少、隨機雜訊太大、確定性雜訊太大(目標太複雜)、模型能力過剩,並解釋為什麼完全沒有雜訊的資料也會過擬合。對策先講資料清理、修剪與 virtual examples,正則化與驗證留給後兩堂。