论文阅读笔记:Towards Higher Ranks via Adversarial Weight Pruning
论文阅读笔记:Towards Higher Ranks via Adversarial Weight Pruning
- 1 背景
- 2 创新点
- 3 方法
- 4 模块
- 4.1 问题表述
- 4.2 分析高稀疏度下的权重剪枝
- 4.3 通过SVD进行低秩逼近
- 4.4 保持秩的对抗优化
- 4.5 渐进式剪枝框架
- 5 效果
- 5.1 和SOTA方法对比
- 5.2 消融实验
- 5.3 开销分析
- 6 结论
论文:https://arxiv.org/pdf/2311.17493
代码:https://github.com/huawei-noah/Efficient-Computing/tree/master/Pruning/RPG
1 背景
虽然结构化剪枝可以带来较大的运行时加速收益,但其性能远低于非结构化剪枝。
在高度稀疏的情况下,作者观察到非结构化剪枝会退化成结构化剪枝。当权重具有较大比例的零时,极有可能出现一个结构化的模式,其中整个通道或滤波器几乎被完全剪枝。因此,现有的权重剪枝方法在高稀疏度下会遇到性能急剧下降的情况。
作者通过比较两种剪枝方法受到启发,提出在权重剪枝中减少结构模式。结构化剪枝实际上是深度卷积网络中权重秩的降低,因此可以采用秩作为平衡非结构化稀疏权重“结构化”程度的指标:如果一个系数权重的秩较低,则认为它是高度结构化的。为了避免非结构化剪枝过于结构化,希望在剪枝时保持高稀疏度下的权重秩。
2 创新点
基于秩改进的目标,作者提出了一种基于对抗秩的剪枝方法(Rank-based PruninG, RPG)。
3 方法
首先,通过最小化近似误差来找到权重的低秩近似。通过奇异值分解找到最佳低秩逼近。其次,为了提高权重秩,最大化权重与其低秩对应的权重之间的距离来提高权重秩。这种基于对抗秩的优化目标将稀疏权重引导到一个高秩拓扑上。所提出的方法以逐步修剪的方式进行,以稳定训练过程中的秩变化。通过在图像分类和下游任务上的大量实验评估了所提出的RPG方法的优势,图1表明,与基线相比,本文方法获得了矩阵秩优势。
4 模块
4.1 问题表述
在传统的有监督神经网络学习方面,给定一个目标损失函数 L L L ,神经网络权重 W W W 和 输入输出对 X = { x i } i = 1 , … n , Y = { y i } i = 1 , … n X=\{x_i\}_{i=1,…n},Y=\{y_i\}_{i=1,…n} X={xi}i=1,…n,Y={yi}i=1,…n,神经网络权重 W W W 训练过程可表述为:
权重剪枝限制了权重 W W W 中非零权重的总数,或者在数学意义上,权重剪枝对神经网络施加 l 0 l_0 l0 范数约束。给定稀疏度预算,约束描述为:
一种常见的做法就是用权重张量 W W W 和二值化掩膜 M M M 计算点积重参化权重 W W W。二值化掩码 M M M 具有与 W W W 相同的形状,M中的每个元素代表其在 W W W 中的对应参数是否被剪枝。在重参化后,权重剪枝问题被形式化为:
在非结构化剪枝的高稀疏度下,稀疏网络的秩可能会大幅降低。
4.2 分析高稀疏度下的权重剪枝
非结构化剪枝和结构化剪枝是两种主要的剪枝方法。在非结构化剪枝实践中,CNN的权重张量以细粒度的方式被剪枝:每个孤立的权重参数可以在网络内部关闭(即设为零),但整个权重张量结构保持不变。相比之下,结构化剪枝侧重于过滤器的剪枝:过滤器作为剪枝过程中最小的可剪枝单元被截断。通过比较相同稀疏度预算下的两种剪枝范式,说明在相同的剪枝预算下,非结构化剪枝比结构化剪枝的效果要好得多。
这一现象可以从矩阵秩的角度进行解释。实际上,结构化剪枝是对权重矩阵的直接降秩,即过滤器剪枝本质上是低秩的权重剪枝。矩阵的秩表示矩阵所包含信息量的上界。一个强大的网络应该具有丰富的信息,作者希望稀疏网络的特征具有较高的秩。特征的秩与稀疏权重矩阵的秩密切相关,因为式(2.4)描述了矩阵乘法中秩的关系:
从式中可以看出,当直接影响权重 W W W 的秩进行过滤器剪枝时,输出特征的秩也会降低,从而导致信息丰富度急剧损失。另一方面,非结构化剪枝摆脱了过滤器剪枝的结构约束,从而保留了更多的信息量。
当稀疏度较高时,非结构化剪枝部分退化为结构化剪枝。当权重被大比例的填充零时,形成“准结构化”的稀疏权重模式。图1中矩阵秩的基线评估说明了这一问题。因此,现有的权重剪枝方法在高稀疏度下通常会遇到性能急剧下降的情况。受两类剪枝性质的启发,作者提出在非结构化剪枝中减少结构化模式,从而在高稀疏度下保持权重排序。
4.3 通过SVD进行低秩逼近
既然权重的秩在权重剪枝中很重要,那么就需要一种方法来计算深度神经网络中的秩。由于权重值总是离散的,作为备选解,作者收敛到一个近似的秩,而不是计算一个精确的秩。因此,定义近似秩如下:
定义1(矩阵的 δ \delta δ 秩) : 给定一个矩阵 W W W 和一个小的误差容忍度 δ > 0 \delta>0 δ>0, W W W 的 δ \delta δ 秩定义为最小的正整数 k k k,使得存在一个 k k k 秩矩阵,它到 W W W 的 l 2 l_2 l2 距离小于 δ \delta δ。
在之前的工作中,秩是通过奇异值分解计算奇异值来评估的。作者利用SVD计算定义1中的 δ \delta δ 秩。首先,说明SVD可以产生最佳的低秩近似:
定理1(最佳低秩近似):假设 W W W 通过SVD分解,并令 W = ∑ i = 1 r σ i u i v i T W=\sum_{i=1}^r\sigma_iu_iv_i^T W=∑i=1rσiuiviT,其中奇异值 { σ i } \{\sigma_i\} {σi} 按降序排序。给定整数 k < r k<r k<r, W W W 的最佳 k k k 秩逼近,即与 W W W 有最小 l 2 l_2 l2 距离的 k k k 秩矩阵为:
由于SVD可以得到更好的低秩逼近,可以利用这个性质来求解定义1中的 δ \delta δ 秩。给定权重矩阵 W W W,寻找最小的 k k k 使得最佳 k k k 秩逼近 W ~ \widetilde{W} W 的 l 2 l_2 l2 逼近误差小于误差容忍度 δ \delta δ。附录有给出证明。
4.4 保持秩的对抗优化
与低秩逼近不同,高秩矩阵是低秩矩阵难以逼近的。只要 W W W 保持它与最佳低秩逼近的距离,就可以增加它的秩。因此作者设计了一种对抗机制,增加 W W W 被低秩矩阵逼近的难度,从而在剪枝时提高 W W W 的矩阵秩。首先,通过奇异值分解生成低秩 k k k 的最佳低秩近似矩阵 W ~ \widetilde{W} W ,以最小化 W ~ \widetilde{W} W 到 W W W 的距离。然后,对 W W W 进行优化,增加 W W W 与 W ~ \widetilde{W} W 的距离。这个过程可以理解为 W W W 与 W ~ \widetilde{W} W 之间的对抗,当低秩的 W ~ \widetilde{W} W 试图拟合 W W W 时, W W W 被优化以保持自身原理 W ~ \widetilde{W} W 。从数学上讲,这个对抗可以被表述为一个 min-max 问题。
但不幸的是,这个问题可能面临着无法收敛的风险。因为当 W ~ \widetilde{W} W 固定时, W → ∞ W→∞ W→∞最佳。为了在优化过程中解决这个问题,作者将 W W W 限制在一个欧式范数球内。换句话说,作者将 W ∣ ∣ W ∣ ∣ F \frac{W}{||W||_F} ∣∣W∣∣FW 代替 W W W 代入问题。这里使用 l 2 l_2 l2 标准化的原因是:1. W W W 是有界的,而不是增长达无穷大的;2.在优化 min-max 问题时,如果对 W W W 进行 l 2 l_2 l2 归一化, W W W 的秩可以增加(定理2中有证明)。3.对权重进行 l 2 l_2 l2 归一化等价于对其奇异值进行 l 2 l_2 l2 归一化,在给定固定误差容忍度的情况下,根据定义1中秩的定义,为秩提供了比较公平的准则。
在介绍这个 min-max 问题之前,引入几个符号: ∣ ∣ ⋅ ∣ ∣ F ||·||_F ∣∣⋅∣∣F 是矩阵的2范数。 I I I 是恒等矩阵, W ‾ : = W ∣ ∣ W ∣ ∣ \overline{W} := \frac{W}{||W||} W:=∣∣W∣∣W 是 l 2 l_2 l2 标准化权重矩阵 W W W, U , Σ , V U, \Sigma, V U,Σ,V 为 SVD 分解 W W W 得到的矩阵,其中 U = { u 1 , u 2 , … } U=\{u_1,u_2,…\} U={u1,u2,…} 和 V = { v 1 , v 2 , … } V=\{v_1,v_2,…\} V={v1,v2,…} 为正交基, Σ \Sigma Σ 为对角矩阵,其中奇异值 { σ 1 , σ 2 , … } \{\sigma_1,\sigma_2,…\} {σ1,σ2,…} 在对角线上按降序排列。算子 T r u n ( U Σ V T ) = ∑ i = 1 k σ i u i v i T Trun(U\Sigma V^T)=\sum_{i=1}^k\sigma_iu_iv_i^T Trun(UΣVT)=∑i=1kσiuiviT 表示 k k k 阶截断SVD,或 W W W 的 k k k 阶最佳逼近。min-max问题形式化的表示如下:
优化目标被定义为对抗秩损失:
在这个情况下,作者提出如下定理,即对抗秩损失可以引导权重 W W W 向更高阶的方向移动:
定理2(对抗秩损失的有效性): 给定方程( 2.6 )中定义的对抗秩损失,如果通过梯度下降来优化秩损失中的W,那么W的秩将会增加。(附录有给出证明)
利用提出对抗秩损失,优化目标包括两个方面:1. 针对某个任务(如分类,检测等)减少损失,已提高稀疏网络的性能;2.通过减少秩损失来获得更高的权重秩。给定复合超参 λ \lambda λ, Rank-based PruninG(RPG)的优化目标 L L L 可以定义为:
4.5 渐进式剪枝框架
之前的工作已经提出了各种剪枝框架,作者认为渐进式剪枝(Gradual Pruning,GP)可以再适中的训练预算下达到更好的性能,所以将其作为剪枝框架。GP在每次训练过程中修剪掉一小部分权重,试图通过迭代的“剪枝和训练”过程来保持稀疏的网络性能。
本文的PRG方法过程如下:没经过 Δ T \Delta T ΔT 就执行更新二进制掩码M的剪枝-生成过程,使得经过掩码更新后,整个网络在当前迭代时达到目标稀疏度。随着训练的进行,目标稀疏度会逐渐增加,这与GP相同。其次,对所有参数进行基于重要性的全局排序(代码里使用L1范数),并执行剪枝。最后,基于梯度进行参数生成。对于其他训练步骤(指出了剪枝阶段的finetune阶段),掩码M保持不变,对活跃的权重值进行更新。具体见算法1。
关于基于梯度进行参数生长代码如下:
score_grow = self.backward_hook_objects[l].dense_grad score_grow = torch.abs(score_grow) score_grow = score_grow.view(-1) # mask1是二值化掩膜,形状和M一样,权重的L1范数前α比例的位置为1,其他位置为0 score_grow_lifted = torch.where(mask1 == 1, torch.ones_like(mask1) * (torch.min(score_grow) - 1),score_grow) # mask2是二值化掩膜,形状和M一样,score_grow_lifted前α比例的位置为1,其他位置为0 mask_combined = torch.reshape(mask1 + mask2, current_mask.shape).bool()
5 效果
5.1 和SOTA方法对比
在InageNet上,不同稀疏度剪枝下的效果如表2。
在ImageNet上的计算量和准确率如图3。
Deep Sparse是最近提出的一种CPU上的稀疏加速框架。将ResNet50在Deep Sparse上进行时间稀疏。在CPU上的准确率和耗时如表3。
对MaskRCN进行剪枝后在COCO val2017数据集上的效果如表4。
对基于transformer的模型,本文的方法虽然没有专门为注意力机制设计,但在DeiT-S上也取得了很好地效果,如表5。
5.2 消融实验
关于超参 λ \lambda λ 的消融实验,如图4。
5.3 开销分析
RPG涉及昂贵的SVD计算。然而,作者进行了实验,并说明在时间和FLOP方面,SVD在剪枝过程中所占的成本开销非常小。如表6所示,SVD计算的总体时间和FLOPs仅占整个RPG剪枝成本的< 2 %。作者还比较了RPG与其他剪枝方法的FLOPs开销。从表7可以观察到,与基线相比,本文方法是最具有成本效益的。最重要的是,秩损失计算带来的额外开销并不是一个值得关注的问题。
6 结论
非结构化剪枝对GPU设备的加速效果非常有限。
相关文章:

论文阅读笔记:Towards Higher Ranks via Adversarial Weight Pruning
论文阅读笔记:Towards Higher Ranks via Adversarial Weight Pruning 1 背景2 创新点3 方法4 模块4.1 问题表述4.2 分析高稀疏度下的权重剪枝4.3 通过SVD进行低秩逼近4.4 保持秩的对抗优化4.5 渐进式剪枝框架 5 效果5.1 和SOTA方法对比5.2 消融实验5.3 开销分析 6 结…...
目前常用的后端技术
在后端开发中,有多种技术和框架可供选择,具体取决于项目的需求、团队的技能和经验,以及组织的架构决策。以下是一些常见的后端开发技术和框架: 1. 编程语言 Java: 广泛使用于企业级应用,有大量的库和框架…...

windows如何查看硬盘类型(查看磁盘类型)(查看是固态硬盘ssd还是机械硬盘hdd)(Windows优化驱动器——媒体类型)
文章目录 方法:使用Windows优化驱动器1、在任务栏搜索框中输入“优化驱动器”并打开它。2、在优化驱动器的窗口中,查看每个驱动器旁边的“媒体类型”。3、如果列出的是“固态驱动器”,那么它是SSD;如果是“硬盘驱动器”࿰…...

Java学习 (一) 环境安装
一、安装java环境 1、获取软件包 https://www.oracle.com/java/technologies/downloads/ .exe 文件一路装过去就行,最好别装c盘 ,我这里演示的时候是云主机只有C盘 2、配置环境变量 我的电脑--右键属性--高级系统设置--环境变量 在环境变量中添加如下配…...
**args和**kwargs是什么?
**args和 **kwargs是什么? **kwargs 是一个惯用的命名,指代一个字典(dictionary),其中包含了所有未在函数定义中明确指定的关键字参数。在 Python 中,函数的参数可以分为两类:位置参数…...

【STM32】GPIO简介
1.GPIO简介 GPIO是通用输入输出端口的简称,简单来说就是STM32可控制的引脚,STM32芯片的GPIO引脚与外部设备连接起来,从而实现与外部通讯、控制以及数据采集的功能。 STM32芯片的GPIO被分成很多组,每组有16个引脚。 最基本的输出…...

移植案例与原理 - utils子系统之KV存储部件 (1)
Utils子系统是OpenHarmony的公共基础库,存放OpenHarmony通用的基础组件。这些基础组件可被OpenHarmony各业务子系统及上层应用所使用。公共基础库在不同平台上提供的能力: LiteOS-M内核:KV(key value)存储、文件操作、定时器、Dump系统属性。…...

数据结构---排序算法
个人介绍 hello hello~ ,这里是 code袁~💖💖 ,欢迎大家点赞🥳🥳关注💥💥收藏🌹🌹🌹 🦁作者简介:一名喜欢分享和记录学习的…...

UE4 RPC进行网络同步
说明 基于UE本身提供的RPC同步机制 RPC远程过程调用允许客户端或服务器通过网络连接相互发送消息: 使用时需要注意: 1、必须从 Actor 上调用 2、Actor 必须被复制,注意勾选BP中Replicates,或使变量bReplicates true 3、注意如…...
HTML(6)——表单
目录 input标签基本使用 input标签占位 单选框radio 上传文件file 下拉菜单 文本域 label标签 按钮 input标签基本使用 input标签type属性值不同,则功能不同 <input type"..."> type属性值说明text文本框,用于输入单行文本p…...
Go基础编程 - 08 - 结构体
结构体 1. 自定义类型、类型别名1.1. 自定义类型1.2. 类型别名1.3. 类型定义和类型别名的区别 2. 结构体定义3. 结构体初始化4. 指针类型结构体5. 构造函数6. 方法和接收者6.1. 方法定义6.2. 方法调用6.3. 值方法和指针方法6.4. 指针方法使用场景6.5. 任意类型添加方法 7. 结构…...

基于Verilog表达的FSM状态机
基于Verilog表达的FSM状态机 1 FSM1.1 Intro1.2 Why FSM?1.3 How to do 在这里聚焦基于Verilog的三段式状态机编程; 1 FSM 1.1 Intro 状态机是一种代码实现功能的范式;一切皆可状态机; 状态机编程四要素:– 1.状态State&#…...
给一家银行做的数据中台系统架构方案书(DAMM)招投标用,虽然有内定潜规则,但是方案都是要的,不一定就是价格低就能中标,毕竟是上百万以上的单子
目录 概述需求分析系统架构DAMM设计思路数据治理数据安全实施计划维护和运营 1. 概述 1.1 项目背景 在数字化转型的浪潮中,银行业面临着越来越多的数据挑战与机遇。为了更好地利用数据资产,提升服务质量和运营效率,建立一个高效、灵活的数…...

【设计模式深度剖析】【6】【行为型】【中介者模式】
👈️上一篇:迭代器模式 | 下一篇:观察者模式👉️ 设计模式-专栏👈️ 文章目录 中介者模式定义英文原文直译如何理解? 中介者模式的角色1. 中介者(Mediator)2. 具体中介者(ConcreteMediato…...
金额转换但是接收对象类型未知时,金额转换公共方法囊括当对象为String\Integer\Number三种类型的转换方法
/** * deccription 金额转换方法 * param Object * value * return * return BigDecimal */ public BigDecimal getBigDecimal(Object value) { BigDecimal reValue new BigDecimal(0); if (value ! null) { …...

Commons-Collections篇-CC2链分析
前言 3.1-3.2.1版本中TransformingComparator并没有去实现Serializable接口,是不可以被序列化的,所以我们重新搭建一个4.0的具有漏洞的CC环境 CC2链主要使用的和CC4一样,但是区别在于CC2避免了使用Transformer数组,没有使用Insta…...

LeetCode 48.旋转图像
1.做题要求: 2.从此题我们可以看出规律为第几行要变为倒数第几列,所以我们最好先把二维数组存入一维数组中,然后先从最后一列遍历,把一维数组里的元素,依次等于遍历的元素即可: void rotate(int** matrix, int matrixSize, int*…...

Navicat导入json文件(json文件数据导入到MySQL表中)
天行健,君子以自强不息;地势坤,君子以厚德载物。 每个人都有惰性,但不断学习是好好生活的根本,共勉! 文章均为学习整理笔记,分享记录为主,如有错误请指正,共同学习进步。…...

避雷!又6本期刊被On Hold!ELSEVIER旗下影响因子高达10+SSCI上榜
【SciencePub学术】继《INFORMATION SCIENCES》被On Hold 之后,又新增3本SCIE期刊、3本SSCI期刊被列入On Hold名单。其中包含ELSEVIER旗下影响因子高达10的《RESOURCES POLICY》。 官方现在对期刊质量的管控越来越严格了,被标记为On Hold后的期刊中&…...
CSS 列表样式(ul)全面解析
CSS 列表样式是前端开发中常用的一种技术,用于定义无序列表(ul)的外观和行为。无序列表在网页布局和内容展示中扮演着重要角色,从导航菜单到内容清单,无所不在。通过CSS可以对无序列表的各个方面进行自定义,…...
应用升级/灾备测试时使用guarantee 闪回点迅速回退
1.场景 应用要升级,当升级失败时,数据库回退到升级前. 要测试系统,测试完成后,数据库要回退到测试前。 相对于RMAN恢复需要很长时间, 数据库闪回只需要几分钟。 2.技术实现 数据库设置 2个db_recovery参数 创建guarantee闪回点,不需要开启数据库闪回。…...
AtCoder 第409场初级竞赛 A~E题解
A Conflict 【题目链接】 原题链接:A - Conflict 【考点】 枚举 【题目大意】 找到是否有两人都想要的物品。 【解析】 遍历两端字符串,只有在同时为 o 时输出 Yes 并结束程序,否则输出 No。 【难度】 GESP三级 【代码参考】 #i…...

《通信之道——从微积分到 5G》读书总结
第1章 绪 论 1.1 这是一本什么样的书 通信技术,说到底就是数学。 那些最基础、最本质的部分。 1.2 什么是通信 通信 发送方 接收方 承载信息的信号 解调出其中承载的信息 信息在发送方那里被加工成信号(调制) 把信息从信号中抽取出来&am…...
使用van-uploader 的UI组件,结合vue2如何实现图片上传组件的封装
以下是基于 vant-ui(适配 Vue2 版本 )实现截图中照片上传预览、删除功能,并封装成可复用组件的完整代码,包含样式和逻辑实现,可直接在 Vue2 项目中使用: 1. 封装的图片上传组件 ImageUploader.vue <te…...

【论文阅读28】-CNN-BiLSTM-Attention-(2024)
本文把滑坡位移序列拆开、筛优质因子,再用 CNN-BiLSTM-Attention 来动态预测每个子序列,最后重构出总位移,预测效果超越传统模型。 文章目录 1 引言2 方法2.1 位移时间序列加性模型2.2 变分模态分解 (VMD) 具体步骤2.3.1 样本熵(S…...

让回归模型不再被异常值“带跑偏“,MSE和Cauchy损失函数在噪声数据环境下的实战对比
在机器学习的回归分析中,损失函数的选择对模型性能具有决定性影响。均方误差(MSE)作为经典的损失函数,在处理干净数据时表现优异,但在面对包含异常值的噪声数据时,其对大误差的二次惩罚机制往往导致模型参数…...

NXP S32K146 T-Box 携手 SD NAND(贴片式TF卡):驱动汽车智能革新的黄金组合
在汽车智能化的汹涌浪潮中,车辆不再仅仅是传统的交通工具,而是逐步演变为高度智能的移动终端。这一转变的核心支撑,来自于车内关键技术的深度融合与协同创新。车载远程信息处理盒(T-Box)方案:NXP S32K146 与…...
Java求职者面试指南:计算机基础与源码原理深度解析
Java求职者面试指南:计算机基础与源码原理深度解析 第一轮提问:基础概念问题 1. 请解释什么是进程和线程的区别? 面试官:进程是程序的一次执行过程,是系统进行资源分配和调度的基本单位;而线程是进程中的…...

Windows安装Miniconda
一、下载 https://www.anaconda.com/download/success 二、安装 三、配置镜像源 Anaconda/Miniconda pip 配置清华镜像源_anaconda配置清华源-CSDN博客 四、常用操作命令 Anaconda/Miniconda 基本操作命令_miniconda创建环境命令-CSDN博客...

【网络安全】开源系统getshell漏洞挖掘
审计过程: 在入口文件admin/index.php中: 用户可以通过m,c,a等参数控制加载的文件和方法,在app/system/entrance.php中存在重点代码: 当M_TYPE system并且M_MODULE include时,会设置常量PATH_OWN_FILE为PATH_APP.M_T…...