機器學習基礎: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), Wm×n
Error / cost function 量化輸出 y 與 label t 的差距 E = (y−t)²/2
SGD + Backprop ∂E/∂θ 修正參數使誤差下降 θ ← θ − ε·∂E/∂θ
Learning rate ε 步長常數;大則快但不穩,小則慢 隨 epoch 遞減
Minibatch 累積 N 筆樣本誤差再觸發 backprop 一個 epoch = 掃過整個訓練集
Important

本章是 application case study:重點在理解 neural network 推論(inference)與訓練(training)背後的 計算核心 (compute kernels),後續才映射到 GPU。Fully connected layer 本質就是 矩陣乘法


分類任務與 Classifier (Classification Task & Classifier)

機器學習的目標是「從資料學出邏輯」,而非人工設計明確演算法。常見任務:

任務 說明 範例
Classification 判定輸入屬於 k 類中哪一類 影像物件辨識
Regression 預測一個數值 預測股價
Transcription 非結構資料 → 文字 OCR
Translation 一種符號序列 → 另一種 英翻中
Embedding 輸入 → 保留關係的向量 句子轉多維向量

Perceptron 線性分類器 (Perceptron Linear Classifier)

最簡單的線性分類器 (Rosenblatt, 1957):

y=sign(Wx+b)
       w1
  x1 ──────┐
           ▼
          (Σ) ── k = w1·x1 + w2·x2 + b ──► [ sign / sigmoid ] ──► y
           ▲
  x2 ──────┘        ▲
       w2           │ b (bias)

幾何意義: w1·x1 + w2·x2 + b = 0x1-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 (點在線上方)。

Warning

單層 perceptron 只能畫一條直線。若資料非線性可分 (linearly separable),例如「x1 與 x2 同時 > 0.5」的方形區域,任何單一直線都會誤分一部分點 → 需要多層。


Multilayer Perceptron 與 Fully Connected Layer (MLP & Fully Connected Layers)

MLP: 每層由一或多個 perceptron 組成,前一層的輸出 = 後一層的輸入

Tip

關鍵性質: 第一層輸入有無限多種值,但輸出被 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) ] ──┘

Fully Connected Layer

y=sigmoid(Wx+b),WRm×n
比較 Fully Connected Layer Convolutional Layer
weight 數 m × n (m,n 大時爆炸) 共享 filter,weight 少
每個 classifier 輸入 全部 n 個輸入 只看一個 patch
weight 共享 跨 classifier 共享
成本範例 影像 n ≈ 百萬, m ≈ 數百 → 昂貴且浪費 用少量 weight 支撐大量 classifier
Warning

m × n weight 在高解析度影像 (n 達數百萬) 變得極度昂貴;這正是 Convolutional layer 出現的動機——以 patch + weight sharing 降低成本。


訓練:Error Function 與 SGD (Training, Error Function & SGD)

訓練 = 用有 label 的資料 (此處假設 supervised) 反推 model 參數 θ(weights 與 bias) 的值。

Error (Cost) Function

E=(yt)22

Stochastic Gradient Descent (SGD)

Epoch


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

Ey 的函數,y 又是 w1, w2, b 的函數 → 用 chain rule:

Ew1=Eyyw1,Ey=yt
Warning

sign function 不可微 (在 0 不連續)!訓練時改用平滑版 sigmoid 近似:

σ=1ex1+ex

此版本值域為 −1 ~ 1 (近似 sign,非標準 logistic 的 0~1)。x 很負 → ≈ −1,x 很正 → ≈ 1,x 近 0 急速上升。

k = w1·x1 + w2·x2 + b,則 ∂k/∂w1 = x1,且:

σ(k)k=2ek(1+ek)2

合併得對 weights / bias 的梯度:

Ew1=(yt)2ek(1+ek)2x1,Ew2=(yt)2ek(1+ek)2x2,Eb=(yt)2ek(1+ek)2

→ 三個梯度都能由輸入 (x1,x2,t)目前參數 (w1,w2,b) 完全決定。

多層的 Backprop:傳遞 ∂E/∂x

要更新前一層,需把梯度往回傳。對輸入 x 求導 (輸入扮演與參數相同角色):

Ex=Eyyx,Ex1=(yt)2ek(1+ek)2w1
Important

關鍵觀察: 前一層的輸出就是後一層的輸入,所以前一層的 ∂E/∂y = 後一層的 ∂E/∂x∂E/∂y 可直接沿用,不必重算 → backprop 從最後一層往前逐層遞推。


Learning Rate、Minibatch 與 Feedforward Networks

Learning Rate ε

對誤差越敏感 (偏導數絕對值越大) 的參數,調整幅度越大 → 把偏導數乘上常數 ε 後再相減:

θθεEθ

(θ 可代入 w1, w2, b 任一參數;負號使變化逆梯度方向 → 誤差下降。)

ε 大小 優點 風險
參數演化快,迭代次數少 不穩定,可能不收斂
穩定收斂 收斂慢
Tip

實務上 ε 初值靠經驗設定,並隨 epoch 遞減,確保 weight 最終收斂到最小誤差。

Minibatch

更新策略 觸發時機 特性
逐樣本 (online) 每筆都更新 噪訊大、昂貴
Minibatch 累積 N 筆 平衡穩定度與成本 (GPU 友善)

Feedforward Networks

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,Wm×n
FC layer 為何昂貴 m×n weight;影像 n 達百萬 → convolution + weight sharing 解決
ε 過大 / 過小 大:快但不穩/不收斂;小:穩但慢;隨 epoch 遞減
Minibatch 目的 backprop 昂貴 → 累積 N 筆誤差才觸發,GPU 友善
Feedforward 為何好訓練 無 feedback loop → backprop 可從末層單純往前遞推