17 - RMSprop:幫模型着對「智慧波鞋」穩住行 - 粵語加強版
1. 開場白:山谷行山點解咁難行?
想像你喺大帽山谷底散步:
前後方向又陡又斜——一步深一步淺,好易衝前又滑返落嚟。
左右方向又闊又平——點行都唔郁,好似蝸牛。
如果你雙腳踩嘅鞋底永遠用同一速率行,你要唔就震到暈,要唔就慢到嬲。RMSprop 就係雙 智慧波鞋:
佢會記住「近排踩過幾多斜路」。
斜路多 → 自動收細步伐;平路多 → 放大步伐。
結果:前後唔再沖過頭,左右又行得快,輕鬆穿過谷底。
2. 核心概念:為每條「維度」自訂學習率
傳統 SGD:所有參數同一個 α。RMSprop:每個參數都有自己嘅「即時私人教練」,因應歷史梯度平方決定 α_i。
梯度大 → 容易震 → α_i 減梯度細 → 行得慢 → α_i 保持甚至大啲
3. 數學公式(睇得明嘅版本)
# 1. 累積梯度平方 (指數加權平均)
s_t = β · s_{t-1} + (1-β) · g_t² (β≈0.9)
# 2. 更新參數
θ = θ - α · g_t / (√(s_t) + ε) (ε≈1e-8)
g_t = 今次梯度
s_t = 「過去梯度平方平均」→ 越大代表震得勁
β = 記憶幾耐;0.9 = 記住大概 10 步
α = 基本學習率(可設 1e-3 起手)
4. 生活例子再多啲
場景 | 原始問題 | RMSprop 點幫手 |
YouTube 推薦 | 熱門影片點擊次數梯度超大,冷門特徵梯度超細 | 對高波幅特徵「減速」,保護模型唔好淨係背熱門 |
醫院心電圖 RNN | QRS 波段梯度尖到爆,平段又幾乎 0 | 自動降速喺 QRS,升速喺平段,加快整體收斂 |
股票強化學習 | 開市頭 30 分鐘價格大幅跳動 | RMSprop 平衡早盤「震盪」同收市「平淡」嘅梯度 |
手機語音助手 | 「嗯」、「啊」雜訊特徵梯度大 | 降低呢啲干擾權重嘅步伐,保持主語句學習速度 |
5. 同 Momentum 有何唔同?
Momentum | RMSprop | |
記住咩 | 過去「方向」 | 過去「大小」 |
效果 | 加速、減震 | 自適應學習率 |
類比 | 追風尾車,越踩越快 | 鞋底自動調避震 |
➡️ 兩者可以 合體(即 Adam):又有動量加速,又有 RMSprop 平穩。
6. Python 極速 Demo(20 行內)
beta, lr, eps = 0.9, 1e-3, 1e-8
s = {p: torch.zeros_like(p) for p in model.parameters()}
for x, y in loader:
loss = criterion(model(x), y)
loss.backward()
with torch.no_grad():
for p in model.parameters():
g = p.grad
s[p] = beta * s[p] + (1 - beta) * g.pow(2) # 1️⃣
p -= lr * g / (s[p].sqrt() + eps) # 2️⃣
p.grad.zero_()
7. 超參數實戰貼士
β(0.9–0.95)
影像 / NLP 通常 0.9;
序列長、noise 大可試 0.95。
Learning Rate
RMSprop 收斂穩,可比 SGD 調大 2–3 倍。
搭配 LR decay 或 Cosine schedule 更佳。
ε
1e-8 大多足夠;梯度特別細(如混合精度)可試 1e-7。
Gradient Clipping
RNN 仍可能爆梯度,記得 clip_grad_norm_(model.parameters(), 1.0)。
8. Debug 常見伏位
症狀 | 可能原因 | 對策 |
Loss 仍亂跳 | β 太細 → 記憶唔夠長 | 提升 β 或減 LR |
收斂超慢 | β 太高/LR 太細 | β↓ 或 LR↑ |
NaN | 梯度爆 + ε太細 | gradient clip 或 ε 加大 |
9. 何時優先用 RMSprop?
RNN / LSTM / GRU:序列長、梯度差異極端。
強化學習:即時回饋 noise 大。
少人 tune、想快驗證新模型:RMSprop 容錯高,通常「一插即用」。
非凸、狹谷地形:成本函數似山脊,RMSprop 更易滑過去。
✅ Take-away
RMSprop = 梯度自適應放大縮細器:大就收斂慢,細就加速。
內部用 EWA(梯度²),毋須偏差修正,實作簡潔。
特別啱 RNN、時間序列、強化學習,亦係 Adam 嘅半邊天。
調 β=0.9、α=1e-3 做起步,觀察 Loss 再微調。
記住:畀模型着對 RMSprop 智慧波鞋,行凹凸山谷都可以又快又穩,輕鬆衝向最低點!🏞️👟