最直覺的分類法:拿新圖和訓練集裡每張圖比,看誰最像(nearest neighbor)。「像」用什麼量?最簡單是把對應像素相減、取絕對值、全部加起來。下面是兩隻 8×8 的動物,把貓往右推一格,看它和「原來的自己」距離多遠。
語意落差(semantic gap):影像在電腦裡是數字格,「貓」這個概念不在任何一格裡。講義列的七種困難:viewpoint variation、scale variation、deformation、occlusion、illumination、background clutter、intra-class variation。
k-nearest neighbors:不只看最近的一張,看最近的 k 張投票。CIFAR-10(50,000 張 32×32×3 的訓練圖、10 類)上用像素 L1 或 L2 距離的 kNN 約 38.6%,而用 L2 並不會比 L1 好:距離和背景、色調的相關比和內容的相關強。
為什麼這件事在 1966 年就開始:Minsky 給大學生 Sussman 的暑期作業是「把相機接上電腦,讓電腦描述看到什麼」。這個暑期作業花了五十年。
換個做法:不存訓練集,只存每一類「一張模板」。分數 = 圖片的每個像素 × 模板對應位置的權重,全部加起來,再加一個偏移。f(x, W) = Wx + b。下面是講義裡那個四個像素、三個類別的玩具例子:改像素、改權重,看分數怎麼動。
維度:CIFAR-10 的一張圖拉直是 3072 個數字,x 是 3072×1;10 類,W 是 10×3072,b 是 10×1。輸出 10 個分數。
Bias trick:在 x 最後多補一個常數 1,把 b 併進 W 的最後一行,W 變成 10×3073。一次矩陣乘法取代「乘再加」。講義後面說「30,730 維的山坡」就是 10×3073。
幾何觀點:把每張圖當高維空間裡的一個點,每一類的 W 列是一條線,線上分數為 0,往箭頭方向線性增加、反方向線性減少。線性分不開的情況(例如同心圓、XOR)在 SEC.04。
分數是任意實數,不好比較也不好解釋。Softmax 做兩件事:先對每個分數取指數(都變正),再除以總和(加起來是 1)。Loss 只看正確那一類的機率:L = −log p正確類。機率 1 時 loss 是 0;機率越小,loss 越大。這個數字就是「模型對訓練集有多不開心」。
Multinomial logistic regression:softmax 分類器的另一個名字。整個 batch 的 loss 是每個樣本 loss 的平均。
SVM(hinge)vs softmax:分數 [10, −2, 3]、第一類正確時,margin 1 的 SVM loss 已經是 0;分數改成 [10, 9, 9] 它還是 0,softmax 卻會罰得很重。SVM 是比較「局部」的目標:margin 滿足就不管細節;softmax 永遠想把正確類推更高。實務上兩者結果差不多。
PyTorch:nn.CrossEntropyLoss() 內部已經做了 softmax,餵 logits 就好,不要再自己加一層 softmax。二分類的 nn.BCELoss() 則要先過 sigmoid。
初始化時的 sanity check:W 小 → 分數都接近 0 → loss ≈ log C。CIFAR-10 是 ln 10 ≈ 2.303。B3 會把這個檢查放進訓練除錯流程。
線性分類器只能畫一條直線。有些資料一條直線怎麼畫都分不開,最有名的是 XOR:四個點,對角線同一類。1969 年 Minsky 和 Papert 證明單層感知機解不了它,神經網路研究沉寂了快二十年。解法是先用一層把資料「搬」到一個新空間,讓它在新空間裡變成線性可分。
Perceptron(Rosenblatt,1954):加權和 + 門檻。真正的意義不在解了什麼問題,而是證明參數可以由資料的錯誤自動更新。限制:只能表示線性可分的問題。
XOR:(0,0)→0、(0,1)→1、(1,0)→1、(1,1)→0。四個點在平面上不存在任何一條直線能分開。這是線性模型的根本限制,不是參數沒調好。
通用近似定理:一層隱藏層(夠寬)的網路可以近似任意函數。但它只保證「表達能力存在」,沒說怎麼訓練出來。表達能力和可訓練性是兩回事,這個區分在後面每一次卡關和突破都會用到。
結合律:W₂(W₁x) = (W₂W₁)x。沒有 activation 的多層網路等價於一層。A2 的 2 層網路用 sigmoid;B2 整個模組在講 activation 怎麼選。
這個模組最常被講錯的幾句話。