Skip to content

最大概似與邏輯斯迴歸:最小平方為什麼是合理的選擇|Stanford CS229 第 3 堂

2026年10月12日1 分鐘
TL;DR假設誤差是零均值、獨立同分布的高斯雜訊,對概似函數取 log 之後,最大概似就等於上一堂的最小平方。同一套做法換成 0/1 標籤與 sigmoid,得到邏輯斯迴歸,梯度仍是「誤差乘上輸入」。最後用 Newton 法對照 SGD:步數少,但每步要付 n·d² + d³ 的計算量。

🌏 English version

影片狀態:已附影片。 這篇依 Stanford Online 公開的 Spring 2026 第 3 堂錄影的英文字幕寫成,公式記號對照 2026 主講義第 1 章 1.3 節與第 2 章;我沒看到板書與投影片畫面,所以公式的寫法以講義為準。

上一堂把線性迴歸寫成「讓平方誤差總和最小」,但沒有回答為什麼是平方。這一堂由 Chris Ré 授課,先補上這個理由:只要假設誤差是零均值、獨立同分布的高斯雜訊,最小平方就是最大概似估計。接著把同一套做法搬到分類問題,推出邏輯斯迴歸(logistic regression),最後簡短介紹 Newton 法。整門課的位置見課程總覽。

先備是上一堂的 J(θ)J(\theta) 與梯度下降、常態分布的密度函數、對數與偏微分。讀完之後,你應該能自己從機率假設推出最小平方,寫出邏輯斯迴歸的對數概似與梯度,並且說得出 Newton 法為什麼步數少、卻沒有成為機器學習的主力。

先講一件會讓人困惑的事:這支影片在 YouTube 上的標題是「Weighted Least Squares」,但整堂課沒有講加權最小平方,也沒有講講義 1.4 節的局部加權線性迴歸。實際內容是下面這四段。

YouTube:Stanford CS229 Machine Learning | Spring 2026 | Lecture 3: Weighted Least Squares

這堂課的主線:一套會重複用好幾週的做法

(錄影 00:05–03:05)

Ré 開場先交代這堂要帶走的東西是一個框架,叫最大概似(maximum likelihood)。做法分三步:

  1. 寫一個機率模型,描述你認為資料是怎麼產生的。他稱之為 forward model。
  2. 把「這組參數讓觀察到的資料有多可能」寫成函數,取 log,變成一個加總。
  3. 用上一堂的梯度方法把它最大化。

線性迴歸和邏輯斯迴歸只是這套做法的兩個例子,下一堂的廣義線性模型是第三個。他也順帶說明邏輯斯迴歸的地位(01:05):

"logistic regression is the last layer of every model that you've probably interacted with."

意思是現在的文字與程式碼模型,最後一層做的事就是 softmax,也就是多類別版的邏輯斯迴歸。

線性迴歸的機率解釋:誤差從哪裡來

(錄影 03:05–23:35)

資料的產生方式

上一堂的設定不變:每筆輸入 x(i)∈Rd+1x^{(i)} \in \mathbb{R}^{d+1}(多出來的一維固定是 1,用來吸收截距),標籤 y(i)∈Ry^{(i)} \in \mathbb{R},要找的是

θ=arg⁡min⁡θ12∑i=1n(y(i)−θ⊤x(i))2\theta = \arg\min_\theta \frac{1}{2}\sum_{i=1}^{n}\left(y^{(i)} - \theta^\top x^{(i)}\right)^2

這堂課加上一個假設:世界上存在一個我們看不到的真實 θ\theta,每筆標籤是它的預測加上一個誤差項。

y(i)=θ⊤x(i)+ϵ(i)y^{(i)} = \theta^\top x^{(i)} + \epsilon^{(i)}

ϵ(i)\epsilon^{(i)} 同樣看不到。Ré 給了兩種理解方式(06:06)。一種是字面上的量測雜訊,例如儀器抖動。另一種是他比較喜歡的講法:誤差是「我們決定不去建模的部分」。有些誤差來源你其實知道,只是不想把模型做到那麼細,就把它們全部收進 ϵ\epsilon。所以問一個模型「是不是真的」沒有意義,他引了統計課必引的那句話:

"All models are wrong. Some models are useful."

對誤差的三個假設

Ré 口頭列出的假設有三個,下面的式子是我依他的敘述還原的(08:09–10:16):

零均值。 E[ϵ(i)]=0\mathbb{E}[\epsilon^{(i)}] = 0,誤差沒有系統性偏向。如果有,就代表資料裡藏著一個我們不知道的固定偏移,迴歸不可能找回真正的 θ\theta。這個假設幾乎是不得不做的。

獨立同分布(IID)。 每個誤差彼此獨立,而且來自同一個分布。獨立的意思是期望值可以拆開:i≠ji \neq j 時 E[ϵ(i)ϵ(j)]=E[ϵ(i)] E[ϵ(j)]\mathbb{E}[\epsilon^{(i)}\epsilon^{(j)}] = \mathbb{E}[\epsilon^{(i)}]\,\mathbb{E}[\epsilon^{(j)}]。這條式子只是獨立的一個推論;完整的獨立是聯合機率可以拆成各自機率的乘積,後面寫概似函數時用的是那個版本。Ré 直說這是很強的假設,主要是為了讓後面的計算做得下去。他舉的反例是資料來自 A、B 兩個量測站,兩邊的誤差變異數不同;把兩邊資料混在一起,這個模型會直接忽略這個差別。

只管變異數。 E[(ϵ(i))2]=σ2\mathbb{E}[(\epsilon^{(i)})^2] = \sigma^2。因為均值是零,這個量就是變異數,用來描述資料有多吵。更高階的動差(三次、四次)都不建模。

接著他說這組設定正好會導出高斯分布(11:16),理由是高斯只靠均值與變異數就能完整描述;他還補了一句,想多記幾階動差的「更好的模型」並不存在。這段話適合讀成選模型的理由:如果只打算用均值和變異數兩個量來描述雜訊,高斯就是剛好由這兩個量決定的那一族分布。

反過來的推論則不成立,這一點課堂上沒有分開講。誤差滿足零均值、IID、變異數固定,並不代表它就是高斯:均勻分布、自我檢查第 1 題的 Laplace 分布,都可以調成零均值、變異數 σ2\sigma^2。所以後面的推導還需要多一個假設,講義直接把它寫出來:ϵ(i)∼N(0,σ2)\epsilon^{(i)} \sim \mathcal{N}(0, \sigma^2)。本文後面照講義,把「誤差是高斯」當成第四個假設。

Ré 對這個假設的態度更值得記:不要問資料「是不是」高斯,要問高斯模型對你在意的事夠不夠好,這是程度問題。他也順口提到大數法則與中央極限定理(12:16),當作高斯常常是個不錯起點的理由,沒有展開。

高斯密度裡每一塊在做什麼

z∼N(μ,σ2)z \sim \mathcal{N}(\mu, \sigma^2) 讀作「zz 服從均值 μ\mu、變異數 σ2\sigma^2 的常態分布」,密度函數是

p(z)=12π σexp⁡(−(z−μ)22σ2)p(z) = \frac{1}{\sqrt{2\pi}\,\sigma}\exp\left(-\frac{(z-\mu)^2}{2\sigma^2}\right)

Ré 把它拆成三塊(14:20–16:23):

  • 前面的 12πσ\frac{1}{\sqrt{2\pi}\sigma} 是正規化常數,讓整條曲線底下的面積等於 1。他說這是整條式子最不重要的部分,等一下取 log、求最大值時它會自己消失。
  • 指數裡的 (z−μ)2(z-\mu)^2 是到均值的距離平方。平方誤差就是從這裡進來的。
  • 分母的 σ2\sigma^2 把距離換成「幾個標準差」的單位。σ\sigma 接近 0 時曲線又尖又窄,σ\sigma 大時又扁又寬。三個標準差內涵蓋 99.7% 的機率。

有學生問高斯能不能描述不對稱或多個峰的分布(17:27)。單一高斯不行:它對均值左右對稱,只有一個峰。多個峰要用後面會教的高斯混合模型。

從誤差的分布到標籤的分布

把 ϵ(i)=y(i)−θ⊤x(i)\epsilon^{(i)} = y^{(i)} - \theta^\top x^{(i)} 代進去。給定 x(i)x^{(i)} 之後,θ⊤x(i)\theta^\top x^{(i)} 是一個固定的數,y(i)y^{(i)} 只是把高斯誤差平移了這麼多,所以

y(i)∣x(i);θ∼N(θ⊤x(i), σ2)y^{(i)} \mid x^{(i)};\theta \sim \mathcal{N}\left(\theta^\top x^{(i)},\ \sigma^2\right) p(y(i)∣x(i);θ)=12π σexp⁡(−(y(i)−θ⊤x(i))22σ2)p\left(y^{(i)} \mid x^{(i)};\theta\right) = \frac{1}{\sqrt{2\pi}\,\sigma}\exp\left(-\frac{\left(y^{(i)}-\theta^\top x^{(i)}\right)^2}{2\sigma^2}\right)

變異數為什麼可以原封不動搬過來?Ré 特別提醒這不是自動成立的(20:31):加上一個常數只會平移分布,不改變寬度;如果模型裡是把 ϵ\epsilon 乘上 10,變異數就會變成 100 倍,得另外追蹤。

這條式子有兩個符號,後面整門課都會用:

  • 直線 ∣\mid 是「以什麼為條件」。x(i)x^{(i)} 是我們看得到的資料,看到它之後分布的均值就定下來了。
  • 分號 ;; 是「以什麼為參數」。θ\theta 不是隨機變數,不是一個可以拿來當條件的事件。每個 θ\theta 對應一個不同的分布,我們要做的是在這一整族分布裡挑一個。

有學生問參數不只一組怎麼辦(23:33),答案是全部列在分號後面,或者包成一個符號。

最大概似:為什麼會回到最小平方

(錄影 23:35–34:30)

概似函數

固定一個 θ\theta,就能算出每筆資料在這個模型下的密度值。把 nn 筆乘起來,得到概似函數(likelihood):

L(θ)=∏i=1np(y(i)∣x(i);θ)L(\theta) = \prod_{i=1}^{n} p\left(y^{(i)} \mid x^{(i)};\theta\right)

為什麼是相乘?Ré 反問全班這裡用到哪個假設(24:36)。答案是 IID。原本要寫的是「所有 yy 同時出現」的聯合機率,那是一個同時牽涉全部資料的巨大函數;獨立的定義就是聯合機率可以拆成各自機率的乘積。

L(θ)L(\theta) 是給每個 θ\theta 打的分數。分數愈高,代表這個 θ\theta 愈能解釋手上的資料。最大概似原則就是挑分數最高的那個。

取 log,把連乘變成加總

每個因子都是正數,所以可以取 log。log 是嚴格遞增函數,讓 LL 最大的 θ\theta 也讓 log⁡L\log L 最大。好處是連乘變加總,數值上也穩定得多。記 ℓ(θ)=log⁡L(θ)\ell(\theta) = \log L(\theta),一步一步展開:

ℓ(θ)=∑i=1nlog⁡[12π σexp⁡(−(y(i)−θ⊤x(i))22σ2)]\ell(\theta) = \sum_{i=1}^{n}\log\left[\frac{1}{\sqrt{2\pi}\,\sigma}\exp\left(-\frac{\left(y^{(i)}-\theta^\top x^{(i)}\right)^2}{2\sigma^2}\right)\right]

log 把乘積拆成兩項相加,而 log⁡exp⁡(a)=a\log\exp(a) = a:

ℓ(θ)=∑i=1n[log⁡12π σ−(y(i)−θ⊤x(i))22σ2]\ell(\theta) = \sum_{i=1}^{n}\left[\log\frac{1}{\sqrt{2\pi}\,\sigma} - \frac{\left(y^{(i)}-\theta^\top x^{(i)}\right)^2}{2\sigma^2}\right]

第一項跟 ii 無關,加 nn 次;第二項把 1σ2\frac{1}{\sigma^2} 提出來:

ℓ(θ)=nlog⁡12π σ−1σ2⋅12∑i=1n(y(i)−θ⊤x(i))2⏟J(θ)\ell(\theta) = n\log\frac{1}{\sqrt{2\pi}\,\sigma} - \frac{1}{\sigma^2}\cdot\underbrace{\frac{1}{2}\sum_{i=1}^{n}\left(y^{(i)}-\theta^\top x^{(i)}\right)^2}_{J(\theta)}

第一項不含 θ\theta。第二項是上一堂的 J(θ)J(\theta) 乘上一個正的常數,前面帶負號。所以讓 ℓ(θ)\ell(\theta) 最大,就是讓 J(θ)J(\theta) 最小。上一堂在最小化誤差,這一堂在最大化概似,差一個負號,是同一件事。

還有一個結論藏在式子裡:σ2\sigma^2 只影響常數項和 JJ 前面的倍數,不影響哪個 θ\theta 最好。不知道 σ2\sigma^2 也能解出 θ\theta。

數值例子一:兩個 θ 的概似比較

以下是本文自擬的例子,不是課堂內容。用沒有截距的單一參數模型 y=θx+ϵy = \theta x + \epsilon,三筆資料 (x,y)(x,y) 是 (1,1)(1,1)、(2,3)(2,3)、(3,2)(3,2)。比較 θ=1\theta = 1 與 θ=0.5\theta = 0.5。

殘差 y−θxy - \theta xJ(θ)J(\theta)ℓ(θ)\ell(\theta),σ=1\sigma=1ℓ(θ)\ell(\theta),σ=2\sigma=2
θ=1\theta = 10, 1, −10,\ 1,\ -112(0+1+1)=1\frac{1}{2}(0+1+1) = 1−2.757−1=−3.757-2.757 - 1 = -3.757−4.836−0.25=−5.086-4.836 - 0.25 = -5.086
θ=0.5\theta = 0.50.5, 2, 0.50.5,\ 2,\ 0.512(0.25+4+0.25)=2.25\frac{1}{2}(0.25+4+0.25) = 2.25−2.757−2.25=−5.007-2.757 - 2.25 = -5.007−4.836−0.5625=−5.399-4.836 - 0.5625 = -5.399

常數項怎麼算:σ=1\sigma=1 時 3log⁡12π=3×(−0.919)=−2.7573\log\frac{1}{\sqrt{2\pi}} = 3 \times (-0.919) = -2.757;σ=2\sigma=2 時每筆多一個 −log⁡2=−0.693-\log 2 = -0.693,合計 −4.836-4.836。

這張表說明兩件事。JJ 比較小的 θ=1\theta=1,對數概似也比較高。把 σ\sigma 從 1 換成 2,兩個數字都變了,排序沒變。這組資料真正的最佳解是 θ=∑xy∑x2=1314≈0.929\theta = \frac{\sum x y}{\sum x^2} = \frac{13}{14} \approx 0.929,此時 J=0.964J = 0.964,不論 σ\sigma 取多少它都是最大概似解。

兩個課堂問答

機率為什麼一定是正的?(28:40)高斯密度有指數函數,永遠大於 0,所以能放心取 log。離散分布可能在某些地方剛好是 0,那就得先確認定義域。Ré 的說法是:

"If you start taking logs of 0's, all bets are off."

σ2\sigma^2 從哪來?(32:40)兩種做法:在模型之外先假設或估一個值;或者把 σ2\sigma^2 也當成未知參數,一起做最大概似。他順勢給了一個判斷模型可不可信的標準:

"if your model is such that small changes in a parameter like that change your conclusions, you should be very nervous."

如果變異數在兩個數量級內掃過一輪,答案都一樣,那是好徵兆。這個例子裡 θ\theta 完全不受 σ2\sigma^2 影響,是最理想的情況。

這堂課跟「加權最小平方」的關係

影片標題裡的 weighted least squares 沒有在課堂出現。最接近的一句是講 IID 時 A、B 兩個量測站的例子,Ré 只說這種情況可以建模,之後再談。

以下是本文的補充,不是課堂內容。把上面的推導改一個地方:誤差仍然彼此獨立、仍是零均值的高斯,但每筆資料有自己的變異數 σi2\sigma_i^2,而且這些 σi2\sigma_i^2 是已知的。這時每筆的密度變成 12π σiexp⁡(−(y(i)−θ⊤x(i))22σi2)\frac{1}{\sqrt{2\pi}\,\sigma_i}\exp\left(-\frac{(y^{(i)}-\theta^\top x^{(i)})^2}{2\sigma_i^2}\right),取 log 加總之後,正規化常數那一項照樣不含 θ\theta,但 1σi2\frac{1}{\sigma_i^2} 提不出加總符號,對數概似裡跟 θ\theta 有關的部分變成

−12∑i=1n1σi2(y(i)−θ⊤x(i))2-\frac{1}{2}\sum_{i=1}^{n}\frac{1}{\sigma_i^2}\left(y^{(i)}-\theta^\top x^{(i)}\right)^2

每筆平方誤差前面多了權重 1σi2\frac{1}{\sigma_i^2}:愈吵的資料點權重愈低。這就是加權最小平方。講義 1.4 節的局部加權線性迴歸也是在平方誤差前面乘權重,但那裡的權重由「離查詢點多遠」決定,跟雜訊大小無關。兩者這堂都沒教。

分類:為什麼不直接拿最小平方來用

(錄影 34:30–37:44)

接下來標籤換成 y(i)∈{0,1}y^{(i)} \in \{0, 1\},例如是不是貓。第一個該問的問題是:把 0 和 1 當成數字,直接跑最小平方,行不行?

Ré 當場畫了一張圖:沿著 xx 軸走,先是一群標成 0 的點,再過去是一群標成 1 的點。分類只在乎兩群之間的分界在哪。但最小平方在乎每一點離直線多遠,所以遠處的點會把直線拉過去。他的說法是最小平方在找資料的「質心」,而分類要的是決策邊界,兩者目標不同。

數值例子二:一個遠處的點把分界拉歪

以下是本文自擬的例子。六筆一維資料:x=1,2,3x = 1, 2, 3 標 0,x=4,5,6x = 4, 5, 6 標 1。用最小平方配一條直線 h(x)=θ0+θ1xh(x) = \theta_0 + \theta_1 x,以 h(x)≥0.5h(x) \ge 0.5 判為 1。

xˉ=3.5\bar{x} = 3.5,yˉ=0.5\bar{y} = 0.5,∑(x−xˉ)2=17.5\sum (x-\bar{x})^2 = 17.5,∑(x−xˉ)(y−yˉ)=4.5\sum (x-\bar{x})(y-\bar{y}) = 4.5,所以 θ1=4.5/17.5=0.2571\theta_1 = 4.5 / 17.5 = 0.2571,θ0=0.5−0.2571×3.5=−0.4\theta_0 = 0.5 - 0.2571 \times 3.5 = -0.4。h(x)=0.5h(x) = 0.5 的位置是 x=3.5x = 3.5,剛好在兩群正中間,六筆全對。

現在多加一筆 x=−23x = -23、標籤 0。它離分界很遠,是一個毫無疑問的負例,照理不該影響分界。重新配適得到 θ0=0.4359\theta_0 = 0.4359、θ1=0.0256\theta_1 = 0.0256,分界移到 x=(0.5−0.4359)/0.0256≈2.50x = (0.5 - 0.4359)/0.0256 \approx 2.50。於是 x=3x = 3 的預測值變成 0.4359+0.0256×3=0.5130.4359 + 0.0256 \times 3 = 0.513,被判成 1,錯了。

新加的那個點本身被分對了(預測值 −0.153-0.153),卻讓原本分對的點變成分錯。直線為了靠近遠處那個點而放平,分界跟著移動。

但它比你想的常常有效

Ré 沒有把話說死(36:42):

"least squares will work more often than you think."

他的理由是高維資料的行為跟低維的直覺不一樣,例如最近的點和最遠的點距離常常差不多,所以一個看起來不合適的模型有時也夠用。不過還有一個型別上的問題:答案只有是或否,模型卻可能輸出 7 或 −40,你得在外面另寫程式把它轉成 0 或 1。比較乾淨的做法是讓模型的輸出本來就落在 0 到 1 之間。

邏輯斯迴歸:把線性分數壓進 0 到 1

(錄影 37:44–47:58)

sigmoid 與機率解讀

假設函數保留線性的部分,外面再包一層非線性函數 gg:

hθ(x)=g(θ⊤x),g(z)=11+e−zh_\theta(x) = g(\theta^\top x), \qquad g(z) = \frac{1}{1+e^{-z}}

gg 叫 logistic 函數或 sigmoid 函數(公式取自講義,課堂上是看圖)。Ré 先問大家希望 gg 有什麼性質:單調遞增,分數愈高輸出愈大;平滑。那為什麼不用階梯函數,過了門檻直接跳到 1?因為它不可微,數學上不方便。他補充可微並不是硬性條件,ReLU 這類函數也不是處處可微,只是這堂先用最好處理的這一個。

幾個數字感受一下:g(0)=0.5g(0) = 0.5,g(2)=0.881g(2) = 0.881,g(−2)=0.119g(-2) = 0.119,g(100)g(100) 已經非常接近 1 但永遠不會剛好等於 1。θ⊤x\theta^\top x 這個還沒壓縮的分數,常被稱為 logit。

輸出的解讀也跟著改變。之前模型預測一個數值,現在它預測的是機率:

P(y=1∣x;θ)=hθ(x),P(y=0∣x;θ)=1−hθ(x)P(y=1 \mid x;\theta) = h_\theta(x), \qquad P(y=0 \mid x;\theta) = 1 - h_\theta(x)

一個用詞上的提醒:Ré 把 gg 叫做 link function。講義第 3 章把 gg 叫 response function,它的反函數 g−1g^{-1} 才叫 link function,並註明很多教科書的叫法剛好相反。讀到這兩個詞時先確認對方指的是哪個方向。

寫出概似

兩條機率式子可以合併成一條:

p(y∣x;θ)=(hθ(x))y(1−hθ(x))1−yp(y \mid x;\theta) = \left(h_\theta(x)\right)^{y}\left(1-h_\theta(x)\right)^{1-y}

Ré 說這只是用指數寫的 if-then(41:53)。代 y=1y=1:第二個因子的指數是 0,變成 1,剩下 hθ(x)h_\theta(x)。代 y=0y=0:第一個因子變成 1,剩下 1−hθ(x)1-h_\theta(x)。

接下來完全照前面的流程。假設各筆資料獨立,概似是連乘:

L(θ)=∏i=1n(hθ(x(i)))y(i)(1−hθ(x(i)))1−y(i)L(\theta) = \prod_{i=1}^{n}\left(h_\theta(x^{(i)})\right)^{y^{(i)}}\left(1-h_\theta(x^{(i)})\right)^{1-y^{(i)}}

取 log,指數掉下來變成係數:

ℓ(θ)=∑i=1n[y(i)log⁡hθ(x(i))+(1−y(i))log⁡(1−hθ(x(i)))]\ell(\theta) = \sum_{i=1}^{n}\left[y^{(i)}\log h_\theta(x^{(i)}) + \left(1-y^{(i)}\right)\log\left(1-h_\theta(x^{(i)})\right)\right]

這是講義的式 (2.1)。它是一個對資料點的加總,所以上一堂的梯度下降、隨機梯度下降、小批次都能直接套用。有學生指出這裡是求最大值,應該叫梯度上升(43:56),Ré 同意:更新式的符號從減號改成加號,或者等價地對 −ℓ(θ)-\ell(\theta) 做梯度下降。

梯度推導

課堂上這一段 Ré 只放了投影片,說是純代數,請大家課後自己做(44:56)。這裡照講義第 2.1 節把它走完。

先算 sigmoid 的導數。把 g(z)=(1+e−z)−1g(z) = (1+e^{-z})^{-1} 用連鎖律微分:

g′(z)=e−z(1+e−z)2=11+e−z⋅e−z1+e−z=g(z)(1−g(z))g'(z) = \frac{e^{-z}}{(1+e^{-z})^2} = \frac{1}{1+e^{-z}}\cdot\frac{e^{-z}}{1+e^{-z}} = g(z)\left(1-g(z)\right)

最後一步用到 e−z1+e−z=1−11+e−z\frac{e^{-z}}{1+e^{-z}} = 1 - \frac{1}{1+e^{-z}}。

再看單一筆資料 (x,y)(x, y) 的對數概似,記 z=θ⊤xz = \theta^\top x。對 θj\theta_j 微分,連鎖律有三層:log 的導數、gg 的導數、zz 對 θj\theta_j 的導數 xjx_j。

∂ℓ∂θj=(yg(z)−1−y1−g(z))g(z)(1−g(z))xj\frac{\partial \ell}{\partial \theta_j} = \left(\frac{y}{g(z)} - \frac{1-y}{1-g(z)}\right) g(z)\left(1-g(z)\right) x_j

把 g(z)(1−g(z))g(z)(1-g(z)) 乘進括號,兩個分母各消掉一個因子:

∂ℓ∂θj=(y(1−g(z))−(1−y) g(z)) xj\frac{\partial \ell}{\partial \theta_j} = \Big(y\left(1-g(z)\right) - (1-y)\,g(z)\Big)\, x_j

展開括號,−y g(z)-y\,g(z) 和 +y g(z)+y\,g(z) 抵銷:

∂ℓ∂θj=(y−hθ(x))xj\frac{\partial \ell}{\partial \theta_j} = \left(y - h_\theta(x)\right) x_j

這是講義的式 (2.2)。隨機梯度上升的更新式就是

θj:=θj+α(y(i)−hθ(x(i)))xj(i)\theta_j := \theta_j + \alpha\left(y^{(i)} - h_\theta(x^{(i)})\right)x_j^{(i)}

上一堂線性迴歸只看一筆資料時的更新式是 θj:=θj−α(hθ(x(i))−y(i))xj(i)\theta_j := \theta_j - \alpha\left(h_\theta(x^{(i)}) - y^{(i)}\right)x_j^{(i)}(講義稱為 LMS 規則),把負號乘進括號就是同一條式子。兩者外觀一模一樣:先預測,看差多少,再往這筆資料 xx 的方向修正。差別只在 hθh_\theta 現在包了一層 sigmoid。Ré 說這個「誤差乘輸入」的形式並不明顯,卻是通則,這門課前段幾乎所有模型都長這樣,原因下一堂講廣義線性模型時會解釋。

數值例子三:走一步隨機梯度上升

以下是本文自擬的例子。取 θ=(−1,1)\theta = (-1, 1),一筆資料 x=(1,2)x = (1, 2)(第一維是固定的 1),學習率 α=0.1\alpha = 0.1。

z=−1×1+1×2=1z = -1 \times 1 + 1 \times 2 = 1,h=g(1)=0.731h = g(1) = 0.731。模型認為這筆有 73.1% 的機率是正例。

這筆的對數概似誤差 y−hy - h梯度 (y−h) x(y-h)\,x更新後的 θ\theta新的 hh
真實標籤 y=1y = 1log⁡0.731=−0.313\log 0.731 = -0.3130.2690.269(0.269, 0.538)(0.269,\ 0.538)(−0.973, 1.054)(-0.973,\ 1.054)g(1.134)=0.757g(1.134) = 0.757
真實標籤 y=0y = 0log⁡0.269=−1.313\log 0.269 = -1.313−0.731-0.731(−0.731, −1.462)(-0.731,\ -1.462)(−1.073, 0.854)(-1.073,\ 0.854)g(0.634)=0.654g(0.634) = 0.654

猜對方向的時候(y=1y=1),誤差小,參數只微調,機率從 0.731 升到 0.757。猜錯的時候(y=0y=0),對數概似低了 1,誤差大了將近三倍,修正幅度也大,機率從 0.731 降到 0.654。更新量自動跟「錯多少」成正比,不需要另外設計規則。

這也回答了例子二的問題(本文補充)。假設邏輯斯迴歸已經學到 θ=(−7,2)\theta = (-7, 2),分界在 x=3.5x = 3.5。那個遠在 x=−23x = -23 的負例,z=−7+2×(−23)=−53z = -7 + 2 \times (-23) = -53,h=g(−53)≈10−23h = g(-53) \approx 10^{-23},誤差 y−hy - h 幾乎是 0,乘上 xx 之後梯度仍然小到可以忽略。已經分對而且分得很有把握的點,對參數幾乎不出力;最小平方則因為它離直線遠而用力把線拉過去。

Newton 法:另一種求解方式

(錄影 47:58–1:02:14)

邏輯斯迴歸在 PyTorch 之前的年代

進入 Newton 法之前,Ré 講了一段歷史(47:58)。在 PyTorch、TensorFlow、JAX 出現之前,邏輯斯迴歸是機器學習最常用的模型,做法是把輸入特徵擴充到非常高的維度再丟進去。這個問題是凸的(他說課堂上不證),所以找得到最佳的 θ\theta。

他也接回前面 σ2\sigma^2 的話題:以前的人看到兩種求解程序給出兩個不同的 θ\theta 會很不安。後來機器學習領域想通了,真正在意的不是 θ\theta 本身,是 hθh_\theta 做出來的預測,所以現在談穩定性多半是看預測。Newton 法出自在意參數本身的那個傳統,他說介紹它主要是因為它在歷史上很重要。

一維的推導

Newton 法解的問題是:給一個函數 ff,找 f(θ)=0f(\theta) = 0 的地方。用在最大概似時,取 f=ℓ′f = \ell',因為最大值發生在導數為零的地方。

從猜測 θ0\theta_0 出發,在這一點用切線近似 ff,也就是一階泰勒展開:

t(θ)=f(θ0)+f′(θ0) (θ−θ0)t(\theta) = f(\theta_0) + f'(\theta_0)\,(\theta - \theta_0)

我們不知道 ff 的零點在哪,但切線的零點算得出來。令 t(θ)=0t(\theta) = 0,移項:

θ−θ0=−f(θ0)f′(θ0)⟹θ1=θ0−f(θ0)f′(θ0)\theta - \theta_0 = -\frac{f(\theta_0)}{f'(\theta_0)} \quad\Longrightarrow\quad \theta_1 = \theta_0 - \frac{f(\theta_0)}{f'(\theta_0)}

把 θ1\theta_1 當成新的猜測,重複。代入 f=ℓ′f = \ell',更新式是

θ:=θ−ℓ′(θ)ℓ′′(θ)\theta := \theta - \frac{\ell'(\theta)}{\ell''(\theta)}

Ré 強調它和梯度下降的差別(51:00):梯度下降只知道方向,走多遠要靠你給的學習率;Newton 法的切線直接告訴你走多遠。

"This is telling me exactly how far to go. So it doesn't have a step size."

多維:Hessian

θ\theta 是向量時,f=∇θℓf = \nabla_\theta \ell 是一個從 Rd+1\mathbb{R}^{d+1} 到 Rd+1\mathbb{R}^{d+1} 的函數,它的導數是二階偏導數排成的方陣,叫 Hessian:

Hjk=∂2ℓ(θ)∂θj ∂θk,θ:=θ−H−1∇θℓ(θ)H_{jk} = \frac{\partial^2 \ell(\theta)}{\partial\theta_j\,\partial\theta_k}, \qquad \theta := \theta - H^{-1}\nabla_\theta \ell(\theta)

一維的「除以 ℓ′′\ell''」變成「乘上 H−1H^{-1}」。

課堂上還岔出去談了一個更一般的情況(53:02–55:03):如果 ff 只輸出一個純量、θ\theta 卻有 dd 維,令切線為零只給你一條方程式,未知數有 dd 個,解有無限多。這時用的是 Moore–Penrose 虛反矩陣(pseudo-inverse)。Ré 接著問方程式比未知數多的情況怎麼辦,學生答對了:做最小平方,跟上一堂是同一個演算法。這段跟邏輯斯迴歸沒有直接關係,邏輯斯迴歸的 Hessian 是方陣。

以下是本文的補充。邏輯斯迴歸的 Hessian 可以從梯度再微分一次得到。∂ℓ∂θj=∑i(y(i)−h(i)) xj(i)\frac{\partial \ell}{\partial\theta_j} = \sum_i (y^{(i)} - h^{(i)})\,x_j^{(i)} 裡只有 h(i)=g(θ⊤x(i))h^{(i)} = g(\theta^\top x^{(i)}) 含 θ\theta,用 g′=g(1−g)g' = g(1-g):

Hjk=−∑i=1nh(i)(1−h(i))xj(i)xk(i)H_{jk} = -\sum_{i=1}^{n} h^{(i)}\left(1-h^{(i)}\right)x_j^{(i)}x_k^{(i)}

寫成矩陣是 H=−∑ih(i)(1−h(i)) x(i)x(i)⊤H = -\sum_i h^{(i)}(1-h^{(i)})\,x^{(i)}x^{(i)\top},每筆資料貢獻一個 (d+1)×(d+1)(d+1)\times(d+1) 的矩陣。要判斷彎曲的方向,拿任意向量 vv 從兩邊夾住它:

v⊤Hv=−∑i=1nh(i)(1−h(i))(v⊤x(i))2≤0v^\top H v = -\sum_{i=1}^{n} h^{(i)}\left(1-h^{(i)}\right)\left(v^\top x^{(i)}\right)^2 \le 0

係數 h(1−h)h(1-h) 永遠是正的,平方項不會是負的,所以不管往哪個方向看,ℓ\ell 都是往下彎的,也就是凹函數,沒有局部最大值的陷阱。ℓ\ell 是凹的等於 −ℓ-\ell 是凸的,Ré 說的「底下是凸的」指的就是這件事。

數值例子四:Newton 法對上梯度上升

以下是本文自擬的例子。四筆資料都只有截距項(x=1x = 1),三筆標 1、一筆標 0,模型只有一個參數 θ\theta,預測機率是 g(θ)g(\theta)。

ℓ(θ)=3log⁡g(θ)+log⁡(1−g(θ)),ℓ′(θ)=3(1−g)−g=3−4g(θ),ℓ′′(θ)=−4 g(θ)(1−g(θ))\ell(\theta) = 3\log g(\theta) + \log\left(1-g(\theta)\right), \quad \ell'(\theta) = 3\left(1-g\right) - g = 3 - 4g(\theta), \quad \ell''(\theta) = -4\,g(\theta)\left(1-g(\theta)\right)

令 ℓ′=0\ell' = 0 得 g(θ)=0.75g(\theta) = 0.75,也就是模型的機率等於資料中正例的比例,θ∗=ln⁡3=1.098612\theta^\ast = \ln 3 = 1.098612。這題有解析解,正好拿來量誤差。

從 θ=0\theta = 0 開始跑 Newton 法:

步數θ\thetag(θ)g(\theta)ℓ′\ell'ℓ′′\ell''與 ln⁡3\ln 3 的差
0000.50.511−1-11.101.10
1110.73110.73110.07580.0758−0.7864-0.78649.9×10−29.9\times10^{-2}
21.0963391.0963390.74960.74960.00170.0017−0.7509-0.75092.3×10−32.3\times10^{-3}
31.0986111.0986110.75000.75009.7×10−79.7\times10^{-7}−0.7500-0.75001.3×10−61.3\times10^{-6}
41.0986121.0986120.75000.75004×10−134\times10^{-13}

第一步怎麼算:θ1=0−1−1=1\theta_1 = 0 - \frac{1}{-1} = 1。第二步:θ2=1−0.0758−0.7864=1.0963\theta_2 = 1 - \frac{0.0758}{-0.7864} = 1.0963。

同一題用梯度上升、學習率 0.1:第 1 步到 0.10.1,第 10 步到 0.6570.657,第 100 步誤差還有 3.5×10−43.5\times10^{-4},第 200 步才到 1.5×10−71.5\times10^{-7}。Newton 法三步就到 10−610^{-6},而且每一步正確的位數大約翻倍。這就是 Ré 說的(55:03):

"it gives you many digits of precision every time it runs."

那為什麼大家還是用 SGD

答案是每一步的價錢(55:03–57:05)。nn 是資料筆數,dd 是參數維度。下表是 Ré 給的每步計算量;梯度下降那一列他只說要看過全部資料,O(nd)O(nd) 是本文照同樣的算法補上的:

方法每步計算量特性
SGDO(d)O(d)只看一筆,方向估得很粗,要走很多步
小批次 SGDO(Bd)O(Bd)看 BB 筆,方向好一些
梯度下降O(nd)O(nd)算出真正的梯度,但要掃過全部資料
Newton 法O(nd2+d3)O(nd^2 + d^3)步數很少,每步極貴

nd2nd^2 是組出 Hessian 的成本:照上面的公式,nn 筆資料各貢獻一個 d×dd\times d 矩陣。d3d^3 是解那個 d×dd\times d 線性系統的成本,Ré 說它來自求反矩陣。

機器學習關心的是 nn 和 dd 都極大的情況。Ré 舉的例子是拿網路上所有文字訓練一個百億到兆級參數的模型,連算一次完整梯度都負擔不起,更別說 d3d^3。所以他的結論是:

"minibatch SGD is the workhorse of ML."

他預告之後會有一份作業讓大家實際比較這幾種方法。

兩個課堂問答

Newton 法到底有沒有人用?(57:05)有,古典統計裡到處都是。特徵只有二十個到幾百個、而且你真的在意參數本身的時候,統計套件或 SciPy 用的就是 Newton 法,或是他稱為變形的 L-BFGS(省記憶體的準 Newton 法,不直接算出整個 Hessian)。Ré 說社會科學家不會想用 SGD:雜訊太大、不好調,而 Newton 法沒有學習率要調,按下去就跑完。

Hessian 有結構時能不能便宜一點?(59:08)可以。不必算出整個 Hessian,只要能算 Hessian 乘上向量就夠用;也可以假設它是對角矩陣,或對角加低秩。Ré 對 Hessian 的白話解釋是:它告訴你每個方向的步伐該信多少,變化劇烈的方向和平緩的方向不該走一樣遠。他說 AdaGrad 這類演算法用的就是對角近似的曲率資訊,現在最常用的 Adam 則是把這類想法和動量(momentum)結合起來。所以原版 Newton 法在機器學習裡少見,它背後的想法卻一直都在。

收尾

Ré 最後總結這堂的三件事:分類和迴歸的差別、最大概似這個原則、邏輯斯迴歸與 Newton 法。然後補了一句(1:01:10):

"I think I accidentally cut off and threw away the multi-class stuff, so I will make sure to bring that back."

多類別分類(softmax,講義 2.3 節)原本排在這堂,但沒講到。下一堂進入指數族與廣義線性模型,softmax 也在那裡補上。

自我檢查

1. 如果把誤差的分布從高斯換成 Laplace,密度 p(ϵ)=12bexp⁡(−∣ϵ∣b)p(\epsilon) = \frac{1}{2b}\exp\left(-\frac{|\epsilon|}{b}\right),最大概似會導出什麼損失函數?

答案:照同樣的步驟,ℓ(θ)=nlog⁡12b−1b∑i∣y(i)−θ⊤x(i)∣\ell(\theta) = n\log\frac{1}{2b} - \frac{1}{b}\sum_i \left|y^{(i)} - \theta^\top x^{(i)}\right|,最大化它等於最小化絕對誤差總和。判準:你要能指出平方是從高斯密度指數裡的 (z−μ)2(z-\mu)^2 來的,換一個雜訊假設,損失函數就跟著換。

2. 例子一裡,把 σ\sigma 改成 10,θ=1\theta = 1 和 θ=0.5\theta = 0.5 的對數概似差多少?哪個比較大?

答案:常數項相同會消掉,差距是 J(0.5)−J(1)σ2=2.25−1100=0.0125\frac{J(0.5) - J(1)}{\sigma^2} = \frac{2.25 - 1}{100} = 0.0125,仍然是 θ=1\theta = 1 比較大。σ\sigma 愈大,模型愈分不出兩個 θ\theta 的好壞,但排序不變。

3. θ=(0,0)\theta = (0, 0),一筆資料 x=(1,3)x = (1, 3)、y=1y = 1,α=0.5\alpha = 0.5。做一步隨機梯度上升,新的 θ\theta 和新的預測機率是多少?

答案:z=0z = 0,h=0.5h = 0.5,誤差 0.50.5,梯度 (0.5,1.5)(0.5, 1.5),新的 θ=(0.25,0.75)\theta = (0.25, 0.75)。新的 z=0.25+2.25=2.5z = 0.25 + 2.25 = 2.5,h=g(2.5)≈0.924h = g(2.5) \approx 0.924。

4. 為什麼 p(y∣x;θ)p(y \mid x;\theta) 裡 xx 前面是直線、θ\theta 前面是分號?

判準:答案要包含兩點。xx 是觀察到的資料,在這個模型裡可以當作條件;θ\theta 不是隨機變數,它是用來標示「一族分布裡的哪一個」的參數,最大概似就是在這一族裡挑。

5. 一個模型有 d=106d = 10^6 個參數、n=108n = 10^8 筆資料。Newton 法每一步的計算量大約是 SGD 每一步的多少倍?

答案:SGD 是 d=106d = 10^6。Newton 法是 nd2+d3=1020+1018≈1020nd^2 + d^3 = 10^{20} + 10^{18} \approx 10^{20}。相差約 101410^{14} 倍。即使 Newton 法只要十步,也遠遠划不來;光是存一個 106×10610^6 \times 10^6 的 Hessian 就要 101210^{12} 個數字。

對應閱讀

CS229 主講義(2026 年 8 月版)對應這堂的部分:

  • 第 1 章 1.3 節 Probabilistic interpretation(pp.16–18):誤差模型、概似函數、對數概似到 J(θ)J(\theta) 的推導。本文「最大概似」一節的式子與講義一致。
  • 第 2 章 2.1 節 Logistic regression(pp.21–24):sigmoid、g′=g(1−g)g' = g(1-g)、式 (2.1) 的對數概似、式 (2.2) 的梯度。課堂跳過的梯度代數在這裡。
  • 第 2 章 2.4 節 Another algorithm for maximizing ℓ(θ)\ell(\theta)(pp.28–29):Newton 法、Hessian。講義有一張三格圖畫出切線逼近的過程,並提到用在邏輯斯迴歸時又叫 Fisher scoring。

課堂和講義不同的地方:

  • 課堂先列零均值、IID、固定變異數,再說這組設定會導出高斯;講義直接假設誤差服從 N(0,σ2)\mathcal{N}(0, \sigma^2)。推導實際用到的是講義這個寫法。
  • 課堂用了大量時間談建模的態度(模型是抽象、參數敏感度、機器學習在意預測而統計在意參數),講義沒有這些。
  • 課堂談了各種最佳化方法的每步計算量、L-BFGS、AdaGrad 與 Adam 的關係,以及純量函數時的虛反矩陣;講義 2.4 節只說 Newton 法每步要求並反轉一個 Hessian,dd 不大時整體通常比較快。
  • 課堂把 gg 叫 link function;講義第 3 章叫它 response function。

課堂沒講、但講義在這個範圍內有的:

  • 1.4 節 Locally weighted linear regression(pp.18–20):影片標題最可能指的內容,這堂沒有出現。
  • 2.2 節感知器(pp.24–25):課堂只提到階梯函數不可微,沒有介紹感知器演算法。
  • 2.3 節多類別分類與 softmax(pp.25–27):Ré 說不小心刪掉了,之後補。
  • Remark 2.1.1 的 logistic loss 寫法(p.24):把負對數概似寫成 logit 的函數,第 7 章神經網路會用到。

課程影片來源

原始影片:Stanford CS229 Machine Learning | Spring 2026 | Lecture 3: Weighted Least Squares

查核日期:2026-10-12。

內容核對:已依字幕核對(2026-10-12):整份英文字幕(約 62 分鐘)逐段讀過,文中的課堂引句與時間戳都取自字幕;未看板書與投影片畫面,公式依主講義還原,課堂上只以口頭帶過的式子已在文中標明。四個數值例子都是本文自擬並另行驗算,不是課堂內容。

參考資料