機器學習基礎:Perceptron 與 Backpropagation
重點總覽 (Overview)
| 概念 | 核心定義 | 關鍵公式 / 數量 |
|---|---|---|
| Classifier | 把輸入映射到 k 個類別的函數 f: Rⁿ → {1,…,k},由 model θ 參數化 |
y = f(x; θ) |
| Perceptron | 線性分類器,weight 向量 W + bias b,經 activation |
y = sign(W·x + b) |
| Activation | 引入非線性;訓練時用可微的 sigmoid 取代 sign | σ = (1−e⁻ˣ)/(1+e⁻ˣ) |
| Fully connected layer | m 個輸出各為全部 n 個輸入的函數 → matrix-vector mult | y = sigmoid(W·x + b), W 為 m×n |
| Error / cost function | 量化輸出 y 與 label t 的差距 |
E = (y−t)²/2 |
| SGD + Backprop | 用 ∂E/∂θ 修正參數使誤差下降 |
θ ← θ − ε·∂E/∂θ |
| Learning rate ε | 步長常數;大則快但不穩,小則慢 | 隨 epoch 遞減 |
| Minibatch | 累積 N 筆樣本誤差再觸發 backprop | 一個 epoch = 掃過整個訓練集 |
本章是 application case study:重點在理解 neural network 推論(inference)與訓練(training)背後的 計算核心 (compute kernels),後續才映射到 GPU。Fully connected layer 本質就是 矩陣乘法。
分類任務與 Classifier (Classification Task & Classifier)
機器學習的目標是「從資料學出邏輯」,而非人工設計明確演算法。常見任務:
| 任務 | 說明 | 範例 |
|---|---|---|
| Classification | 判定輸入屬於 k 類中哪一類 | 影像物件辨識 |
| Regression | 預測一個數值 | 預測股價 |
| Transcription | 非結構資料 → 文字 | OCR |
| Translation | 一種符號序列 → 另一種 | 英翻中 |
| Embedding | 輸入 → 保留關係的向量 | 句子轉多維向量 |
- Classifier 形式:
f: Rⁿ → {1, 2, …, k},被 modelθ參數化成y = f(x; θ)。 θ(model) 封裝了從資料學到的 weights。- Inference = 把輸入代入
f算出類別的過程。
Perceptron 線性分類器 (Perceptron Linear Classifier)
最簡單的線性分類器 (Rosenblatt, 1957):
W: 與x同長度的 weight 向量;b: bias 常數。- sign function: 輸入 > 0 回傳
1、= 0 回傳0、< 0 回傳-1→ 把連續值「activate」成 3 類{-1, 0, 1},因此也叫 activation function,為線性式引入非線性。 - model
θ=(W, b)的組合。
w1
x1 ──────┐
▼
(Σ) ── k = w1·x1 + w2·x2 + b ──► [ sign / sigmoid ] ──► y
▲
x2 ──────┘ ▲
w2 │ b (bias)
幾何意義: w1·x1 + w2·x2 + b = 0 在 x1-x2 平面是一條直線 (hyperplane),把空間切成兩半。
範例: (w1, w2) = (2, 3), b = -6 → 直線 2x1 + 3x2 − 6 = 0,連接 (−b/w1, 0)=(3,0) 與 (0, −b/w2)=(0,2) 即可畫出。
x2
▲ class 1 (W·x+b > 0) · = 資料點
2┤· · · line: 2x1+3x2-6=0
│ · · /
│ · /
│ · / · class -1 (W·x+b < 0)
└────/──────────────► x1
3
Inference 範例: 輸入 (5, −1) → sign(2·5 + 3·(−1) − 6) = sign(1) = 1 → 屬 class 1 (點在線上方)。
單層 perceptron 只能畫一條直線。若資料非線性可分 (linearly separable),例如「x1 與 x2 同時 > 0.5」的方形區域,任何單一直線都會誤分一部分點 → 需要多層。
Multilayer Perceptron 與 Fully Connected Layer (MLP & Fully Connected Layers)
MLP: 每層由一或多個 perceptron 組成,前一層的輸出 = 後一層的輸入。
關鍵性質: 第一層輸入有無限多種值,但輸出被 activation 限縮成有限種 (如 sign → {-1,0,1})。第二層只需在這少數離散點之間畫線即可,於是兩層就能實現單層做不到的分類。
兩層解「方形區域」範例:
Layer 1 (2 個 perceptron) Layer 2
x1 ─┬─► [ y1 = sign(x1 − 0.5) ] ──┐
│ ├─► [ z = sign(2y1 + 2y2 − 3) ] ─► 輸出
x2 ─┴─► [ y2 = sign(x2 − 0.5) ] ──┘
- 第一層把所有 orange 點全部映射到
(y1,y2)=(1,1),第二層再用2y1+2y2−3=0一條線分開 → 正確分類原本被誤分的(0.55, 0.65)。 - 更複雜的 pattern (如 XOR 型) 需 更多層(每層加 perceptron / 加層)。
Fully Connected Layer
- 定義: 每個輸出都是所有 n 個輸入的函數;m 個輸出 → weight 形成
m × n矩陣W(每列是長度 n 的 weight 向量)。 - 評估整層 = matrix-vector multiplication:
| 比較 | Fully Connected Layer | Convolutional Layer |
|---|---|---|
| weight 數 | m × n (m,n 大時爆炸) |
共享 filter,weight 少 |
| 每個 classifier 輸入 | 全部 n 個輸入 | 只看一個 patch |
| weight 共享 | 無 | 跨 classifier 共享 |
| 成本範例 | 影像 n ≈ 百萬, m ≈ 數百 → 昂貴且浪費 | 用少量 weight 支撐大量 classifier |
m × n weight 在高解析度影像 (n 達數百萬) 變得極度昂貴;這正是 Convolutional layer 出現的動機——以 patch + weight sharing 降低成本。
訓練:Error Function 與 SGD (Training, Error Function & SGD)
訓練 = 用有 label 的資料 (此處假設 supervised) 反推 model 參數 θ(weights 與 bias) 的值。
Error (Cost) Function
y= 分類輸出,t= label。- 平方確保誤差恆為正,累加多筆時正負差不會互相抵消。
- 係數
1/2是為了讓求導後常數消掉,簡化 backprop。
Stochastic Gradient Descent (SGD)
- 反覆把不同排列的資料丟進 classifier、演化參數,直到參數收斂 (變動小於 threshold)。
Epoch
- 每次迭代叫一個 epoch:先隨機洗牌 (shuffle) 整個訓練集 (避免落入次佳解),再逐筆推論、與 label 比對算
E。 - 若
E超過 threshold → 觸發 backpropagation 修正參數。
Backpropagation 與 Chain Rule (Backpropagation & Chain Rule)
核心想法:從 E 往回看,找出每個參數如何影響 E → 用 partial derivative (偏導數) 決定調整方向與幅度。
Forward : x ──► k = W·x + b ──► y = σ(k) ──► E = (y−t)²/2
│ ∂E/∂y = y − t
Backward: ∂E/∂x ◄── ∂E/∂w ◄──────────────────┘
(傳給前一層) (更新本層 W)
Chain Rule
E 是 y 的函數,y 又是 w1, w2, b 的函數 → 用 chain rule:
sign function 不可微 (在 0 不連續)!訓練時改用平滑版 sigmoid 近似:
此版本值域為 −1 ~ 1 (近似 sign,非標準 logistic 的 0~1)。x 很負 → ≈ −1,x 很正 → ≈ 1,x 近 0 急速上升。
令 k = w1·x1 + w2·x2 + b,則 ∂k/∂w1 = x1,且:
合併得對 weights / bias 的梯度:
→ 三個梯度都能由輸入 (x1,x2,t) 與目前參數 (w1,w2,b) 完全決定。
多層的 Backprop:傳遞 ∂E/∂x
要更新前一層,需把梯度往回傳。對輸入 x 求導 (輸入扮演與參數相同角色):
關鍵觀察: 前一層的輸出就是後一層的輸入,所以前一層的 ∂E/∂y = 後一層的 ∂E/∂x。∂E/∂y 可直接沿用,不必重算 → backprop 從最後一層往前逐層遞推。
Learning Rate、Minibatch 與 Feedforward Networks
Learning Rate ε
對誤差越敏感 (偏導數絕對值越大) 的參數,調整幅度越大 → 把偏導數乘上常數 ε 後再相減:
(θ 可代入 w1, w2, b 任一參數;負號使變化逆梯度方向 → 誤差下降。)
| ε 大小 | 優點 | 風險 |
|---|---|---|
| 大 | 參數演化快,迭代次數少 | 不穩定,可能不收斂 |
| 小 | 穩定收斂 | 收斂慢 |
實務上 ε 初值靠經驗設定,並隨 epoch 遞減,確保 weight 最終收斂到最小誤差。
Minibatch
- backprop 成本高,不對單一資料點觸發。
- shuffle 後切成 minibatch;整批跑完 forward、累積
E;若批次總誤差過大才觸發 backprop,逐筆檢查錯誤者用來算梯度更新參數。 - 一次掃過整個訓練集 = 一個 epoch;之後再 shuffle 進入下一 epoch。
| 更新策略 | 觸發時機 | 特性 |
|---|---|---|
| 逐樣本 (online) | 每筆都更新 | 噪訊大、昂貴 |
| Minibatch | 累積 N 筆 | 平衡穩定度與成本 (GPU 友善) |
Feedforward Networks
- 把多層 classifier 串接、輸出餵給下一層 → feedforward network。
- 無 feedback loop:後層輸出不會接回前層輸入。
- 因此 backprop 可從最後一層單純地往回迭代,不受回饋迴路干擾。
Input ──► [Layer 1] ──► [Layer 2] ──► … ──► [Layer L] ──► Output
forward 推論 ▶ ◀ backward 梯度
(所有早層輸出只往後送,絕不回流)
考試/面試重點 (Exam / Test Patterns)
| 情境 / 關鍵字 | 答案 / 技巧 |
|---|---|
| Perceptron 公式 | y = sign(W·x + b);sign 把值 activate 成 {-1,0,1} |
| 為何單層不夠 | 只能畫一條 hyperplane;非線性可分資料 (XOR / 方形區域) 需多層 |
| 為何訓練不用 sign | sign 在 0 不可微 → 用平滑 sigmoid (1−e⁻ᵏ)/(1+e⁻ᵏ) (值域 −1~1) |
| Error function 為何用平方/×½ | 平方使誤差恆正不抵消;½ 讓求導常數消掉以簡化 |
∂E/∂y = ? |
y − t |
| sigmoid 導數 | 2e⁻ᵏ/(1+e⁻ᵏ)² |
| 參數更新式 | θ ← θ − ε·∂E/∂θ;負號逆梯度 → 降低誤差 |
前層的 ∂E/∂y 怎麼來 |
等於後層的 ∂E/∂x (已算好),直接重用 |
| Fully connected layer 的計算本質 | matrix-vector multiplication,W 為 m×n |
| FC layer 為何昂貴 | 需 m×n weight;影像 n 達百萬 → convolution + weight sharing 解決 |
| ε 過大 / 過小 | 大:快但不穩/不收斂;小:穩但慢;隨 epoch 遞減 |
| Minibatch 目的 | backprop 昂貴 → 累積 N 筆誤差才觸發,GPU 友善 |
| Feedforward 為何好訓練 | 無 feedback loop → backprop 可從末層單純往前遞推 |
Related Notes
- 16-Deep-Learning/02-Convolutional-Neural-Networks-Layers
- 16-Deep-Learning/03-GPU-Convolutional-Layer-CUDA-Kernel-and-GEMM
- 16-Deep-Learning/04-cuDNN-Library-and-Summary
- 03-Multidimensional-Grids-And-Data/04-Matrix-Multiplication-Kernel
- 07-Convolution/01-Convolution-Fundamentals-and-Basic-Kernel
- 24-Numerical-Considerations/03-Algorithm-Considerations-and-Numerical-Stability