所有分類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,正則化與驗證留給後兩堂。
Gaussian SVM 的結果可以讀成「以支援向量為中心的 Gaussian 做線性投票」,把中心與票數都放開來學就是 RBF 網路。N 筆資料全當中心時,迴歸的最佳票數是 β = Z⁻¹y,訓練誤差剛好是 0,所以要靠 ridge 或把中心減到 M ≪ N 個代表點來正則化;代表點用 k-means 找,它輪流做「每筆資料歸到最近的中心」與「中心改成群內平均」兩步,直到分群不再變動。
Fall 2024 技法段有兩份作業和一個期末專題,題目 PDF 都公開。HW6 練 kernel、soft-margin SVM 與 aggregation,程式題用 LIBSVM 在 mnist.scale 的 3 對 7 子問題上數支援向量、算 margin、跑 128 次 validation。HW7 練 bootstrap、impurity、AdaBoost、gradient boosting 與神經網路,程式題是在 madelon 上實作 500 輪 AdaBoost-Stump。期末專題是虛構的 HTMLB 棒球勝負預測,分兩個 Kaggle stage,交一份最多 7 頁的英文報告,至少比較四種方法。沒有官方解答;Kaggle 競賽頁在 2026-09-30 未登入時回 404,校外讀者大概拿不到 HTMLB 資料,只能照同樣的切分方式換一份公開資料自評。
上一堂的保證裡有假說個數 M,感知器有無限多條線,M 是無限大。這堂課改數這些線在 N 筆資料上排得出幾種 ○× 組合(dichotomy),對所有擺法取最大值得到成長函數 m_H(N):positive rays 是 N+1,positive intervals 是 ½N²+½N+1,convex sets 是 2ᴺ,二維感知器在 4 個點上最多 14 種。成長函數第一次到不了 2ᴺ 的點數叫 break point,講義猜它會把成長函數壓成多項式,證明留到下一堂。
用 E_in 選模型一定偏向最複雜的那個,用 E_test 選又拿不到測試資料。這堂課從手上的 N 筆切出 K 筆當驗證集,得到 E_out(g_m*) ≤ E_out(g⁻_m*) ≤ E_val(g⁻_m*) + O(√(log M / K)),說明選完為什麼要用全部資料重訓、K 為什麼取 N/5;再把 K 推到 1 得到幾乎無偏的 leave-one-out,最後用 5-fold 或 10-fold 交叉驗證把計算量降回可行。
這堂課把「最大的非 break point」命名為 VC 維度 d_VC,用可逆矩陣與線性相依兩段證明 d 維感知器的 d_VC = d + 1,再把 VC bound 改寫成 E_out ≤ E_in + Ω:d_VC 愈大,E_in 愈容易壓低,但複雜度的懲罰 Ω 也愈大。照 bound 算,ε = δ = 0.1、d_VC = 3 要 29,300 筆資料,大約是 10,000 倍的 d_VC;實務上 10 倍常常就夠。