深度學習——調整學習率


學習率調整方法詳解

在深度學習訓練過程中,學習率(Learning Rate, LR) 是影響模型收斂速度和效果的關鍵超參數。學習率過大可能導致訓練不穩定、震蕩甚至無法收斂;學習率過小又會導致收斂過慢甚至陷入局部最優。因此,如何合理調整學習率,是模型優化中的核心問題。常見方法可以分為三類:有序調整、自適應調整、自定義調整


一、有序調整(Scheduled Adjustment)

有序調整指在訓練過程中按照預先設定的規律逐步減少學習率,幫助模型更快收斂。

1. Step Decay(階梯式衰減)

  • 思路:訓練到一定 epoch 后,將學習率按比例縮小。

  • 公式:

    • η0:初始學習率

    • γ:衰減因子(通常取 0.1 或 0.5)

    • step:間隔的 epoch 數

  • 特點:學習率呈“階梯”下降。適合在數據分布平穩、訓練較長的任務中使用。

2. Exponential Decay(指數衰減)

  • 思路:學習率隨著 epoch 持續按指數縮小。

  • 公式:

    • k 控制衰減速度

  • 特點:下降平滑,但如果衰減過快,可能導致模型過早停止學習。

3. Cosine Annealing(余弦退火)

  • 思路:學習率在訓練中呈“余弦曲線”變化,逐步減小但在末尾仍保持一定值。

  • 特點:常用于 SGDR(Stochastic Gradient Descent with Restart),有助于跳出局部最優。


二、自適應調整(Adaptive Adjustment)

自適應方法會根據梯度的歷史信息,自動調整不同參數的學習率,減少人工設定難度。

1. Adagrad

  • 思路:為每個參數維護一個累計梯度平方和,根據歷史更新情況自動縮小學習率。

  • 優點:適合稀疏特征問題,如 NLP。

  • 缺點:學習率會單調減小,可能過早停止學習。

2. RMSprop

  • 思路:在 Adagrad 基礎上,引入 指數加權移動平均,避免學習率衰減過快。

  • 特點:適合非凸優化問題,如 RNN 訓練。

3. Adam

  • 思路:結合 Momentum + RMSprop,既考慮一階動量(梯度均值),又考慮二階動量(梯度方差)。

  • 優點:收斂快,常作為默認選擇。

  • 缺點:可能陷入鞍點或震蕩,需要調整 β 參數。

4. AdamW(權重衰減版)

  • 改進 Adam 的 L2 正則化問題,更適合深度網絡和 Transformer 模型。


三、自定義調整(Custom Adjustment)

當任務復雜、對收斂要求特殊時,可以設計自定義學習率調整策略。

1. 手動函數定義

  • 通過函數形式動態調整:

    def lr_lambda(epoch):if epoch < 10:return 1.0elif epoch < 50:return 0.1else:return 0.01
    scheduler = torch.optim.lr_scheduler.LambdaLR(optimizer, lr_lambda)
    

2. 基于性能的調整(Performance-based)

  • 根據驗證集的 loss 或 accuracy 動態調整:

    • ReduceLROnPlateau:當指標在若干 epoch 內不再提升,自動降低學習率。

    • 特點:更智能,常用于實際任務。

3. 自定義回調(Callback)

  • 在 Keras、PyTorch Lightning 等框架中,可自定義回調函數,在訓練過程中動態控制學習率。

  • 如:損失振蕩時降低,損失穩定時保持。

把各種 學習率調整方法的調用方式 全部整理出來,分別給出 PyTorchKeras(TensorFlow) 兩種框架的示例。這樣可以一目了然,直接套用。


學習率調整調用方式匯總

一、有序調整(Scheduled Adjustment)

1. Step Decay(階梯衰減)

PyTorch

import torch
import torch.optim as optimoptimizer = optim.SGD(model.parameters(), lr=0.1)
scheduler = torch.optim.lr_scheduler.StepLR(optimizer, step_size=30, gamma=0.1)for epoch in range(100):train(...)scheduler.step()

Keras

from tensorflow.keras.optimizers import SGD
from tensorflow.keras.callbacks import LearningRateSchedulerdef step_decay(epoch):initial_lr = 0.1drop = 0.1epochs_drop = 30return initial_lr * (drop ** (epoch // epochs_drop))optimizer = SGD(learning_rate=0.1)
lr_scheduler = LearningRateScheduler(step_decay)
model.fit(x_train, y_train, epochs=100, callbacks=[lr_scheduler])

2. Exponential Decay(指數衰減)

PyTorch

scheduler = torch.optim.lr_scheduler.ExponentialLR(optimizer, gamma=0.95)for epoch in range(100):train(...)scheduler.step()

Keras

import tensorflow as tfinitial_lr = 0.1
lr_schedule = tf.keras.optimizers.schedules.ExponentialDecay(initial_lr, decay_steps=100, decay_rate=0.96, staircase=True
)optimizer = tf.keras.optimizers.SGD(learning_rate=lr_schedule)
model.compile(optimizer=optimizer, loss="categorical_crossentropy")

3. Cosine Annealing(余弦退火)

PyTorch

scheduler = torch.optim.lr_scheduler.CosineAnnealingLR(optimizer, T_max=50)for epoch in range(100):train(...)scheduler.step()

Keras

import tensorflow as tflr_schedule = tf.keras.optimizers.schedules.CosineDecay(initial_learning_rate=0.1, decay_steps=1000
)optimizer = tf.keras.optimizers.SGD(learning_rate=lr_schedule)
model.compile(optimizer=optimizer, loss="categorical_crossentropy")

二、自適應調整(Adaptive Adjustment)

這些是 優化器自帶 的,不需要 scheduler。

PyTorch

import torch.optim as optim# Adagrad
optimizer = optim.Adagrad(model.parameters(), lr=0.01)# RMSprop
optimizer = optim.RMSprop(model.parameters(), lr=0.01)# Adam
optimizer = optim.Adam(model.parameters(), lr=0.001)# AdamW
optimizer = optim.AdamW(model.parameters(), lr=0.001)

Keras

from tensorflow.keras.optimizers import Adagrad, RMSprop, Adamoptimizer = Adagrad(learning_rate=0.01)
optimizer = RMSprop(learning_rate=0.01)
optimizer = Adam(learning_rate=0.001)

三、自定義調整(Custom Adjustment)

1. LambdaLR / 自定義函數

PyTorch

def lr_lambda(epoch):if epoch < 10:return 1.0elif epoch < 50:return 0.1else:return 0.01scheduler = torch.optim.lr_scheduler.LambdaLR(optimizer, lr_lambda)

Keras

from tensorflow.keras.callbacks import LearningRateSchedulerdef custom_schedule(epoch, lr):if epoch < 10:return lrelif epoch < 50:return lr * 0.1else:return lr * 0.01lr_scheduler = LearningRateScheduler(custom_schedule)
model.fit(x_train, y_train, epochs=100, callbacks=[lr_scheduler])

2. ReduceLROnPlateau(性能驅動)

PyTorch

scheduler = torch.optim.lr_scheduler.ReduceLROnPlateau(optimizer, mode='min', factor=0.1, patience=5
)for epoch in range(100):val_loss = validate(...)scheduler.step(val_loss)

Keras

from tensorflow.keras.callbacks import ReduceLROnPlateaureduce_lr = ReduceLROnPlateau(monitor='val_loss', factor=0.1, patience=5, min_lr=1e-6
)model.fit(x_train, y_train, epochs=100, validation_data=(x_val, y_val), callbacks=[reduce_lr])

3. Warmup + 余弦退火(常用于大模型訓練)

PyTorch (手動實現 Warmup + Cosine)

import mathdef warmup_cosine_lr(epoch, warmup_epochs=10, max_epochs=100, base_lr=0.1):if epoch < warmup_epochs:return epoch / warmup_epochselse:return 0.5 * (1 + math.cos(math.pi * (epoch - warmup_epochs) / (max_epochs - warmup_epochs)))scheduler = torch.optim.lr_scheduler.LambdaLR(optimizer, lr_lambda=warmup_cosine_lr)

Keras

import tensorflow as tfclass WarmUpCosine(tf.keras.optimizers.schedules.LearningRateSchedule):def __init__(self, initial_lr, warmup_steps, decay_steps):super().__init__()self.initial_lr = initial_lrself.warmup_steps = warmup_stepsself.decay_steps = decay_stepsdef __call__(self, step):warmup_lr = self.initial_lr * (step / self.warmup_steps)cosine_lr = tf.keras.optimizers.schedules.CosineDecay(self.initial_lr, self.decay_steps)(step)return tf.cond(step < self.warmup_steps, lambda: warmup_lr, lambda: cosine_lr)lr_schedule = WarmUpCosine(initial_lr=0.1, warmup_steps=1000, decay_steps=10000)
optimizer = tf.keras.optimizers.Adam(learning_rate=lr_schedule)

? 這樣你就同時拿到了 PyTorch + Keras 下的所有調用方式,涵蓋了:

  • 有序調整(Step, Exponential, Cosine)

  • 自適應調整(Adagrad, RMSprop, Adam, AdamW)

  • 自定義調整(Lambda、自寫函數、ReduceLROnPlateau、Warmup+Cosine)


四、方法比較

方法類型優點缺點典型應用
有序調整簡單直觀,易控制需要預先設定 scheduleCV、NLP 基礎訓練
自適應調整自動調節參數,無需復雜調參對超參數敏感,可能震蕩NLP、RNN、Transformer
自定義調整靈活,適應任務實現復雜,需經驗工業級任務、研究實驗

五、實踐建議

  1. 初學/基線實驗:推薦 AdamAdamW,收斂快且穩定。

  2. 大規模訓練:結合 Cosine Annealing + Warmup 效果更佳。

  3. 模型表現停滯:使用 ReduceLROnPlateau 動態降低學習率。

  4. 科研/特殊任務:可嘗試自定義函數或回調。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/95851.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/95851.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/95851.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Java分頁 Element—UI

前端代碼 <div class"block"><span class"demonstration">頁數較少時的效果</span><el-paginationlayout"prev, pager, next":total"50"></el-pagination> </div>參考Element-UI total:0, form: …

html中列表和表格的使用

列表一般來說只有一列一列的進行使用&#xff0c;是一維的列表分為三種列表形式<!-- 列表標簽ul-li:無序列表&#xff0c;必須用 <ul> 當 “容器”&#xff08;代表 “無序列表”&#xff09;&#xff0c;每個條目用 <li> 包起來&#xff08;代表 “列表項”&am…

大學信息查詢平臺:一個現代化的React教育項目

一 項目簡介大學信息查詢平臺是一個基于React Vite Tailwind CSS構建的現代化Web應用&#xff0c;專門用于查詢中國各大高校的詳細信息。該項目不僅功能實用&#xff0c;更在用戶體驗和界面設計上做到了極致。二 核心功能2.1. 智能大學搜索// 搜索功能核心代碼 const searchU…

代碼隨想錄算法訓練營第六天 - 哈希表2 || 454.四數相加II / 383.贖金信 / 15.三數之和 / 18.四數之和

代碼隨想錄算法訓練營第六天 - 哈希表2 || 454.四數相加II / 383.贖金信 / 15.三數之和 / 18.四數之和454.四數相加II解題思路383.贖金信自己解答&#xff1a;代碼隨想錄講解暴力做法哈希表15.三數之和雙指針優化改進18.四數之和自己的解答系統講解454.四數相加II 文檔講解&…

FPGA實現流水式排序算法

該算法采用雙調排序算法&#xff0c;是一種可流水的遞推算法&#xff0c;且算法的消耗時長可算&#xff0c;具體細節參考視頻&#xff1a; https://www.bilibili.com/video/BV1S3thzWEnh/?spm_id_from333.1387.homepage.video_card.click&vd_source69fb997b62efa60ae1add…

平衡車 -- MPU6050

&#x1f308;個人主頁&#xff1a;羽晨同學 &#x1f4ab;個人格言:“成為自己未來的主人~” 傳感器原理 此外&#xff0c;用陀螺儀獲取x,y,z軸的加速度。 初始化 我們現在對MPU6050進行初始化&#xff0c;MPU6050通過I2C總線與單片機進行通信&#xff0c;通過的是PB8和PB…

在電路浪涌測試中,TVS(瞬態電壓抑制二極管)的防護效果確實會受到陪測設備中去耦網絡(Decoupling Network,DN)的顯著影響

在電路浪涌測試中&#xff0c;TVS&#xff08;瞬態電壓抑制二極管&#xff09;的防護效果確實會受到陪測設備中去耦網絡&#xff08;Decoupling Network&#xff0c;DN&#xff09;的顯著影響&#xff0c;這一現象與浪涌能量的傳遞路徑、阻抗匹配及信號完整性密切相關。結合 AD…

Redis之分布式鎖與緩存設計

1、分布式鎖 1.1、超賣問題/*** 存在庫存超賣的不安全問題*/private void deductStock() {int stockTotal Integer.parseInt(stringRedisTemplate.opsForValue().get("stock"));if (stockTotal > 0) { // 這里存在多個線程、進程同時判斷通過&#xff0c;然后超買…

靜態住宅IP的特點

穩定性高&#xff1a;與動態IP地址相比&#xff0c;靜態住宅IP不會不定時變更&#xff0c;能確保業務在網絡環境中的一致性和連貫性&#xff0c;適合需要長期維持同一身份的場景&#xff0c;如跨境電商業務等3。安全性強&#xff1a;由于其住宅屬性&#xff0c;看起來更像是正常…

Linux 編譯 Android 版 QGroundControl 軟件并運行到手機上

Linux 編譯 Android 版 QGroundControl 軟件并運行到手機上環境說明操作步驟一、參考上一篇文章在電腦端把環境搭建好二、配置 Qt Creator 的 Android 環境環境說明 電腦系統 Ubuntu 22.04 qgroundcontrol master 分支 Qt 6.8.3 操作步驟 一、參考上一篇文章在電腦端把環境搭…

Python 2025:量化金融與智能交易的新紀元

當Python遇見金融大數據&#xff0c;算法交易正迎來前所未有的技術變革在2025年的技術浪潮中&#xff0c;Python已經從一個"膠水語言"蛻變為金融科技領域的核心驅動力。根據GitHub 2025年度報告&#xff0c;Python在量化金融項目中的使用率增長了217%&#xff0c;在對…

[論文閱讀] 人工智能 + 軟件工程 | TDD痛點破解:LLM自動生成測試骨架靠譜嗎?靜態分析+專家評審給出答案

TDD痛點破解&#xff1a;LLM自動生成測試骨架靠譜嗎&#xff1f;靜態分析專家評審給出答案 論文信息項目詳情論文原標題Evaluation of Large Language Models for Generating RSpec Test Skeletons in Ruby on Rails論文鏈接https://arxiv.org/pdf/2509.04644一段話總結 該研究…

開源PSS解析器1

本章介紹另一個開源PSS解析工具zuspec&#xff1a; zuspec 提供了一組用于處理 actions relationship level 的工具 &#xff08;ARL&#xff09; 模型&#xff0c;主要是使用 Accellera 便攜式測試和刺激 &#xff08;PSS&#xff09; 語言描述的模型。ARL 模型用于為數字設計…

26考研——內存管理_內存管理策略(3)

408答疑 文章目錄一、內存管理策略1、內存管理的基本原理和要求1.1、相關概念1.2、邏輯地址與物理地址1.3、程序的鏈接與裝入1.4、進程的內存映像1.5、內存保護1.6、內存共享1.7、內存分配與回收1.8、在存儲管理中涉及到兩個問題2、連續分配管理方式2.1、相關概念2.2、單一連續…

Python爬蟲實戰:研究Event Handling機制,構建在線教育平臺的課程數據采集和分析系統

1. 引言 1.1 研究背景與意義 在大數據時代,互聯網作為全球最大的信息載體,蘊含著海量有價值的數據。這些數據涵蓋了商業交易、用戶行為、社會趨勢等多個領域,對企業決策、學術研究和社會管理具有重要參考價值。如何高效、準確地獲取這些數據并進行深度分析,成為當前數據科…

docker 安裝 redis 并設置 volumes 并修改 修改密碼(四)

設置新密碼: 127.0.0.1:6379> CONFIG SET requirepass newpassword OK驗證新密碼: 127.0.0.1:6379> AUTH newpassword OK更新配置文件: 編輯主機的配置文件/data/redis/conf/redis.conf,將requirepass的值修改為新密碼: requirepass newpassword重啟容器以使配置…

NBA球星知識大挑戰:基于 PyQt5 的球星認識小游戲

NBA球星知識大挑戰&#xff1a;基于 PyQt5 的球星認識小游戲 代碼詳見&#xff1a;https://github.com/xiaozhou-alt/NBA_Players_Recognition 文章目錄 NBA球星知識大挑戰&#xff1a;基于 PyQt5 的球星認識小游戲一、項目介紹二、文件夾結構三、項目實現1. 自定義動畫按鈕&a…

電磁波成像(X射線、CT成像)原理簡介

電磁波成像&#xff08;X射線、CT成像&#xff09;原理簡介一、圖像形成的一般形式二、可見光成像2.1可見光2.2可見光成像三、其他電磁波成像3.1X射線成像3.2CT成像3.2.1CT成像原理3.2.2CT成像與X射線成像對比3.2.3CT生成三維描述3.3PET成像一、圖像形成的一般形式 大多數圖像…

k8s部署2:前置條件:docker部署

前兩天發布了k8s的前置發布條件,對于防火墻的處理,我看大家反響還不錯,所以作為先行者,我感覺自己多了不少動力,所以今天來說說k8s部署前置條件中docker部分的部署。在此先感謝一下那些點贊和添加收藏的朋友們,你們的支持是我永遠的動力!三克油喂給馬吃! 之前寫過docke…

某開源漫畫系統RCE代碼審計

免責聲明 本文檔所述漏洞詳情及復現方法僅限用于合法授權的安全研究和學術教育用途。任何個人或組織不得利用本文內容從事未經許可的滲透測試、網絡攻擊或其他違法行為。使用者應確保其行為符合相關法律法規&#xff0c;并取得目標系統的明確授權。 對于因不當使用本文信息而造…