Skip to content

監督式學習設定與線性迴歸:一條線怎麼從資料裡學出來|Stanford CS229 第 2 堂

2026年10月12日1 分鐘
TL;DR第 2 堂把監督式學習拆成三件事:假設函數 h、最小平方成本 J(θ)、把 J 壓低的演算法。梯度下降每步要掃過全部 n 筆資料,minibatch SGD 只看一小批就更新,代價是在最佳解附近晃動;線性迴歸另有封閉解 θ = (XᵀX)⁻¹Xᵀy,前提是 XᵀX 可逆。

🌏 English version

影片狀態:已附影片。 這篇依 Stanford Online 公開的 Spring 2026 第 2 堂錄影的英文字幕寫成,公式記號對照 2026 主講義第 1 章〈Linear regression〉。字幕看不到投影片與手寫畫面,講者指著畫面說的內容,本文只寫前後文與講義能還原的部分。

這是 Stanford CS229 進入正題的第一堂。上一堂是課程介紹,這一堂開始換人主講,進入監督式學習。講者自己把這堂課定位成「記號課」:線性迴歸很可能你已經學過,但後面幾週的分類、廣義線性模型、神經網路,全部沿用今天定下來的寫法。

先備是偏微分、向量內積、矩陣乘法與反矩陣。讀完之後你應該能做三件事:把一個預測問題寫成 hθh_\theta 與 J(θ)J(\theta);手算一步梯度下降與一步 SGD;從 J(θ)J(\theta) 推出 normal equations,並說出它什麼時候不成立。

全片 1 小時 18 分,本文涵蓋整堂課。每一節開頭有時間連結,點了會從錄影的那一段開始播;某一節看不懂時,可以直接回去聽老師怎麼講。

YouTube:Stanford CS229 Machine Learning | Spring 2026 | Lecture 2: Supervised Learning Setup

這堂課要交代什麼

錄影 00:00–05:50

這堂由 Chris Ré 主講,他開場說接下來這一段由他負責,之後和 Tengyu Ma 輪流。他用投影片上課,並提醒投影片只是 Tengyu 那份課程講義的子集,想嚴謹地讀就回去看講義。

全堂的路線在 03:09 交代:先是記號,再是線性迴歸,然後是主力演算法 batch 與 stochastic gradient descent,最後用 normal equations 練習矩陣與向量的微分。他對這兩個演算法的評價很直接:

"you're going to realize that these are really stupid algorithms, hopefully. They're really simple, but that simplicity is what allowed us to scale them up and run them on huge amounts of data"(04:11)

這句話是整堂課的主軸。後面談步長、談 batch size、談什麼時候停止訓練,講者反覆回到同一個立場:機器學習在乎的是能不能在大量資料上算得動,把參數估到很精確則是次要的事。

他也多次提醒,如果今天的記號、偏微分或線性代數讓你覺得陌生,請去每週五的助教課,因為之後的課會直接假設你都會。

監督式學習的設定

錄影 05:50–10:40

假設函數與訓練集

監督式學習的主角是一個函數

h:X→Yh: \mathcal{X} \to \mathcal{Y}

稱為假設(hypothesis),也就是預測函數。X\mathcal{X} 與 Y\mathcal{Y} 只是兩個集合,課堂舉了三種組合:

  • X\mathcal{X} 是所有影像,Y\mathcal{Y} 是一組固定的標籤(貓、狗、馬、建築)
  • X\mathcal{X} 是文字,Y\mathcal{Y} 是正面或負面評價
  • X\mathcal{X} 是房屋資料,Y\mathcal{Y} 是價格,一個實數

「監督」指的是我們手上有一份訓練集,裡面是成對的輸入與答案:

{(x(1),y(1)),(x(2),y(2)),…,(x(n),y(n))}\{(x^{(1)}, y^{(1)}), (x^{(2)}, y^{(2)}), \dots, (x^{(n)}, y^{(n)})\}

上標加括號是「第幾筆資料」的編號,和次方無關。x(i)x^{(i)} 是第 ii 筆輸入,y(i)y^{(i)} 是它的標籤。

什麼叫好的預測

從 X\mathcal{X} 到 Y\mathcal{Y} 的函數多到不可數,哪一個算好?講者的回答是泛化(generalize):訓練集來自某個有代表性的來源,之後看到訓練集以外的新輸入,hh 還能給出對的答案。看到一張沒看過的貓照片,仍然說它是貓。

這裡有一個要記住的區分。課堂會先教很簡單的 hh,簡單到可以證明它們會泛化;而近十幾年的變化,是大家開始訓練參數量極大的 hh。這堂課處理的是前者。

迴歸與分類

最後是兩個名詞:

  • yy 是連續值(實數、價格)時,叫迴歸(regression)問題
  • yy 是離散值時,叫分類(classification)問題

今天只做迴歸,理由是微分比較好算。講者補充,現在實務上解得更多的其實是分類問題,例如語言模型最後一層就是一個猜下一個詞的分類器。分類留到下一堂。

自我檢查|先寫下答案,再展開。 垃圾信過濾器讀一封信,輸出「是垃圾信」或「不是」;氣象模型讀今天的觀測資料,輸出明天的最高溫。兩個各是迴歸還是分類?你用什麼判斷?

答案

過濾器是分類,最高溫是迴歸。判斷只看 yy:yy 是離散的幾個選項就是分類,是連續的實數就是迴歸,和輸入 xx 是文字還是數字無關。

房價資料與線性假設

錄影 10:40–23:50

一個特徵:直線

課堂用的資料是 Ames Housing Dataset,講者把它讀進 Python 的 data frame,畫出地坪面積對售價的散佈圖。畫圖這個動作他特別強調:

"if you have the ability to do it, look at your data. I can't stress that enough."(11:19)

接著要選假設函數的形式。最常見的選擇是線性:

hθ(x)=θ0+θ1xh_\theta(x) = \theta_0 + \theta_1 x

嚴格說這是仿射(affine)函數,因為多了常數項 θ0\theta_0;習慣上仍叫線性。它在 x=0x=0 的值是 θ0\theta_0,在 x=1x=1 的值是 θ0+θ1\theta_0 + \theta_1,所以 θ0\theta_0 是截距,θ1\theta_1 是斜率。

這一步做的事比看起來多。原本候選的 hh 是所有從實數到實數的函數,現在只剩下由兩個數字決定的直線。這叫參數化:不管看到幾間房子,要學的永遠只有 θ0\theta_0 與 θ1\theta_1。

哪一條線好?把一個 xx 丟進去,預測值落在線上;訓練集裡那筆資料真正的 yy 和線之間的垂直落差,就是這筆的誤差。我們要讓這些誤差整體變小。這個做法的正式名稱是 empirical risk minimization(ERM),講者說名字不用背,但他之後會脫口說出 ERM。

他也順帶提了另一種預測法:只用訓練集,找 xx 附近的鄰居取平均(nearest neighbors)。直線的好處是它對每一個 xx 都有定義,而且變化平滑,抓的是資料的主要趨勢。

沒有任何一條線能完美穿過所有點,原因有兩層。一是模型漏掉了東西,房價顯然不只取決於地坪大小。二是即使把該有的特徵都加進去,通常還是會剩下誤差。這門課後面會花很多時間處理「訓練集上的誤差」與「真實世界(測試集)上的誤差」之間的關係。

多個特徵與 x₀ = 1 的慣例

加入更多特徵之後,假設函數變成

hθ(x)=θ0+θ1x1+θ2x2+θ3x3h_\theta(x) = \theta_0 + \theta_1 x_1 + \theta_2 x_2 + \theta_3 x_3

課堂的例子有三個特徵,所以有四個權重。這個假設類別比只用一個特徵的更「豐富」:把多出來的權重設成 0,就退回原本的直線,所以它能擬合得至少一樣好。

為了不讓 θ0\theta_0 每次都是特例,全課採用一個慣例:永遠假設 x0=1x_0 = 1。這樣

hθ(x)=∑j=0dθjxj=θTxh_\theta(x) = \sum_{j=0}^{d} \theta_j x_j = \theta^T x

講者說這也是我們叫它「線性」而不叫「仿射」的原因之一。寫成向量後,θ\theta 與每一筆 x(i)x^{(i)} 都是 R4\mathbb{R}^{4} 裡的向量。他唸出的第一筆資料是 x(1)=(1, 2104, 4, 45)x^{(1)} = (1,\ 2104,\ 4,\ 45):第一個 1 就是 x0x_0;其餘三個對應他前面列出的三個特徵,房屋面積、臥室數與地坪面積。地坪寫成 45 而不是 45,000,講者指出這個正規化本身就是一個建模決定。

記號整理如下,之後每一堂都通用:

記號意思
nn訓練資料筆數
dd特徵數(維度);加上 x0x_0 之後向量是 d+1d+1 維
x(i)x^{(i)}、y(i)y^{(i)}第 ii 筆訓練資料(training example)的輸入與標籤
xj(i)x_j^{(i)}第 ii 筆資料的第 jj 個特徵
θ\theta參數(parameters),又叫權重(weights)

要放哪些特徵,目前是人決定的:你寫一段程式把原始資料轉成數字。講者預告幾週後會看到另一個想法,讓模型自己從資料學出特徵。

兩個特徵時還能畫圖,hh 是三維空間裡的一個平面,誤差是資料點到平面的垂直距離。再往上就畫不出來了,這正是需要向量記號的原因。

自我檢查|先寫下答案,再展開。 訓練集有 1,000 筆資料,每筆 5 個特徵。θ\theta 是幾維的向量?資料增加到 10,000 筆時它會變大嗎?規定 x0=1x_0 = 1 換來了什麼?

答案

6 維:5 個特徵各一個權重,加上截距 θ0\theta_0。參數個數只看特徵數 dd,和資料筆數 nn 無關,這就是參數化的意思。規定 x0=1x_0 = 1 之後截距不再是特例,整個假設函數可以寫成一個內積 hθ(x)=θTxh_\theta(x) = \theta^T x。

最小平方成本函數

錄影 23:50–33:55

定義

我們要選 θ\theta 讓 hθ(x(i))≈y(i)h_\theta(x^{(i)}) \approx y^{(i)}。把「接近」寫成一個數字,就是成本函數:

J(θ)=12∑i=1n(hθ(x(i))−y(i))2J(\theta) = \frac{1}{2} \sum_{i=1}^{n} \left( h_\theta(x^{(i)}) - y^{(i)} \right)^2

括號裡是第 ii 筆的預測誤差,平方後一定非負,剛好預測對時是 0。然後挑讓 JJ 最小的參數:

θ⋆=arg⁡min⁡θJ(θ)\theta^\star = \arg\min_\theta J(\theta)

arg⁡min⁡\arg\min 回傳的是「讓函數最小的那個 θ\theta」,不是最小值本身。這就是最小平方法(least squares)。

三個課堂提問

這一段的重點在學生的提問,三個問題剛好是自學者也會問的。

為什麼是平方,不能用別的次方嗎? 可以,用絕對值也行。講者給的理由是計算:平方的梯度形式特別乾淨,乾淨到可以直接解出答案。他順帶提到,歷史上 Gauss 用最小平方法也是看中它好算。他另外預告,下一堂會推導最小平方對應到「誤差近似常態分布」這個統計假設。

前面的 12\frac{1}{2} 是做什麼的? 純粹是慣例。arg⁡min⁡\arg\min 對常數倍不敏感:把 JJ 乘上任何正數,最小值的位置都不變。放 12\frac{1}{2} 是為了微分時和平方掉下來的 2 抵銷。講者的形容:

"It's kind of like the cooking show view of math, where we set it up so that it looks nice."(27:46)

θ\theta 是連續的還是離散的? 連續的,所以做的是連續最佳化。離散最佳化(例如整數線性規劃)通常很難。講者補充,連處理文字這種離散資料的模型,底下的參數空間也幾乎都是連續的,這樣才能算梯度。

還有一位學生問,平方是不是讓大的誤差被罰得更重。講者的回答是,一筆誤差要付多少代價正是成本函數決定的事,這裡選了平方,換成別的形式也可以。他不想把它講得太重要,他的說法是資料夠多時,成本函數的形式影響沒有那麼大;真正要認識的另一個形式,是他預告講分類時會教的 softmax。

一個該有的懷疑

小結時講者點出這套做法背後的信念:在訓練集上擬合得好,就相信在真實世界也會好。他稱之為 leap of faith,也是統計估計的基石,並預告之後會用一整堂講它怎麼出錯,包括他自己研究裡訓練資料與測試情境對不上的例子。這是這堂課的第一個統計假設:訓練集反映真實世界。

自我檢查|先寫下答案,再展開。 兩筆資料的預測誤差分別是 1 和 −3-3,JJ 是多少?把式子前面的 12\frac{1}{2} 拿掉,JJ 的值和 θ⋆\theta^\star 各會不會變?

答案

J=12(12+(−3)2)=5J = \frac{1}{2}(1^2 + (-3)^2) = 5。平方之後正負號不見了,誤差 33 和 −3-3 付的代價一樣。拿掉 12\frac{1}{2} 後 JJ 變成 10,但 θ⋆\theta^\star 不變,因為乘上正的常數不會移動最小值的位置。

梯度下降

錄影 33:55–42:15

圖像與更新規則

想像一個碗狀的二次函數。在起點 θ(0)\theta^{(0)} 畫一條切線,它是函數在那一點最好的線性近似,也就是一階泰勒展開:

f(θ)≈f(θ(0))+f′(θ(0)) (θ−θ(0))f(\theta) \approx f(\theta^{(0)}) + f'(\theta^{(0)})\,(\theta - \theta^{(0)})

導數(多變數時是梯度)指向函數增加最快的方向,所以要讓函數變小就往反方向走。對每一個參數分量 jj:

θj(t+1)=θj(t)−α∂∂θjJ(θ(t))\theta_j^{(t+1)} = \theta_j^{(t)} - \alpha \frac{\partial}{\partial \theta_j} J(\theta^{(t)})

α\alpha 是步長(step size),也叫學習率(learning rate),講者說他會混著用。JJ 有很多個變數,所以這裡是偏微分,而且每一步要對所有 jj 同時更新。

記號上要分清楚兩種上標:x(i)x^{(i)} 的 (i)(i) 是第幾筆資料,θ(t)\theta^{(t)} 的 (t)(t) 是第幾次更新;下標則是分量,θ0\theta_0 是截距那個參數,θ(0)\theta^{(0)} 是整個參數向量的起點。

為什麼往反方向走會下降,可以把泰勒展開代進去看(這一小段是本文補充的推理,課堂只畫了圖)。令 θ=θ(0)−αf′(θ(0))\theta = \theta^{(0)} - \alpha f'(\theta^{(0)}),則

f(θ)≈f(θ(0))−α(f′(θ(0)))2f(\theta) \approx f(\theta^{(0)}) - \alpha \left( f'(\theta^{(0)}) \right)^2

平方項非負,所以只要 α\alpha 小到線性近似還算準,函數值就會下降。α\alpha 太大時近似失效,這個保證也就沒了。

起點可以是 0 或隨機值。講者提醒,起點對最小平方問題沒有影響,但對現代模型有影響。原因在凸性:碗狀(凸)函數只有一個谷底,從哪裡出發都會到;非凸函數有很多局部低點,走下去可能卡在其中一個。

把偏微分算出來

現在把 JJ 代進去。先看一筆資料的那一項,用連鎖律:

∂∂θj12(hθ(x)−y)2=2⋅12(hθ(x)−y)⋅∂∂θj(hθ(x)−y)\frac{\partial}{\partial \theta_j} \frac{1}{2}\left(h_\theta(x) - y\right)^2 = 2 \cdot \frac{1}{2}\left(h_\theta(x) - y\right) \cdot \frac{\partial}{\partial \theta_j}\left(h_\theta(x) - y\right)

2 和 12\frac{1}{2} 抵銷,這就是那個 12\frac{1}{2} 的用途。剩下的偏微分裡,yy 不含 θ\theta;hθ(x)=∑kθkxkh_\theta(x) = \sum_k \theta_k x_k 對 θj\theta_j 微分只留下 xjx_j。所以

∂∂θj12(hθ(x)−y)2=(hθ(x)−y)xj\frac{\partial}{\partial \theta_j} \frac{1}{2}\left(h_\theta(x) - y\right)^2 = \left(h_\theta(x) - y\right) x_j

微分可以穿過加總,nn 筆加起來:

∂∂θjJ(θ)=∑i=1n(hθ(x(i))−y(i))xj(i)\frac{\partial}{\partial \theta_j} J(\theta) = \sum_{i=1}^{n} \left(h_\theta(x^{(i)}) - y^{(i)}\right) x_j^{(i)}

講者要大家記住這個形狀:誤差乘上某個東西。線性模型裡那個東西就是特徵 xjx_j;換成非線性模型會多出其他因子,但「誤差 × 梯度」的結構會一再出現。

把所有分量疊成向量,更新規則就是

θ(t+1)=θ(t)−α∑i=1n(hθ(t)(x(i))−y(i))x(i)\theta^{(t+1)} = \theta^{(t)} - \alpha \sum_{i=1}^{n} \left(h_{\theta^{(t)}}(x^{(i)}) - y^{(i)}\right) x^{(i)}

講者形容這只是「把所有 jj 擦掉」。每一步都用到全部 nn 筆資料,所以叫批次梯度下降(batch gradient descent)。講義把同一條式子寫成 θ:=θ+α∑(y(i)−hθ(x(i))) x(i)\theta := \theta + \alpha \sum (y^{(i)} - h_\theta(x^{(i)}))\,x^{(i)},只是把負號收進括號。

步長怎麼設

步長代表你有多信任手上這個梯度。碗狀函數離最佳解很遠時通常很陡,可以大步走;機器學習常面對形狀不明的函數,所以傾向用小步長。

  • 太小:一直往對的方向走,但很慢才到
  • 太大:一步跨過最低點,在碗的兩側來回彈

作業裡會有調步長的練習,收斂慢就試別的值。

統計與機器學習對「解到多準」的不同態度

這裡講者岔出去講了一段立場。統計在意的是把參數找回來(recovery guarantee),並且有嚴謹的收斂檢定。機器學習不在意這個:能讓預測夠好的 θ\theta 可能有很多個,接近就行。至於何時停止:

"In AI we're like, we ran out of compute credits. We'll stop."(40:54)

他的總結是,機器學習偏好的方向是讓更多資料流過更大的模型,把參數估到十位有效數字並非目標。

自我檢查|先寫下答案,再展開。 假設某一步每一筆資料的預測都偏高,也就是每個誤差 hθ(x(i))−y(i)h_\theta(x^{(i)}) - y^{(i)} 都是正的,而所有特徵值都是正數。做一步批次梯度下降後,每個 θj\theta_j 變大還是變小?

答案

全部變小。梯度的第 jj 個分量是 ∑i(hθ(x(i))−y(i)) xj(i)\sum_i (h_\theta(x^{(i)}) - y^{(i)})\,x_j^{(i)},誤差和特徵都是正的,所以每個分量都是正的;更新是減去 α\alpha 乘上梯度,θj\theta_j 就變小,包含截距 θ0\theta_0(它對應的 x0x_0 是 1)。步長夠小時,預測值跟著下降,往答案靠近。

Minibatch 隨機梯度下降

錄影 42:15–1:10:40

動機與更新規則

批次梯度下降每更新一次就要掃過整個訓練集。如果訓練集是整個網際網路的文字,這慢到不能用。解法是一個更簡單的演算法:每一步只取一小批資料。

在第 tt 步隨機取一個子集 BB(minibatch),只用這一批算梯度:

θ(t+1)=θ(t)−αB∑i∈B(hθ(t)(x(i))−y(i))x(i)\theta^{(t+1)} = \theta^{(t)} - \alpha_B \sum_{i \in B} \left(h_{\theta^{(t)}}(x^{(i)}) - y^{(i)}\right) x^{(i)}

和批次版相比只改了兩處:加總的範圍從全部 nn 筆變成 BB;步長寫成 αB\alpha_B,提醒你它通常和全資料版用的值不同。有學生問,取平均要除的 1∣B∣\frac{1}{|B|} 去哪了?講者回答直接併進 αB\alpha_B,反正它本來就是一個要調的數字。另一位學生指出投影片上 hθh_\theta 沒寫清楚用的是哪個 θ\theta,講者確認是上一步的 θ(t)\theta^{(t)},並說那是投影片的筆誤。

每一步都要重新抽一批,不能一直餵同一批,否則學到的只是那一批資料。

這個演算法叫 stochastic gradient descent(SGD)或 minibatch SGD,早期也叫 incremental gradient。講者說它至少可追溯到 1950 年代的 Robbins 與 Monro,而且每隔十幾年就被重新發現一次。用 PyTorch 做過反向傳播的人都用過它,整個系統就是圍繞 minibatch 設計的。

怎麼取樣:第二個統計假設

講者問了一個問題:如果先把所有貓的照片分批餵完,再餵所有狗的,會怎樣?學生答對了:模型先學會把什麼都判成貓,看到狗之後又整個倒向另一邊。

所以每一批應該像是整體資料的縮影。這是這堂課的第二個統計假設:minibatch 反映整個訓練集(第一個是訓練集反映真實世界)。

實務上有兩種抽法:

  • 有放回抽樣(with replacement):每一步獨立隨機抽,這是教科書上的 SGD
  • 無放回抽樣(without replacement):先把資料隨機打亂一次,然後依序一批一批走完

講者說理論與實驗都逐漸顯示兩者差別不大,而無放回好實作得多。他還提到觀察到的現象:隨機重排往往收斂得更快,他用 coupon collector 問題給直覺。要集滿 10 種優惠券,每次隨機拿一張,大部分時間耗在等最後一種,因為抽到的九成是已經有的。有放回抽樣同理,資料裡罕見的樣本很久才輪到一次,常見的重複看太多;打亂後走一遍則保證每筆都剛好看到一次。他也附了但書:這個說法在某些條件下能證明,但有明顯的反例。

Batch size 要多大

有學生問有沒有科學的方法決定 batch size。講者的回答分成歷史與現況。

大約十五年前,主流想法是 batch 越小越好。支持它的論證是資料冗餘:假設一批裡 90 張都是同一隻貓,那一整批只提供了一張照片的資訊,卻只更新了一次;拆開來可以更新 90 次。在類別少、分得很開的問題上,這個論證是可以證明的。

後來他收到朋友寄來的一份預印本,裡面用較大的 batch 得到比較差的訓練損失,泛化卻比較好。這違反「訓練集上做得好,測試集上就做得好」的直覺,講者說這件事改變了他對最佳化與泛化關係的理解,也說明 batch size 的作用至今沒有被完全弄懂。

現在的慣例是偏好較大的 batch,因為它變異較小,是對梯度更好的估計。實際上怎麼定?

"Set the batch size according to what you can do."(51:11)

也就是看 GPU 記憶體放得下多少。整個計算能放進晶片上的記憶體時會快非常多,所以這是系統面的決定。另外,有些損失函數希望同一批裡同時有正例與反例,而且最好是彼此相近、容易混淆的,這時 batch 的組成會被刻意設計。

講者也給了一個比例感:調 batch size 或步長的效果,往往遠不如把模型加大或訓練更久。

"sometimes tweaking the batch size or tweaking these rates doesn't matter nearly as much as making your model get bigger or running it for longer."(1:04:25)

他明講這整段屬於補充,就這門課而言只需要知道「隨機抽一批」就夠了。

步長與 batch 的關係

步長通常要自己選。講者提到現在常用的自適應最佳化器(他點名 Adam、AdamW、AdaGrad)會在一定範圍內替你調整,但在最單純的設定下,αB\alpha_B 要手動給。有學生推論,既然 1∣B∣\frac{1}{|B|} 被併進步長,batch 越大步長通常就該越小;講者說直覺上確實會這樣預期。也有學生問訓練過程中能不能改變這些設定,講者說有,這類做法叫排程(schedule),但多數研究者是填預設值就開始跑。

軌跡長什麼樣,什麼時候停

投影片比較了兩種演算法在一個平滑二次函數上的軌跡。圖上的橢圓是等高線,同一圈上的損失相同;二次函數的等高線是橢圓。批次梯度下降一路平順地走到中心。SGD 則歪歪扭扭,有時方向對,有時方向錯,最後在最佳解附近的一個球形區域裡彈跳;α\alpha 設太大,這個區域就大,永遠靠不近。訓練時如果看到損失開始上下跳,可以懷疑是步長太大。一個補救技巧是把彈跳過程中的 θ\theta 取平均(averaging the iterates)。

有學生問在最佳解附近彈跳時怎麼知道該停。講者的回答是:一般而言不知道。接下來兩週教的模型(廣義線性模型)都是凸的,這種情況可以算出離最佳解多遠,他推薦想深入的人去修 Stephen Boyd 的課。到了神經網路就沒有這種工具,實際做法是盯著損失曲線,看它降到差不多,或者運算資源用完。

自我檢查|先寫下答案,再展開。 把訓練資料依標籤排序後、不打亂就依序切成 minibatch,違反了課堂哪一個假設?會看到什麼現象?

答案

違反第二個統計假設,每一批不再是整體資料的縮影。模型會先倒向前段資料的標籤,換到後段時又大幅擺回來。

Normal equations:直接解出 θ

錄影 1:10:40–1:17:40

最小平方問題特別的地方在於能直接解,不必迭代。講者說這一段主要目的是讓大家熟悉矩陣記號。

把資料疊成矩陣

把每筆資料的特徵向量當成一列(row)疊起來,得到設計矩陣(design matrix):

X=[(x(1))T(x(2))T⋮(x(n))T]∈Rn×(d+1),y=[y(1)y(2)⋮y(n)]∈RnX = \begin{bmatrix} (x^{(1)})^T \\ (x^{(2)})^T \\ \vdots \\ (x^{(n)})^T \end{bmatrix} \in \mathbb{R}^{n \times (d+1)}, \qquad y = \begin{bmatrix} y^{(1)} \\ y^{(2)} \\ \vdots \\ y^{(n)} \end{bmatrix} \in \mathbb{R}^{n}

XθX\theta 的第 ii 個分量是 (x(i))Tθ=hθ(x(i))(x^{(i)})^T\theta = h_\theta(x^{(i)}),所以 Xθ−yX\theta - y 就是把 nn 筆誤差排成一個向量。向量和自己的內積等於各分量平方和,因此

J(θ)=12(Xθ−y)T(Xθ−y)J(\theta) = \frac{1}{2}(X\theta - y)^T(X\theta - y)

講者說如果這一步不是一眼看得出來,就動手把內積展開算一次。

對 θ 取梯度

對向量取梯度的意思,是對每個分量各算偏微分,再排成同樣形狀的向量。先把 JJ 乘開:

J(θ)=12(θTXTXθ−θTXTy−yTXθ+yTy)J(\theta) = \frac{1}{2}\left( \theta^T X^T X \theta - \theta^T X^T y - y^T X \theta + y^T y \right)

中間兩項都是純量,純量的轉置等於自己,所以 θTXTy=yTXθ\theta^T X^T y = y^T X\theta,可以合併:

J(θ)=12θTXTXθ−(XTy)Tθ+12yTyJ(\theta) = \frac{1}{2}\theta^T X^T X \theta - (X^T y)^T \theta + \frac{1}{2} y^T y

逐項微分需要兩個事實。課堂直接使用,講義註明出處是線性代數複習講義;下面的分量驗證是本文補的。

第一,∇θ bTθ=b\nabla_\theta\, b^T\theta = b。因為 bTθ=∑kbkθkb^T\theta = \sum_k b_k\theta_k,對 θj\theta_j 微分只剩 bjb_j。

第二,AA 對稱時 ∇θ θTAθ=2Aθ\nabla_\theta\, \theta^T A\theta = 2A\theta。因為 θTAθ=∑k∑lθkAklθl\theta^T A\theta = \sum_k\sum_l \theta_k A_{kl}\theta_l,θj\theta_j 會出現在 k=jk=j 與 l=jl=j 兩種位置,微分得 ∑lAjlθl+∑kθkAkj\sum_l A_{jl}\theta_l + \sum_k \theta_k A_{kj};AA 對稱所以兩項相等,合起來是 2(Aθ)j2(A\theta)_j。

XTXX^TX 是對稱矩陣(轉置後還是自己),所以:

  • 第一項的梯度是 12⋅2XTXθ=XTXθ\frac{1}{2}\cdot 2X^TX\theta = X^TX\theta。講者的說法是「兩邊各出現一次,但它對稱,再配上 12\frac{1}{2}」
  • 第二項的梯度是 −XTy-X^Ty
  • 第三項不含 θ\theta,梯度是 0

合起來:

∇θJ(θ)=XTXθ−XTy\nabla_\theta J(\theta) = X^T X\theta - X^T y

這和前一節的結果是同一件事:XT(Xθ−y)X^T(X\theta - y) 的第 jj 個分量正是 ∑i(hθ(x(i))−y(i)) xj(i)\sum_i (h_\theta(x^{(i)}) - y^{(i)})\,x_j^{(i)}。

令梯度為零

JJ 是碗狀的凸函數,最低點就是梯度為零的地方,和一維函數找極值時令導數為零是同一個道理。於是

XTXθ=XTyX^T X\theta = X^T y

這組方程叫 normal equations。兩邊左乘 (XTX)−1(X^TX)^{-1}:

θ⋆=(XTX)−1XTy\theta^\star = (X^T X)^{-1} X^T y

偷渡的假設:XᵀX 可逆

講者問大家他在哪裡作弊了,學生答出來:最後一步假設 XTXX^TX 可逆。通常資料筆數遠多於參數個數時,可以期待這個反矩陣存在;反過來,資料很少而維度很高時就不成立。

不可逆時會怎樣?XTXX^TX 會有非零的零空間(null space),而

"So anything in the null space of XTX, I can add that to theta. And it doesn't change the answer at all."(1:15:36)

解就從單一一個 θ⋆\theta^\star 變成一整個子空間。這句話可以這樣驗證(本文補充):若 XTXv=0X^TXv = 0,則 vTXTXv=∥Xv∥2=0v^TX^TXv = \|Xv\|^2 = 0,所以 Xv=0Xv = 0。於是 X(θ+v)=XθX(\theta + v) = X\theta,每一筆預測都沒變,JJ 也就沒變。

講者最後提到 XTXX^TX 是半正定(positive semidefinite,PSD)矩陣,沒有展開。用同一條式子就能看出來(本文補充):對任何向量 zz 都有 zTXTXz=∥Xz∥2≥0z^TX^TXz = \|Xz\|^2 \ge 0。這也是 JJ 呈碗狀的原因,因為把 ∇θJ=XTXθ−XTy\nabla_\theta J = X^TX\theta - X^Ty 再對 θ\theta 微分一次,得到的二階導數矩陣(Hessian)就是 XTXX^TX,它半正定,JJ 在任何方向上都不會往下彎。

自我檢查|先寫下答案,再展開。 訓練集只有 2 筆資料,卻有 5 個參數。θ⋆=(XTX)−1XTy\theta^\star = (X^TX)^{-1}X^Ty 還能用嗎?這時最小平方問題有幾組解?

答案

不能用。XX 是 2×52 \times 5 的矩陣,XTXX^TX 是 5×55 \times 5,但它的秩最多是 2,一定不可逆。零空間裡有非零的方向,沿著它移動 θ\theta 不會改變任何一筆預測,所以解有無限多組,構成一整個子空間。

用三筆資料把整堂課算一遍

以下是本文自擬的例子,不是課堂內容。 課堂沒有做數值計算,這裡用最小的資料把四個公式各跑一次。

三筆資料,一個特徵,單位不重要:

iix(i)x^{(i)}y(i)y^{(i)}
112
223
335

加上 x0=1x_0 = 1:

X=[111213],y=[235]X = \begin{bmatrix} 1 & 1 \\ 1 & 2 \\ 1 & 3 \end{bmatrix}, \quad y = \begin{bmatrix} 2 \\ 3 \\ 5 \end{bmatrix}

Normal equations

XTX=[36614],XTy=[2+3+52+6+15]=[1023]X^TX = \begin{bmatrix} 3 & 6 \\ 6 & 14 \end{bmatrix}, \quad X^Ty = \begin{bmatrix} 2+3+5 \\ 2+6+15 \end{bmatrix} = \begin{bmatrix} 10 \\ 23 \end{bmatrix}

行列式是 3×14−6×6=63 \times 14 - 6 \times 6 = 6,不為零所以可逆:

(XTX)−1=16[14−6−63],θ⋆=16[140−138−60+69]=[1/33/2](X^TX)^{-1} = \frac{1}{6}\begin{bmatrix} 14 & -6 \\ -6 & 3 \end{bmatrix}, \quad \theta^\star = \frac{1}{6}\begin{bmatrix} 140 - 138 \\ -60 + 69 \end{bmatrix} = \begin{bmatrix} 1/3 \\ 3/2 \end{bmatrix}

最佳直線是 h(x)=13+32xh(x) = \frac{1}{3} + \frac{3}{2}x。三筆預測是 1.833、3.333、4.833,誤差 h−yh - y 是 −16-\frac{1}{6}、13\frac{1}{3}、−16-\frac{1}{6},所以

J(θ⋆)=12(136+19+136)=112≈0.0833J(\theta^\star) = \frac{1}{2}\left(\frac{1}{36} + \frac{1}{9} + \frac{1}{36}\right) = \frac{1}{12} \approx 0.0833

JJ 的最小值不是 0,因為三點不共線。這就是課堂說的「沒有一條線是完美的」。

批次梯度下降

從 θ(0)=(0,0)\theta^{(0)} = (0, 0) 出發,取 α=0.05\alpha = 0.05。

一開始所有預測都是 0,誤差是 (−2,−3,−5)(-2, -3, -5),J=12(4+9+25)=19J = \frac{1}{2}(4 + 9 + 25) = 19。梯度的兩個分量:

  • j=0j=0(x0x_0 都是 1):−2−3−5=−10-2 - 3 - 5 = -10
  • j=1j=1:(−2)(1)+(−3)(2)+(−5)(3)=−23(-2)(1) + (-3)(2) + (-5)(3) = -23

更新:θ(1)=(0,0)−0.05×(−10,−23)=(0.5, 1.15)\theta^{(1)} = (0, 0) - 0.05 \times (-10, -23) = (0.5,\ 1.15)。

第二步:預測是 1.65、2.8、3.95,誤差 (−0.35,−0.2,−1.05)(-0.35, -0.2, -1.05),J=0.6325J = 0.6325。梯度是 (−1.6, −3.9)(-1.6,\ -3.9),所以 θ(2)=(0.58, 1.345)\theta^{(2)} = (0.58,\ 1.345),此時 J=0.1134J = 0.1134。

兩步之內 JJ 從 19 降到 0.6325 再到 0.1134,已經接近下限 0.0833。但參數本身離 (0.333,1.5)(0.333, 1.5) 還有一段,繼續用同樣的步長,要到第 77 步 JJ 才會進到離下限 0.001 以內。課堂說離最佳解遠的時候坡很陡,可以大步前進;這裡看到的是另一面,靠近之後梯度變小,每一步的進展也跟著變小。

步長太大

同一個起點改用 α=0.2\alpha = 0.2:θ(1)=(2, 4.6)\theta^{(1)} = (2,\ 4.6),預測變成 6.6、11.2、15.8,J=102.52J = 102.52;再走一步 J=555.13J = 555.13。每一步都跨過谷底衝到對面更高的地方,這是課堂說的 too large。對這組資料,步長的上限大約是 0.12。這個界線是本文補充的,課堂沒有給:把 θ−θ⋆\theta - \theta^\star 沿 XTXX^TX 的特徵向量拆開,特徵值為 λ\lambda 的那個分量每走一步會乘上 (1−αλ)(1 - \alpha\lambda),要它縮小就需要 ∣1−αλ∣<1|1 - \alpha\lambda| < 1,也就是 α<2/λ\alpha < 2/\lambda。最嚴的限制來自最大特徵值 16.64,所以 α<2/16.64≈0.12\alpha < 2/16.64 \approx 0.12。

一步 SGD

batch 大小取 1,αB=0.05\alpha_B = 0.05,同樣從 (0,0)(0, 0) 出發。抽到哪一筆,結果差很多:

抽到的資料單筆梯度更新後的 θ\theta更新後的 JJ
第 1 筆(−2,−2)(-2, -2)(0.1, 0.1)(0.1,\ 0.1)15.845
第 2 筆(−3,−6)(-3, -6)(0.15, 0.3)(0.15,\ 0.3)11.534
第 3 筆(−5,−15)(-5, -15)(0.25, 0.75)(0.25,\ 0.75)4.406

每一步只用了三分之一的計算量,三種情況 JJ 都從 19 往下降,但方向與幅度各不相同。

再看最佳解 θ⋆=(13,32)\theta^\star = (\frac{1}{3}, \frac{3}{2}) 上發生什麼事。全資料的梯度是零,但單筆梯度分別是 (−16,−16)(-\frac{1}{6}, -\frac{1}{6})、(13,23)(\frac{1}{3}, \frac{2}{3})、(−16,−12)(-\frac{1}{6}, -\frac{1}{2})。三個加起來是零,個別都不是零。所以就算剛好站在最佳解上,SGD 的下一步還是會把你推開。這就是固定步長的 SGD 在最佳解附近彈跳、而不會停下來的原因,推開的距離和 αB\alpha_B 成正比。

自我檢查

前面每一節結尾各有一題概念題。以下四題要用到上面三筆資料的例子,建議動筆算。

1. 接著上面的例子,從 θ(2)=(0.58, 1.345)\theta^{(2)} = (0.58,\ 1.345) 再做一步批次梯度下降(α=0.05\alpha = 0.05),θ(3)\theta^{(3)} 是多少?

答:誤差是 (−0.075, 0.27, −0.385)(-0.075,\ 0.27,\ -0.385),梯度是 (−0.19, −0.69)(-0.19,\ -0.69),所以 θ(3)=(0.5895, 1.3795)\theta^{(3)} = (0.5895,\ 1.3795)。算得出梯度的兩個分量(一個是誤差直接相加,一個是誤差乘上 xx 再相加)才算會。

2. 把成本函數前面的 12\frac{1}{2} 換成 25,θ⋆\theta^\star 會變嗎?梯度下降的行為會變嗎?

答:θ⋆\theta^\star 不變,正數倍不改變最小值的位置。但梯度變成 50 倍,同一個 α\alpha 走出的步伐也變成 50 倍,原本收斂的步長可能變成發散。常數會被步長吸收,這和課堂說 1∣B∣\frac{1}{|B|} 併進 αB\alpha_B 是同一件事。

3. 在上面的例子再加一個特徵 x2=2x1x_2 = 2x_1(例如同一個面積換了單位)。XTXX^TX 還可逆嗎?寫出兩組不同但預測完全相同的 θ\theta。

答:不可逆,因為 XX 的第三行(column)是第二行的兩倍,v=(0,2,−1)v = (0, 2, -1) 滿足 Xv=0Xv = 0。(13,32,0)(\frac{1}{3}, \frac{3}{2}, 0) 與 (13,72,−1)(\frac{1}{3}, \frac{7}{2}, -1) 的預測相同,兩者相差正好是 vv。能指出零空間裡的方向才算理解。

4. 你站在 θ⋆=(13,32)\theta^\star = (\frac{1}{3}, \frac{3}{2}),用 batch 大小 1、αB=0.05\alpha_B = 0.05 做一步 SGD,抽到第 3 筆資料。θ\theta 會到哪裡?JJ 變大還是變小?

答:單筆梯度是 (−16,−12)(-\frac{1}{6}, -\frac{1}{2}),θ\theta 變成約 (0.3417, 1.525)(0.3417,\ 1.525),JJ 從 0.0833 升到約 0.0891。在最佳解上任何移動都會讓 JJ 變大。

對應閱讀

主講義第 1 章〈Linear regression〉,頁 9–16:

  • 章首(頁 9–10):線性假設、x0=1x_0 = 1 慣例、成本函數 J(θ)J(\theta)。監督式學習的名詞定義在第 1 章之前的 Part I 引言(頁 7–8)
  • 1.1 LMS algorithm(頁 10–14):梯度下降、單筆資料的偏微分推導、批次梯度下降與隨機梯度下降
  • 1.2 The normal equations(頁 14–16):矩陣微分的定義、設計矩陣、∇θJ\nabla_\theta J 的推導與封閉解

課堂與講義不同的地方:

  • 資料集:講義用 Portland 的 47 間房屋,課堂用 Ames Housing Dataset。講義有實際跑出來的參數值(只用面積時 θ0=71.27\theta_0 = 71.27、θ1=0.1345\theta_1 = 0.1345),課堂沒有報數字
  • SGD 的定義:講義第 1 章的隨機梯度下降是一次看一筆、依序走過訓練集(式 1.2),這一章沒有 minibatch 這個詞。課堂教的是一次抽一批 BB 的版本,並用獨立的步長 αB\alpha_B。取樣方式、batch size 的取捨、何時停止,這些都只在課堂出現
  • 名詞:講義把單筆更新規則叫 LMS(least mean squares)或 Widrow-Hoff 規則,課堂沒有用這兩個名字。講義第 1 章只說 learning rate,課堂 step size 與 learning rate 混用
  • SGD 會不會收斂:講義在註腳提到讓 α\alpha 慢慢降到零可以保證收斂到最小值;課堂提的是把走過的 θ\theta 取平均
  • XTXX^TX 不可逆:講義只在註腳說有其他技巧可以處理而略過;課堂用零空間說明此時解是一整個子空間

這堂沒有講到第 1 章的後兩節。1.3 的機率解釋留到下一堂,講者在課堂上預告過兩次;1.4 的局部加權線性迴歸這堂完全沒有提到。

課程影片來源

原始影片:Stanford CS229 Machine Learning | Spring 2026 | Lecture 2: Supervised Learning Setup

查核日期:2026-10-12。

內容核對:已依字幕核對(2026-10-12):全篇依這支影片約 78 分鐘的英文字幕撰寫,引文與時間戳取自字幕;沒有看投影片與手寫畫面,公式依講者口述並對照主講義第 1 章還原。講者在字幕中沒有自報姓名,本文依他以第三人稱提到 Tengyu、並說兩人輪流授課,判定為 Chris Ré。2026-10-13 依帶時間碼的字幕重對七個小節的起點,改成時間連結。

更新紀錄

  • 2026-10-13:各節的時間區間改成連到錄影的連結;導言補上片長;自我檢查分到各節結尾,答案摺疊。

參考資料