這是一個很好的問題,我會用簡單、清晰的方式來說明 梯度計算的原理、Mini-batch SGD 的運行方式、整體神經網絡的訓練流程,以及為什麼整個架構設計要是這樣。你可以把這整個流程想像成一個「資料進來-模型計算-錯誤回傳-參數更新」的循環。
🔧 1. 梯度計算的原理(Gradient)
當我們訓練神經網絡時,我們的目標是最小化損失函數(loss function),例如 MSE 或 Cross Entropy。
但我們不知道什麼參數會讓 loss 最小,所以我們要計算「loss 對每個參數的偏導數」➡️ 這就是梯度。
梯度 = 損失函數對每個權重的偏導數
意思是:每個參數要調整多少,才會讓 loss 降低最多。
這裡就用到了 鏈式法則(Chain Rule),因為神經網絡是很多層的組合,從 output 一層一層「反向」算回去。
🔁 2. Mini-batch SGD 的運行方式
SGD = Stochastic Gradient Descent
Mini-batch SGD 是它的改良版:
種類 | 資料量 | 特點 |
---|---|---|
Batch GD | 全部資料 | 很準,但慢 |
SGD | 一筆資料 | 快,但震盪大 |
Mini-batch SGD | 一小批資料(例如32筆) | 速度與穩定性兼具 ✔️ |
運行流程:
-
資料被切成一批一批的 mini-batches
-
對每一個 mini-batch 做:
-
Forward pass(前向傳遞)
-
計算 loss
-
Backward pass(反向傳遞)
-
更新參數
-
🔄 3. Backward Pass 如何做(反向傳遞)
這步叫做 Backpropagation,核心是:
使用鏈式法則(Chain Rule)一層一層地計算梯度,從最後一層開始往前傳。
例如:
-
最後一層 output 為 ,實際答案為
-
損失函數是
-
我們要對每一層的權重 計算
這樣每個權重都能知道該怎麼調整。
⚙️ 4. 整體架構為什麼這樣設計?
原因 1:可組合性(Composability)
神經網絡像樂高一樣,每層做一點簡單的事(加權、加 bias、啟用函數),但組合起來就能表現很複雜的函數。
原因 2:可微分性(Differentiability)
每個部分都要可微,這樣才能用微分(梯度)來優化。
原因 3:效率(Efficiency)
Mini-batch + 向量化計算(用矩陣計算而不是 for 迴圈)能讓 GPU 高效訓練。
🧠 整體流程總結(超重要!)
以一個 epoch 的訓練流程來說:
-
資料 ➡️ 分成多個 mini-batches
-
每個 mini-batch:
-
前向傳遞(Forward)
-
計算損失(Loss)
-
反向傳遞(Backward)
-
更新參數(SGD)
-
-
重複這個流程很多 epochs,直到 loss 收斂