非線性轉換:用特徵轉換畫出曲線邊界的代價|台大林軒田 機器學習基石 第 12 堂
資料用直線切不開時,不必重新設計演算法:先用特徵轉換 Φ 把 x 換成 z,在 Z 空間照常跑線性模型,Z 空間的直線就是 X 空間的二次或更高次曲線。Q 次多項式轉換會把維度拉到 d̃ = C(Q+d, d) − 1,計算、儲存與 VC 維度(至多 d̃+1)都跟著漲,所以這堂課的結論是先試線性模型,不夠再往高次走。
資料用直線切不開時,不必重新設計演算法:先用特徵轉換 Φ 把 x 換成 z,在 Z 空間照常跑線性模型,Z 空間的直線就是 X 空間的二次或更高次曲線。Q 次多項式轉換會把維度拉到 d̃ = C(Q+d, d) − 1,計算、儲存與 VC 維度(至多 d̃+1)都跟著漲,所以這堂課的結論是先試線性模型,不夠再往高次走。
從 10 次多項式退回 2 次,等於在 10 次的問題上加限制式。把限制放軟成 ‖w‖² ≤ C 之後,最佳解上 E_in 的負梯度必須和 w 平行,由此得到 w_REG = (ZᵀZ + λI)⁻¹Zᵀy,也等於最小化 E_aug = E_in + (λ/N)wᵀw,這就是 weight decay。λ 愈大,等效的 C 愈小,有效 VC 維度 d_EFF 跟著變小;換成 L1 則會得到稀疏解。
基石最後一堂不教新演算法,講三個讓前十五堂的保證失效的情況。簡單的模型很難碰巧把亂標的資料分開:10 個點配隨機標籤,decision stump 分得開的機率只有 20/1024,所以分得開才有意義。訓練與測試不是同一個分布時 VC 保證不成立;資料只要影響過學習流程的任何一步,就不能再拿來評估結果。最後用 Power of Three 把整門課收成五組三。
hard-margin SVM 的原始問題有 d̃+1 個變數,特徵維度一大就解不動。這堂課用拉格朗日對偶把它換成只有 N 個變數、N+1 條限制的二次規劃,再用 KKT 條件從 α 算回 w 與 b;只有 α 大於 0 的支援向量會影響答案。對偶問題的矩陣裡還留著 d̃ 維的內積,所以特徵維度要到下一堂才真的擺脫。
hard-margin SVM 堅持把資料完全分開,所以會去擬合雜訊。這堂課替每個點加一個違反量 ξₙ,用參數 C 權衡邊界寬度與違反總量,得到 soft-margin SVM;它的對偶問題和 hard-margin 只差 αₙ 多了上界 C。αₙ 的值把資料分成非支援向量、free SV、bounded SV 三類,算 b 要用 free SV;C 與 γ 用交叉驗證選,支援向量的比例 #SV/N 是 leave-one-out 誤差的上界。
用 representer theorem 把 ridge regression 換成解 β,得到 kernel ridge regression 的解析解 β = (λI + K)⁻¹y,但 N 個 βₙ 幾乎都不是 0。把平方誤差換成 ε-insensitive 的管狀誤差,照 soft-margin SVM 的路線寫成 QP 再取對偶,就得到支援向量迴歸(SVR):對偶有 2N 個變數,嚴格落在管子裡的點 βₙ 一定是 0。
這堂把 bagging 的 bootstrap 改看成替每筆資料加權,再刻意把權重調到讓上一輪的 gₜ 加權錯誤率剛好 1/2,逼下一輪學出不一樣的假說。做法是答錯的資料乘上 ◆ₜ = √((1−εₜ)/εₜ)、答對的除以它,並用 αₜ = ln ◆ₜ 當票數做線性投票,這就是 AdaBoost。基礎演算法只要每一輪都比亂猜好一點,E_in 會在 O(log N) 輪內降到 0;搭配 decision stump,六筆資料手算三輪就看得到。
隨機森林是 bagging 套在完全長成的 C&RT 上,再讓每次分支只看隨機投影出來的少數特徵。bootstrap 抽 N 次時,每筆資料約有 1/e ≈ 36.8% 的機率沒被某棵樹用到,這些 out-of-bag 資料可以直接算出 E_oob,當作不用另外切資料、不用重新訓練的驗證;再配上 permutation test 就得到每個特徵的重要度。代價是結果會隨亂數種子晃動,樹要加到 G 穩定為止。
AdaBoost 每一輪的權重總和,剛好是指數誤差 exp(−ys) 的總和。這堂課由此推出:基礎演算法找的 gₜ 是近似的函數梯度方向,票數 αₜ 是那個方向上的最佳步長。把指數誤差換成平方誤差,同一套推導變成「每一輪對殘差 yₙ − sₙ 做迴歸,再用單變數線性迴歸定步長」,基礎模型用砍弱的 C&RT 就是 GBDT。
網路疊深之後,每一層只要做一點事,但結構、模型複雜度、最佳化與計算量都變難。這堂課挑初始化與正則化兩件事來講:用 d—d̃—d 的 autoencoder 一層一層預訓練權重,讓每一層先學會保留資訊的編碼;在輸入加人工雜訊訓練,當成一種正則化;最後把 autoencoder 換成線性的,推出最佳的 W 就是 XᵀX 最大的 d̃ 個 eigenvector,資料先減平均就是 PCA。
推薦系統的輸入只有使用者編號。把編號做 binary vector encoding、丟進拿掉 tanh 的 N-d̃-M 線性網路,假說就是 h(x) = WᵀVx,等於把評分矩陣寫成 R ≈ VᵀW。學 V 與 W 有兩條路:交替最小平方每輪解 M+N 個線性迴歸,SGD 每次只用一筆評分更新一位使用者與一部電影的向量。最後把 boosting、神經網路、RBF 網路、矩陣分解與 k 近鄰收成一張萃取模型的地圖。
CS230 是 Andrew Ng 與 Kian Katanforoosh 在 Stanford 教的深度學習課,採翻轉教室:神經網路、最佳化、CNN、序列模型與 Transformer 的基礎放在 Coursera 的五門線上課,每週一堂實體課講專案方法、對抗攻擊與生成模型、強化學習、LLM 應用與可解釋性。九堂實體課的錄影、多數投影片與兩份附解答的期中練習考公開;Stanford 專用的 Coursera 場次、助教課錄影與專案指導拿不到。
CS229 Spring 2026 的開場課只有 37 分鐘、沒有推導。它用 Tom Mitchell 的「經驗 E、任務 T、衡量 P」定義機器學習,再把整門課分成監督式、非監督式、強化學習三類,三者的差別在於資料裡有沒有答案、資料是不是模型自己收集來的。大型語言模型在這個分類裡同時出現三次。
第 2 堂把監督式學習拆成三件事:假設函數 h、最小平方成本 J(θ)、把 J 壓低的演算法。梯度下降每步要掃過全部 n 筆資料,minibatch SGD 只看一小批就更新,代價是在最佳解附近晃動;線性迴歸另有封閉解 θ = (XᵀX)⁻¹Xᵀy,前提是 XᵀX 可逆。
假設誤差是零均值、獨立同分布的高斯雜訊,對概似函數取 log 之後,最大概似就等於上一堂的最小平方。同一套做法換成 0/1 標籤與 sigmoid,得到邏輯斯迴歸,梯度仍是「誤差乘上輸入」。最後用 Newton 法對照 SGD:步數少,但每步要付 n·d² + d³ 的計算量。
只要 y 的分布能寫成 b(y)·exp(ηᵀT(y) − a(η)),對 a(η) 微分一次就是期望值、兩次就是變異數;再令 η = θᵀx,線性迴歸、邏輯斯迴歸與 softmax 的更新式都是同一條 θ ← θ + α(y − h(x))x。後半堂用四個類別的例子講 softmax、交叉熵與 label smoothing。
第 5 堂把分類問題反過來做:不直接學 p(y|x),改學 p(x|y) 與 p(y)。GDA 假設兩類是共用共變異數的高斯,最大概似估計只要數比例、取平均,決策邊界推出來是一條直線,事後機率剛好是 sigmoid;Naive Bayes 用條件獨立把 2^d 個參數壓到 2d+1 個。
這堂課把測試誤差拆成雜訊 σ²、偏差平方、變異三項,再用 ridge regression 的閉式解說明正規化怎麼把特徵值從 λ 推到 λ+ρ,用一點偏差換掉大量變異。後半堂講雙降、ImageNet-V2,以及用開發集、k 折交叉驗證與 successive halving 挑超參數。
第 7 堂先把線性模型的訓練流程原封不動搬到非線性模型:每筆資料一個 loss、取平均、用 SGD 往下走,剩下兩個問題是模型長什麼樣、梯度怎麼算。後半堂回答第一個:一個神經元是 ReLU(wᵀx+b),m 個神經元疊成矩陣就是一層 ReLU(Wx+b),參數 md+m 個;再往上是殘差區塊 z+σ(MM(σ(MM(z)))) 與 LayerNorm、RMSNorm。梯度怎麼算留給第 8 堂。
這堂課從一個定理出發:能用 N 個基本運算算出來的純量函數,梯度也能在 O(N) 時間算完。做法是把鏈鎖律讀成「拿到 ∂J/∂u 就能算 ∂J/∂z,而且只需要中間那個模組的資訊」,再替矩陣乘法與啟動函數各推一個 backward 函數:Wᵀv、vzᵀ、σ′(z)⊙v。本文另外用一個 2-2-1 的小網路把前向與反向手算一遍。