深度學習---常用優化器

?優化器一:Adam(Adaptive Moment Estimation)


?一、適用場景總結(實踐導向)

場景是否推薦用 Adam說明
小模型訓練(如 MLP、CNN)???穩定、無需復雜調參,適合快速實驗
初學者使用或結構新穎??容錯率高,容易收斂
醫學圖像初步建模??常用于 baseline 訓練
復雜大模型(如 Transformer)? 不推薦替代方案為 AdamW,更穩定


?二、PyTorch代碼與推薦參數設置

import torch
optimizer = torch.optim.Adam(model.parameters(), lr=1e-3,                     # 學習率betas=(0.9, 0.999),          # 一階和二階動量系數eps=1e-8,                    # 數值穩定項weight_decay=0.0            # L2正則化強度
)
  • lr=1e-3:標準初始值,大部分任務適用;若 loss 波動劇烈可調小至 1e-4

  • betas=(0.9, 0.999):默認設置幾乎不需要改

  • eps=1e-8:保證數值穩定,基本不改

  • weight_decay=0.0:Adam 本身不建議加 L2 正則(詳見后面誤區)


?三、實戰調參技巧

目的推薦設置說明
想加快訓練收斂lr = 1e-3(初始)可在訓練初期較快降低 loss
loss 波動大 / 不下降lr = 1e-4 ~ 5e-5小學習率更穩,適合細調
防過擬合weight_decay = 1e-5(慎用)Adam 的 weight_decay 實際為梯度正則,不太有效,建議改用 AdamW
微調已有模型lr = 5e-5 或更小防止破壞已有特征表示
調整學習率StepLRCosineAnnealingLR 調度器調整學習率以適應不同階段收斂需求

學習率調度器示例:

from torch.optim.lr_scheduler import StepLR
scheduler = StepLR(optimizer, step_size=20, gamma=0.5)  # 每20輪將lr減半

?四、常見誤區與建議

  • ?誤用 weight_decay:在 Adam 中加入 weight_decay 相當于錯用 L2 正則,實際對參數更新方向產生影響,不是標準正則方式
    ?推薦使用 AdamW 替代

  • 學習率調度器常被忽視:Adam 雖然自適應,但仍推薦使用調度器,否則后期收斂慢

  • ?適合作為 baseline 起點優化器,特別是結構不熟時、或做 ablation 實驗時

?優化器二:AdamW(Adam with decoupled Weight Decay)


?一、適用場景總結(實踐導向)

場景是否推薦用 AdamW說明
Transformer 模型訓練(如 BERT、Swin Transformer)???論文標準優化器,收斂穩定
微調預訓練模型(如 BERT fine-tune)???默認使用 AdamW,效果好且安全
圖像分割任務(如 UNETR、TransUNet)??權重正則更合理
小模型實驗?也可以用,但優勢不如 Adam 明顯

核心優點:解決了 Adam 中正則化不標準的問題!


?二、PyTorch代碼與推薦參數設置

import torch
optimizer = torch.optim.AdamW(model.parameters(), lr=1e-4,                     # 通常比 Adam 略小betas=(0.9, 0.999), eps=1e-8,weight_decay=0.01           # 推薦加上!默認值一般 0.01
)
  • lr=1e-4:起始建議略小于 Adam;若是預訓練模型微調,用 1e-5 ~ 3e-5

  • weight_decay=0.01:這個值是有效的 L2 正則項,推薦設置!

  • 其他參數基本保留默認


🧪 三、實戰調參技巧

目的推薦做法說明
Transformer 預訓練lr = 1e-4weight_decay = 0.01官方推薦設置
微調 BERT、Swin 等預訓練模型lr = 2e-5 或更小;weight_decay = 0.01防止破壞已有參數
防止訓練不穩定使用 warmup + 調度器transformer 很依賴 warmup 技術(見下)

📉 搭配調度器(transformer常用):

from transformers import get_linear_schedule_with_warmupscheduler = get_linear_schedule_with_warmup(optimizer,num_warmup_steps=500,              # 前500步線性升溫num_training_steps=10000           # 總訓練步數
)

?或者直接在pytorch中創建

from torch.optim.lr_scheduler import CosineAnnealingLR
scheduler = CosineAnnealingLR(optimizer, T_max=50)

?四、常見誤區與建議

  • 不要用普通 Adam 加 weight_decay:請務必用 AdamW

  • ?Transformer 必須用調度器(特別是 warmup),否則很容易訓練失敗

  • ?直接使用 Adam 調高 weight_decay 會使收斂變差,原因為其 weight_decay 與標準 L2 不等價


?實戰總結:什么時候用 AdamW?

應用推薦
微調 BERT、Swin Transformer 等預訓練模型???
醫學圖像分割中使用 Transformer 網絡??
需要正則效果(防止過擬合)?
新任務上做 baseline,想加入合理正則項?

?

?優化器三:SGD + Momentum(隨機梯度下降 + 動量)


?一、適用場景總結(實踐導向)

場景是否推薦用 SGD+Momentum說明
圖像分類(如 ResNet、VGG、DenseNet)???默認優化器,經典高效
大規模數據訓練??表現穩定,泛化強
醫學圖像(圖像分割 / 分類)傳統CNN模型??與 AdamW 表現相當甚至更好
小數據集、快速測試? 不推薦收斂慢、對學習率更敏感


?二、PyTorch代碼與推薦參數設置

import torch
optimizer = torch.optim.SGD(model.parameters(),lr=0.1,                      # 高起始學習率momentum=0.9,                # 動量系數weight_decay=5e-4,           # 標準 L2 正則nesterov=True                # 推薦開啟
)
  • lr=0.1:SGD 起始學習率高!但需配合學習率調度器

  • momentum=0.9:常用設定,加快收斂,減少振蕩

  • nesterov=True:一般推薦打開,提升穩定性

  • weight_decay=5e-4:這是傳統 ImageNet 設置的標準正則


?三、實戰調參技巧

目標推薦設置說明
CNN訓練(ResNet、VGG)lr = 0.1,調度器減半不要一開始就設置太低
訓練早期不收斂檢查 batch size 和 lr 配合batch size 變大時 lr 要增大(線性關系)
想更快穩定收斂開啟 nesterov=True,調大 momentum對震蕩敏感任務更有效
中后期 loss 不再下降MultiStepLRCosineAnnealingLR非自適應優化器必須調度 lr!


📉 推薦調度器設置(圖像任務中常見)

from torch.optim.lr_scheduler import MultiStepLRscheduler = MultiStepLR(optimizer, milestones=[30, 60, 90],   # 在這些 epoch 處學習率減半gamma=0.1
)
from torch.optim.lr_scheduler import CosineAnnealingLRscheduler = CosineAnnealingLR(optimizer, T_max=100)

?四、常見誤區與建議

  • ?用默認學習率 0.01 或太小的 lr 會嚴重阻礙收斂

    SGD 通常使用較大的初始 lr(0.1 是經典設置),但需要調度器配合!

  • ?不使用調度器就用 SGD → 后期訓練停滯

    學習率下降對于 SGD 是必須的!

  • ?泛化能力更強:訓練慢但往往結果比 Adam 更好,常用于正式比賽、ImageNet 模型、CV base model 訓練


?實戰總結:什么時候用 SGD+Momentum?

應用推薦
圖像分類任務(ResNet 等)???
圖像分割中使用 CNN 結構(UNet)??
模型較淺,想減少過擬合??
對訓練速度不敏感、追求最終精度???
transformer 模型或 NLP任務? 不推薦

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

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

相關文章

SparkSQL 連接 MySQL 并添加新數據:實戰指南

SparkSQL 連接 MySQL 并添加新數據:實戰指南 在大數據處理中,SparkSQL 作為 Apache Spark 的重要組件,能夠方便地與外部數據源進行交互。MySQL 作為廣泛使用的關系型數據庫,與 SparkSQL 的結合可以充分發揮兩者的優勢。本文將詳細…

基于對抗性后訓練的快速文本到音頻生成:stable-audio-open-small 模型論文速讀

Fast Text-to-Audio Generation with Adversarial Post-Training 論文解析 一、引言與背景 文本到音頻系統的局限性:當前文本到音頻生成系統性能雖佳,但推理速度慢(需數秒至數分鐘),限制了其在創意領域的應用。 研究…

AI畫圖Stable Diffusion web UI學習筆記(中)

本文記錄講解AI畫圖工具Stable Diffusion web UI的部分基本使用方法,以便進行學習。AI畫圖Stable Diffusion web UI學習筆記分為上、中、下三篇文章。 我在 AI畫圖Stable Diffusion web UI學習筆記(上)_webui-CSDN博客 這篇文章中介紹了Stabl…

安全與智能的雙向奔赴,安恒信息先行一步

人類文明發展的長河中,每一次技術變革都重新書寫了安全的定義。 從蒸汽機的轟鳴到電力的普及,從互聯網的誕生到人工智能的崛起,技術創新與變革從未停止對于安全的挑戰。今天,我們又站在一個關鍵的歷史節點:AI大模型的…

【Reality Capture 】02:Reality Capture1.5中文版軟件設置與介紹

文章目錄 一、如何設置中文二、如何設置界面分區三、如何切換二三維窗口四、工具欄有多個視圖選項卡RealityCapture是虛幻引擎旗下一款三維建模軟件,跟我們常用的三維建模軟件一樣,可以從圖像或激光掃描中創建實景三維模型和正射影像等產品。可用于建筑、測繪、游戲和視覺特效…

真題卷001——算法備賽

藍橋杯2024年C/CB組國賽卷 1.合法密碼 問題描述 小藍正在開發自己的OJ網站。他要求用戶的密碼必須符合一下條件: 長度大于等于8小于等于16必須包含至少一個數字字符和至少一個符號字符 請計算一下字符串,有多少個子串可以當作合法密碼。字符串為&am…

17.three官方示例+編輯器+AI快速學習webgl_buffergeometry_lines

本實例主要講解內容 這個Three.js示例展示了如何使用BufferGeometry創建大量線段,并通過**變形目標(Morph Targets)**實現動態變形效果。通過隨機生成的點云數據,結合頂點顏色和變形動畫,創建出一個視覺效果豐富的3D線條場景。 核心技術包括…

InfluxDB 2.7 連續查詢實戰指南:Task 替代方案詳解

InfluxDB 2.7 引入了 Task 功能,作為連續查詢(CQ)的現代替代方案。本文詳細介紹了如何使用 Task 實現傳統 CQ 的功能,包括語法解析、示例代碼、參數對比以及典型應用場景。通過實際案例和最佳實踐,幫助開發者高效遷移并…

Pytorch張量和損失函數

文章目錄 張量張量類型張量例子使用概率分布創建張量正態分布創建張量 (torch.normal)正態分布創建張量示例標準正態分布創建張量標準正態分布創建張量示例均勻分布創建張量均勻分布創建張量示例 激活函數常見激活函數 損失函數(Pytorch API)L1范數損失函數均方誤差損失函數交叉…

大模型在數據分析領域的研究綜述

大模型在業務指標拆解中的應用場景與方法研究 隨著人工智能技術的快速發展,大模型(Large Language Models, LLMs)在數據分析領域的應用日益廣泛。尤其是在業務指標拆解這一復雜任務中,大模型展現了其獨特的價值和潛力。通過對多維…

JAVA:ResponseBodyEmitter 實現異步流式推送的技術指南

1、簡述 在許多場景下,我們希望后端能夠以流式、實時的方式推送數據給前端,比如消息通知、日志實時展示、進度條更新等。Spring Boot 提供了 ResponseBodyEmitter 機制,可以讓我們在 Controller 中異步地推送數據,從而實現實時流式輸出。 樣例代碼:https://gitee.com/lh…

Spring Boot循環依賴的陷阱與解決方案:如何打破“Bean創建死循環”?

引言 在Spring Boot開發中,你是否遇到過這樣的錯誤信息? The dependencies of some of the beans in the application context form a cycle 這表示你的應用出現了循環依賴。盡管Spring框架通過巧妙的機制解決了部分循環依賴問題,但在實際開…

如何閱讀、學習 Tcc (Tiny C Compiler) 源代碼?如何解析 Tcc 源代碼?

閱讀和解析 TCC(Tiny C Compiler) 的源代碼需要對編譯器的基本工作原理和代碼結構有一定的了解。以下是分步驟的指南,幫助你更高效地學習和理解 TCC 的源代碼: 1. 前置知識準備 C 語言基礎:TCC 是用 C 語言編寫的&…

Java Set系列集合詳解:HashSet、LinkedHashSet、TreeSet底層原理與使用場景

Java Set系列集合詳解:HashSet、LinkedHashSet、TreeSet底層原理與使用場景 一、Set系列集合概述 1. 核心特點 無序性:存取順序不一致(LinkedHashSet除外)。唯一性:元素不重復。無索引:無法通過索引直接訪…

解決 CentOS 7 鏡像源無法訪問的問題

在國內使用 CentOS 系統時,經常會遇到鏡像源無法訪問或者下載速度慢的問題。尤其是默認的 CentOS 鏡像源通常是國外的,如果你的網絡環境無法直接訪問國外服務器,就會出現無法下載包的情況。本文將介紹如何修改 CentOS 7 的鏡像源為國內鏡像源…

云計算與大數據進階 | 26、解鎖云架構核心:深度解析可擴展數據庫的5大策略與挑戰(上)

在云應用/服務的 5 層架構里,數據庫服務層穩坐第 4 把交椅,堪稱其中的 “硬核擔當”。它的復雜程度常常讓人望而生畏,不少人都將它視為整個架構中的 “終極挑戰”。 不過,也有人覺得可擴展存儲系統才是最難啃的 “硬骨頭”&#…

Linux——UDP/TCP協議理論

1. UDP協議 1.1 UDP協議格式 系統內的UDP協議結構體: 注1:UDP協議的報頭大小是確定的,為8字節 注2:可以通過報頭中,UDP長度將UDP協議的報頭和有效載荷分離,有效載荷將存儲到接收緩沖區中等待上層解析。 注…

考研復習全年規劃

25考研以330分成功上岸。 備考期間,我深知學習規劃的重要性,為大家精心整理了一份初試備考時間線任務規劃,希望能為正在備考的同學們提供參考。如果你對如何規劃學習路線仍感迷茫,不妨參考這份時間表,合理分配時間&…

PhpStudy | PhpStudy 環境配置 —— PhpStudy 目錄結構 環境變量配置 · Windows 篇

🌟想了解這個工具的其它相關筆記?看看這個:[網安工具] 服務器環境配置工具 —— PhpStudy 使用手冊 在前面的章節中,筆者詳細介紹了如何在 Windows 和 Linux 系統中安裝 PhpStudy,但可能會有崽崽在安裝完成后發現依舊…

DDS(數據分發服務) 和 P2P(點對點網絡) 的詳細對比

1. 核心特性對比 維度 DDS P2P 實時性 微秒級延遲,支持硬實時(如自動駕駛) 毫秒至秒級,依賴網絡環境(如文件傳輸) 架構 去中心化發布/訂閱模型,節點自主發現 完全去中心化,節…