23 - Batch Normalization 同 Softmax 回歸
一、Batch Normalization 點解咁有用?
1.1 好似餐前洗手——層層輸出都要「標準化」
喺訓練前,我哋通常會對輸入數據做 mean=0、std=1。BatchNorm 就係將呢招推到每一層:
每個 mini-batch 入面,計條均值 μ 同方差 σ²。
將輸出減 μ、除 σ,之後再乘 γ、加 β。
類比:跑接力,交棒前教練先幫你調好手勢同方向,下一棒就易追時間。
1.2 減少 Internal Covariate Shift(內部協變偏移)
深網絡越訓練,前面層輸出分佈會日日變。後面層好似坐過山車,難以適應。BatchNorm 將分佈固定落嚟 ⇒ 梯度更穩定,學習率可以開大。
1.3 自帶少少正則化味道
每個 mini-batch 隨機抽樣 → μ、σ 有 noise。等於對激活加咗微細擾動,好似 light 版 Dropout,略減 overfit。不過真要抗過擬合,仲係搭配 L2、Dropout。
1.4 測試期點算?
訓練時一路更新 running mean / var。推斷(evaluation)時,用呢組累積值,唔靠 batch,即使一次只輸入一張圖都得。PyTorch / TF 已自動幫你 switch,開 model.eval() 就 OK。
1.5 多啲貼地例子
煮糖水:每次撈完蓮子先過秤,確保份量一致,之後先加糖——唔怕忽甜忽淡。
MTR 月台閘門:列車到站前定位,對準門口;乘客上落流暢就係 BN 效果。
食車胎雪糕:雪糕機先將奶漿混勻(標準化),每啖味道一致。
二、Softmax 回歸——多分類界嘅常客
2.1 由 Logistic 變 Softmax
Logistic Regression:二分天下(0/1)。
Softmax Regression:派對請 N 個嘉賓,人人有機率。
例子:影相 App 分「狗/貓/烏龜/刺蝟」四類。標籤 one-hot:
狗 [1 0 0 0]
貓 [0 1 0 0]
烏龜 [0 0 1 0]
刺蝟 [0 0 0 1]
最後一層有 4 個 neuron,各自 spit 出對應機率。
2.2 Softmax 函數=「軟件版 max」
ŷ_i = exp(z_i) / Σ_j exp(z_j)
特性:
全部 ŷ_i ∈ (0,1),加埋 = 1。
分數平滑化,可微分 ⇒ 方便反傳。
當其中一個 z_i 遠高過其他,Softmax 近似硬 max,但仍保留梯度。
2.3 損失:交叉熵 Cross-Entropy
L = − Σ_j y_j · log(ŷ_j) # 只罰錯嗰類
J = (1/m) Σ_i L_i # 對 m 個樣本取平均
2.4 反向傳播超簡
∂L/∂z = ŷ − y
即「預測機率 − 真實 one-hot」,一行 code solve。
2.5 實際生活例子
郵局分件
Barcode 掃描器輸出「本地 / 亞太 / 歐洲 / 其他」四條輸送帶嘅概率。
串流平台推片
模型對「電影 / 劇集 / 動畫 / 直播」算出機率,按最高分展示封面。
中醫診斷
望聞問切→模型輸出「熱症 / 寒症 / 虛症 / 實症」四類體質機率。
三、兩招合體示範
class Net(nn.Module):
def __init__(self):
super().__init__()
self.backbone = nn.Sequential(
nn.Linear(784, 256, bias=False),
nn.BatchNorm1d(256),
nn.ReLU(),
nn.Linear(256, 4) # 4 類
)
def forward(self, x):
z = self.backbone(x)
y_hat = F.softmax(z, dim=1)
return y_hat
Loss:
criterion = nn.CrossEntropyLoss() # 內部已包 softmax+log
✅ 重點回顧
Batch Normalization
每層「洗手」標準化,減漂移。
令 lr 可加大,收斂快 2-4×。
帶微正則,仍需配 Dropout/L2。
推斷靠 running mean/var,自動搞掂。
Softmax 回歸
Logistic 二分類嘅多類版。
Softmax 把 logits→機率,交叉熵做損失。
反傳只係 ŷ−y,實作超簡。
廣泛應用於影像、NLP、多 Label 任務。
有咗 BatchNorm 呢位「接力教練」同 Softmax 呢個「機率分配器」,你嘅深度模型就可以又快又穩噴住跑!🏃♂️💨