8.2 Learning Rate
Learning rate 決定 optimizer 每次更新權重時要走多大一步。太小會訓練很慢,太大可能讓 loss 震盪甚至無法收斂。本篇使用合成二元分類資料,比較不同固定 learning rate、ExponentialDecay schedule 與 ReduceLROnPlateau,學會從 learning curve 判斷訓練是否穩定。
1. 學習目標
很多模型表現不好,不一定是架構太弱,也可能只是 learning rate 不適合。常見現象包含:
- loss 下降很慢,訓練很多 epoch 仍沒有明顯進步。
- loss 忽高忽低,validation accuracy 不穩定。
- 一開始下降很快,後面卡住無法再改善。
本篇會把 learning rate 當成實驗變因,在同一份資料、同一個模型架構上觀察訓練曲線差異。
2. Learning Rate 的直覺
以 Adam(learning_rate=0.001) 為例,learning_rate 控制 optimizer 更新權重的步幅。它不是越大越好,也不是越小越安全,而是要和資料尺度、模型架構、batch size 與 optimizer 搭配。
| 狀況 | 可能現象 | 調整方向 |
|---|---|---|
| learning rate 太小 | loss 緩慢下降,訓練時間很長 | 稍微調大,例如從 1e-4 到 1e-3 |
| learning rate 合理 | loss 穩定下降,validation 指標同步改善 | 保持設定或加入 schedule |
| learning rate 太大 | loss 震盪、accuracy 不穩定 | 調小,或使用 learning rate schedule |
| 後期卡住 | loss 不再改善 | 使用 decay 或 ReduceLROnPlateau |
3. 範例資料
Notebook 使用 make_moons 產生二元分類資料。這份資料不是線性可分,因此適合觀察 DNN 在不同 learning rate 下如何學出非線性決策邊界。
資料前處理會使用 StandardScaler,讓兩個特徵維持在相近尺度。這一步很重要,因為 learning rate 對特徵尺度非常敏感;若某些欄位數值特別大,權重更新可能變得不穩定。
4. 本篇實作流程
Notebook 會依序完成:
- 建立合成二元分類資料。
- 將資料切成 train、validation、test。
- 使用同一個 MLP 模型架構,比較
1e-4、1e-3、1e-2三種固定 learning rate。 - 使用
ExponentialDecay讓 learning rate 隨訓練步數逐漸下降。 - 使用
ReduceLROnPlateau在 validation loss 停滯時自動降低 learning rate。 - 比較各設定的 validation accuracy 與 test accuracy。
固定 learning rate 的寫法如下:
optimizer = tf.keras.optimizers.Adam(learning_rate=0.001)
model.compile(
optimizer=optimizer,
loss='binary_crossentropy',
metrics=['accuracy']
)
schedule 的寫法如下:
lr_schedule = tf.keras.optimizers.schedules.ExponentialDecay(
initial_learning_rate=0.01,
decay_steps=40,
decay_rate=0.85,
staircase=True
)
optimizer = tf.keras.optimizers.Adam(learning_rate=lr_schedule)
如果不想事先決定下降節奏,也可以讓 callback 根據 validation loss 自動調整:
reduce_lr = tf.keras.callbacks.ReduceLROnPlateau(
monitor='val_loss',
factor=0.5,
patience=3,
min_lr=1e-5
)
5. 如何閱讀 Learning Curve?
觀察 learning rate 是否合適時,不要只看最後一個 accuracy。更重要的是曲線形狀:
- training loss 與 validation loss 是否穩定下降。
- validation accuracy 是否有明顯震盪。
- 是否很早就停滯。
- schedule 或 callback 是否讓後期表現繼續改善。
在實務上,learning rate 通常會先用對數尺度嘗試,例如 1e-4、3e-4、1e-3、3e-3、1e-2,再針對表現好的區間微調。
6. 如何套用到自己的資料?
替換成自己的資料時,建議保留本篇的比較方式:
- 固定模型架構、batch size、epoch 與資料切分。
- 只改 learning rate,先找出合理範圍。
- 確認數值特徵已經標準化或正規化。
- 再加入 learning rate schedule 或
ReduceLROnPlateau。 - 最後才同時調整模型大小、regularization 與 batch size。
如果是圖片或文字任務,資料前處理方式不同,但 learning rate 實驗邏輯相同:一次只改一個主要變因,並用 validation set 判斷是否真的改善。
7. 小結
Learning rate 是訓練穩定度最重要的超參數之一。本篇示範如何用固定 learning rate、schedule 與 callback 比較訓練曲線。掌握這個流程後,遇到模型訓練太慢、震盪或後期停滯時,就能有系統地調整,而不是盲目改模型架構。