跳轉到

8.2 Learning Rate

範例程式:Open In Colab

Learning rate 決定 optimizer 每次更新權重時要走多大一步。太小會訓練很慢,太大可能讓 loss 震盪甚至無法收斂。本篇使用合成二元分類資料,比較不同固定 learning rate、ExponentialDecay schedule 與 ReduceLROnPlateau,學會從 learning curve 判斷訓練是否穩定。

1. 學習目標

很多模型表現不好,不一定是架構太弱,也可能只是 learning rate 不適合。常見現象包含:

  1. loss 下降很慢,訓練很多 epoch 仍沒有明顯進步。
  2. loss 忽高忽低,validation accuracy 不穩定。
  3. 一開始下降很快,後面卡住無法再改善。

本篇會把 learning rate 當成實驗變因,在同一份資料、同一個模型架構上觀察訓練曲線差異。

2. Learning Rate 的直覺

Adam(learning_rate=0.001) 為例,learning_rate 控制 optimizer 更新權重的步幅。它不是越大越好,也不是越小越安全,而是要和資料尺度、模型架構、batch size 與 optimizer 搭配。

狀況 可能現象 調整方向
learning rate 太小 loss 緩慢下降,訓練時間很長 稍微調大,例如從 1e-41e-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 會依序完成:

  1. 建立合成二元分類資料。
  2. 將資料切成 train、validation、test。
  3. 使用同一個 MLP 模型架構,比較 1e-41e-31e-2 三種固定 learning rate。
  4. 使用 ExponentialDecay 讓 learning rate 隨訓練步數逐漸下降。
  5. 使用 ReduceLROnPlateau 在 validation loss 停滯時自動降低 learning rate。
  6. 比較各設定的 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。更重要的是曲線形狀:

  1. training loss 與 validation loss 是否穩定下降。
  2. validation accuracy 是否有明顯震盪。
  3. 是否很早就停滯。
  4. schedule 或 callback 是否讓後期表現繼續改善。

在實務上,learning rate 通常會先用對數尺度嘗試,例如 1e-43e-41e-33e-31e-2,再針對表現好的區間微調。

6. 如何套用到自己的資料?

替換成自己的資料時,建議保留本篇的比較方式:

  1. 固定模型架構、batch size、epoch 與資料切分。
  2. 只改 learning rate,先找出合理範圍。
  3. 確認數值特徵已經標準化或正規化。
  4. 再加入 learning rate schedule 或 ReduceLROnPlateau
  5. 最後才同時調整模型大小、regularization 與 batch size。

如果是圖片或文字任務,資料前處理方式不同,但 learning rate 實驗邏輯相同:一次只改一個主要變因,並用 validation set 判斷是否真的改善。

7. 小結

Learning rate 是訓練穩定度最重要的超參數之一。本篇示範如何用固定 learning rate、schedule 與 callback 比較訓練曲線。掌握這個流程後,遇到模型訓練太慢、震盪或後期停滯時,就能有系統地調整,而不是盲目改模型架構。