论文阅读笔记: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可以对无序列表的各个方面进行自定义,…...
MySQL 隔离级别:脏读、幻读及不可重复读的原理与示例
一、MySQL 隔离级别 MySQL 提供了四种隔离级别,用于控制事务之间的并发访问以及数据的可见性,不同隔离级别对脏读、幻读、不可重复读这几种并发数据问题有着不同的处理方式,具体如下: 隔离级别脏读不可重复读幻读性能特点及锁机制读未提交(READ UNCOMMITTED)允许出现允许…...
测试markdown--肇兴
day1: 1、去程:7:04 --11:32高铁 高铁右转上售票大厅2楼,穿过候车厅下一楼,上大巴车 ¥10/人 **2、到达:**12点多到达寨子,买门票,美团/抖音:¥78人 3、中饭&a…...
vue3 字体颜色设置的多种方式
在Vue 3中设置字体颜色可以通过多种方式实现,这取决于你是想在组件内部直接设置,还是在CSS/SCSS/LESS等样式文件中定义。以下是几种常见的方法: 1. 内联样式 你可以直接在模板中使用style绑定来设置字体颜色。 <template><div :s…...
UR 协作机器人「三剑客」:精密轻量担当(UR7e)、全能协作主力(UR12e)、重型任务专家(UR15)
UR协作机器人正以其卓越性能在现代制造业自动化中扮演重要角色。UR7e、UR12e和UR15通过创新技术和精准设计满足了不同行业的多样化需求。其中,UR15以其速度、精度及人工智能准备能力成为自动化领域的重要突破。UR7e和UR12e则在负载规格和市场定位上不断优化…...
Python 包管理器 uv 介绍
Python 包管理器 uv 全面介绍 uv 是由 Astral(热门工具 Ruff 的开发者)推出的下一代高性能 Python 包管理器和构建工具,用 Rust 编写。它旨在解决传统工具(如 pip、virtualenv、pip-tools)的性能瓶颈,同时…...
Caliper 配置文件解析:fisco-bcos.json
config.yaml 文件 config.yaml 是 Caliper 的主配置文件,通常包含以下内容: test:name: fisco-bcos-test # 测试名称description: Performance test of FISCO-BCOS # 测试描述workers:type: local # 工作进程类型number: 5 # 工作进程数量monitor:type: - docker- pro…...
探索Selenium:自动化测试的神奇钥匙
目录 一、Selenium 是什么1.1 定义与概念1.2 发展历程1.3 功能概述 二、Selenium 工作原理剖析2.1 架构组成2.2 工作流程2.3 通信机制 三、Selenium 的优势3.1 跨浏览器与平台支持3.2 丰富的语言支持3.3 强大的社区支持 四、Selenium 的应用场景4.1 Web 应用自动化测试4.2 数据…...
django blank 与 null的区别
1.blank blank控制表单验证时是否允许字段为空 2.null null控制数据库层面是否为空 但是,要注意以下几点: Django的表单验证与null无关:null参数控制的是数据库层面字段是否可以为NULL,而blank参数控制的是Django表单验证时字…...
pikachu靶场通关笔记19 SQL注入02-字符型注入(GET)
目录 一、SQL注入 二、字符型SQL注入 三、字符型注入与数字型注入 四、源码分析 五、渗透实战 1、渗透准备 2、SQL注入探测 (1)输入单引号 (2)万能注入语句 3、获取回显列orderby 4、获取数据库名database 5、获取表名…...
DBLP数据库是什么?
DBLP(Digital Bibliography & Library Project)Computer Science Bibliography是全球著名的计算机科学出版物的开放书目数据库。DBLP所收录的期刊和会议论文质量较高,数据库文献更新速度很快,很好地反映了国际计算机科学学术研…...
