AI時代系列(2) 機器學習三部曲: 🔹 第二部:《深度學習 —— 神經網路的革命》
14/100 第二週:多層感知器 MLP
14.學習率與梯度下降技巧 📉 調得好,收斂快又穩!
________________________________________
✅ 核心概念:
神經網路如何從錯誤中學習?靠的就是**梯度下降法(Gradient Descent)與學習率(Learning Rate)**這對「調參拍檔」。
📌 梯度告訴模型往哪裡調整參數
📌 學習率決定每一步「走多遠」
________________________________________
🔍 學習率是什麼?
學習率(α)是一個超參數,用來控制模型每次更新權重的「步伐大小」。
學習率情況 結果
太小(如 0.00001) 進步非常慢,收斂時間長
太大(如 1.0) 容易震盪不收斂,甚至錯過最小值
剛剛好(如 0.001) 模型快速收斂,穩定逼近最佳解
________________________________________
🧠 梯度下降原理簡介:
假設損失函數為 L,參數為 w:
w_new = w_old - α * ∂L/∂w
📌 每一次權重更新,就是往誤差最小方向「下降一小步」。
________________________________________
📊 梯度下降法的變種:
演算法: 特性說明: 常見應用:
Batch GD 用所有資料計算梯度,收斂穩定但慢 小資料集
Stochastic GD 每次只用一筆資料更新,速度快但不穩定 線上學習、即時應用
Mini-batch GD 取一小批資料計算梯度,兼顧效率與穩定性(實務主流) 大型深度學習訓練
________________________________________
🔧 實用技巧一覽:
Learning Rate Decay: 訓練後期自動降低學習率,幫助模型更細緻地收斂
Momentum: 加入「慣性」讓更新方向更穩定,避免上下震盪
Adam 優化器: 自動調整每個參數的學習率,結合 Momentum + RMSProp
Warm-up: 訓練初期先用小學習率「暖身」,避免模型爆炸
________________________________________
📘 TensorFlow 實作(Adam + 學習率調整):
python
optimizer = tf.keras.optimizers.Adam(learning_rate=0.001)
model.compile(optimizer=optimizer,
loss='sparse_categorical_crossentropy',
metrics=['accuracy'])
📌 若使用 LearningRateScheduler:
python
from tensorflow.keras.callbacks import LearningRateScheduler
def lr_schedule(epoch):
return 0.001 * (0.1 ** (epoch // 10)) # 每10輪下降一次
lr_callback = LearningRateScheduler(lr_schedule)
model.fit(x_train, y_train, epochs=30, callbacks=[lr_callback])
這段程式碼首先使用 Adam 優化器並設定初始學習率為 0.001,然後透過 model.compile() 指定損失函數為 sparse_categorical_crossentropy(適用於整數編碼的多分類問題),並追蹤 accuracy 作為評估指標。接著定義 lr_schedule() 函數,讓學習率每經過 10 個 epoch 就縮小為原來的 0.1,並透過 LearningRateScheduler callback 將這個排程策略套用到訓練過程中。最後用 model.fit() 執行訓練,共 30 個 epoch,並在每一輪根據當前 epoch 調整學習率,提升訓練效率與穩定性。
________________________________________
🧩 學習率選得好,事半功倍!
學習率太大 📈 → 模型來回跳、學不到穩定解
學習率太小 📉 → 訓練時間長、效果緩慢
學習率剛好 ✅ → 快速收斂、穩定準確
________________________________________
🎯 小結與啟示:
✅ 學習率是深度學習中最敏感的超參數之一
✅ 好的學習率設計,能讓訓練變得快速且精準
✅ Adam 已成現代訓練的首選,但學會背後邏輯,才能真正掌握調參節奏!