🌏 English version
影片狀態:已附影片。 這篇依官方 MOOC 講義 10_handout.pdf 與這堂四支官方影片的機器轉錄逐字稿寫成,公式以講義為準;逐字稿未經人工校對。每一節開頭附該節的官方影片與大致的時間區段。文中的頁碼指投影片右下角的編號(0/25 到 25/25),寫「課堂上」的地方是轉述影片裡的說法。
這是台大林軒田 機器學習基石與技法 導讀 裡的基石第 10 堂。講義第 1 頁的 Roadmap 把它放在四大問題的第三個「How Can Machines Learn?」底下,緊接在基石第 9 堂:線性迴歸 之後。上一堂在同一頁上只留一行:線性迴歸假說配平方誤差,有解析解 w LIN = X † y \mathbf{w}_{\text{LIN}} = X^\dagger \mathbf{y} w LIN = X † y 。課堂上開場說,Logistic Regression 和 Linear Regression 只差一個字,這堂要看的就是那個字帶來什麼。
差別有兩個。第一,輸出要的是 0 到 1 之間的機率,但資料裡沒有機率,只有發生與沒發生。第二,推出來的誤差函數沒辦法像線性迴歸那樣一步算出最佳解,得一步一步走。
先備是線性迴歸的「令梯度為零」解法、基石第 2 堂:感知器與 PLA 的更新規則、基石第 8 堂:雜訊與誤差衡量 的目標分布 P ( y ∣ x ) P(y \mid \mathbf{x}) P ( y ∣ x ) 與逐點誤差,以及偏微分、連鎖律、指數與對數。讀完之後,你應該能自己從「挑概似最大的假說」推到 cross-entropy 誤差,用連鎖律算出它的梯度,說明為什麼沒有閉式解,推出梯度下降的更新式,並對一組小資料手算幾步更新。
整堂課的推導順序如下:
問題 :目標函數從 ± 1 \pm 1 ± 1 換成機率 P ( + 1 ∣ x ) P(+1 \mid \mathbf{x}) P ( + 1 ∣ x ) 。
假說 :分數 w ⊤ x \mathbf{w}^\top\mathbf{x} w ⊤ x 過一個 logistic 函數 θ \theta θ 。
誤差 :由最大概似得到 cross-entropy。
梯度 :連鎖律算出 ∇ E in ( w ) \nabla E_{\text{in}}(\mathbf{w}) ∇ E in ( w ) 。
卡關 :梯度為零的方程式解不出來。
演算法 :梯度下降,一步一步往谷底走。
目標換成機率:軟性二元分類與 logistic 假說
YouTube:Logistic Regression :: Logistic Regression Problem @ Machine Learning Foundations (機器學習基石)
(影片 00:00–01:00 複習上一堂,01:00–04:03 心臟病問題,04:03–07:47 理想資料與實際資料,07:47–13:06 logistic 假說與 logistic 函數,之後是 Fun Time。)
從「有沒有」到「風險多少」
講義第 2 頁把學習流程圖搬回來,例子換成醫院:輸入是病人的年齡、性別、血壓、膽固醇、體重(投影片上的那位是 40 歲、男性、血壓 130/85、膽固醇 240、體重 70),輸出是「有沒有心臟病」。這是一般的二元分類。基石第 8 堂講過,資料有雜訊時用目標分布 P ( y ∣ x ) P(y \mid \mathbf{x}) P ( y ∣ x ) 描述問題,而在 0/1 誤差底下,理想的目標函數是
f ( x ) = sign ( P ( + 1 ∣ x ) − 1 2 ) ∈ { − 1 , + 1 } f(\mathbf{x}) = \text{sign}\Big(P(+1 \mid \mathbf{x}) - \frac{1}{2}\Big) \in \{-1, +1\} f ( x ) = sign ( P ( + 1 ∣ x ) − 2 1 ) ∈ { − 1 , + 1 }
也就是看機率落在一半的哪一邊。講義註明這個選擇是 because of classification err:我們在意的是分錯的比例。課堂上補了一句,圖上為了簡潔,沒有畫出產生輸入的那個 P ( x ) P(\mathbf{x}) P ( x ) 的格子。
第 3 頁把問題改掉一個字:從 heart disease 變成 heart attack,輸出從 yes 變成「80% risk」。課堂上的說明是,醫生常常需要回答的問題是幾個月之後心臟病發(或癌症復發)的可能性有多高,而不只是有或沒有。這時我們想知道的就是 P ( + 1 ∣ x ) P(+1 \mid \mathbf{x}) P ( + 1 ∣ x ) 這個值本身,目標函數變成
f ( x ) = P ( + 1 ∣ x ) ∈ [ 0 , 1 ] f(\mathbf{x}) = P(+1 \mid \mathbf{x}) \in [0, 1] f ( x ) = P ( + 1 ∣ x ) ∈ [ 0 , 1 ]
講義稱它為 'soft' binary classification:輸出不再是硬梆梆的圈或叉,而是一個風險值。
想要的資料與拿得到的資料
要學一個輸出機率的 f f f ,最理想的資料是每個 x n \mathbf{x}_n x n 都附上它的機率。講義第 4 頁左欄把這種資料叫 ideal (noiseless) data:
理想(無雜訊)的資料 實際(有雜訊)的資料 第 1 筆 y 1 ′ = 0.9 = P ( + 1 ∣ x 1 ) y'_1 = 0.9 = P(+1 \mid \mathbf{x}_1) y 1 ′ = 0.9 = P ( + 1 ∣ x 1 ) y 1 = ∘ y_1 = \circ y 1 = ∘ ,從 P ( y ∣ x 1 ) P(y \mid \mathbf{x}_1) P ( y ∣ x 1 ) 抽出來第 2 筆 y 2 ′ = 0.2 = P ( + 1 ∣ x 2 ) y'_2 = 0.2 = P(+1 \mid \mathbf{x}_2) y 2 ′ = 0.2 = P ( + 1 ∣ x 2 ) y 2 = × y_2 = \times y 2 = × ,從 P ( y ∣ x 2 ) P(y \mid \mathbf{x}_2) P ( y ∣ x 2 ) 抽出來第 N N N 筆 y N ′ = 0.6 = P ( + 1 ∣ x N ) y'_N = 0.6 = P(+1 \mid \mathbf{x}_N) y N ′ = 0.6 = P ( + 1 ∣ x N ) y N = × y_N = \times y N = × ,從 P ( y ∣ x N ) P(y \mid \mathbf{x}_N) P ( y ∣ x N ) 抽出來
有左欄的資料,事情就跟迴歸差不多:找一個在這些點上預測值接近 0.9、0.2、0.6 的假說。但左欄拿不到。課堂上用醫院的病歷說明:病歷上記的是病人兩三個月後有沒有心臟病發,沒有人知道那個機率到底是 0.9 還是 0.2。
所以手上只有右欄。講義同一頁的第二張把右欄改寫成數字:如果用 1 代表圈、0 代表叉,三筆資料分別是 y 1 ′ = 1 y'_1 = 1 y 1 ′ = 1 、y 2 ′ = 0 y'_2 = 0 y 2 ′ = 0 、y N ′ = 0 y'_N = 0 y N ′ = 0 ,各是「依 P ( y ∣ x n ) P(y \mid \mathbf{x}_n) P ( y ∣ x n ) 抽一次,抽到圈了嗎」的結果。課堂上把這解讀成:實際資料是理想資料的有雜訊版本。想要 0.9,抽樣後拿到 1;想要 0.2,拿到 0;第三筆機率明明是 0.6,比一半大,抽樣卻剛好抽到另一邊,拿到 0,誤差相當大。
講義用一句話收尾:same data as hard binary classification, different target function。資料的形式和一般二元分類一模一樣,要學的東西不同。這堂課接下來的問題就是:只有圈和叉,怎麼學出一個輸出機率的假說。
logistic 假說:分數再過一個 S 形函數
假說的第一步跟前面幾堂一樣(第 5 頁)。把病人的特徵寫成 x = ( x 0 , x 1 , x 2 , … , x d ) \mathbf{x} = (x_0, x_1, x_2, \dots, x_d) x = ( x 0 , x 1 , x 2 , … , x d ) ,其中 x 0 x_0 x 0 是常數項,算一個加權的「風險分數」:
s = ∑ i = 0 d w i x i = w ⊤ x s = \sum_{i=0}^{d} w_i x_i = \mathbf{w}^\top\mathbf{x} s = i = 0 ∑ d w i x i = w ⊤ x
線性迴歸直接輸出 s s s ,但 s s s 可以是任何實數,我們要的是 0 到 1 之間的值。做法是分數愈高就說風險愈大,再用一個 S 形的函數 θ \theta θ 把分數換成機率。講義把 θ \theta θ 叫 logistic function,假說寫成
h ( x ) = θ ( w ⊤ x ) h(\mathbf{x}) = \theta(\mathbf{w}^\top\mathbf{x}) h ( x ) = θ ( w ⊤ x )
第 5 頁的圖橫軸是分數 s s s ,縱軸從 0 到 1,藍色曲線從左下貼著 0 出發,在 s = 0 s = 0 s = 0 附近爬升,往右貼近 1。課堂上的讀法是:拿到 1126 分,就在橫軸的 1126 那裡往上對到曲線,讀出要輸出的值;拿到 − 5 -5 − 5 分也一樣。
logistic 函數的式子
第 6 頁給出式子:
θ ( s ) = e s 1 + e s = 1 1 + e − s \theta(s) = \frac{e^{s}}{1 + e^{s}} = \frac{1}{1 + e^{-s}} θ ( s ) = 1 + e s e s = 1 + e − s 1
第二個等號是分子分母同除以 e s e^s e s 。講義列了三個值,課堂上逐一檢查:
θ ( 0 ) = 1 1 + 1 = 1 2 \theta(0) = \frac{1}{1 + 1} = \frac{1}{2} θ ( 0 ) = 1 + 1 1 = 2 1 ,不偏不倚在中間。
s → ∞ s \to \infty s → ∞ 時,用右邊的寫法,e − s → 0 e^{-s} \to 0 e − s → 0 ,所以 θ ( s ) → 1 \theta(s) \to 1 θ ( s ) → 1 。課堂上是用左邊的寫法講:分子分母都趨向無限大而且差不多大,比值跑到 1,並承認無限大除以無限大在數學上要更嚴格的定義。
s → − ∞ s \to -\infty s → − ∞ 時,用左邊的寫法,分子 e s → 0 e^{s} \to 0 e s → 0 、分母趨近 1,所以 θ ( s ) → 0 \theta(s) \to 0 θ ( s ) → 0 。
講義對它的形容是 smooth, monotonic, sigmoid function of s s s :平滑(處處可微)、單調、S 形。本文代幾個數字進去,感受它變化的速度:
s s s − 5 -5 − 5 − 2 -2 − 2 − 1 -1 − 1 0 0 0 1 1 1 2 2 2 5 5 5 θ ( s ) \theta(s) θ ( s ) 0.0067 0.1192 0.2689 0.5 0.7311 0.8808 0.9933
分數在 − 2 -2 − 2 到 2 2 2 之間時輸出變化最快,超過 ± 5 \pm 5 ± 5 就幾乎貼在 0 或 1。表上還看得到一個之後會用到的性質:θ ( − 1 ) + θ ( 1 ) = 1 \theta(-1) + \theta(1) = 1 θ ( − 1 ) + θ ( 1 ) = 1 、θ ( − 2 ) + θ ( 2 ) = 1 \theta(-2) + \theta(2) = 1 θ ( − 2 ) + θ ( 2 ) = 1 ,左右對稱的兩個分數,輸出加起來是 1。
合起來,邏輯迴歸就是用
h ( x ) = 1 1 + exp ( − w ⊤ x ) h(\mathbf{x}) = \frac{1}{1 + \exp(-\mathbf{w}^\top\mathbf{x})} h ( x ) = 1 + exp ( − w ⊤ x ) 1
去逼近目標函數 f ( x ) = P ( + 1 ∣ x ) f(\mathbf{x}) = P(+1 \mid \mathbf{x}) f ( x ) = P ( + 1 ∣ x ) 。
Fun Time:把機率換回圈叉
題目(第 7 頁): 任取一個 logistic 假說 h ( x ) = 1 1 + exp ( − w ⊤ x ) h(\mathbf{x}) = \frac{1}{1 + \exp(-\mathbf{w}^\top\mathbf{x})} h ( x ) = 1 + e x p ( − w ⊤ x ) 1 。用 sign ( h ( x ) − 1 2 ) \text{sign}\big(h(\mathbf{x}) - \frac{1}{2}\big) sign ( h ( x ) − 2 1 ) 把它「轉成」二元分類的預測,這個預測等價於下面哪一個式子?
sign ( w ⊤ x − 1 2 ) \text{sign}\big(\mathbf{w}^\top\mathbf{x} - \frac{1}{2}\big) sign ( w ⊤ x − 2 1 )
sign ( w ⊤ x ) \text{sign}\big(\mathbf{w}^\top\mathbf{x}\big) sign ( w ⊤ x )
sign ( w ⊤ x + 1 2 ) \text{sign}\big(\mathbf{w}^\top\mathbf{x} + \frac{1}{2}\big) sign ( w ⊤ x + 2 1 )
以上皆非
答案:2。 講義的理由是 w ⊤ x = 0 \mathbf{w}^\top\mathbf{x} = 0 w ⊤ x = 0 時 h ( x ) h(\mathbf{x}) h ( x ) 剛好是 1 2 \frac{1}{2} 2 1 ,所以在 1 2 \frac{1}{2} 2 1 切 h h h 和在 0 切分數是同一件事。補上中間的步驟:θ \theta θ 是嚴格遞增的,所以 θ ( s ) > 1 2 = θ ( 0 ) \theta(s) > \frac{1}{2} = \theta(0) θ ( s ) > 2 1 = θ ( 0 ) 若且唯若 s > 0 s > 0 s > 0 ,θ ( s ) < 1 2 \theta(s) < \frac{1}{2} θ ( s ) < 2 1 若且唯若 s < 0 s < 0 s < 0 。
選項 1 把門檻放在分數 1 2 \frac{1}{2} 2 1 ,對應的機率是 θ ( 0.5 ) ≈ 0.622 \theta(0.5) \approx 0.622 θ ( 0.5 ) ≈ 0.622 ,也就是機率超過 0.622 才說是圈;選項 3 的門檻是分數 − 1 2 -\frac{1}{2} − 2 1 ,對應 θ ( − 0.5 ) ≈ 0.378 \theta(-0.5) \approx 0.378 θ ( − 0.5 ) ≈ 0.378 。兩個都和「超過一半」不同。
課堂上從這題得到的結論是:logistic 假說其實只是之前二元分類假說的一個對應版本。本文補充:分界仍然是 w ⊤ x = 0 \mathbf{w}^\top\mathbf{x} = 0 w ⊤ x = 0 那個超平面,logistic 假說多回報的是分數離 0 多遠所對應的機率。
誤差怎麼定:從概似推到 cross-entropy
YouTube:Logistic Regression :: Logistic Regression Error @ Machine Learning Foundations (機器學習基石)
(影片 00:00–01:46 三個線性模型並排,01:46–06:18 概似,06:18–09:45 logistic 函數的對稱性與連乘式,09:45–14:47 整理成 cross-entropy,之後是 Fun Time。)
三個線性模型,缺一格誤差
第 8 頁把目前學過的三個模型放在一起。它們都先算同一個線性分數 s = w ⊤ x s = \mathbf{w}^\top\mathbf{x} s = w ⊤ x ,差別在分數算完之後做什麼:
線性分類 線性迴歸 邏輯迴歸 假說 h ( x ) h(\mathbf{x}) h ( x ) sign ( s ) \text{sign}(s) sign ( s ) s s s θ ( s ) \theta(s) θ ( s ) 圖上的輸出函數 階梯 斜直線 S 形曲線 誤差 0/1 平方 ? 講義給的理由 plausible(對應小的翻轉雜訊) friendly(容易最小化) 待定
課堂上說明圖示:線性分類的方塊裡畫的是階梯狀的 sign,線性迴歸畫一條斜線,表示分數原封不動輸出(identity),邏輯迴歸畫的是 S 形。0/1 誤差的理由是它最能說服人,分對或分錯;平方誤差的理由是它導出了簡潔的演算法。第三格還空著,講義的問題是 how to define E in ( w ) E_{\text{in}}(\mathbf{w}) E in ( w ) for logistic regression。
概似:讓 h 假扮 f
第 9 頁先把目標函數和目標分布的關係寫清楚。f ( x ) = P ( + 1 ∣ x ) f(\mathbf{x}) = P(+1 \mid \mathbf{x}) f ( x ) = P ( + 1 ∣ x ) 等價於
P ( y ∣ x ) = { f ( x ) for y = + 1 1 − f ( x ) for y = − 1 P(y \mid \mathbf{x}) = \begin{cases} f(\mathbf{x}) & \text{for } y = +1 \\ 1 - f(\mathbf{x}) & \text{for } y = -1 \end{cases} P ( y ∣ x ) = { f ( x ) 1 − f ( x ) for y = + 1 for y = − 1
因為兩種結果的機率加起來是 1。
接著考慮一份資料 D = { ( x 1 , ∘ ) , ( x 2 , × ) , … , ( x N , × ) } \mathcal{D} = \{(\mathbf{x}_1, \circ), (\mathbf{x}_2, \times), \dots, (\mathbf{x}_N, \times)\} D = {( x 1 , ∘ ) , ( x 2 , × ) , … , ( x N , × )} 。f f f 產生這份資料的機率是多少?每一筆是先抽到 x n \mathbf{x}_n x n ,再依 P ( y ∣ x n ) P(y \mid \mathbf{x}_n) P ( y ∣ x n ) 抽到那個標籤;各筆獨立,所以整份資料的機率是連乘:
P ( x 1 ) P ( ∘ ∣ x 1 ) × P ( x 2 ) P ( × ∣ x 2 ) × ⋯ × P ( x N ) P ( × ∣ x N ) P(\mathbf{x}_1)P(\circ \mid \mathbf{x}_1) \times P(\mathbf{x}_2)P(\times \mid \mathbf{x}_2) \times \dots \times P(\mathbf{x}_N)P(\times \mid \mathbf{x}_N) P ( x 1 ) P ( ∘ ∣ x 1 ) × P ( x 2 ) P ( × ∣ x 2 ) × ⋯ × P ( x N ) P ( × ∣ x N )
用上面的關係把 P ( ∘ ∣ x ) P(\circ \mid \mathbf{x}) P ( ∘ ∣ x ) 換成 f ( x ) f(\mathbf{x}) f ( x ) 、P ( × ∣ x ) P(\times \mid \mathbf{x}) P ( × ∣ x ) 換成 1 − f ( x ) 1 - f(\mathbf{x}) 1 − f ( x ) :
P ( x 1 ) f ( x 1 ) × P ( x 2 ) ( 1 − f ( x 2 ) ) × ⋯ × P ( x N ) ( 1 − f ( x N ) ) P(\mathbf{x}_1)f(\mathbf{x}_1) \times P(\mathbf{x}_2)\big(1 - f(\mathbf{x}_2)\big) \times \dots \times P(\mathbf{x}_N)\big(1 - f(\mathbf{x}_N)\big) P ( x 1 ) f ( x 1 ) × P ( x 2 ) ( 1 − f ( x 2 ) ) × ⋯ × P ( x N ) ( 1 − f ( x N ) )
但 f f f 是未知的。課堂上的做法是讓 h h h 假扮一下 f f f :假裝 h h h 就是產生資料的那個函數,把式子裡的 f f f 全部換成 h h h ,得到「h h h 產生同一份資料的可能性」,這個量叫概似(likelihood):
likelihood ( h ) = P ( x 1 ) h ( x 1 ) × P ( x 2 ) ( 1 − h ( x 2 ) ) × ⋯ × P ( x N ) ( 1 − h ( x N ) ) \text{likelihood}(h) = P(\mathbf{x}_1)h(\mathbf{x}_1) \times P(\mathbf{x}_2)\big(1 - h(\mathbf{x}_2)\big) \times \dots \times P(\mathbf{x}_N)\big(1 - h(\mathbf{x}_N)\big) likelihood ( h ) = P ( x 1 ) h ( x 1 ) × P ( x 2 ) ( 1 − h ( x 2 ) ) × ⋯ × P ( x N ) ( 1 − h ( x N ) )
講義接著給兩個論點:
如果 h ≈ f h \approx f h ≈ f ,那麼 likelihood ( h ) ≈ \text{likelihood}(h) \approx likelihood ( h ) ≈ 用 f f f 算出來的機率。
用 f f f 算出來的機率通常很大(usually large)。課堂上的說法是,手上的資料真的是 f f f 產生的,所以回頭看,f f f 產生這份資料的機率應該不小,並說這是直覺。
兩句合起來:好的 h h h 概似應該大。所以第 10 頁的選法是
g = argmax h likelihood ( h ) g = \underset{h}{\text{argmax}}\ \text{likelihood}(h) g = h argmax likelihood ( h )
在所有假說裡挑概似最大的那個當 g g g 。
用講義的三個機率算一次
以下是本文用講義第 4 頁的數字自擬的算例,不在講義上。假設只有三筆資料,真正的機率是 f ( x 1 ) = 0.9 f(\mathbf{x}_1) = 0.9 f ( x 1 ) = 0.9 、f ( x 2 ) = 0.2 f(\mathbf{x}_2) = 0.2 f ( x 2 ) = 0.2 、f ( x 3 ) = 0.6 f(\mathbf{x}_3) = 0.6 f ( x 3 ) = 0.6 ,抽到的標籤是圈、叉、叉。P ( x n ) P(\mathbf{x}_n) P ( x n ) 的部分每個假說都一樣,先不看,只比較後面那三項的乘積:
假說在三個點上的輸出 連乘 值 f f f 本身:( 0.9 , 0.2 , 0.6 ) (0.9, 0.2, 0.6) ( 0.9 , 0.2 , 0.6 ) 0.9 × 0.8 × 0.4 0.9 \times 0.8 \times 0.4 0.9 × 0.8 × 0.4 0.288 接近 f f f :( 0.8 , 0.3 , 0.5 ) (0.8, 0.3, 0.5) ( 0.8 , 0.3 , 0.5 ) 0.8 × 0.7 × 0.5 0.8 \times 0.7 \times 0.5 0.8 × 0.7 × 0.5 0.280 什麼都說一半:( 0.5 , 0.5 , 0.5 ) (0.5, 0.5, 0.5) ( 0.5 , 0.5 , 0.5 ) 0.5 × 0.5 × 0.5 0.5 \times 0.5 \times 0.5 0.5 × 0.5 × 0.5 0.125 跟 f f f 相反:( 0.1 , 0.8 , 0.4 ) (0.1, 0.8, 0.4) ( 0.1 , 0.8 , 0.4 ) 0.1 × 0.2 × 0.6 0.1 \times 0.2 \times 0.6 0.1 × 0.2 × 0.6 0.012
接近 f f f 的假說,概似也接近 f f f 的 0.288;跟 f f f 唱反調的假說,概似只剩 0.012。這就是講義第一個論點的意思。
本文補充一個要留意的地方。如果允許任何函數當假說,( 1 , 0 , 0 ) (1, 0, 0) ( 1 , 0 , 0 ) 的概似是 1 × 1 × 1 = 1 1 \times 1 \times 1 = 1 1 × 1 × 1 = 1 ,比 f f f 的 0.288 還高:它把看到的標籤背下來,並把機率說死。所以「概似最大的就接近 f f f 」要成立,得靠假說集合有所限制(這裡是 θ ( w ⊤ x ) \theta(\mathbf{w}^\top\mathbf{x}) θ ( w ⊤ x ) 這種形式,d VC d_{\text{VC}} d VC 有限)加上資料夠多,這跟前幾堂「E in E_{\text{in}} E in 小要能推到 E out E_{\text{out}} E out 小」是同一個條件。講義用的字是 usually,沒有說一定。
對稱性:圈和叉寫成同一個式子
概似裡有兩種因子,圈的是 h ( x n ) h(\mathbf{x}_n) h ( x n ) ,叉的是 1 − h ( x n ) 1 - h(\mathbf{x}_n) 1 − h ( x n ) 。第 10 頁用 logistic 函數的一個性質把它們統一。先驗證這個性質:
1 − θ ( s ) = 1 − 1 1 + e − s = e − s 1 + e − s = 1 e s + 1 = θ ( − s ) 1 - \theta(s) = 1 - \frac{1}{1 + e^{-s}} = \frac{e^{-s}}{1 + e^{-s}} = \frac{1}{e^{s} + 1} = \theta(-s) 1 − θ ( s ) = 1 − 1 + e − s 1 = 1 + e − s e − s = e s + 1 1 = θ ( − s )
第三個等號是分子分母同乘 e s e^{s} e s 。對 h ( x ) = θ ( w ⊤ x ) h(\mathbf{x}) = \theta(\mathbf{w}^\top\mathbf{x}) h ( x ) = θ ( w ⊤ x ) 來說,這就是講義寫的
1 − h ( x ) = θ ( − w ⊤ x ) = h ( − x ) 1 - h(\mathbf{x}) = \theta(-\mathbf{w}^\top\mathbf{x}) = h(-\mathbf{x}) 1 − h ( x ) = θ ( − w ⊤ x ) = h ( − x )
課堂上把這個性質叫做對稱性,請大家看著投影片右邊的 S 形曲線說服自己它是對的。本文補充圖形上的意思:曲線對 ( 0 , 1 2 ) (0, \frac{1}{2}) ( 0 , 2 1 ) 這個點是對稱的,s s s 與 − s -s − s 兩處的高度加起來剛好是 1。
於是叉的因子 1 − h ( x n ) 1 - h(\mathbf{x}_n) 1 − h ( x n ) 可以寫成 h ( − x n ) h(-\mathbf{x}_n) h ( − x n ) ,概似變成
likelihood ( h ) = P ( x 1 ) h ( + x 1 ) × P ( x 2 ) h ( − x 2 ) × ⋯ × P ( x N ) h ( − x N ) \text{likelihood}(h) = P(\mathbf{x}_1)h(+\mathbf{x}_1) \times P(\mathbf{x}_2)h(-\mathbf{x}_2) \times \dots \times P(\mathbf{x}_N)h(-\mathbf{x}_N) likelihood ( h ) = P ( x 1 ) h ( + x 1 ) × P ( x 2 ) h ( − x 2 ) × ⋯ × P ( x N ) h ( − x N )
圈的標籤是 y n = + 1 y_n = +1 y n = + 1 ,叉是 y n = − 1 y_n = -1 y n = − 1 ,所以每一項都是 h ( y n x n ) h(y_n\mathbf{x}_n) h ( y n x n ) 。投影片把所有 P ( x n ) P(\mathbf{x}_n) P ( x n ) 畫成灰色,課堂上解釋:比較不同的 h h h 時,大家用的是同一批 x 1 \mathbf{x}_1 x 1 到 x N \mathbf{x}_N x N ,這部分每個 h h h 都一樣,不影響誰大誰小。拿掉之後剩下
likelihood ( logistic h ) ∝ ∏ n = 1 N h ( y n x n ) \text{likelihood}(\text{logistic } h) \propto \prod_{n=1}^{N} h(y_n\mathbf{x}_n) likelihood ( logistic h ) ∝ n = 1 ∏ N h ( y n x n )
「∝ \propto ∝ 」是正比於,比例常數就是那些 P ( x n ) P(\mathbf{x}_n) P ( x n ) 的乘積。
取 ln、加負號、除以 N
第 11 頁分四步把「最大化連乘」整理成熟悉的「最小化平均誤差」。
第一步:把 h h h 換成 w \mathbf{w} w 。 每個 logistic 假說由 w \mathbf{w} w 決定,h ( y n x n ) = θ ( y n w ⊤ x n ) h(y_n\mathbf{x}_n) = \theta(y_n\mathbf{w}^\top\mathbf{x}_n) h ( y n x n ) = θ ( y n w ⊤ x n ) :
max w likelihood ( w ) ∝ ∏ n = 1 N θ ( y n w ⊤ x n ) \max_{\mathbf{w}}\ \text{likelihood}(\mathbf{w}) \propto \prod_{n=1}^{N} \theta\big(y_n\mathbf{w}^\top\mathbf{x}_n\big) w max likelihood ( w ) ∝ n = 1 ∏ N θ ( y n w ⊤ x n )
第二步:取 ln。 課堂上的理由是,前面幾堂處理過的 E in E_{\text{in}} E in 都是連加,連乘沒有處理過;取對數可以把連乘變成連加,而對數是單調函數,最大的還是最大。用自然對數 ln \ln ln 是為了之後微分方便。
max w ln ∏ n = 1 N θ ( y n w ⊤ x n ) = max w ∑ n = 1 N ln θ ( y n w ⊤ x n ) \max_{\mathbf{w}}\ \ln\prod_{n=1}^{N} \theta\big(y_n\mathbf{w}^\top\mathbf{x}_n\big) = \max_{\mathbf{w}}\ \sum_{n=1}^{N} \ln\theta\big(y_n\mathbf{w}^\top\mathbf{x}_n\big) w max ln n = 1 ∏ N θ ( y n w ⊤ x n ) = w max n = 1 ∑ N ln θ ( y n w ⊤ x n )
第三步:加負號,再乘 1 N \frac{1}{N} N 1 。 之前都是做最小化,所以加一個負號把 max 換成 min。1 N \frac{1}{N} N 1 在投影片上是灰色的,課堂上說它只是對所有 w \mathbf{w} w 一視同仁的常數縮放,不影響最佳解,放進來是為了讓式子長得像之前的 E in E_{\text{in}} E in :
min w 1 N ∑ n = 1 N − ln θ ( y n w ⊤ x n ) \min_{\mathbf{w}}\ \frac{1}{N}\sum_{n=1}^{N} -\ln\theta\big(y_n\mathbf{w}^\top\mathbf{x}_n\big) w min N 1 n = 1 ∑ N − ln θ ( y n w ⊤ x n )
第四步:代入 θ \theta θ 的式子。 θ ( s ) = 1 1 + exp ( − s ) \theta(s) = \frac{1}{1 + \exp(-s)} θ ( s ) = 1 + e x p ( − s ) 1 ,所以
− ln θ ( s ) = − ln 1 1 + exp ( − s ) = ln ( 1 + exp ( − s ) ) -\ln\theta(s) = -\ln\frac{1}{1 + \exp(-s)} = \ln\big(1 + \exp(-s)\big) − ln θ ( s ) = − ln 1 + exp ( − s ) 1 = ln ( 1 + exp ( − s ) )
課堂上講的是同一件事:θ \theta θ 在分母,對數拉出來會多一個負號,剛好和前面的負號消掉。代入 s = y n w ⊤ x n s = y_n\mathbf{w}^\top\mathbf{x}_n s = y n w ⊤ x n :
min w 1 N ∑ n = 1 N ln ( 1 + exp ( − y n w ⊤ x n ) ) ⏟ E in ( w ) \min_{\mathbf{w}}\ \underbrace{\frac{1}{N}\sum_{n=1}^{N} \ln\Big(1 + \exp\big(-y_n\mathbf{w}^\top\mathbf{x}_n\big)\Big)}_{E_{\text{in}}(\mathbf{w})} w min E in ( w ) N 1 n = 1 ∑ N ln ( 1 + exp ( − y n w ⊤ x n ) )
加總裡的每一項只跟一筆資料有關,是基石第 8 堂說的逐點誤差(pointwise error measure)。講義把它叫 cross-entropy error:
err ( w , x , y ) = ln ( 1 + exp ( − y w ⊤ x ) ) \text{err}(\mathbf{w}, \mathbf{x}, y) = \ln\Big(1 + \exp\big(-y\mathbf{w}^\top\mathbf{x}\big)\Big) err ( w , x , y ) = ln ( 1 + exp ( − y w ⊤ x ) )
E in E_{\text{in}} E in 是它在 N N N 筆資料上的平均。講義第 25 頁的總結給了它另一個名字:negative log likelihood,就是剛才那三個動作。
回到三筆資料的算例:f f f 本身的 − 1 3 ln ( 0.288 ) ≈ 0.415 -\frac{1}{3}\ln(0.288) \approx 0.415 − 3 1 ln ( 0.288 ) ≈ 0.415 ,什麼都說一半的假說是 − 1 3 ln ( 0.125 ) = ln 2 ≈ 0.693 -\frac{1}{3}\ln(0.125) = \ln 2 \approx 0.693 − 3 1 ln ( 0.125 ) = ln 2 ≈ 0.693 。概似大的,這個誤差小,排序完全相反,所以最小化 E in E_{\text{in}} E in 和最大化概似挑到同一個假說。
cross-entropy 的形狀與名字
誤差只透過 y s = y w ⊤ x ys = y\mathbf{w}^\top\mathbf{x} y s = y w ⊤ x 這一個數決定。y s > 0 ys > 0 y s > 0 表示分數的正負號和標籤一致(當成分類器是分對的),y s < 0 ys < 0 y s < 0 表示分錯。本文算幾個值:
y w ⊤ x y\mathbf{w}^\top\mathbf{x} y w ⊤ x − 5 -5 − 5 − 2 -2 − 2 − 1 -1 − 1 0 0 0 1 1 1 2 2 2 5 5 5 err 5.0067 2.1269 1.3133 0.6931 0.3133 0.1269 0.0067
三個觀察。分對而且分數離 0 愈遠,誤差愈接近 0,但永遠不會剛好是 0。y s = 0 ys = 0 y s = 0 時誤差是 ln 2 ≈ 0.6931 \ln 2 \approx 0.6931 ln 2 ≈ 0.6931 ,這是假說說「一半一半」時付的代價。分錯的那一側,誤差幾乎和 − y s -ys − y s 一樣大(y s = − 5 ys = -5 y s = − 5 時是 5.0067),錯得愈離譜罰得愈重,而且沒有上限。
名字的由來,課堂上只說有歷史上的原因,細節不講,請有參考書的同學自己查。本文補充一個看得出名字的寫法,推導只用到上面的式子。把標籤改記成 y ′ = 1 y' = 1 y ′ = 1 (圈)或 y ′ = 0 y' = 0 y ′ = 0 (叉),並記 h = h ( x ) h = h(\mathbf{x}) h = h ( x ) :
y = + 1 y = +1 y = + 1 時,err = ln ( 1 + e − s ) = − ln θ ( s ) = − ln h \text{err} = \ln(1 + e^{-s}) = -\ln\theta(s) = -\ln h err = ln ( 1 + e − s ) = − ln θ ( s ) = − ln h 。
y = − 1 y = -1 y = − 1 時,err = ln ( 1 + e s ) = − ln θ ( − s ) = − ln ( 1 − h ) \text{err} = \ln(1 + e^{s}) = -\ln\theta(-s) = -\ln(1 - h) err = ln ( 1 + e s ) = − ln θ ( − s ) = − ln ( 1 − h ) 。
兩種情況合成一行:
err = − [ y ′ ln h + ( 1 − y ′ ) ln ( 1 − h ) ] \text{err} = -\Big[y'\ln h + (1 - y')\ln(1 - h)\Big] err = − [ y ′ ln h + ( 1 − y ′ ) ln ( 1 − h ) ]
Fall 2024 的 HW4 Q1 考的就是這個換標籤之後的等價式,題目也說明 cross-entropy 這個名字來自 p log q + ( 1 − p ) log ( 1 − q ) p\log q + (1 - p)\log(1 - q) p log q + ( 1 − p ) log ( 1 − q ) 的形式。
Fun Time:cross-entropy 的四個性質
題目(第 12 頁): 下面四個敘述有助於了解 cross-entropy 誤差 err ( w , x , y ) = ln ( 1 + exp ( − y w ⊤ x ) ) \text{err}(\mathbf{w}, \mathbf{x}, y) = \ln\big(1 + \exp(-y\mathbf{w}^\top\mathbf{x})\big) err ( w , x , y ) = ln ( 1 + exp ( − y w ⊤ x ) ) 。考慮 w ⊤ x ≠ 0 \mathbf{w}^\top\mathbf{x} \ne 0 w ⊤ x = 0 。哪一個不對?
對任何 w \mathbf{w} w 、x \mathbf{x} x 、y y y ,err ( w , x , y ) > 0 \text{err}(\mathbf{w}, \mathbf{x}, y) > 0 err ( w , x , y ) > 0 。
對任何 w \mathbf{w} w 、x \mathbf{x} x 、y y y ,err ( w , x , y ) < 1126 \text{err}(\mathbf{w}, \mathbf{x}, y) < 1126 err ( w , x , y ) < 1126 。
當 y = sign ( w ⊤ x ) y = \text{sign}(\mathbf{w}^\top\mathbf{x}) y = sign ( w ⊤ x ) 時,err ( w , x , y ) < ln 2 \text{err}(\mathbf{w}, \mathbf{x}, y) < \ln 2 err ( w , x , y ) < ln 2 。
當 y ≠ sign ( w ⊤ x ) y \ne \text{sign}(\mathbf{w}^\top\mathbf{x}) y = sign ( w ⊤ x ) 時,err ( w , x , y ) ≥ ln 2 \text{err}(\mathbf{w}, \mathbf{x}, y) \ge \ln 2 err ( w , x , y ) ≥ ln 2 。
答案:2。 講義的解答是「1126, really? :-)」,並建議固定 y y y 、讓分數 s = w ⊤ x s = \mathbf{w}^\top\mathbf{x} s = w ⊤ x 變動,把誤差的曲線畫出來,就會看到它沒有上界,其他三個都對。課堂上開了個玩笑:選項裡出現奇怪數字的通常不對。四個選項逐一推理如下,記 t = y w ⊤ x t = y\mathbf{w}^\top\mathbf{x} t = y w ⊤ x :
選項 1 對。 exp ( − t ) > 0 \exp(-t) > 0 exp ( − t ) > 0 ,所以 1 + exp ( − t ) > 1 1 + \exp(-t) > 1 1 + exp ( − t ) > 1 ,取 ln \ln ln 之後大於 0。
選項 2 錯。 取 t = − 1126 t = -1126 t = − 1126 (例如一維的 w = 1126 w = 1126 w = 1126 、x = 1 x = 1 x = 1 、y = − 1 y = -1 y = − 1 ),err = ln ( 1 + e 1126 ) > ln ( e 1126 ) = 1126 \text{err} = \ln(1 + e^{1126}) > \ln(e^{1126}) = 1126 err = ln ( 1 + e 1126 ) > ln ( e 1126 ) = 1126 。t t t 再往負的方向走,誤差可以要多大有多大。
選項 3 對。 y y y 和分數同號,t > 0 t > 0 t > 0 ,exp ( − t ) < 1 \exp(-t) < 1 exp ( − t ) < 1 ,err < ln 2 \text{err} < \ln 2 err < ln 2 。
選項 4 對。 y y y 和分數異號,t < 0 t < 0 t < 0 ,exp ( − t ) > 1 \exp(-t) > 1 exp ( − t ) > 1 ,err > ln 2 \text{err} > \ln 2 err > ln 2 ,當然也滿足「≥ \ge ≥ 」。
課堂上特別點出選項 3 和 4:分數等於 0 是切換點,一邊的誤差比 ln 2 \ln 2 ln 2 大,另一邊被壓在 ln 2 \ln 2 ln 2 以下。
梯度長什麼樣子,為什麼解不出閉式解
YouTube:Logistic Regression :: Gradient of Logistic Regression Error @ Machine Learning Foundations (機器學習基石)
(影片 00:00–01:38 E in E_{\text{in}} E in 的性質,01:38–07:28 用連鎖律推梯度,07:28–10:30 為什麼沒有閉式解,10:30–14:12 回顧 PLA 與迭代最佳化,之後是 Fun Time。)
E_in 是一個山谷
有了 E in E_{\text{in}} E in ,剩下的是找讓它最小的 w \mathbf{w} w 。課堂上先回顧理由:這群假說的 VC dimension 有限(見基石第 7 堂:VC 維度 ),所以把 E in E_{\text{in}} E in 壓小,E out E_{\text{out}} E out 也會小。目前學過的最小化方法有兩種:線性分類那種修正錯誤的做法,以及線性迴歸的「求梯度、找梯度為零的點」。後者適用於平滑可微的函數。
第 13 頁說邏輯迴歸的 E in E_{\text{in}} E in 是 continuous、differentiable、twice-differentiable、convex。凸函數長得像山谷,谷底就是梯度為零的地方,所以目標和線性迴歸一樣:
want ∇ E in ( w ) = 0 \text{want}\quad \nabla E_{\text{in}}(\mathbf{w}) = \mathbf{0} want ∇ E in ( w ) = 0
「凸」講義沒有證明。課堂上說,證法是把二次微分的矩陣算出來,確認它是正定的,這裡不詳細做,請大家先相信。以下的檢查是本文補充,不在講義上,用到的是「用連鎖律剝洋蔥」那一小節推出的梯度,初讀可以先跳過。對梯度再微分一次,利用 θ ′ ( s ) = θ ( s ) ( 1 − θ ( s ) ) \theta'(s) = \theta(s)\big(1 - \theta(s)\big) θ ′ ( s ) = θ ( s ) ( 1 − θ ( s ) ) 與 y n 2 = 1 y_n^2 = 1 y n 2 = 1 ,得到二次微分的矩陣
∇ 2 E in ( w ) = 1 N ∑ n = 1 N θ ( w ⊤ x n ) ( 1 − θ ( w ⊤ x n ) ) x n x n ⊤ \nabla^2 E_{\text{in}}(\mathbf{w}) = \frac{1}{N}\sum_{n=1}^{N} \theta\big(\mathbf{w}^\top\mathbf{x}_n\big)\Big(1 - \theta\big(\mathbf{w}^\top\mathbf{x}_n\big)\Big)\mathbf{x}_n\mathbf{x}_n^\top ∇ 2 E in ( w ) = N 1 n = 1 ∑ N θ ( w ⊤ x n ) ( 1 − θ ( w ⊤ x n ) ) x n x n ⊤
對任何向量 u \mathbf{u} u ,u ⊤ x n x n ⊤ u = ( u ⊤ x n ) 2 ≥ 0 \mathbf{u}^\top\mathbf{x}_n\mathbf{x}_n^\top\mathbf{u} = (\mathbf{u}^\top\mathbf{x}_n)^2 \ge 0 u ⊤ x n x n ⊤ u = ( u ⊤ x n ) 2 ≥ 0 ,前面的係數 θ ( 1 − θ ) \theta(1 - \theta) θ ( 1 − θ ) 是正數,所以 u ⊤ ∇ 2 E in u ≥ 0 \mathbf{u}^\top\nabla^2 E_{\text{in}}\,\mathbf{u} \ge 0 u ⊤ ∇ 2 E in u ≥ 0 。這是半正定,已經足以保證 E in E_{\text{in}} E in 是凸的。課堂上說的「正定」要多一個條件:x n \mathbf{x}_n x n 得張滿整個 d + 1 d + 1 d + 1 維空間,這樣上式才會對所有非零的 u \mathbf{u} u 嚴格大於 0。
用連鎖律剝洋蔥
E in E_{\text{in}} E in 裡有 ln \ln ln 、有 exp \exp exp 、有 w \mathbf{w} w 。課堂上的態度是不要怕,微分沒有絕招,一層一層做再串起來就是連鎖律。第 14 頁先替中間的量取暫時的名字:
E in ( w ) = 1 N ∑ n = 1 N ln ( 1 + exp ( − y n w ⊤ x n ⏞ ◯ ) ⏟ □ ) E_{\text{in}}(\mathbf{w}) = \frac{1}{N}\sum_{n=1}^{N} \ln\Big(\underbrace{1 + \exp(\overbrace{-y_n\mathbf{w}^\top\mathbf{x}_n}^{\bigcirc})}_{\square}\Big) E in ( w ) = N 1 n = 1 ∑ N ln ( □ 1 + exp ( − y n w ⊤ x n ◯ ) )
指數裡面那一塊叫 ◯ \bigcirc ◯ ,ln \ln ln 裡面那一整塊叫 □ \square □ 。課堂上說明為什麼用圖形而不用 A、B、C:把它們當成圈圈、方塊,比較容易記得它們只是暫時的中間值。
梯度的第 i i i 個分量是對 w i w_i w i 的偏微分。連鎖律把它拆成三個括號,課堂上形容這像剝洋蔥,從最外層剝進去:
∂ E in ( w ) ∂ w i = 1 N ∑ n = 1 N ( ∂ ln ( □ ) ∂ □ ) ( ∂ ( 1 + exp ( ◯ ) ) ∂ ◯ ) ( ∂ ( − y n w ⊤ x n ) ∂ w i ) \frac{\partial E_{\text{in}}(\mathbf{w})}{\partial w_i} = \frac{1}{N}\sum_{n=1}^{N} \Big(\frac{\partial \ln(\square)}{\partial \square}\Big)\Big(\frac{\partial\big(1 + \exp(\bigcirc)\big)}{\partial \bigcirc}\Big)\Big(\frac{\partial\,(-y_n\mathbf{w}^\top\mathbf{x}_n)}{\partial w_i}\Big) ∂ w i ∂ E in ( w ) = N 1 n = 1 ∑ N ( ∂ □ ∂ ln ( □ ) ) ( ∂ ◯ ∂ ( 1 + exp ( ◯ ) ) ) ( ∂ w i ∂ ( − y n w ⊤ x n ) )
三個括號各自都很簡單:
ln ( □ ) \ln(\square) ln ( □ ) 對 □ \square □ 微分是 1 □ \frac{1}{\square} □ 1 。
1 + exp ( ◯ ) 1 + \exp(\bigcirc) 1 + exp ( ◯ ) 對 ◯ \bigcirc ◯ 微分:常數 1 微分後消失,exp ( ◯ ) \exp(\bigcirc) exp ( ◯ ) 微分還是 exp ( ◯ ) \exp(\bigcirc) exp ( ◯ ) 。
− y n w ⊤ x n = − y n ∑ j w j x n , j -y_n\mathbf{w}^\top\mathbf{x}_n = -y_n\sum_j w_j x_{n,j} − y n w ⊤ x n = − y n ∑ j w j x n , j ,加總裡只有 j = i j = i j = i 那一項含 w i w_i w i ,微分得到 − y n x n , i -y_n x_{n,i} − y n x n , i 。課堂上提醒負號不要漏掉。
代回去:
∂ E in ( w ) ∂ w i = 1 N ∑ n = 1 N ( 1 □ ) ( exp ( ◯ ) ) ( − y n x n , i ) = 1 N ∑ n = 1 N ( exp ( ◯ ) 1 + exp ( ◯ ) ) ( − y n x n , i ) \frac{\partial E_{\text{in}}(\mathbf{w})}{\partial w_i} = \frac{1}{N}\sum_{n=1}^{N} \Big(\frac{1}{\square}\Big)\Big(\exp(\bigcirc)\Big)\Big(-y_n x_{n,i}\Big) = \frac{1}{N}\sum_{n=1}^{N} \Big(\frac{\exp(\bigcirc)}{1 + \exp(\bigcirc)}\Big)\Big(-y_n x_{n,i}\Big) ∂ w i ∂ E in ( w ) = N 1 n = 1 ∑ N ( □ 1 ) ( exp ( ◯ ) ) ( − y n x n , i ) = N 1 n = 1 ∑ N ( 1 + exp ( ◯ ) exp ( ◯ ) ) ( − y n x n , i )
第二個等號把前兩個括號合併,並把 □ \square □ 換回 1 + exp ( ◯ ) 1 + \exp(\bigcirc) 1 + exp ( ◯ ) 。合併出來的 exp ( ◯ ) 1 + exp ( ◯ ) \frac{\exp(\bigcirc)}{1 + \exp(\bigcirc)} 1 + e x p ( ◯ ) e x p ( ◯ ) 正是 logistic 函數的第一種寫法,課堂上稱它是我們的新朋友 θ \theta θ :
∂ E in ( w ) ∂ w i = 1 N ∑ n = 1 N θ ( ◯ ) ( − y n x n , i ) \frac{\partial E_{\text{in}}(\mathbf{w})}{\partial w_i} = \frac{1}{N}\sum_{n=1}^{N} \theta(\bigcirc)\big(-y_n x_{n,i}\big) ∂ w i ∂ E in ( w ) = N 1 n = 1 ∑ N θ ( ◯ ) ( − y n x n , i )
每個分量的 θ ( ◯ ) \theta(\bigcirc) θ ( ◯ ) 都一樣,只有最後的 x n , i x_{n,i} x n , i 隨 i i i 改變。把 i = 0 , 1 , … , d i = 0, 1, \dots, d i = 0 , 1 , … , d 的結果疊成一個向量,x n , i x_{n,i} x n , i 就疊成 x n \mathbf{x}_n x n :
∇ E in ( w ) = 1 N ∑ n = 1 N θ ( − y n w ⊤ x n ) ( − y n x n ) \nabla E_{\text{in}}(\mathbf{w}) = \frac{1}{N}\sum_{n=1}^{N} \theta\big(-y_n\mathbf{w}^\top\mathbf{x}_n\big)\big(-y_n\mathbf{x}_n\big) ∇ E in ( w ) = N 1 n = 1 ∑ N θ ( − y n w ⊤ x n ) ( − y n x n )
讀法:每筆資料貢獻一個向量 − y n x n -y_n\mathbf{x}_n − y n x n ,前面乘上一個 0 到 1 之間的權重 θ ( − y n w ⊤ x n ) \theta(-y_n\mathbf{w}^\top\mathbf{x}_n) θ ( − y n w ⊤ x n ) ,全部平均。講義第 15 頁稱它為 scaled θ \theta θ -weighted sum of − y n x n -y_n\mathbf{x}_n − y n x n 。
本文補充權重的意義。由對稱性,θ ( − y n w ⊤ x n ) = 1 − θ ( y n w ⊤ x n ) = 1 − h ( y n x n ) \theta(-y_n\mathbf{w}^\top\mathbf{x}_n) = 1 - \theta(y_n\mathbf{w}^\top\mathbf{x}_n) = 1 - h(y_n\mathbf{x}_n) θ ( − y n w ⊤ x n ) = 1 − θ ( y n w ⊤ x n ) = 1 − h ( y n x n ) ,而 h ( y n x n ) h(y_n\mathbf{x}_n) h ( y n x n ) 是目前的假說認為「這筆資料出現它實際標籤」的機率。所以權重就是假說認為這個標籤不該出現的機率:假說愈意外,這筆資料在梯度裡說話愈大聲。
梯度為零解不出來
現在要解 ∇ E in ( w ) = 0 \nabla E_{\text{in}}(\mathbf{w}) = \mathbf{0} ∇ E in ( w ) = 0 (第 15 頁)。一個加權和什麼時候是零向量?講義分兩種情形。
情形一:所有權重 θ ( ⋅ ) \theta(\cdot) θ ( ⋅ ) 都是 0。 θ \theta θ 只有在引數趨向 − ∞ -\infty − ∞ 時才趨近 0,所以需要每一筆的 − y n w ⊤ x n → − ∞ -y_n\mathbf{w}^\top\mathbf{x}_n \to -\infty − y n w ⊤ x n → − ∞ 。講義寫成 only if y n w ⊤ x n ≫ 0 y_n\mathbf{w}^\top\mathbf{x}_n \gg 0 y n w ⊤ x n ≫ 0 ,課堂上補充嚴格來說要趨向正無限大。y n w ⊤ x n > 0 y_n\mathbf{w}^\top\mathbf{x}_n > 0 y n w ⊤ x n > 0 表示標籤和分數同號,這個 w \mathbf{w} w 把第 n n n 筆分對了;每一筆都要如此,資料就必須線性可分。課堂上反過來說:資料不是線性可分的話,不管哪個 w \mathbf{w} w 都至少有一筆的 y n w ⊤ x n y_n\mathbf{w}^\top\mathbf{x}_n y n w ⊤ x n 小於 0,這條路走不通。
情形二:權重不全是 0,但加權和剛好互相抵消。 這時要解的是一個 w \mathbf{w} w 的方程式,而 w \mathbf{w} w 出現在 θ \theta θ 裡面,是非線性方程式(non-linear equation of w \mathbf{w} w )。
和線性迴歸對照:那裡的梯度是 2 N ( X ⊤ X w − X ⊤ y ) \frac{2}{N}(X^\top X\mathbf{w} - X^\top\mathbf{y}) N 2 ( X ⊤ X w − X ⊤ y ) ,令它為零是「矩陣乘 w \mathbf{w} w 等於某個向量」的線性方程式,我們會解,所以能一步登天。這裡的方程式不是線性的。講義的結論是 closed-form solution? no :-(。課堂上說,就所知沒有像線性迴歸那樣漂亮的閉式解。
回頭看 PLA:迭代最佳化
沒辦法一步登天,就回頭找一步一步修正的方法,那是 PLA。第 16 頁複習 PLA:從某個 w 0 \mathbf{w}_0 w 0 (例如零向量)出發,對 t = 0 , 1 , … t = 0, 1, \dots t = 0 , 1 , … :
找一個 w t \mathbf{w}_t w t 犯的錯 ( x n ( t ) , y n ( t ) ) (\mathbf{x}_{n(t)}, y_{n(t)}) ( x n ( t ) , y n ( t ) ) ,也就是 sign ( w t ⊤ x n ( t ) ) ≠ y n ( t ) \text{sign}(\mathbf{w}_t^\top\mathbf{x}_{n(t)}) \ne y_{n(t)} sign ( w t ⊤ x n ( t ) ) = y n ( t ) 。
修正:w t + 1 ← w t + y n ( t ) x n ( t ) \mathbf{w}_{t+1} \leftarrow \mathbf{w}_t + y_{n(t)}\mathbf{x}_{n(t)} w t + 1 ← w t + y n ( t ) x n ( t ) 。
停下來時回傳最後的 w \mathbf{w} w 。同一頁把兩步合成一步:隨便挑一筆 n n n ,然後
w t + 1 ← w t + [ [ sign ( w t ⊤ x n ) ≠ y n ] ] y n x n \mathbf{w}_{t+1} \leftarrow \mathbf{w}_t + \big[\!\big[\text{sign}(\mathbf{w}_t^\top\mathbf{x}_n) \ne y_n\big]\!\big]\, y_n\mathbf{x}_n w t + 1 ← w t + [ [ sign ( w t ⊤ x n ) = y n ] ] y n x n
雙層方括號是布林運算:條件成立是 1,不成立是 0。挑到的點分錯了,前面是 1,照常加上 y n x n y_n\mathbf{x}_n y n x n ;挑到的點分對了,前面是 0,等於沒更新。課堂上請大家自己確認它和原來的兩步是同一件事。
再把這個式子拆成兩部分看:
w t + 1 ← w t + 1 ⏟ η ⋅ ( [ [ sign ( w t ⊤ x n ) ≠ y n ] ] ⋅ y n x n ) ⏟ v \mathbf{w}_{t+1} \leftarrow \mathbf{w}_t + \underbrace{1}_{\eta} \cdot \underbrace{\Big(\big[\!\big[\text{sign}(\mathbf{w}_t^\top\mathbf{x}_n) \ne y_n\big]\!\big] \cdot y_n\mathbf{x}_n\Big)}_{\mathbf{v}} w t + 1 ← w t + η 1 ⋅ v ( [ [ sign ( w t ⊤ x n ) = y n ] ] ⋅ y n x n )
v \mathbf{v} v 是更新的方向,η \eta η 是在這個方向上要走多大一步。課堂上說 η \eta η 是這裡偷偷塞進來的常數:PLA 沒有特別強調步伐,等於固定走 1,它的重要性要到梯度下降那一節才看得出來。
講義的結論是:choice of ( η , v ) (\eta, \mathbf{v}) ( η , v ) and stopping condition defines iterative optimization approach。挑不同的方向、不同的步伐、不同的停止條件,就是不同的迭代最佳化(iterative optimization)方法。PLA 是其中一種,梯度下降會是另一種。
Fun Time:誰在梯度裡的權重最大
題目(第 17 頁): 梯度是 ∇ E in ( w ) = 1 N ∑ n = 1 N θ ( − y n w ⊤ x n ) ( − y n x n ) \nabla E_{\text{in}}(\mathbf{w}) = \frac{1}{N}\sum_{n=1}^{N} \theta(-y_n\mathbf{w}^\top\mathbf{x}_n)(-y_n\mathbf{x}_n) ∇ E in ( w ) = N 1 ∑ n = 1 N θ ( − y n w ⊤ x n ) ( − y n x n ) ,也就是每筆資料 ( x n , y n ) (\mathbf{x}_n, y_n) ( x n , y n ) 以 θ ( − y n w ⊤ x n ) \theta(-y_n\mathbf{w}^\top\mathbf{x}_n) θ ( − y n w ⊤ x n ) 的份量貢獻給梯度。對任何給定的 w \mathbf{w} w ,哪一筆資料貢獻的份量最大?
y n w ⊤ x n y_n\mathbf{w}^\top\mathbf{x}_n y n w ⊤ x n 最小的那一筆
y n w ⊤ x n y_n\mathbf{w}^\top\mathbf{x}_n y n w ⊤ x n 最大的那一筆
w ⊤ x n \mathbf{w}^\top\mathbf{x}_n w ⊤ x n 最小的那一筆
w ⊤ x n \mathbf{w}^\top\mathbf{x}_n w ⊤ x n 最大的那一筆
答案:1。 講義的理由是 θ \theta θ 單調。展開來說:θ \theta θ 遞增,所以 θ ( − y n w ⊤ x n ) \theta(-y_n\mathbf{w}^\top\mathbf{x}_n) θ ( − y n w ⊤ x n ) 最大,等同於 − y n w ⊤ x n -y_n\mathbf{w}^\top\mathbf{x}_n − y n w ⊤ x n 最大,也就是 y n w ⊤ x n y_n\mathbf{w}^\top\mathbf{x}_n y n w ⊤ x n 最小。
選項 2 是權重最小的那一筆,它被分得最對、最有把握。選項 3 和 4 只看分數、不看標籤:分數很低的點如果標籤是 − 1 -1 − 1 ,y n w ⊤ x n y_n\mathbf{w}^\top\mathbf{x}_n y n w ⊤ x n 反而是很大的正數,權重很小,所以單看分數無法判斷。
課堂上的解讀是:y n w ⊤ x n y_n\mathbf{w}^\top\mathbf{x}_n y n w ⊤ x n 最小的那一筆可能是很負的值,負的代表 w \mathbf{w} w 在這筆資料上犯錯,所以犯錯的點權重特別大。這和 PLA「挑一個犯錯的點來修正」很像:PLA 只看一筆錯的,梯度把所有點犯大錯還是犯小錯綜合起來。
本文補充:題目問的是 θ \theta θ 這個權重。實際加進梯度的向量是 θ ( ⋅ ) ( − y n x n ) \theta(\cdot)\,(-y_n\mathbf{x}_n) θ ( ⋅ ) ( − y n x n ) ,它的長度還要乘上 ∥ x n ∥ \lVert\mathbf{x}_n\rVert ∥ x n ∥ ,所以權重最大的點不一定是向量最長的點。
梯度下降:每一步往哪裡走、走多遠
YouTube:Logistic Regression :: Gradient Descent @ Machine Learning Foundations (機器學習基石)
(影片 00:00–03:45 把球滾下山與貪心的選法,03:45–09:26 線性近似與最佳方向,09:26–14:47 η \eta η 的選擇與固定學習率,14:47–16:48 完整演算法,16:48–17:54 Fun Time,之後是總結。)
貪心的選法:一步內降最多
迭代最佳化的骨架是(第 18 頁):對 t = 0 , 1 , … t = 0, 1, \dots t = 0 , 1 , … 做 w t + 1 ← w t + η v \mathbf{w}_{t+1} \leftarrow \mathbf{w}_t + \eta\mathbf{v} w t + 1 ← w t + η v ,停下來時回傳最後的 w \mathbf{w} w 。PLA 的 v \mathbf{v} v 來自修正錯誤。邏輯迴歸的 E in E_{\text{in}} E in 是平滑的山谷,講義的想法是 choose v \mathbf{v} v to get the ball roll 'downhill':課堂上請大家想像把一顆球放在山坡上某個位置(對應某個 w \mathbf{w} w ),讓它滾下去,滾到谷底就是梯度為零的地方。
為了推導方便,先做兩個假設:
方向 v \mathbf{v} v 是單位長度,∥ v ∥ = 1 \lVert\mathbf{v}\rVert = 1 ∥ v ∥ = 1 。課堂上的說法是,走多大步的資訊全部收進 η \eta η ,v \mathbf{v} v 只管方向。
步伐 η \eta η 是正數。
給定某個 η > 0 \eta > 0 η > 0 ,貪心的做法是挑這一步讓 E in E_{\text{in}} E in 降最多的方向:
min ∥ v ∥ = 1 E in ( w t + η v ⏟ w t + 1 ) \min_{\lVert\mathbf{v}\rVert = 1}\ E_{\text{in}}(\underbrace{\mathbf{w}_t + \eta\mathbf{v}}_{\mathbf{w}_{t+1}}) ∥ v ∥ = 1 min E in ( w t + 1 w t + η v )
課堂上的畫面是:把 η \eta η 想成人體的限制,一步只能跨 30 公分,你要在以自己為中心、半徑 30 公分的那一圈上挑一個落腳點;實際上這一圈可能在很多維的空間裡。
線性近似:只看一小段
第 19 頁指出這個問題沒有比較簡單:它仍是非線性的最佳化,還多了 ∥ v ∥ = 1 \lVert\mathbf{v}\rVert = 1 ∥ v ∥ = 1 這條限制,not any easier than min w E in ( w ) \min_{\mathbf{w}} E_{\text{in}}(\mathbf{w}) min w E in ( w ) 。
出路是把它變成線性的。課堂上的說法是,我們學過的容易的問題都跟線性的式子有關,而任何彎彎曲曲的曲線,只看非常小的一段,都跟一小段線段沒有兩樣。數學上這是泰勒展開(Taylor expansion)。一維的版本是 f ( x + δ ) ≈ f ( x ) + f ′ ( x ) δ f(x + \delta) \approx f(x) + f'(x)\,\delta f ( x + δ ) ≈ f ( x ) + f ′ ( x ) δ ;多維的版本把斜率換成梯度,位移 δ \delta δ 換成 η v \eta\mathbf{v} η v :
E in ( w t + η v ) ≈ E in ( w t ) + η v ⊤ ∇ E in ( w t ) E_{\text{in}}(\mathbf{w}_t + \eta\mathbf{v}) \approx E_{\text{in}}(\mathbf{w}_t) + \eta\,\mathbf{v}^\top\nabla E_{\text{in}}(\mathbf{w}_t) E in ( w t + η v ) ≈ E in ( w t ) + η v ⊤ ∇ E in ( w t )
講義註明條件是 if η \eta η really small。課堂上的解釋:曲線很彎的時候,取一段長長的線段會跟曲線差很遠,線段要夠短,近似才好。
用近似式取代原式,得到「近似的貪心」:
min ∥ v ∥ = 1 E in ( w t ) ⏟ known + η ⏟ given positive v ⊤ ∇ E in ( w t ) ⏟ known \min_{\lVert\mathbf{v}\rVert = 1}\ \underbrace{E_{\text{in}}(\mathbf{w}_t)}_{\text{known}} + \underbrace{\eta}_{\text{given positive}}\ \mathbf{v}^\top\underbrace{\nabla E_{\text{in}}(\mathbf{w}_t)}_{\text{known}} ∥ v ∥ = 1 min known E in ( w t ) + given positive η v ⊤ known ∇ E in ( w t )
E in ( w t ) E_{\text{in}}(\mathbf{w}_t) E in ( w t ) 是常數,跟 v \mathbf{v} v 無關;η \eta η 已經給定而且是正的,不改變誰最小。投影片把這兩項畫成灰色。真正要解的只剩下:
min ∥ v ∥ = 1 v ⊤ ∇ E in ( w t ) \min_{\lVert\mathbf{v}\rVert = 1}\ \mathbf{v}^\top\nabla E_{\text{in}}(\mathbf{w}_t) ∥ v ∥ = 1 min v ⊤ ∇ E in ( w t )
最佳方向是梯度的反方向
一個單位向量和一個已知向量做內積,什麼時候最小?課堂上的比喻是兩個人吵架、離得遠遠的:方向完全相反時內積最負。
本文把這一步寫完整。記 g = ∇ E in ( w t ) \mathbf{g} = \nabla E_{\text{in}}(\mathbf{w}_t) g = ∇ E in ( w t ) ,兩個向量的夾角是 ϕ \phi ϕ ,則 v ⊤ g = ∥ v ∥ ∥ g ∥ cos ϕ = ∥ g ∥ cos ϕ \mathbf{v}^\top\mathbf{g} = \lVert\mathbf{v}\rVert\,\lVert\mathbf{g}\rVert\cos\phi = \lVert\mathbf{g}\rVert\cos\phi v ⊤ g = ∥ v ∥ ∥ g ∥ cos ϕ = ∥ g ∥ cos ϕ 。cos ϕ \cos\phi cos ϕ 最小是 − 1 -1 − 1 ,發生在 ϕ = 180 ∘ \phi = 180^\circ ϕ = 18 0 ∘ ,也就是 v \mathbf{v} v 指向 − g -\mathbf{g} − g 的方向。再把長度調成 1(第 20 頁):
v = − ∇ E in ( w t ) ∥ ∇ E in ( w t ) ∥ \mathbf{v} = -\frac{\nabla E_{\text{in}}(\mathbf{w}_t)}{\lVert\nabla E_{\text{in}}(\mathbf{w}_t)\rVert} v = − ∥ ∇ E in ( w t )∥ ∇ E in ( w t )
這時 v ⊤ g = − ∥ g ∥ \mathbf{v}^\top\mathbf{g} = -\lVert\mathbf{g}\rVert v ⊤ g = − ∥ g ∥ ,近似式說 E in E_{\text{in}} E in 大約下降 η ∥ g ∥ \eta\lVert\mathbf{g}\rVert η ∥ g ∥ 。代回更新式,就是梯度下降(gradient descent):對小的 η \eta η ,
w t + 1 ← w t − η ∇ E in ( w t ) ∥ ∇ E in ( w t ) ∥ \mathbf{w}_{t+1} \leftarrow \mathbf{w}_t - \eta\,\frac{\nabla E_{\text{in}}(\mathbf{w}_t)}{\lVert\nabla E_{\text{in}}(\mathbf{w}_t)\rVert} w t + 1 ← w t − η ∥ ∇ E in ( w t )∥ ∇ E in ( w t )
講義對它的評語是 a simple & popular optimization tool。課堂上補充:只要算得出梯度,就能用它。
η 太小、太大、剛好
方向定了,接著是 η \eta η 。第 21 頁用三張圖比較,三張都是同一個山谷:
圖 畫了什麼 講義的評語 too small 沿著左邊山坡畫了很多小小的階梯,一階一階慢慢往下 too slow :-( too large 折線在左右兩邊的山坡之間來回跳 too unstable :-( just right 山坡高處陡的地方跨大步(標 large η \eta η ),接近谷底時跨小步(標 small η \eta η ) use changing η \eta η
課堂上把三種情況講成三種走法。η \eta η 很小的人很保守,像蝸牛在爬,遲早會到,只是很慢。η \eta η 很大的人以為自己走在一小段線段上,但步伐一大,線性近似就不準了,一腳踩空跌到對面的山坡,而且沒有理由保證跌過去之後比較低,說不定還爬得更高;因為泰勒展開已經不適用,跨很大步之後會發生什麼事,沒有人知道。
第三張圖的想法是 η \eta η 要跟著坡度變。課堂上的理由:坡度大的地方可以放心跨大一點;坡度已經很小時還跨很大步,一腳就可能越過最佳點。這是一個心裡覺得有道理的 heuristic,講義寫成
η better be monotonic of ∥ ∇ E in ( w t ) ∥ \eta \text{ better be monotonic of } \lVert\nabla E_{\text{in}}(\mathbf{w}_t)\rVert η better be monotonic of ∥ ∇ E in ( w t )∥
坡度就是梯度的長度,步伐應該隨它增減。
固定學習率:把兩個長度約掉
第 22 頁給最簡單的做法:讓步伐和梯度長度成正比。投影片用顏色區分兩個 η \eta η ,原本的步伐是紅色的,比例常數是紫色的。這裡把紅色的記成 η red \eta_{\text{red}} η red 、紫色的記成 η \eta η (這兩個下標是本文加的):
η red = η ⋅ ∥ ∇ E in ( w t ) ∥ \eta_{\text{red}} = \eta \cdot \lVert\nabla E_{\text{in}}(\mathbf{w}_t)\rVert η red = η ⋅ ∥ ∇ E in ( w t )∥
代進梯度下降的更新式,分子和分母的梯度長度約掉:
w t + 1 ← w t − η red ∇ E in ( w t ) ∥ ∇ E in ( w t ) ∥ = w t − η ∇ E in ( w t ) \mathbf{w}_{t+1} \leftarrow \mathbf{w}_t - \eta_{\text{red}}\,\frac{\nabla E_{\text{in}}(\mathbf{w}_t)}{\lVert\nabla E_{\text{in}}(\mathbf{w}_t)\rVert} = \mathbf{w}_t - \eta\,\nabla E_{\text{in}}(\mathbf{w}_t) w t + 1 ← w t − η red ∥ ∇ E in ( w t )∥ ∇ E in ( w t ) = w t − η ∇ E in ( w t )
課堂上說比例常數取名紫色,是因為它混了紅色的 η \eta η 和藍色的梯度。結果是更新式變簡單了:不必把梯度正規化,直接乘一個固定的 η \eta η 。這個 η \eta η 叫 fixed learning rate,方法叫 fixed learning rate gradient descent:
w t + 1 ← w t − η ∇ E in ( w t ) \mathbf{w}_{t+1} \leftarrow \mathbf{w}_t - \eta\,\nabla E_{\text{in}}(\mathbf{w}_t) w t + 1 ← w t − η ∇ E in ( w t )
「固定」的是 η \eta η 這個比例。實際跨出去的長度是 η ∥ ∇ E in ( w t ) ∥ \eta\lVert\nabla E_{\text{in}}(\mathbf{w}_t)\rVert η ∥ ∇ E in ( w t )∥ ,仍然會變:坡陡走得遠,接近谷底梯度趨近零,步伐自動變小。課堂上對名字的說明是,learning rate 是機器學習的人取的,做最佳化的人不見得這樣叫;η \eta η 小學得慢,η \eta η 大一點學得快,太大則不穩定。
邏輯迴歸演算法
第 23 頁把所有東西組起來:
初始化 w 0 \mathbf{w}_0 w 0 。
對 t = 0 , 1 , … t = 0, 1, \dots t = 0 , 1 , … :
計算梯度 ∇ E in ( w t ) = 1 N ∑ n = 1 N θ ( − y n w t ⊤ x n ) ( − y n x n ) \nabla E_{\text{in}}(\mathbf{w}_t) = \frac{1}{N}\sum_{n=1}^{N} \theta\big(-y_n\mathbf{w}_t^\top\mathbf{x}_n\big)\big(-y_n\mathbf{x}_n\big) ∇ E in ( w t ) = N 1 ∑ n = 1 N θ ( − y n w t ⊤ x n ) ( − y n x n ) 。
更新 w t + 1 ← w t − η ∇ E in ( w t ) \mathbf{w}_{t+1} \leftarrow \mathbf{w}_t - \eta\,\nabla E_{\text{in}}(\mathbf{w}_t) w t + 1 ← w t − η ∇ E in ( w t ) 。
直到 ∇ E in ( w t + 1 ) = 0 \nabla E_{\text{in}}(\mathbf{w}_{t+1}) = \mathbf{0} ∇ E in ( w t + 1 ) = 0 ,或跑了夠多輪。
回傳最後的 w t + 1 \mathbf{w}_{t+1} w t + 1 當作 g g g 。
停止條件,講義寫的是梯度等於零。課堂上講得比較實際:用浮點數計算,要得到純粹的 0 很困難,所以通常只要求梯度夠接近零(大概到谷底就好);另一個常見的條件是跑夠多步就停,假裝自己已經走到還不錯的地方。
講義最後一行是 similar time complexity to pocket per iteration。課堂上的說明:每一輪最花力氣的是算梯度,要把 N N N 筆資料的貢獻平均起來;pocket 每一輪也要用 N N N 筆資料算新的 w \mathbf{w} w 的 E in E_{\text{in}} E in 夠不夠好,兩者花的力氣類似。
數值例子:五位病人,手算兩步再跑到谷底
以下是本文自擬的例子,不在講義上,數字用 Python 驗算過。沿用心臟病的情境,但只留一個特徵:x 1 x_1 x 1 是某項檢驗值標準化後的分數,y = + 1 y = +1 y = + 1 代表後來心臟病發。加上 x 0 = 1 x_0 = 1 x 0 = 1 ,x = ( 1 , x 1 ) \mathbf{x} = (1, x_1) x = ( 1 , x 1 ) ,w = ( w 0 , w 1 ) \mathbf{w} = (w_0, w_1) w = ( w 0 , w 1 ) 。
n n n x 1 x_1 x 1 y n y_n y n − y n x n -y_n\mathbf{x}_n − y n x n 1 − 2 -2 − 2 − 1 -1 − 1 ( 1 , − 2 ) (1, -2) ( 1 , − 2 ) 2 − 1 -1 − 1 − 1 -1 − 1 ( 1 , − 1 ) (1, -1) ( 1 , − 1 ) 3 0 0 0 + 1 +1 + 1 ( − 1 , 0 ) (-1, 0) ( − 1 , 0 ) 4 1 1 1 − 1 -1 − 1 ( 1 , 1 ) (1, 1) ( 1 , 1 ) 5 2 2 2 + 1 +1 + 1 ( − 1 , − 2 ) (-1, -2) ( − 1 , − 2 )
檢驗值高的人比較常發病,但第 3 位(檢驗值居中卻發病)和第 4 位(檢驗值偏高卻沒事)打破了順序。沒有任何門檻能把五筆全部分對,資料不是線性可分的。
第 0 步:w 0 = ( 0 , 0 ) \mathbf{w}_0 = (0, 0) w 0 = ( 0 , 0 ) ,η = 0.1 \eta = 0.1 η = 0.1 。 每一筆的分數都是 0,權重都是 θ ( 0 ) = 0.5 \theta(0) = 0.5 θ ( 0 ) = 0.5 ,E in ( w 0 ) = ln 2 ≈ 0.6931 E_{\text{in}}(\mathbf{w}_0) = \ln 2 \approx 0.6931 E in ( w 0 ) = ln 2 ≈ 0.6931 。梯度是
∇ E in ( w 0 ) = 1 5 ⋅ 0.5 ⋅ [ ( 1 , − 2 ) + ( 1 , − 1 ) + ( − 1 , 0 ) + ( 1 , 1 ) + ( − 1 , − 2 ) ] = 0.5 5 ( 1 , − 4 ) = ( 0.1 , − 0.4 ) \nabla E_{\text{in}}(\mathbf{w}_0) = \frac{1}{5}\cdot 0.5\cdot\Big[(1,-2) + (1,-1) + (-1,0) + (1,1) + (-1,-2)\Big] = \frac{0.5}{5}(1, -4) = (0.1, -0.4) ∇ E in ( w 0 ) = 5 1 ⋅ 0.5 ⋅ [ ( 1 , − 2 ) + ( 1 , − 1 ) + ( − 1 , 0 ) + ( 1 , 1 ) + ( − 1 , − 2 ) ] = 5 0.5 ( 1 , − 4 ) = ( 0.1 , − 0.4 )
更新:
w 1 = ( 0 , 0 ) − 0.1 × ( 0.1 , − 0.4 ) = ( − 0.01 , 0.04 ) \mathbf{w}_1 = (0, 0) - 0.1 \times (0.1, -0.4) = (-0.01, 0.04) w 1 = ( 0 , 0 ) − 0.1 × ( 0.1 , − 0.4 ) = ( − 0.01 , 0.04 )
w 1 w_1 w 1 變成正的,表示檢驗值愈高風險愈大,方向是對的。
第 1 步:在 w 1 = ( − 0.01 , 0.04 ) \mathbf{w}_1 = (-0.01, 0.04) w 1 = ( − 0.01 , 0.04 ) 算梯度。 現在五筆的權重不一樣了:
n n n 分數 w 1 ⊤ x n \mathbf{w}_1^\top\mathbf{x}_n w 1 ⊤ x n y n w 1 ⊤ x n y_n\mathbf{w}_1^\top\mathbf{x}_n y n w 1 ⊤ x n 權重 θ ( − y n w 1 ⊤ x n ) \theta(-y_n\mathbf{w}_1^\top\mathbf{x}_n) θ ( − y n w 1 ⊤ x n ) 1 − 0.09 -0.09 − 0.09 0.09 0.09 0.09 0.4775 2 − 0.05 -0.05 − 0.05 0.05 0.05 0.05 0.4875 3 − 0.01 -0.01 − 0.01 − 0.01 -0.01 − 0.01 0.5025 4 0.03 0.03 0.03 − 0.03 -0.03 − 0.03 0.5075 5 0.07 0.07 0.07 0.07 0.07 0.07 0.4825
第 3、4 筆的 y n w ⊤ x n y_n\mathbf{w}^\top\mathbf{x}_n y n w ⊤ x n 是負的,被分錯了,權重超過 0.5;第 4 筆的值最小,權重最大,和「誰在梯度裡的權重最大」那題的結論一致。把權重乘上各自的 − y n x n -y_n\mathbf{x}_n − y n x n 再平均:
第一個分量 = 1 5 ( 0.4775 + 0.4875 − 0.5025 + 0.5075 − 0.4825 ) = 0.4875 5 = 0.0975 第二個分量 = 1 5 ( − 2 ( 0.4775 ) − 0.4875 + 0 + 0.5075 − 2 ( 0.4825 ) ) = − 1.9000 5 = − 0.3800 \begin{aligned}
\text{第一個分量} &= \tfrac{1}{5}\big(0.4775 + 0.4875 - 0.5025 + 0.5075 - 0.4825\big) = \tfrac{0.4875}{5} = 0.0975 \\
\text{第二個分量} &= \tfrac{1}{5}\big(-2(0.4775) - 0.4875 + 0 + 0.5075 - 2(0.4825)\big) = \tfrac{-1.9000}{5} = -0.3800
\end{aligned} 第一個分量 第二個分量 = 5 1 ( 0.4775 + 0.4875 − 0.5025 + 0.5075 − 0.4825 ) = 5 0.4875 = 0.0975 = 5 1 ( − 2 ( 0.4775 ) − 0.4875 + 0 + 0.5075 − 2 ( 0.4825 ) ) = 5 − 1.9000 = − 0.3800
更新:
w 2 = ( − 0.01 , 0.04 ) − 0.1 × ( 0.0975 , − 0.3800 ) = ( − 0.0198 , 0.0780 ) \mathbf{w}_2 = (-0.01, 0.04) - 0.1 \times (0.0975, -0.3800) = (-0.0198, 0.0780) w 2 = ( − 0.01 , 0.04 ) − 0.1 × ( 0.0975 , − 0.3800 ) = ( − 0.0198 , 0.0780 )
三個時間點的 E in E_{\text{in}} E in 是 0.6931、0.6766、0.6615,每一步都在下降。
跑到谷底。 繼續用 η = 0.1 \eta = 0.1 η = 0.1 做下去,第 344 步時梯度長度降到 10 − 3 10^{-3} 1 0 − 3 以下,最後收斂到
w ≈ ( − 0.6227 , 1.0904 ) , E in ≈ 0.4844 \mathbf{w} \approx (-0.6227, 1.0904),\qquad E_{\text{in}} \approx 0.4844 w ≈ ( − 0.6227 , 1.0904 ) , E in ≈ 0.4844
n n n x 1 x_1 x 1 y n y_n y n h ( x n ) = θ ( w ⊤ x n ) h(\mathbf{x}_n) = \theta(\mathbf{w}^\top\mathbf{x}_n) h ( x n ) = θ ( w ⊤ x n ) 權重 θ ( − y n w ⊤ x n ) \theta(-y_n\mathbf{w}^\top\mathbf{x}_n) θ ( − y n w ⊤ x n ) 1 − 2 -2 − 2 − 1 -1 − 1 0.057 0.057 2 − 1 -1 − 1 − 1 -1 − 1 0.153 0.153 3 0 0 0 + 1 +1 + 1 0.349 0.651 4 1 1 1 − 1 -1 − 1 0.615 0.615 5 2 2 2 + 1 +1 + 1 0.826 0.174
這個結果代表什麼。
模型回報的是風險:檢驗值 − 2 -2 − 2 的人約 6%,+ 2 +2 + 2 的人約 83%。照「Fun Time:把機率換回圈叉」的做法切在一半,分界在 x 1 = 0.6227 / 1.0904 ≈ 0.571 x_1 = 0.6227 / 1.0904 \approx 0.571 x 1 = 0.6227/1.0904 ≈ 0.571 ,第 3、4 筆仍然被分錯,0/1 誤差是 2 5 \frac{2}{5} 5 2 。這兩筆的風險被估成 0.349 與 0.615,都離一半不遠,模型對它們本來就沒有把握。
概似從 w 0 \mathbf{w}_0 w 0 的 0.5 5 = 0.03125 0.5^5 = 0.03125 0. 5 5 = 0.03125 提高到 e − 5 × 0.4844 ≈ 0.0887 e^{-5 \times 0.4844} \approx 0.0887 e − 5 × 0.4844 ≈ 0.0887 。
梯度為零靠的是「梯度為零解不出來」那一小節的情形二。權重沒有一個是 0,是加權和互相抵消:第一個分量 0.057 + 0.153 − 0.651 + 0.615 − 0.174 = 0 0.057 + 0.153 - 0.651 + 0.615 - 0.174 = 0 0.057 + 0.153 − 0.651 + 0.615 − 0.174 = 0 ,第二個分量 − 2 ( 0.057 ) − 0.153 + 0.615 − 2 ( 0.174 ) ≈ 0 -2(0.057) - 0.153 + 0.615 - 2(0.174) \approx 0 − 2 ( 0.057 ) − 0.153 + 0.615 − 2 ( 0.174 ) ≈ 0 。被分錯的兩筆權重最大,和三筆分對的拉成平手。
換不同的 η \eta η 。 同一份資料、同樣從 w 0 = ( 0 , 0 ) \mathbf{w}_0 = (0, 0) w 0 = ( 0 , 0 ) 出發,只改固定學習率:
η \eta η 第 1 步之後的 E in E_{\text{in}} E in 梯度長度降到 10 − 3 10^{-3} 1 0 − 3 以下要幾步 發生什麼事 0.01 0.6915 3,460 每步只降一點點,講義說的 too slow 0.1 0.6766 344 穩定下降 1 0.5634 32 穩定下降,快十倍 3 0.4955 8 表上這幾個值裡最快(另外試 η = 4 \eta = 4 η = 4 只要 5 步,η = 7 \eta = 7 η = 7 又慢到 21 步,η = 8 \eta = 8 η = 8 就到不了) 10 0.8739 到不了 第 1 步就比起點的 0.6931 高,之後漸漸落入 ( − 0.038 , 2.153 ) (-0.038, 2.153) ( − 0.038 , 2.153 ) 與 ( − 1.003 , 0.676 ) (-1.003, 0.676) ( − 1.003 , 0.676 ) 兩點之間來回,E in E_{\text{in}} E in 是 0.6148 與 0.5308,梯度長度停在 0.176 100 8.0000 到不了 E in E_{\text{in}} E in 三步一輪,在大約 4、14、6 之間跳;第 1,000 步時是 13.87,第 5,000 步時是 5.84
η = 10 \eta = 10 η = 10 那一列對應第 21 頁中間那張圖的情況:一步跨過谷底落到對面的山坡。這裡第 1 步的落點還比出發點高,就是課堂上提醒的那種情況:跨到對面山坡之後,反而爬得更高。η \eta η 多大算太大要看資料,這張表的數字不能搬到別的問題上。
再試一次正規化的版本,也就是第 20 頁那個每步固定走 η \eta η 長度的更新式,取 η = 0.05 \eta = 0.05 η = 0.05 。它 30 步之內就走到谷底附近,之後每一步還是得走滿 0.05 的長度,只能在谷底兩側的兩個點之間來回跨:偶數步落在 ( − 0.631 , 1.076 ) (-0.631, 1.076) ( − 0.631 , 1.076 ) ,梯度長度 0.0044;奇數步落在 ( − 0.607 , 1.120 ) (-0.607, 1.120) ( − 0.607 , 1.120 ) ,梯度長度 0.0087。一路跑到第 5,000 步都是這兩個點輪流出現,梯度長度始終在 0.004 以上,降不到 10 − 3 10^{-3} 1 0 − 3 。這說明了第 21 頁為什麼要求步伐隨梯度長度變化,固定學習率的版本接近谷底時步伐會自己縮小,沒有這個問題。
Fun Time:從零向量走第一步
題目(第 24 頁): 如果 w 0 = 0 \mathbf{w}_0 = \mathbf{0} w 0 = 0 ,取 η = 0.1 \eta = 0.1 η = 0.1 ,邏輯迴歸演算法的 w 1 \mathbf{w}_1 w 1 是什麼?
+ 0.1 ⋅ 1 N ∑ n = 1 N y n x n +0.1 \cdot \frac{1}{N}\sum_{n=1}^{N} y_n\mathbf{x}_n + 0.1 ⋅ N 1 ∑ n = 1 N y n x n
− 0.1 ⋅ 1 N ∑ n = 1 N y n x n -0.1 \cdot \frac{1}{N}\sum_{n=1}^{N} y_n\mathbf{x}_n − 0.1 ⋅ N 1 ∑ n = 1 N y n x n
+ 0.05 ⋅ 1 N ∑ n = 1 N y n x n +0.05 \cdot \frac{1}{N}\sum_{n=1}^{N} y_n\mathbf{x}_n + 0.05 ⋅ N 1 ∑ n = 1 N y n x n
− 0.05 ⋅ 1 N ∑ n = 1 N y n x n -0.05 \cdot \frac{1}{N}\sum_{n=1}^{N} y_n\mathbf{x}_n − 0.05 ⋅ N 1 ∑ n = 1 N y n x n
答案:3。 講義只說用 θ ( 0 ) = 1 2 \theta(0) = \frac{1}{2} θ ( 0 ) = 2 1 代入。完整的代入:w 0 = 0 \mathbf{w}_0 = \mathbf{0} w 0 = 0 時每筆的 − y n w 0 ⊤ x n = 0 -y_n\mathbf{w}_0^\top\mathbf{x}_n = 0 − y n w 0 ⊤ x n = 0 ,權重都是 1 2 \frac{1}{2} 2 1 ,
∇ E in ( w 0 ) = 1 N ∑ n = 1 N 1 2 ( − y n x n ) = − 1 2 ⋅ 1 N ∑ n = 1 N y n x n \nabla E_{\text{in}}(\mathbf{w}_0) = \frac{1}{N}\sum_{n=1}^{N} \frac{1}{2}\big(-y_n\mathbf{x}_n\big) = -\frac{1}{2}\cdot\frac{1}{N}\sum_{n=1}^{N} y_n\mathbf{x}_n ∇ E in ( w 0 ) = N 1 n = 1 ∑ N 2 1 ( − y n x n ) = − 2 1 ⋅ N 1 n = 1 ∑ N y n x n
w 1 = 0 − 0.1 × ( − 1 2 ⋅ 1 N ∑ n = 1 N y n x n ) = + 0.05 ⋅ 1 N ∑ n = 1 N y n x n \mathbf{w}_1 = \mathbf{0} - 0.1 \times \Big(-\frac{1}{2}\cdot\frac{1}{N}\sum_{n=1}^{N} y_n\mathbf{x}_n\Big) = +0.05 \cdot \frac{1}{N}\sum_{n=1}^{N} y_n\mathbf{x}_n w 1 = 0 − 0.1 × ( − 2 1 ⋅ N 1 n = 1 ∑ N y n x n ) = + 0.05 ⋅ N 1 n = 1 ∑ N y n x n
選項 1 漏了 θ ( 0 ) = 1 2 \theta(0) = \frac{1}{2} θ ( 0 ) = 2 1 。選項 2 和 4 的正負號錯了:梯度裡有一個負號,更新式又減去梯度,負負得正。五位病人的例子可以對答案:1 5 ∑ n y n x n = ( − 0.2 , 0.8 ) \frac{1}{5}\sum_n y_n\mathbf{x}_n = (-0.2, 0.8) 5 1 ∑ n y n x n = ( − 0.2 , 0.8 ) ,乘 0.05 是 ( − 0.01 , 0.04 ) (-0.01, 0.04) ( − 0.01 , 0.04 ) ,就是前面算出的 w 1 \mathbf{w}_1 w 1 。
講義對這個結果的評語是:y n x n y_n\mathbf{x}_n y n x n 的縮放平均,比零向量好上「一步」。課堂上的說法是,把 y y y 和 x \mathbf{x} x 乘起來平均是個還不錯的方向,它比零向量好一點點,因為已經往下滾過一次。
這堂課的四句話
第 25 頁的總結,一節一句:
問題:以 P ( + 1 ∣ x ) P(+1 \mid \mathbf{x}) P ( + 1 ∣ x ) 為目標,以 θ ( w ⊤ x ) \theta(\mathbf{w}^\top\mathbf{x}) θ ( w ⊤ x ) 為假說。
誤差:cross-entropy,也就是 negative log likelihood。
梯度:資料向量的 θ \theta θ 加權和。
梯度下降:沿著 − ∇ E in ( w ) -\nabla E_{\text{in}}(\mathbf{w}) − ∇ E in ( w ) 往下滾。
下一堂的預告是 linear model'S' for classification。課堂上說,線性分類、線性迴歸、邏輯迴歸三個都是線性的方法,下一次會把它們整合起來,用到更複雜的問題上。
自我檢查
1. 某筆資料 x = ( 1 , 3 ) \mathbf{x} = (1, 3) x = ( 1 , 3 ) 、y = + 1 y = +1 y = + 1 ,目前 w = ( 1 , − 2 ) \mathbf{w} = (1, -2) w = ( 1 , − 2 ) 。算出 h ( x ) h(\mathbf{x}) h ( x ) 、這筆的 cross-entropy 誤差,以及它在梯度加總裡貢獻的向量 θ ( − y w ⊤ x ) ( − y x ) \theta(-y\mathbf{w}^\top\mathbf{x})(-y\mathbf{x}) θ ( − y w ⊤ x ) ( − y x ) 。這筆資料會把 w \mathbf{w} w 往哪個方向推?
答案:分數 s = 1 − 6 = − 5 s = 1 - 6 = -5 s = 1 − 6 = − 5 ,h ( x ) = θ ( − 5 ) ≈ 0.0067 h(\mathbf{x}) = \theta(-5) \approx 0.0067 h ( x ) = θ ( − 5 ) ≈ 0.0067 ,假說認為它幾乎不可能是 + 1 +1 + 1 ,標籤卻是 + 1 +1 + 1 。誤差是 ln ( 1 + e 5 ) ≈ 5.0067 \ln(1 + e^{5}) \approx 5.0067 ln ( 1 + e 5 ) ≈ 5.0067 。權重 θ ( 5 ) ≈ 0.9933 \theta(5) \approx 0.9933 θ ( 5 ) ≈ 0.9933 ,貢獻的向量是 0.9933 × ( − 1 , − 3 ) ≈ ( − 0.993 , − 2.980 ) 0.9933 \times (-1, -3) \approx (-0.993, -2.980) 0.9933 × ( − 1 , − 3 ) ≈ ( − 0.993 , − 2.980 ) 。更新是減去梯度,所以這筆資料把 w \mathbf{w} w 往 ( + 1 , + 3 ) (+1, +3) ( + 1 , + 3 ) 也就是 y x y\mathbf{x} y x 的方向推,讓它自己的分數變高。
2. 某個假說對三筆資料都輸出 h ( x n ) = 0.8 h(\mathbf{x}_n) = 0.8 h ( x n ) = 0.8 ,三筆的標籤是圈、圈、叉。不看 P ( x n ) P(\mathbf{x}_n) P ( x n ) ,概似是多少?E in E_{\text{in}} E in 是多少?這三筆的分數 w ⊤ x n \mathbf{w}^\top\mathbf{x}_n w ⊤ x n 是多少?
答案:概似是 0.8 × 0.8 × 0.2 = 0.128 0.8 \times 0.8 \times 0.2 = 0.128 0.8 × 0.8 × 0.2 = 0.128 。E in = − 1 3 ln ( 0.128 ) ≈ 0.6852 E_{\text{in}} = -\frac{1}{3}\ln(0.128) \approx 0.6852 E in = − 3 1 ln ( 0.128 ) ≈ 0.6852 ;逐項算是 1 3 ( 0.2231 + 0.2231 + 1.6094 ) \frac{1}{3}(0.2231 + 0.2231 + 1.6094) 3 1 ( 0.2231 + 0.2231 + 1.6094 ) ,結果相同。θ ( s ) = 0.8 \theta(s) = 0.8 θ ( s ) = 0.8 解出 e − s = 0.25 e^{-s} = 0.25 e − s = 0.25 ,s = ln 4 ≈ 1.386 s = \ln 4 \approx 1.386 s = ln 4 ≈ 1.386 。判準:兩種算法的 E in E_{\text{in}} E in 要一致,這就是「E in E_{\text{in}} E in 是負的對數概似除以 N N N 」。
3. 在五位病人的例子裡,改用 η = 1 \eta = 1 η = 1 ,從 w 0 = ( 0 , 0 ) \mathbf{w}_0 = (0, 0) w 0 = ( 0 , 0 ) 走一步。w 1 \mathbf{w}_1 w 1 是多少?不重算梯度,能直接從 η = 0.1 \eta = 0.1 η = 0.1 的結果得到嗎?
答案:可以。第一步的梯度和 η \eta η 無關,都是 ( 0.1 , − 0.4 ) (0.1, -0.4) ( 0.1 , − 0.4 ) ,所以 w 1 = − 1 × ( 0.1 , − 0.4 ) = ( − 0.1 , 0.4 ) \mathbf{w}_1 = -1 \times (0.1, -0.4) = (-0.1, 0.4) w 1 = − 1 × ( 0.1 , − 0.4 ) = ( − 0.1 , 0.4 ) ,是 η = 0.1 \eta = 0.1 η = 0.1 時的十倍。此時 E in ≈ 0.5634 E_{\text{in}} \approx 0.5634 E in ≈ 0.5634 。第二步開始就不能這樣換算,因為兩條路徑上的 w 1 \mathbf{w}_1 w 1 不同,梯度也不同。
4. 兩筆一維資料(加上 x 0 = 1 x_0 = 1 x 0 = 1 ):x 1 = − 1 x_1 = -1 x 1 = − 1 標 − 1 -1 − 1 ,x 1 = + 1 x_1 = +1 x 1 = + 1 標 + 1 +1 + 1 。取 w = ( 0 , c ) \mathbf{w} = (0, c) w = ( 0 , c ) ,c > 0 c > 0 c > 0 。E in E_{\text{in}} E in 是 c c c 的什麼函數?梯度下降會停在哪裡?這對停止條件有什麼啟示?
答案:兩筆的 y n w ⊤ x n y_n\mathbf{w}^\top\mathbf{x}_n y n w ⊤ x n 都是 c c c ,所以 E in = ln ( 1 + e − c ) E_{\text{in}} = \ln(1 + e^{-c}) E in = ln ( 1 + e − c ) :c = 1 c = 1 c = 1 時 0.3133,c = 5 c = 5 c = 5 時 0.0067,c = 10 c = 10 c = 10 時約 4.5 × 10 − 5 4.5 \times 10^{-5} 4.5 × 1 0 − 5 。它隨 c c c 一直下降、趨近 0 但到不了,兩筆的權重都是 θ ( − c ) \theta(-c) θ ( − c ) ,永遠是正數。資料線性可分時,梯度為零只發生在 w \mathbf{w} w 的長度趨向無限大的極限,這就是「所有 θ \theta θ 都是 0」的情形。所以演算法不會因為梯度剛好等於零而停,要靠「梯度夠小」或「跑夠多輪」這兩個條件。
5. 用自己的話說明:(a) 為什麼最佳的單位方向是 − ∇ E in / ∥ ∇ E in ∥ -\nabla E_{\text{in}} / \lVert\nabla E_{\text{in}}\rVert − ∇ E in / ∥ ∇ E in ∥ ;(b) 固定學習率的版本,每一步實際走多長;(c) PLA 放進 w t + 1 ← w t + η v \mathbf{w}_{t+1} \leftarrow \mathbf{w}_t + \eta\mathbf{v} w t + 1 ← w t + η v 的框架時,η \eta η 和 v \mathbf{v} v 各是什麼。
判準:(a) 要提到 η \eta η 很小時用泰勒展開把 E in ( w t + η v ) E_{\text{in}}(\mathbf{w}_t + \eta\mathbf{v}) E in ( w t + η v ) 近似成 E in ( w t ) + η v ⊤ ∇ E in ( w t ) E_{\text{in}}(\mathbf{w}_t) + \eta\mathbf{v}^\top\nabla E_{\text{in}}(\mathbf{w}_t) E in ( w t ) + η v ⊤ ∇ E in ( w t ) ,只有內積那一項跟 v \mathbf{v} v 有關,單位向量和梯度反向時內積最小。(b) 長度是 η ∥ ∇ E in ( w t ) ∥ \eta\lVert\nabla E_{\text{in}}(\mathbf{w}_t)\rVert η ∥ ∇ E in ( w t )∥ ,隨梯度縮放,要指出「固定」的是比例。(c) η = 1 \eta = 1 η = 1 ,v \mathbf{v} v 在挑到的點分錯時是 y n x n y_n\mathbf{x}_n y n x n 、分對時是零向量;能進一步指出 PLA 每步只看一筆、梯度下降每步看全部 N N N 筆更好。
練習與對應閱讀
兩個學期的對應。 Fall 2026 課程頁 把基石第 9、10 堂排在同一週(W5,10/07)。Fall 2024 的對應投影片是 10u ;本文只用 MOOC 版講義,沒有逐頁比對兩個版本。
教科書。 Fall 2024 課程頁 把這堂對到 Learning from Data (LFD)的 3.3 節。
作業。 以下題目都沒有官方解答。
Fall 2024 HW3 (2024-10-07 發布、10-21 截止)Q4 :從 [ θ , 1 ] [\theta, 1] [ θ , 1 ] 均勻分布抽出的樣本,某個估計值的概似是多少。練的是「假裝某個參數是真的,算它產生手上資料的可能性」這個動作。
HW3 Q9 :換一種 sigmoid 假說,照邏輯迴歸的步驟推出新的 E in E_{\text{in}} E in 與梯度。做法就是把這篇「取 ln、加負號、除以 N」與「用連鎖律剝洋蔥」兩段重走一遍。
Fall 2024 HW4 (2024-10-21 發布、11-04 截止)Q1 :標籤從 { − 1 , + 1 } \{-1, +1\} { − 1 , + 1 } 換成 { 0 , 1 } \{0, 1\} { 0 , 1 } 之後,哪個式子等價於課堂上的 cross-entropy。「cross-entropy 的形狀與名字」那一小節已經推過一次。
HW4 Q5 (延伸):用二階泰勒展開推出 Newton's method,並套用在邏輯迴歸的 cross-entropy 上,可以當成梯度下降的進階版。
整份作業的導讀在基石作業導讀 。
動手做。 把「邏輯迴歸演算法」那四步寫成十幾行 Python,先用五位病人的資料重現本文的數字(w 1 \mathbf{w}_1 w 1 、w 2 \mathbf{w}_2 w 2 、收斂後的 w \mathbf{w} w ),再把 η \eta η 從 0.01 調到 100,畫出 E in E_{\text{in}} E in 隨迭代次數的曲線,對照第 21 頁的三張圖。
延伸閱讀。 Stanford CS229 第 3 堂:最大概似與邏輯斯迴歸 用 { 0 , 1 } \{0, 1\} { 0 , 1 } 標籤推同一個模型;Stanford CS109 的最大概似估計 與邏輯迴歸 從機率課的角度講概似。
下一堂。 基石第 11 堂:線性分類模型 把這三個線性模型放在一起比較,看線性迴歸與邏輯迴歸能不能拿來做分類,再把梯度下降改成隨機梯度下降(SGD),最後處理多類別分類。
課程影片來源
原始影片:Logistic Regression Problem 、Logistic Regression Error 、Gradient of Logistic Regression Error 、Gradient Descent
查核日期:2026-10-13。影片 ID、標題與長度於當天從官方播放清單取得;YouTube 上沒有字幕軌,本文的課堂說法來自自行轉錄的逐字稿。
更新紀錄
2026-10-13:系列改為一堂一篇,這篇是新拆出的一堂,依講義與影片逐字稿寫成。
參考資料