11 - 乜嘢叫「輸入正規化」?
喺深度學習世界,你將原始數據直接塞入網絡,好多時就等於叫一班身高由 150cm 到 250cm 嘅學生排隊做體操——動作肯定唔齊。輸入正規化 (Input Normalization) 就係幫佢哋着同一對波鞋、企返同一條起跑線:
每條特徵(feature)平均值調到 0
變異數(或標準差)拉到 1
公式:
x_norm = (x - μ_train) / σ_train
(μ_train、σ_train 只用訓練集計!)
🧪 點解要搞咁多野?
梯度方向易行‣ 未正規化:Loss 山谷又窄又歪,好似喺羊腸小徑踩單車。‣ 正規化後:山谷近圓形,SGD 可以開快車,學習率調高都冇事。
防止某條 feature「搶戲」‣ 屋價預測:面積 由 300–2 000,但 電梯有冇 只係 0/1。‣ 未縮放時,梯度大部分時間都幫 面積,細特徵學唔到嘢。
收斂更穩定‣ 你會見到 Loss 曲線少左「鋸齒」,早啲貼近平穩下降。
⚙️ 手把手做法
計平均 (μ) mu = X_train.mean(axis=0)
去中心化 X_train -= mu
計標準差 (σ) sigma = X_train.std(axis=0) 遇到 σ≈0(例如常數列),可以直接丟特徵或設 1。
除以 σ X_train /= sigma
驗證 / 測試集同一步驟,但用 μ、σ 係 步驟1、3 記錄落嚟嘅值。
🌍 真實案例
場景 | 原始尺度 | 正規化好處 |
圖像分類 (RGB 0–255) | Pixel 值大 & 正偏 | 變 0–1 或標準化後,CNN 收斂時間減半 |
IoT 溫濕度感測 | 溫度 15–40、濕度 30–90 | LSTM 同時處理兩條線,唔會被「溫度高能量」干擾 |
信用卡詐騙 | 交易額 1–1–1–500k,裝置類型 1/0 | 全量模型唔會只睇大額而忽視裝置異常 |
股票預測 | 價格 0.5–5000,成交量 1k–10M | 正規化之後可用同一學習率,訓練跨行業模型 |
手機鍵盤下一字預測 | 詞向量已正態化,字長度 1–20 | 只需對 numeric feature 做標準化即可 |
🎯 常見 Q&A
Min-Max 同 Standardize 點揀?
Standardize:大多數情況照用,對極端值冇咁敏感。
類別型特徵要唔要?One-hot 本身已經 0/1,通常唔洗再縮放。
時間序列可以用未來 μ/σ 嗎?絕對唔可以!只用過去窗口嘅統計,否則「洩漏時間」。
BatchNorm 係咪取代咗輸入正規化?佢更似 layer-wise 動態標準化,兩者可同時存在,效果疊加。
學習率可以調幾多?正規化後,往往由 1e-4 拉到 1e-3、甚至 1e-2 都穩。
🛑 資料洩漏陷阱
千祈唔好用 X_val.mean()、X_test.std()!
團隊協作 時,將 μ、σ 寫入 model artifact,部署端重複同一步。
✅ 小結
輸入正規化 = 開課前著齊制服——大家同一尺度學習。
效益:收斂快、曲線順、學習率大、特徵公平。
操作:用訓練集算 μ、σ → 減 μ → 除 σ;永遠記住「train set only」。
排錯清單:模型學唔掂?先檢查有冇正規化,再諗其他花巧。
搞掂呢步,你嘅網絡就好似換咗條又直又寬嘅跑道——可以放心踩油門,加速衝向更靚嘅結果!🚀