第17堂課:批次正規化 (Batch Normalization)
本課程由李宏毅教授講解深度學習中關鍵的技術:Batch Normalization (批次標準化)。
一、 為什麼需要正規化 (Normalization)?
在優化問題中,損失函數的平面 (Loss Landscape) 若過於崎嶇或陡峭,會導致梯度下降 (Gradient Descent) 難以收斂。
- 輸入特徵的影響:當輸入特徵 與 的數值範圍差異巨大時(例如 ),會導致權重 更新時的損失函數平面變得不均勻(如橢圓狀),這會讓模型難以優化。
- 特徵正規化 (Feature Normalization):針對每個維度 ,透過減去平均值 並除以標準差 ,使該維度的數值分佈平均為 、變異數為 。這能讓損失函數平面更接近圓形,加速梯度下降的收斂速度。
公式如下:
二、 深度學習中的 Batch Normalization
在深度神經網絡中,即便輸入層做了正規化,隱藏層的輸出 (例如 ) 仍然可能因為經過權重計算後,分佈發生偏移或範圍變化,導致後續層難以訓練。
1. 運作機制
針對一個 Batch 中的樣本,計算該批次在某個層的輸出統計量:
- 平均值:
- 標準差:
接著對輸出進行標準化與縮放平移:
- 標準化:
- 調整分佈:
- 其中 與 是可學習的參數,允許模型學習恢復原始的分佈特性。
2. 測試階段的處理
在測試時,我們可能只有單一樣本,無法計算 Batch 的 與 。因此,我們在訓練過程中會記錄每一批次的 與 ,並計算其移動平均 (Moving Average)。測試時直接使用這些累積的統計量。
三、 關於 Internal Covariate Shift 的討論
過去認為 Batch Normalization 的成功是因為它解決了「Internal Covariate Shift」(內部協變量偏移)。但後續研究顯示,該說法存在爭議。現有實驗指出,Batch Normalization 真正有效的原因更傾向於它平滑了損失函數的表面 (Landscape),使得訓練過程更穩定。這種正向影響甚至被形容為某種「偶然的」(serendipitous) 發現。
四、 知識圖譜
graph TD Node1["Batch Normalization"] --> Node2["核心目的"] Node1["Batch Normalization"] --> Node3["運作原理"] Node1["Batch Normalization"] --> Node4["測試策略"] Node2["核心目的"] --> Node5["平滑損失函數平面"] Node2["核心目的"] --> Node6["加速收斂"] Node3["運作原理"] --> Node7["計算Batch統計量"] Node7["計算Batch統計量"] --> Node8["平均值mu"] Node7["計算Batch統計量"] --> Node9["標準差sigma"] Node3["運作原理"] --> Node10["參數縮放gamma與beta"] Node4["測試策略"] --> Node11["移動平均Moving Average"]
隨堂測驗
Q1: 為何要進行特徵正規化 (Feature Normalization)?
點擊查看解答
答:為了讓不同維度的特徵處於相似的數值範圍,這能使損失函數的表面更平滑(更接近圓形),從而讓梯度下降演算法收斂得更快。Q2: 在測試 (Testing) 階段,Batch Normalization 如何獲取 和 ?
點擊查看解答
答:測試階段無法取得足夠的 Batch,因此會使用訓練過程中記錄下來的 $\mu$ 和 $\sigma$ 的「移動平均值 (Moving Average)」來進行正規化。Q3: Batch Normalization 公式中 與 的作用是什麼?