Warmup_steps 設置經驗

文章目錄

  • 什么是 Warmup?
  • 實現示例
  • 科學設置 Warmup 的黃金法則
  • 直觀例子

什么是 Warmup?

Warmup 是一種學習率調度策略,在訓練初期逐步增加學習率(LR),而不是直接使用目標學習率。它解決了兩個關鍵問題:

  • 避免早期震蕩:模型參數初始化為隨機值,直接高LR會導致不穩定更新。
  • 穩定Adam優化器:Adam的動量估計在初始階段不準確,需要漸進調整。

實現示例

初始 LR
線性增長階段
達到 warmup_steps?
反平方根衰減階段
def get_lr(step, warmup_steps, d_model):# 1. 預熱階段:線性增長if step < warmup_steps:return base_lr * (step / warmup_steps)# 2. 衰減階段:反平方根衰減scale = (warmup_steps ** 0.5) * min(step ** (-0.5), step * (warmup_steps ** (-1.5))return base_lr * scale

科學設置 Warmup 的黃金法則

  • NNN = 總樣本數(條)
  • BBB = 每次 forward 的原始 batch(每卡)
  • AAA = 梯度累積步數(accum_grad
  • EEE = epoch 數
  • WWW = 卡數(world_size,單卡 = 1)
  1. 每 epoch 的 forward 次數(向上取整):

I=?N/(B×W)?I = \lceil N / (B \times W) \rceil I=?N/(B×W)?

  1. 每 epoch 的 optimizer 更新次數(每 AAA 次 forward 做一次 update,向上取整):

S=?I/A?S = \lceil I / A \rceil S=?I/A?

  1. 總 optimizer step(也就是 scheduler 用的 total steps):

T=S×ET = S \times E T=S×E

  1. 推薦的 warmup 步數:

warmup={max?{?0.10×T?,10},T<4000clamp?(?0.05×T?,4000,20000),T≥4000\text{warmup} = \begin{cases} \max\{\lceil 0.10 \times T \rceil, 10\}, & T < 4000\\[4pt] \operatorname{clamp}(\, \lfloor 0.05 \times T \rceil,\; 4000,\; 20000 \,), & T \ge 4000 \end{cases} warmup={max{?0.10×T?,10},clamp(?0.05×T?,4000,20000),?T<4000T4000?

并且最終確保 warmup≤T?1\text{warmup} \le T-1warmupT?1

解釋:小訓練用 10%,大訓練用 5%,并在 4k–20k 之間限制


直觀例子

假設 B=16,A=8,E=120,W=1B=16, A=8, E=120, W=1B=16,A=8,E=120,W=1

  1. N=100,000N = 100{,}000N=100,000
  • I=?100000/16?=6250I=\lceil100000/16\rceil=6250I=?100000/16?=6250
  • S=?6250/8?=782S=\lceil6250/8\rceil=782S=?6250/8?=782
  • T=782×120=93,840T=782\times120=93{,}840T=782×120=93,840
  • warmup ≈ ?0.05×93840?=4,692\lfloor0.05\times93840\rceil=4{,}692?0.05×93840?=4,692(取 4000–20000 區間內 → 4692
  1. N=1,000,000N = 1{,}000{,}000N=1,000,000
  • I=?1000000/16?=62500I=\lceil1000000/16\rceil=62500I=?1000000/16?=62500
  • S=?62500/8?=7813S=\lceil62500/8\rceil=7813S=?62500/8?=7813
  • T=7813×120=937,560T=7813\times120=937{,}560T=7813×120=937,560
  • 0.05×T ? 20000 → clamp → 20000
  1. N=100N = 100N=100(極小樣本、僅作示例):
  • I=?100/16?=7I=\lceil100/16\rceil=7I=?100/16?=7
  • S=?7/8?=1S=\lceil7/8\rceil=1S=?7/8?=1
  • T=1×120=120T=1\times120=120T=1×120=120
  • 因為 T<4000T<4000T<4000,warmup = max(ceil(0.1×120),10) = 12

import mathdef suggest_warmup(N,B,A,E,W=1):I = math.ceil(N / (B*W))S = math.ceil(I / A)T = S * Eif T < 4000:w = max(math.ceil(0.10*T), 10)else:w = round(0.05*T)w = max(4000, min(w, 20000))w = min(w, T-1)return {"iters_per_epoch":I, "opt_steps_per_epoch":S, "total_steps":T, "warmup":w}print(suggest_warmup(403733, 16, 8, 120, 4))
# {'iters_per_epoch': 6309, 'opt_steps_per_epoch': 789, 'total_steps': 94680, 'warmup': 4734}print(suggest_warmup(403733, 16, 4, 100, 4))
# {'iters_per_epoch': 6309, 'opt_steps_per_epoch': 1578, 'total_steps': 157800, 'warmup': 7890}

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

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

相關文章

vue一個超簡單的菜單欄伸縮示例

代碼<template><div class"container"><!-- 左側區域 --><div class"left-side" :style"{ width: leftWidth px }">左側內容</div><!-- 右側區域 --><div class"right-side" :style"{ l…

Spark學習(Pyspark)

&#xff08;1&#xff09;Spark基礎入門 ①什么是Spark Spark是一款分布式內存計算的統一分析引擎。其特點就是對任意類型的數據進行自定義計算。Spark可以計算&#xff1a;結構化、半結構化、非結構化等各種類型的數據結構&#xff0c;同時也支持使用Python、Java、Scala、R以…

PDF壓縮原理詳解:如何在不失真的前提下減小文件體積?

與直接刪除內容不同&#xff0c;良好的PDF壓縮能在大幅減小體積的同時&#xff0c;較好地保留原有文字清晰度和圖像質量&#xff0c;兼顧實用性與視覺效果。軟件操作十分直觀&#xff0c;僅需設置輸入文件與輸出路徑&#xff0c;點擊【開始壓縮】按鈕即可啟動處理。畫質壓縮等級…

從應用場景看國產化FPGA潛力,紫光同創研討會武漢·北京站回顧

八月&#xff0c;紫光同創 FPGA 技術研討會先后在武漢、北京舉行。作為紫光同創官方合作伙伴&#xff0c;ALINX 攜紫光同創 FPGA 開發板及行業解決方案亮相&#xff0c;與來自通信、工業控制、醫療、圖像視頻、消費電子等領域的近 200 位行業專家齊聚一堂&#xff0c;通過主題演…

安卓APK包體優化全攻略

目錄 正常默認打包流程&#xff08;以Android平臺為例&#xff09; 查看編輯器打包日志 壓縮圖片 壓縮網格模型 壓縮貼圖 壓縮音頻文件 只打64位包 最終大小 正常默認打包流程&#xff08;以Android平臺為例&#xff09; 準備工作&#xff1a; 確保已安裝最新版Unity H…

嵌入式學習日記(28)進程、線程

回收資源空間子進程回收策略1、wait阻塞回收&#xff1a;一般情況下父進程專門負責回收2、waitpid非阻塞回收&#xff1a;搭配輪詢方式回收3、不回收&#xff1a;子進程任務一致執行4、異步回收&#xff1a;子進程結束后通知父進程進行回收exec 函數族三種調用外部程序的方式#i…

測試用例的一些事項

為什么要寫測試用例&#xff1f;寫測試用例的原因是為了避免遺漏測試&#xff0c;我們要根據給的文檔將邏輯都表達出來&#xff0c;不能因為簡單而不寫&#xff0c;日后版本更新就知道自己哪些測了哪些沒測。在沒有文檔的時候測試用例該怎么寫&#xff1f;大家可以考慮安全測試…

當Java遇見AI:飛算驅動的個人博客介紹智能生成風暴

一、飛算JavaAI&#xff1a;重新定義個人開發的"智能魔法棒" 1.1 開發者需求變革&#xff1a;從"技術門檻"到"創意優先"的時代 在數字化浪潮席卷全球的今天&#xff0c;個人品牌建設已成為技術從業者、創業者乃至學生的剛需——無論是程序員分享…

小程序排名優化:用戶行為數據背后的提升密碼

用戶在小程序中的每一次點擊、每一次停留、每一次分享&#xff0c;都在產生著有價值的數據。這些看似零散的用戶行為數據&#xff0c;其實隱藏著提升小程序排名的密碼。平臺在判定小程序排名時&#xff0c;用戶行為數據是重要的參考依據&#xff0c;因為它直接反映了小程序對用…

【DSP28335 入門教程】深度解析中斷系統:三級架構與響應機制

大家好&#xff0c;歡迎來到我們的 DSP28335 深度解析系列。在之前的實戰中&#xff0c;我們通過 while(1) 循環和延時函數實現了各種控制&#xff0c;這種方式被稱為輪詢。但輪詢就像一個焦急的門衛&#xff0c;需要不停地去檢查每個門口是否有人&#xff0c;既浪費精力又效率…

代碼隨想錄二刷之“字符串”~GO

1.344. 反轉字符串 - 力扣&#xff08;LeetCode&#xff09; func reverseString(s []byte) {left : 0right : len(s)-1for left < right{s[left],s[right] s[right],s[left]leftright--}return } 感悟&#xff1a;還是go語法熟練程度的問題&#xff0c;需要注意的是&am…

(!萬字血書!)文本預處理:NLP 版 “給數據洗澡” 指南

好吧&#xff0c;我承認我是個標題黨&#xff01;(不這樣你會點進來享受這篇 通俗易懂 的好文章嗎&#xff1f;) 正經標題&#xff1a;文本預處理全流程:從基礎到實踐 &#xff08;屏幕前的你&#xff0c;帥氣低調有內涵&#xff0c;美麗大方很優雅… 所以&#xff0c;求…

最新chrome瀏覽器elasticsearch-head無法安裝使用問題

chrome瀏覽器網址欄復制粘貼以下內容輸入回車 chrome://flags/#allow-legacy-mv2-extensions 找到Allow legacy extension manifest versions項右側選擇Enabled啟用&#xff0c;重啟瀏覽器即可。

CSS aspect-ratio 屬性

aspect-ratio 是 CSS 中用于控制元素寬高比的屬性&#xff0c;通過一行代碼即可實現響應式比例布局&#xff0c;無需復雜計算。它確保元素在不同屏幕尺寸下保持固定比例&#xff0c;提升響應式設計效率。一、基本語法與取值selector {aspect-ratio: <width> / <height…

FreeRTOS多核支持

個人博客&#xff1a;blogs.wurp.top 簡介 1. 多核支持概述 在傳統的單核系統中&#xff0c;FreeRTOS 通常運行在一個 CPU 核心上&#xff0c;負責任務調度、中斷處理和資源管理。然而&#xff0c;在多核系統中&#xff0c;多個核心可以并行執行不同的任務或線程&#xff0c…

CUDA中的基本概念

要學習cuda的同學相信已經對其有一定的了解了&#xff0c;至少直到它是干什么的了。這篇文章主要是對cuda編程中的主要概念進行總結&#xff0c;有了一個大致的輪廓后就好入手了。 異構架構 異構架構即使用CPU和GPU共同進行計算。GPU不能作為一個獨立的運行平臺&#xff08;程序…

【LINUX網絡】HTTP協議基本結構、搭建自己的HTTP簡單服務器

目錄 1. 初識HTTP 2. URL 2.1 基本結構 2.2 URL中的?與urldecode\urlencode 易混淆&#xff1a;URL和HTTP傳輸請求兩者是什么關系&#xff1f; HTTP的宏觀結構 3. DEMO CODE loop模塊&#xff0c;核心邏輯 HttpServer 初代版本&#xff08;DEMO 0.0&#xff09; DEMO 1.0 DEMO…

Spring Boot 靜態函數無法自動注入 Bean?深入解析與解決方案

在 Spring Boot 項目中&#xff0c;開發者常遇到一個典型問題&#xff1a;在靜態方法或靜態變量中嘗試使用 Autowired 注入 Bean 時&#xff0c;始終得到 null 值。本文將深入剖析這一問題的根源&#xff0c;并提供多種可靠解決方案。問題重現&#xff1a;為什么注入失敗&#…

存儲過程作為系統邏輯核心的架構思考 —— 以 SaaS 系統為例

在企業級系統尤其是 SaaS 架構中&#xff0c;技術選型一旦確定&#xff0c;就意味著底層數據庫類型基本不會輕易更換。既然如此&#xff0c;我們可以更大膽地將數據庫能力本身納入系統設計的核心&#xff0c;而不僅僅把它當成一個被動的存儲引擎。存儲過程&#xff08;Stored P…

Ubuntu20.04下Remmina的VNC密碼忘記后重置

你遇到的錯誤&#xff1a; ** error creating password: /home/ysc/.vnc/passwd storepasswd: No such file or directory說明&#xff1a;x11vnc -storepasswd 無法創建密碼文件&#xff0c;因為 .vnc 目錄不存在。 雖然你可能以為路徑是對的&#xff0c;但系統找不到 /home/y…