AI 的學習率:為什麼太大會爆太小會慢

artificial%20intelligence%20concept%2C%20digital%2...
發表時間:2026 年 10 月 28 日 | 更新日期:2026 年 10 月 28 日 | 編輯:雅寶社區編輯團隊
AI 的學習率:為什麼太大會爆太小會慢 - 雅寶社區 · 頂客論壇

「爆」這個詞在 AI 圈有兩層意思:一種是損失值突然飆高、劇烈震盪,另一種是數值直接變成 NaN 或 Inf,訓練徹底中斷。兩者通常都跟學習率過大脫不了關係。以下拆解幾個常見機制。

2.1 參數更新過猛,直接跳過山谷

梯度下降本質上是一種區域線性近似:我們假設沿著梯度反方向走一小步,損失會下降。但這個假設只在「步夠小」的時候成立。一旦學習率太大,一步跨出去的距離超過了損失函數的局部曲率範圍,線性近似就失效了,更新後的參數可能落在損失更高的位置。下一次計算梯度時方向又變了,於是參數像彈珠台裡的球一樣被彈來彈去,loss 曲線呈現劇烈鋸齒狀。

打個比方:你站在一個窄谷的邊坡上,正確做法是小步小步往谷底移動。如果你用力一跳,很可能直接跳到對面更高的坡上,然後再用力跳回來,越跳越偏。數學上這對應到更新量超過了損失函數的穩定區域,最佳化文獻稱之為「發散」(divergence)。

2.2 損失函數震盪與來回橫跳

震盪是學習率過大最典型的症狀。表現在訓練日誌上,就是 loss 一下 2.3、一下 5.8、又回到 1.9,整體趨勢不但沒有穩定下降,反而像心電圖。很多初學者會誤以為這是「模型還在探索」,但如果震盪幅度沒有隨時間縮小,通常就是學習率設定過高。

震盪還有一個隱形代價:它會讓模型在訓練後期無法精細調整。當你已經接近一個不錯的區域,需要的是小步微調,但過大的學習率會讓你一直在好解附近彈開,無法真正落進去。這也是為什麼很多訓練腳本會在後期加入學習率衰減。

2.3 梯度爆炸、數值溢位與 NaN

在深層網路或循環神經網路(RNN)中,梯度在反向傳播時會連乘多層的權重矩陣。如果權重奇異值大於 1,梯度會隨層數呈指數成長,這就是梯度爆炸(exploding gradient)。这时候如果學習率又設得大,參數更新量會瞬間變得極大,啟動函數(如 sigmoid、tanh)進入飽和區,梯度變成 0;或是數值超出浮點數範圍,直接產生 NaN。

一旦某個參數變成 NaN,它會在後續所有運算中擴散,整個模型就「死」了。常見的急救措施包括:降低學習率、加入梯度裁剪(gradient clipping)、使用數值穩定的損失函數實作、以及檢查資料中是否有異常值。但最根本的預防,還是從合理的學習率開始。

2.4 大模型與 Transformer 為何更敏感

近年大型語言模型與 Transformer 架構當道,學習率的敏感度又更高了。原因有幾個:第一,Transformer 通常搭配 LayerNorm,訓練初期參數隨機初始化時,注意力分數的分布還很混亂,过大的學習率會讓注意力權重劇烈變動;第二,模型越深,梯度在反向傳播中的變異越大;第三,大模型的批次通常很大,雖然大批次能降低梯度雜訊,但也讓單次更新更「篤定」,一旦方向錯了,偏離也更遠。

這就是為什麼幾乎所有 Transformer 的訓練配方都會加入「暖身」(warmup):先用極小的學習率跑幾千步,等模型稍微穩定,再逐步拉高到目標值。少了這一步,很多大模型在訓練前一千步就會直接爆掉。

三、學習率太小:模型為什麼會「慢」?

如果說學習率太大是「暴衝」,那太小就是「原地踏步」。很多時候模型沒有壞,只是走得实在太慢,讓你誤以為訓練失敗。以下幾種現象,都是學習率偏小的典型後果。

3.1 收斂速度慢,算力成本飆高

學習率小的時候,每次參數更新幅度很小,loss 雖然穩定下降,但下降斜率非常平緩。原本 10 個 epoch 可以收斂的任務,可能要跑到 100 個 epoch。對於小型資料集這或許還能忍,但如果是訓練大型模型,一天變十天、一張 GPU 變十張 GPU,成本差距非常可觀。

更現實的是,很多雲端訓練任務有時間上限,或是使用 spot instance 隨時可能被回收。收斂太慢意味著你還沒跑到最佳點,資源就沒了。这时候模型可能停在一個「還行但不夠好」的狀態,前功盡棄。

3.2 卡在鞍點與平坦區域

高維損失函數裡,真正的局部最小值其實不多,更多的是「鞍點」(saddle point):某些方向是下坡,某些方向是上坡,梯度在該點附近接近零但不是最小值。學習率太小時,模型沒有足夠的動能跨過鞍點附近的平坦區域,就會長時間停滯,loss 幾乎不動。

適度提高學習率,或是使用動量(momentum)與自適應優化器,可以幫助模型「衝過」這些平台期。這也是為什麼單純的隨機梯度下降(SGD)在深層網路上經常表現不如 Adam 或 SGD with momentum。

3.3 容易停在次佳解

學習率小雖然穩定,但探索能力也差。模型可能很快找到一個還可以的區域,然後就因為步長太小而無法跳出去尋找更好的解。這種「早熟收斂」在訓練初期尤其常見,表現在驗證集上就是準確率卡在某個水準上不去,怎麼調其他參數都沒用。

當然,這不是說學習率越小越容易過擬合,而是說它限制了模型的探索範圍。適當的學習率能帶來一點「有益的雜訊」,幫助模型逃離尖銳的次佳解,找到更平坦、泛化更好的區域。

3.4 正則化與雜訊的平衡

從另一個角度看,學習率其實也扮演了隱性正則化的角色。較大的學習率讓參數更新帶有更多雜訊,模型比較不會死記訓練資料;較小的學習率則讓模型更精細地擬合訓練集。但這是一體兩面:太小會讓模型過度擬合訓練資料中的細節,太大又會讓模型根本學不到東西。找到中間的甜蜜點,才是學習率調整的核心工作。

四、怎麼找出「剛剛好」的學習率?

講了這麼多,最實際的問題還是:那我到底該設多少?答案是「沒有標準答案,但有系統性的找法」。以下介紹幾種業界常用的方法。

4.1 LR Range Test:從極小掃到極大

LR Range Test(學習率範圍測試)是 Leslie Smith 提出的一種實用技巧。做法是:從一個非常小的學習率(例如 1e-7)開始訓練,每個批次後以指數方式逐步提高學習率,同時記錄每個學習率對應的損失值。把結果畫成圖,通常會看到一條先緩慢下降、再急速上升的曲線。損失下降最陡的那段區間,就是適合的學習率範圍;通常會取「損失開始明顯上升」前一個數量級作為上限,再往下抓一個數量級作為下限。

這個方法的優點是只要跑幾百個批次就能得到大致方向,不用真的把模型訓練完。缺點是對於大型模型,每個批次都很貴,還是要斟酌使用。

4.2 網格搜尋、隨機搜尋與貝氏優化

如果算力允許,最直接的方法就是在對數尺度上做網格搜尋:例如測試 1e-5、3e-5、1e-4、3e-4、1e-3 幾組值,每組跑少數幾個 epoch,比較驗證集表現。隨機搜尋在超參數空間中通常比網格搜尋更有效率,因為不是所有超參數都同等重要。

貝氏優化(Bayesian Optimization)則更進一步,會根據過去的實驗結果建立機率模型,智慧地選擇下一組要試的參數。它在超參數調校工具(如 Optuna、Ray Tune)中都有實作,適合預算有限但想找到較好配置的情況。

4.3 依任務與模型規模的經驗值

雖然沒有萬能數字,但不同任務類型確實有一些常見的起點。以下表格整理實務上常見的參考範圍,實際使用時仍建議搭配小規模實驗微調。

任務/模型類型

常見學習率範圍

備註

小型多層感知器(MLP)

1e-3 ~ 1e-2

資料量小、模型淺,可以用大一點

卷積神經網路(CNN)

1e-4 ~ 1e-3

搭配 SGD + momentum 常見

Transformer 從頭訓練

1e-4 ~ 3e-4

幾乎一定要搭 warmup

BERT 類模型微調

1e-5 ~ 5e-5

預訓練權重珍貴,宜小步微調

大語言模型 LoRA 微調

1e-4 ~ 3e-4

只更新少量參數,可用較大值

強化學習(RL)

1e-5 ~ 1e-4

訓練不穩定,通常更保守

另外有一個常見的經驗法則:當你調整批次大小(batch size)時,學習率可以按比例調整。例如批次大小變為原本的 4 倍,學習率可以考慮調成 2 倍(線性縮放規則)或 4 倍(平方根縮放規則),實際效果取決於任務與優化器,建議實測。

五、學習率調度策略:不是固定值,而是會變的節奏

真正成熟的訓練流程,很少從頭到尾用同一個學習率。就像開車上山,起步要慢、直線可以加速、進彎前要減速。學習率調度(learning rate scheduling)就是在安排這個節奏。

5.1 Warmup:先暖身再衝刺

Warmup 的做法是在訓練最開始的幾百到幾千步,讓學習率從接近 0 的值線性(或餘弦)上升到目標值。它的作用是避免訓練初期參數隨機初始化時,因為梯度雜訊大而讓模型偏離太遠。對 Transformer 這類對初始狀態敏感的架構,warmup 幾乎是標配。

# 線性 warmup 的簡化示意

if step < warmup_steps:

lr = base_lr * step / warmup_steps

else:

lr = base_lr # 之後再套用衰減策略

Warmup 的長度沒有一定,常見是總訓練步數的 1% 到 10%。太短效果不明顯,太長則浪費訓練時間,可以透過觀察前期 loss 是否穩定來調整。

5.2 階梯式衰減與指數衰減

階梯式衰減(step decay)是最直覺的做法:每訓練固定輪數,就把學習率乘上一個小於 1 的係數,例如每 30 個 epoch 乘 0.1。這種做法在早期 CNN 訓練中非常常見,缺點是衰減點需要人工設定,而且衰減瞬間 loss 可能出現小跳動。

指數衰減(exponential decay)則是每個步驟都乘上一個略小於 1 的係數,讓學習率平滑下降。它的曲線比階梯式柔和,但衰減速度較難控制,實務上使用頻率不如餘弦退火。

5.3 餘弦退火 Cosine Annealing

餘弦退火讓學習率沿著餘弦曲線從最大值平滑下降到接近 0,前期下降慢、後期下降快,能讓模型在訓練後期進行精細調整。它的公式大致如下:

lr_t = lr_min + 0.5 * (lr_max - lr_min) * (1 + cos(pi * t / T))

其中 t 是當前步數,T 是總步數。這種策略在電腦視覺與語言模型都很受歡迎,因為它不需要手動設定衰減時機,而且曲線平滑、行為可預測。近年常見的「餘弦退火 + 暖重啟」(cosine annealing with warm restarts)則是在訓練中途周期性把學習率拉回高點,幫助模型跳出局部區域。

5.4 One-Cycle 與 Super-Convergence

One-Cycle 策略由 Leslie Smith 提出,核心概念是在一個訓練週期內,先讓學習率從低點上升到高點,再下降到極低點,同時搭配動量反向變化。這種「先加速再減速」的節奏,據稱能讓模型用更少的 epoch 達到更好的效果,稱為超級收斂(super-convergence)。

One-Cycle 的優點是訓練效率高,缺點是對最大學習率的選擇很敏感,設得太高容易爆、設得太低則失去意義。建議先用 LR Range Test 抓出大概範圍,再進行小規模驗證。

六、自適應學習率:Adam 真的幫你調好了嗎?

談到學習率,很多人會想到 Adam 這類自適應優化器。它們會為每個參數維護不同的更新幅度,看起來像是「自動幫你調學習率」。但這裡有一個常見誤解需要澄清。

6.1 Adagrad、RMSprop、Adam 的差異

Adagrad 是最早的自適應方法之一,它會根據每個參數過去梯度的平方和來縮放更新量,梯度大的參數步伐變小、梯度小的參數步伐變大。問題是隨著訓練進行,累積的平方和只增不減,學習率會越來越小,最後幾乎停止更新。

RMSprop 改用指數移動平均來取代累積和,解決了 Adagrad 學習率過度衰減的問題。Adam 則進一步結合了動量(一階動量估計)與 RMSprop 的梯度平方估計(二階動量),成為目前最廣泛使用的預設優化器之一。

6.2 AdamW 與權重衰減

原始 Adam 在實作權重衰減(weight decay)時,是把衰減項加進梯度裡,這會與自適應學習率產生交互作用,導致正則化效果不如預期。AdamW 將權重衰減獨立出來,直接作用在參數上,修正了這個問題,目前已是訓練 Transformer 的標準選擇。如果你在使用 Hugging Face 的訓練器,預設通常就是 AdamW。

6.3 學習率仍然是你的事

關鍵在於:Adam 的「自適應」是針對每個參數的相對縮放,它仍然需要一個全域的基礎學習率。這個基礎學習率設得太大,Adam 一樣會爆;設得太小,一樣會慢。換句話說,Adam 幫你處理了「不同參數的步伐比例」,但沒有幫你決定「整體節奏快慢」。

很多人會說「用 Adam 就不用調學習率」,這是錯的。Adam 的預設值 1e-3 對某些任務剛好,對微調大型預訓練模型卻幾乎一定太大。實務上,使用 Adam 時仍然要針對任務調整基礎學習率,並且搭配 warmup 與衰減策略。

七、實戰檢查清單:學習率出問題時怎麼排查

訓練現場的狀況千變萬化,以下整理一份實用的排查清單,幫助你快速定位問題。

  • Loss 變成 NaN 或 Inf:幾乎可以確定是學習率過大或梯度爆炸。先把學習率降一個數量級,並加入梯度裁剪(例如裁剪範數設為 1.0)。
  • Loss 劇烈震盪但沒有發散:學習率偏大。嘗試降到原本的 1/3 或 1/10,或加入 warmup 讓前期更穩定。
  • Loss 下降極慢、曲線幾乎水平:學習率偏小,或優化器設定有問題。可以先嘗試提高 3 到 10 倍,觀察是否有改善。
  • 訓練 loss 很低但驗證 loss 很高:這通常是過擬合,不是學習率問題。可以考慮增加正則化、資料增強或提早停止。
  • 訓練前期就卡住不動:檢查是否有 warmup 設定過長,或初始學習率太低。也確認資料前處理與標籤是否正確。
  • 更換批次大小後結果變差:記得同步調整學習率。批次變大通常可以搭配較大的學習率。
  • 微調預訓練模型時爆掉:微調的學習率通常要比從頭訓練小一到兩個數量級,尤其是 BERT 類模型。
  • 除了上述清單,建議在訓練時固定記錄學習率、損失值與梯度範數。很多問題在圖表上會非常明顯,例如梯度範數突然飆高、學習率曲線與 loss 曲線的對應關係等。養成記錄的習慣,比事後通靈猜測有效得多。

    八、結語:學習率是節奏,不是魔法數字

    回到最初的問題:為什麼學習率太大會爆、太小會慢?說到底,學習率是在控制「參數更新的步伐」。步伐太大,模型會在損失函數的地形裡橫衝直撞,錯過低谷甚至跌出數值範圍;步伐太小,模型雖然穩定,卻要花費大量時間與算力才能走到目的地,還可能卡在半路的鞍點或平坦區域。

    真正的高手不會去尋找一個「完美數字」,而是理解學習率與批次大小、優化器、模型深度、任務類型之間的互動關係,並透過 LR Range Test、調度策略與訓練監控,找到適合當下任務的節奏。Warmup 負責起步,衰減策略負責收尾,Adam 之類的自適應優化器則處理每個參數的相對步伐。把這些工具搭配好,你就能讓模型跑得又快又穩。

    下次當你看到 loss 曲線變成心電圖,或是跑了半天幾乎沒動,先別急著改模型架構。回頭看看學習率,十之八九,答案就在那裡。更多 AI 趨勢與實作討論,歡迎持續關注雅寶社區 · 頂客論壇的 AI 趨勢分類。

    🏠 返回首頁