20 - 「卡喺壞局部最小值」係真定假?
1. 舊世界 vs. 新世界
早十幾年嘅細模型(十隻神經元、幾百條參數)確實好易跌入「壞谷底」:
一落去 Loss 高、準確率低;
點郁都郁唔返上嚟。
不過而家嘅深度網絡動輒 百萬/十億 參數,情況完全唔同。近年理論+實驗都指出:
在高維空間,要同時喺所有方向都係低點嘅壞局部最小值幾乎唔存在。
2. 高維度點解難撞死胡同?
諗吓你喺旺角行路:
2D 平面:一條巷封咗就過唔到,易死胡同。
10,000D:等於有一萬條橫街窄巷;就算前面 9,999 條封咗,只要有 1 條得,你都行得過。
喺數學上,局部最小值要滿足「所有方向二階導數 ≥ 0」。維度愈多,要同時滿足條件愈難,相對地 鞍點(部分方向向上、部分向下)數量暴增。
3. 真正令訓練卡住嘅兩大魔王
3.1 鞍點 (Saddle Point)
馬鞍形地形:
左右望係落斜 → 似谷底
前後望係上斜 → 其實未到低谷
模型一到鞍點,梯度縮到好細,優化器以為冇得落,行極唔郁。
真例子:
Reinforcement Learning 玩 Atari,早期 policy network 會喺鞍點停 200K step,分數唔升。
3.2 平台區 (Plateau)
草原咁平:梯度≈0,模型冇方向感。
真例子:
100 層 LSTM 做語音辨識,Loss 平 10 epoch;加 LayerNorm 後即刻跌落去。
4. 更多貼地比喻
場景 | 鞍點 | 平台區 |
行山 | 去到山脊鞍部,上落都係 | 落到河谷後嘅大草原 |
開車 | 前後斜,左右平,GPS 亂指 | 四圍平坦冇路牌 |
打 Game | 迷宮十字路,中兩邊陷阱 | 大型空房四面白牆 |
5. 逃生工具箱
武器 | 比喻 | 點幫手 |
Momentum / Nesterov | 滑板加速 | 之前速度推你越過鞍點 |
RMSprop | 智慧減震鞋 | 梯度細方向放大步,快啲走出平台 |
Adam | 全自動導航 | Momentum+RMSprop+偏差修正,一條龍 |
Learning-rate Decay / Cosine Restart | 跑步先快後慢 | 早期衝刺,後期細步精修 |
隨機噪聲 (Dropout / Gradient Noise) | 喺沙地踢波,反彈唔可預計 | 小震盪幫你跳離平坦面 |
Skip Connection (ResNet) | 加條直達電梯 | 梯度繞路返前層,避免 0 |
Batch / LayerNorm | 自動調味 | 穩定分佈,減慢停滯 |
6. 實戰故事
ImageNet ResNet-152
無 skip connection → 第 60 層開始梯度 1e-6,Loss 冇再跌。
加返 skip,配 Adam,24h 內 top-1 由 40% 跌到 22%。
Transformer 語音到文字
LR 設 1e-4 無 warm-up:第 3 epoch 鞍點停住。
用 4,000 step warm-up + cosine decay → CER 由 13% 降至 7%。
自駕車路徑規劃
SGD + 固定 LR 卡平台;歸零再起動仍卡。
改用 RMSprop,β=0.95,5 小時內收斂,平均轉彎誤差 < 20 cm。
7. 點樣睇自己係咪撞鞍點/平台?
Loss 曲線長時間水平,梯度範數 < 1e-4
參數 Histogram 超窄,全部集中零附近
觀察 torch.autograd.grad 計算時間變短(梯度細)
8. 快速解鎖小貼士
加 Gradient Clipping + 小噪聲:同時防爆炸又可震出鞍點
ReduceLROnPlateau:監控驗證集,平咗自動 /10
重啟技巧 (SGDR, One-cycle):刻意把 lr 提高再降,像打啞鈴「震醒」模型
多種初始化重試:深網絡改 He, Xavier,或加 Orthogonal
✅ 總結
壞局部最小值:喺高維度基本遇唔到,唔好再嚇自己。
真正敵人:
鞍點 —— 梯度細但未到底;
平台 —— 四面平坦無方向。
對策:用 Momentum、RMSprop、Adam、LR Scheduler、正則化、結構改良等方法俾模型多啲「衝力 + 指南針」。
一見 Loss 停住唔落,先諗「我係咪踩上鞍點 / 草原?」再開 toolbox 拯救。
學識呢套思維,下次訓練卡關,你就唔會怪「壞局部最小值」,而係對症下藥,快狠準衝出困境!🚀