高效深度学习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.80.20.40.10.30.50.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} 111111000 (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.80.20.40.10.30.5000 (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.mzph.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;一…