高效深度學習lecture03

lecture_03

**剪枝:**pruning basically turns a dense neural network into a sparse neural network. you can remove those redundant synapses, and also you can remove those redundant neurons.

剪枝的本質上是將稠密的神經網絡轉變成稀疏的神經網絡,可以去除那些冗余的突觸,同樣也能移除那些冗余的神經元。

剪枝就是“修剪”深度學習模型中多余的部分,讓模型變得更輕、更快,同時盡可能保留性能。
想象一下,養了一棵樹,長得有點太大了,有些枝葉其實沒啥用,但又占地方。想讓它更整齊、更好看,就可以修剪掉這些多余的枝葉

remove those small connections, very simple criteria, if it is small, then we remove it. remove it means setting it to zero.

模型訓練推理過程,DRAM的訪問往往是耗費時間的主要原因之一

  1. DRAM的訪問時間(延遲)比處理器的計算速度慢很多倍。現代處理器的計算能力非常強,但每次從DRAM讀取數據都需要幾百個時鐘周期;深度學習模型通常有大量的參數(權重、激活值等),這些參數無法全部裝入處理器的緩存(Cache),因此需要頻繁地從DRAM讀取
  2. DRAM和處理器之間的數據傳輸受限于內存帶寬。即使計算速度很快,如果數據不能及時從內存傳輸過來,也會導致“數據饑餓”
  3. 在推理時,模型需要從內存中逐層讀取權重,再進行矩陣運算,最后將結果寫回內存
  4. 對訓練的影響:
    1. 梯度計算和參數更新需要反復讀取和寫入參數。這些數據通常存儲在顯存(GPU)或主存(CPU的DRAM)中,如果顯存容量不足,還需要頻繁地從主存中加載數據;當模型非常大(超出顯存容量)時,訓練會因頻繁的主存和顯存交互而變得非常慢
    2. 推理階段通常是以延遲為優化目標(如實時性)。如果模型的權重或中間激活值不能在緩存中保留,就會因DRAM訪問引入額外的延遲

NVIDIA從A100GPU開始采用權重的稀疏性,實現了高達1.5倍的性能提升。


剪枝過程理解:

  1. 假設原始權重矩陣W:
    [ 0.8 0.1 0.05 ? 0.2 0.3 0.01 0.4 ? 0.5 0.02 ] (3) \left[ \begin{matrix} 0.8 & 0.1 & 0.05 \\ -0.2 & 0.3 & 0.01 \\ 0.4 & -0.5 & 0.02 \end{matrix} \right] \tag{3} ?0.8?0.20.4?0.10.3?0.5?0.050.010.02? ?(3)

  2. 假設我們根據權重的絕對值大小剪枝,閾值設為 𝜏 = 0.1絕對值大于𝜏則保留,小于則置為0

  3. 根據閾值 τ\tauτ 生成的掩碼矩陣為:
    [ 1 1 0 1 1 0 1 1 0 ] (3) \left[ \begin{matrix} 1 & 1 & 0 \\ 1 & 1 & 0 \\ 1 & 1 & 0 \end{matrix} \right] \tag{3} ?111?111?000? ?(3)

  4. 將 W 和 M 逐元素相乘:

    WP = M⊙W =
    [ 0.8 0.1 0 ? 0.2 0.3 0 0.4 ? 0.5 0 ] (3) \left[ \begin{matrix} 0.8 & 0.1 & 0 \\ -0.2 & 0.3 & 0 \\ 0.4 & -0.5 & 0 \end{matrix} \right] \tag{3} ?0.8?0.20.4?0.10.3?0.5?000? ?(3)

  5. 剪枝后的損失函數可以寫為:

    LP(X,Y,WP) = L(X,Y,WP) + λ∥WP∥1


剪枝顆粒度(Pruning Granularity):

權重級別剪枝:就像挑選模型中一些“小的、不重要的”權重,將它們去掉,但是網絡的架構(每一層的神經元和連接)保持不變

神經元級別剪枝:決定某些神經元(及其對應的權重)對輸出幾乎沒有影響,因此直接去除整個神經元和與之相連的所有權重

層級剪枝:刪除了一個完整的“計算模塊”,即某一層的所有神經元和連接,整個層的計算就不再進行


剪枝的敏感性分析:

敏感性分析是一種用來衡量和評估模型中不同參數或層對模型整體性能(如準確率、損失等)影響的方法。通過敏感性分析,可以確定模型中哪些參數或層對于性能不敏感,從而為剪枝提供指導,幫助選擇那些對性能影響較小的部分進行裁剪,以減少模型規模、提高推理速度,同時盡量保持模型的性能

  1. 逐層剪枝敏感性分析:
    1. 對每一層逐步減少參數(如減少一定比例的卷積核或神經元),觀察性能變化曲線
    2. 敏感的層通常對模型性能具有較大影響,應慎重剪枝
  2. 參數重要性分析:
    1. 使用 L1 范數:權重值的絕對值越小,越不重要
    2. 使用 L2 范數:權重越接近于零,則認為其對性能貢獻較小
    3. 基于梯度的重要性:考慮 ∣w??L/?w∣,即權重與梯度的乘積,用以衡量權重對損失的貢獻
  3. Hessian 矩陣方法
    1. 利用二階導數(Hessian 矩陣)衡量權重對損失函數的敏感性
    2. 理論上較為精確,但計算復雜度較高
  4. 激活敏感性
    1. 衡量神經元的激活值對最終輸出的貢獻
    2. 激活值較低或接近零的神經元對輸出影響較小,可以優先剪枝

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

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

相關文章

Nextjs15 實戰 - React Notes 項目初始化

current branch 對應如下文檔 redis ioredis 本專欄內容均可在Github:notes_01 找到 一、效果 完整項目使用技術棧: Nextjs15 MySQL Redis Auth Prisma i18n strapi Docker vercel 二、修改根布局和其他頁面 修改 app/page.tsx&#xff1a…

Flutter PopupMenuButton 深度解析:從入門到架構級實戰

在移動應用交互設計中,上下文菜單如同隱形的魔法師,在有限屏幕空間中優雅地擴展操作維度。作為Flutter框架中的核心交互組件,PopupMenuButton絕非簡單的菜單觸發器,其背后蘊含著Material Design的交互哲學、聲明式UI的架構智慧以及…

C++——清明

#include <iostream> #include <cstring> #include <cstdlib> #include <unistd.h> #include <sstream> #include <vector> #include <memory> #include <ctime>using namespace std;class Weapon; // 前置聲明class Hero{ pr…

es --- 集群數據遷移

目錄 1、需求2、工具elasticdump2.1 mac安裝問題解決 2.2 elasticdump文檔 3、遷移 1、需求 遷移部分新集群沒有的索引和數據 2、工具elasticdump Elasticdump 的工作原理是將輸入發送到輸出 。兩者都可以是 elasticsearch URL 或 File 2.1 mac安裝 前置&#xff1a;已經安裝…

鴻蒙開發_ARKTS快速入門_語法說明_組件聲明_組件手冊查看---純血鴻蒙HarmonyOS5.0工作筆記010

然后我們來看如何使用組件 可以看到組件的組成 可以看到我們使用的組件 然后看一下組件的語法.組件中可以使用子組件. 然后組件中可以有參數,來修改組件的樣式等 可以看到{},這種方式可以設置組件參數,當然在下面. 的方式也可以的 然后再來

【GEE學習筆記】報錯解決:Sentinel-2 數據集分為 L1C(大氣頂層)和 L2A(地表反射率),如何選擇波段進行去云處理?

【GEE學習筆記】報錯解決&#xff1a;Sentinel-2 數據集分為 L1C&#xff08;大氣頂層&#xff09;和 L2A&#xff08;地表反射率&#xff09;&#xff0c;如何選擇波段進行去云處理&#xff1f; 【GEE學習筆記】報錯解決&#xff1a;Sentinel-2 數據集分為 L1C&#xff08;大…

OpenVLA-OFT——微調VLA時加快推理的三大關鍵設計:支持動作分塊的并行解碼、連續動作表示以及L1回歸(含輸入靈活化及對指令遵循的加強)

前言 25年3.26日&#xff0c;這是一個值得紀念的日子&#xff0c;這一天&#xff0c;我司「七月在線」的定位正式升級為了&#xff1a;具身智能的場景落地與定制開發商 &#xff0c;后續則從定制開發 逐步過渡到 標準產品化 比如25年q2起&#xff0c;在定制開發之外&#xff0…

IDEA 使用Maven打包時內存溢出

IDEA 使用Maven打包時內存溢出 解決辦法&#xff1a; File -> settings -> Build,Excetion,Deployment-> Compiler 中添加配置“-Djps.track.ap.dependenciesfalse” 如圖&#xff1a;

隨機產生4位隨機碼(java)

Random類&#xff1a; 用于生成隨機數 import java.util.Random; 導入必要的類 generateVerificationCode()方法&#xff1a; 這是一個靜態方法&#xff0c;可以直接通過類名調用 返回一個6位數字的字符串&#xff0c;首位不為0 生成首位數字&#xff1a; random.nextInt…

C#調用C++動態庫時出現`System.DllNotFoundException`錯誤的解決思路

文章目錄 1. DLL文件路徑問題2. 依賴的運行時庫缺失3. 平臺不匹配&#xff08;x86/x64&#xff09;4. 導出函數名稱不匹配5. DLL文件損壞或權限問題6. 運行時庫沖突&#xff08;MT/MD不匹配&#xff09;7. 使用DLLImport時的常見錯誤總結步驟 在C#中調用C動態庫時出現System.Dl…

免費Deepseek-v3接口實現Browser-Use Web UI:瀏覽器自動化本地模擬抓取數據實錄

源碼 https://github.com/browser-use/web-ui 我們按照官方教程&#xff0c;修訂幾個環節&#xff0c;更快地部署 步驟 1&#xff1a;克隆存儲庫 git clone https://github.com/browser-use/web-ui.git cd web-ui Step 2: Set Up Python Environment 第 2 步&#xff1a;設置…

ES 參數調優

1、refresh_interval 控制索引刷新的時間間隔。增大這個值可以減少I/O操作&#xff0c;從而提升寫入性能&#xff0c;但會延遲新文檔的可見性 查看 GET /content_erp_nlp_help_202503191453/_settings?include_defaultstrue 動態修改&#xff1a;refresh_interval 是一個動態…

【Easylive】視頻刪除方法詳解:重點分析異步線程池使用

【Easylive】項目常見問題解答&#xff08;自用&持續更新中…&#xff09; 匯總版 方法整體功能 這個deleteVideo方法是一個綜合性的視頻刪除操作&#xff0c;主要完成以下功能&#xff1a; 權限驗證&#xff1a;檢查視頻是否存在及用戶是否有權限刪除核心數據刪除&…

《比特信使的七重試煉:從數據丟失到CA認證的守護史詩》

點擊下面圖片帶您領略全新的嵌入式學習路線 &#x1f525;爆款熱榜 88萬閱讀 1.6萬收藏 第一章&#xff1a;初現危機——數據丟失的陰云 比特城的清晨總是被數據流的光芒點亮&#xff0c;但這一天&#xff0c;工程師艾琳的實驗室卻籠罩在陰霾中。她剛剛嘗試通過古老的“疾風…

如何更好的理解 beforeEach 全局前置守衛,在處理路由跳轉前觸發,怎么實現常用的全局權限校驗、登錄狀態檢查的呢?

以下將深入講解 Vue Router 的全局前置守衛 beforeEach 在權限系統中的實現原理和實戰應用&#xff0c;結合企業級項目代碼進行拆解&#xff08;基于 Vue 3 TypeScript Pinia&#xff09;。 一、前置守衛核心機制 1.1 執行時機與特性 全局前置守衛在路由跳轉前觸發&#xf…

VMware上的windows虛擬機安裝使用Docker方法

因為在實體機上使用Docker會導致VMware無法啟動虛擬機&#xff0c;所以嘗試了在虛擬機中安裝Docker. 1. 創建Windows虛擬機. windows至少是Win10 1.9***或者Win 11. 這是Docker Desktop要求的。 2. 虛擬機CPU要開啟虛擬化功能。 虛擬機的CPU開啟虛擬化 虛擬機的memory要不小…

項目中集成ECharts圖表(通過定時任務SpringTask統計每天的訂單金額)

項目應用Echarts ①、前端終端安裝Echarts npm install echarts --save ②、src/views創建order目錄&#xff0c;在order目錄下創建orderStatistics.vue ③、src/router/modules目錄下創建order.js&#xff0c;配置路由 const layout ()>import(/layout/index.vue) …

2022第十三屆藍橋杯大賽軟件賽省賽C/C++ 大學 B 組(題解解析)

記錄刷題的過程、感悟、題解。 希望能幫到&#xff0c;那些與我一同前行的&#xff0c;來自遠方的朋友&#x1f609; 大綱&#xff1a; 1、九進制轉十進制-&#xff08;解析&#xff09;-簡單的進制轉化問題&#x1f604; 2、順子日期-&#xff08;解析&#xff09;-考察日期 3…

python應用之使用pdfplumber 解析pdf文件內容

目錄標題 一. 通過 pdfplumber.open() 解析復雜PDF&#xff1a;1-2. 報錯&#xff1a;V2 &#xff1a; 1-3. v3 使用tk 庫&#xff0c;彈框選擇文件運行環境準備完整代碼保存運行測試步驟方式二&#xff1a;命令行方式&#xff08;適用于自動化&#xff09; 測試用例示例常見問…

力扣熱題100刷題day61|234.回文鏈表(兩種方法)

一、回文鏈表 234.回文鏈表 兩種解法 解法1&#xff1a;時間復雜度O(n) 空間復雜度O(n) 遍歷鏈表&#xff0c;計算鏈表長度&#xff0c;創建同樣長度大小的數組&#xff0c;用數組存儲鏈表中所有元素&#xff0c;之后雙指針遍歷鏈表&#xff0c;一個從頭開始&#xff0c;一…