深度學習:預訓練和warm up的區別

“預訓練(Pre-training)”和“Warm-up(預熱)”是深度學習中常見的兩個訓練策略,它們雖然都在訓練初期起作用,但本質和目的完全不同。


一、預訓練(Pre-training)

1. 定義

預訓練是指:先在一個大規模數據集相關任務上訓練模型,以獲取有用的參數初始化,然后再在目標任務上進行微調(Fine-tuning)

2. 目的

  • 加快收斂

  • 避免從頭開始訓練

  • 提高小數據集上的性能(通過遷移知識)

3. 舉例

NLP領域(經典):
模型預訓練任務微調任務
BERTMasked Language Model文本分類、問答、NER等
GPT系列下一個詞預測(語言建模)對話、寫作、代碼生成等
CV領域(圖像):
  • 用 ResNet-50 在 ImageNet 上預訓練,遷移到醫療圖像/遙感圖像等小樣本任務中。

4. 形式

# 加載預訓練權重 model.load_state_dict(torch.load("pretrained_model.pth")) # 再進行微調 train(model, task_dataset)


二、Warm-up(預熱)

1. 定義

Warm-up 指的是:在訓練初期,逐漸增加學習率,從一個較小值慢慢變大,直到達到設定的初始學習率。如下面例子中的線性warm up。

2. 目的

  • 防止一開始梯度爆炸或震蕩

  • 提高訓練穩定性,特別是Transformer類模型

3. 常見策略

(1) 線性 warm-up:

lr = base_lr × step / warmup_steps if step <= warmup_steps

(2) 結合衰減策略(如 transformer):

# 經典 Transformer warmup+inverse sqrt decay def get_lr(step, d_model=512, warmup=4000): return d_model**-0.5 * min(step**-0.5, step * warmup**-1.5)

4. 舉例

PyTorch 中使用 warmup:

from transformers import get_linear_schedule_with_warmup 
optimizer = AdamW(model.parameters(), lr=1e-4) 
scheduler = get_linear_schedule_with_warmup(optimizer, num_warmup_steps=1000, num_training_steps=10000) 
for step in range(total_steps): optimizer.step() scheduler.step()

三、對比總結

項目預訓練(Pre-training)Warm-up(預熱)
作用階段訓練前或訓練初期訓練初期
針對對象模型權重學習率調度
目標利用已有知識遷移,加快收斂防止梯度不穩定,提高初始階段魯棒性
應用領域NLP、CV、大模型、元學習等Transformer、BERT、GAN、深度網絡等


四、實際項目中如何配合使用?

  • 預訓練 + warm-up 經常聯合使用(如 BERT)

  • 示例:

    1. 加載預訓練 BERT 模型

    2. 采用 warm-up + cosine decay 的學習率策略

    3. 微調分類任務(如情感分析)


在軌跡預測、分類或Transformer類任務,warm-up 幾乎是標配;而預訓練則要看你有沒有現成的預訓練模型或大規模源域數據

五、PyTorch 實現的warm-up 學習率調度器(warm-up + 余弦退火

下面是一個使用 PyTorch 實現的 warm-up 學習率調度器完整示例,適用于 Transformer、BERT 或任意深度模型訓練時的預熱策略。


示例:線性 warm-up + 余弦退火(Cosine Annealing)

import torch
import torch.nn as nn
import torch.optim as optim
import math
import matplotlib.pyplot as plt# 模擬模型
model = nn.Linear(512, 10)# 優化器
optimizer = optim.Adam(model.parameters(), lr=1e-3)# 訓練總步數
num_training_steps = 10000# warm-up 步數(前10%步數用于 warm-up)
num_warmup_steps = int(0.1 * num_training_steps)# 自定義 warm-up + cosine 衰減調度器
def get_lr(step):if step < num_warmup_steps:return step / num_warmup_stepselse:# 余弦衰減,值在 [1, 0]progress = (step - num_warmup_steps) / (num_training_steps - num_warmup_steps)return 0.5 * (1.0 + math.cos(math.pi * progress))# 模擬訓練流程
lrs = []
for step in range(1, num_training_steps + 1):# 當前的學習率(乘基礎學習率)scale = get_lr(step)lr = scale * 1e-3for param_group in optimizer.param_groups:param_group['lr'] = lr# 模擬一次訓練optimizer.step()lrs.append(lr)# 可視化學習率變化
plt.plot(lrs)
plt.title("Learning Rate Schedule (Warm-up + Cosine Decay)")
plt.xlabel("Step")
plt.ylabel("Learning Rate")
plt.grid(True)
plt.show()

代碼解釋:

階段策略
前1000步學習率從 0 線性上升到 1e-3
后9000步學習率從 1e-3 余弦方式逐漸衰減到接近 0

線性 warm-up 的核心邏輯定義在 get_lr(step) 函數中的這部分

if step < num_warmup_steps:return step / num_warmup_steps

線性 warm-up 就是:在訓練開始時,學習率從 0 按線性方式逐步升到設定的最大值,防止一開始梯度太大導致訓練不穩定。

余弦退火Cosine Annealing)是一種學習率調度策略,其核心目的是:

讓學習率在訓練后期逐漸減小,有節奏地收斂到接近 0,從而提升模型收斂的穩定性與最終精度。


為什么要用余弦退火?

  1. 訓練初期: 需要較大的學習率來快速探索優化空間;

  2. 訓練后期: 逐漸減小學習率,有助于模型精細調優、避免震蕩

  3. 相比線性衰減或固定學習率更有效,尤其在 Transformer、BERT、CV大模型中常用。

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

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

相關文章

Apache Ignite中分布式信號量(Distributed Semaphore)的說明和使用示例

這段內容是關于 Apache Ignite 中 分布式信號量&#xff08;Distributed Semaphore&#xff09; 的說明和使用示例。我們來一步步解析&#xff0c;幫助你深入理解它的含義和用途。&#x1f539; 一、什么是 Semaphore&#xff08;信號量&#xff09;&#xff1f; 在并發編程中&…

怎么提升服務器的防攻擊能力!

提升服務器的防攻擊能力需要從??架構設計、技術防護、運維管理??等多維度入手&#xff0c;覆蓋網絡層、系統層、應用層及數據層的安全防護。以下是具體的策略和實踐方法&#xff1a;??一、基礎安全加固&#xff1a;消除自身漏洞??服務器自身的脆弱性是最常見的攻擊入口…

vscode配置rust環境

1.官網下載vscode&#xff0c;安裝 2.vscode命令行運行&#xff1a; Invoke-WebRequest https://win.rustup.rs/x86_64 -OutFile rustup-init.exe然后&#xff1a; .\rustup-init.exe3.驗證 先配置path&#xff1a; $env:Path ";$env:USERPROFILE\.cargo\bin"查看是…

最新版 HarmonyOS NEXT 開發工具安裝教程:如何在 macOS 系統安裝 DevEco Studio 5.0.3 編輯器?

最新版 HarmonyOS NEXT 開發工具安裝教程&#xff1a;如何在 macOS 系統安裝 DevEco Studio 5.0.3 編輯器&#xff1f; 什么是 DevEco Studio&#xff1f; DevEco Studio 是華為為 HarmonyOS 開發的強大集成開發環境&#xff08;IDE&#xff09;&#xff0c;專為開發 Harmony…

電商項目統一認證方案設計與實戰

1. 微服務網關整合 OAuth2.0 設計思路分析 網關整合 OAuth2.0 有兩種思路&#xff0c;一種是授權服務器生成令牌, 所有請求統一 在網關層驗證&#xff0c;判斷權限等操作&#xff1b;另一種是由各資源服務處理&#xff0c;網關只做請求 轉發 。 比較常用的是第一種&#xf…

學習Markdown

標題一 標題二 標題三 標題四 標題五 標題六這是一段引用文本直接編寫&#xff0c;段落換行是末尾兩個以上的空格&#xff0b;回車 或者在段落后加一個空行 粗體語法&#xff1a;使用兩個星號 ** 或兩個下劃線 __ 包圍文字&#xff1a;這是粗體文字使用星號 這是__粗體文字__使…

劇本殺系統 App 開發:科技賦能,重塑劇本殺游戲體驗

在科技飛速發展的當下&#xff0c;各個行業都在積極尋求與科技的融合&#xff0c;以實現創新和升級。劇本殺行業也不例外&#xff0c;劇本殺系統 App 的開發正是科技賦能的生動體現&#xff0c;它重塑了傳統的劇本殺游戲體驗&#xff0c;為玩家帶來了全新的感受。劇本殺系統 Ap…

wvp-gb28181-pro 只用jar運行

編譯前端后npm install --global yarnyarn --registryhttps://registry.npmjs.org installyarn run build&#xff0c;生成的前端文件&#xff0c;會在wvp-GB28181-pro\src\main\resources\static&#xff0c;因為是在resources中&#xff0c;打maven打包后會一起打到jar中&…

深度學習(魚書)day06--神經網絡的學習(后兩節)

深度學習&#xff08;魚書&#xff09;day06–神經網絡的學習&#xff08;后兩節&#xff09;一、梯度 像 這樣的由全部變量的偏導數匯總而成的向量稱為梯度&#xff08;gradient&#xff09;。 梯度實現的代碼&#xff1a; def numerical_gradient(f, x):h 1e-4 # 0.0001grad…

學習嵌入式的第三十四天-數據結構-(2025.7.29)數據庫

數據庫基礎概念 數據庫是用于存儲和管理海量數據的應用程序&#xff0c;提供數據增刪改查及統計功能&#xff08;如最大值、最小值、平均數等&#xff09;。通過SQL語句操作數據&#xff0c;以表格形式管理存儲。 數據庫分類 關系型數據庫 Oracle&#xff08;大型&#xff0…

STM32——HAL庫

總&#xff1a;STM32——學習總綱 一、簡介 1.1 CMIS簡介 所有廠家為了市場兼容性推出的標準 arm架構 1.2 HAL庫簡介 1.2.1 各種庫優缺點 二、 STM32 Cube固件包 ST公司為CMSIS 中間層開發的pack&#xff0c;包含HAL。 2.1 獲取方式 ST官網&#xff1a;st.com/content/st_c…

數據結構-圖的相關定義

圖-多對多Graph&#xff08;V,E&#xff09;&#xff0c;圖&#xff08;頂點Vertex&#xff0c;邊Edge&#xff09;圖可以沒有邊&#xff0c;只有一個頂點也叫圖&#xff0c;但是單獨的一條邊&#xff0c;或者一個頂點連一條邊&#xff0c;不能叫圖有向圖&#xff1a;無向圖&am…

B 站搜一搜關鍵詞優化:精準觸達用戶的流量密碼

在 B 站內容生態中&#xff0c;搜一搜功能是用戶主動獲取信息的重要渠道&#xff0c;而關鍵詞優化則是讓你的視頻在搜索結果中脫穎而出的關鍵。通過合理優化關鍵詞&#xff0c;能提升視頻曝光率&#xff0c;吸引精準流量&#xff0c;為賬號發展注入強勁動力。以下從關鍵詞挖掘、…

Python爬蟲實戰:研究purl庫相關技術

1. 引言 隨著互聯網數據量的爆炸式增長,網絡爬蟲已成為數據采集、輿情分析和學術研究的重要工具。Python 憑借其豐富的庫生態和簡潔語法,成為開發爬蟲的首選語言。本文提出的爬蟲系統結合 requests 進行 HTTP 請求、BeautifulSoup 解析 HTML,并創新性地引入 purl 庫處理復雜…

OpenCV 學習探秘之三:從圖像讀取到特征識別,再到機器學習等函數接口的全面實戰應用與解析

一、引言 1.1介紹 OpenCV&#xff08;Open Source Computer Vision Library&#xff09;是一個功能強大的開源計算機視覺庫&#xff0c;廣泛應用于圖像和視頻處理、目標檢測、機器學習等領域。本文將全面解析 OpenCV 中常用的函數接口&#xff0c;幫助讀者快速掌握 OpenCV 的…

Umi從零搭建Ant Design Pro項目(3)集成 openapi 插件

1. 安裝插件 pnpm add umijs/max-plugin-openapi pnpm add swagger-ui-dist如果不安裝swagger-ui-dist&#xff0c;不會影響運行。但會報錯。 2.配置文件export default defineConfig({// umi插件配置plugins: [umijs/max-plugin-openapi],// openAPI配置openAPI: {requestLibP…

Flutter開發實戰之狀態管理深入解析

第4章:狀態管理深入解析 前言 想象一下,你正在開發一個購物車應用。用戶在商品頁面添加商品,然后去購物車頁面查看,最后到結算頁面付款。在這個過程中,購物車的數據需要在多個頁面之間保持同步和一致。這就是狀態管理要解決的核心問題。 狀態管理是Flutter開發中最重要…

組件化(一):重新思考“組件”:狀態、視圖和邏輯的“最佳”分離實踐

組件化(一)&#xff1a;重新思考“組件”&#xff1a;狀態、視圖和邏輯的“最佳”分離實踐 引子&#xff1a;組件的“內憂”與“外患” 至此&#xff0c;我們的前端內功修煉之旅已經碩果累累。我們掌握了組件化的架構思想&#xff0c;擁有了高效的渲染引擎&#xff0c;還探索…

【Redis】Redis 協議與連接

一、Redis 協議 1.1 RESP RESP 是 Redis 客戶端與服務器之間的通信協議&#xff0c;采用文本格式&#xff08;基于 ASCII 字符&#xff09;&#xff0c;支持多種數據類型的序列化和反序列化 RESP 通過首字符區分數據類型&#xff0c;主要支持 5 種類型&#xff1a; 類型首字…

Android通知(Notification)全面解析:從基礎到高級應用

一、Android通知概述通知(Notification)是Android系統中用于在應用之外向用戶傳遞信息的重要機制。當應用需要告知用戶某些事件或信息時&#xff0c;可以通過通知在狀態欄顯示圖標&#xff0c;用戶下拉通知欄即可查看詳細信息。這種機制幾乎被所有現代應用采用&#xff0c;用于…