论文阅读笔记: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} ∣∣WFW 代替 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设备的加速效果非常有限。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/28029.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

gitLab批量下载有权限的项目

前言 参考 https://www.jianshu.com/p/b3d4e5cee835 适用于git私服拉取个人所涉及权限的代码&#xff0c;方便有多个项目权限的人快速拉取自己所有权限的代码。 默认生成目录结构与gitlab一致 步骤一:获取权限你的代码权限文件d 从gitlab私服生成所有你有权限的代码信息 …

模型 WOOP

说明&#xff1a;系列文章 分享 模型&#xff0c;了解更多&#x1f449; 模型_思维模型目录。不再拖延和懒惰&#xff0c;让梦想照进现实。 1 WOOP模型的应用 1.1 WOOP模型提高自己健身习惯 如果你想要养成健身的习惯&#xff0c;那么使用WOOP模型来提高自己健身习惯&#xf…

全光万兆时代来临:信而泰如何推动F5G-A(50PONFTTR)技术发展

技术背景 F5G-A&#xff08;Fifth Generation Fixed Network-Advanced&#xff0c;第五代固定网络接入&#xff09;是固定网络技术的一次重大升级&#xff0c;代表了光纤网络技术的最新发展。F5G-A旨在提供更高的带宽、更低的延迟、更可靠的连接以及更广泛的应用场景。 F5G-A六…

【多线程】如何使用jconsole工具查看Java线程的详细信息?

&#x1f970;&#x1f970;&#x1f970;来都来了&#xff0c;不妨点个关注叭&#xff01; &#x1f449;博客主页&#xff1a;欢迎各位大佬!&#x1f448; 文章目录 1. 先运行java程序&#xff01;2. 在jdk目录下的bin文件夹中找到jconsole.exe3. 新建连接4. 观察线程状态5. …

OpenCV形态学

什么事形态学处理 基于图像形态进行处理的一些基本方法&#xff1b; 这些处理方法基本是对二进制图像进行处理&#xff1b; 卷积核决定着图像出来后的效果。 一 图像二值化 什么是二值化 将图像的每个像素变成两种值&#xff0c;如0,255. 全局二值化。 局部二值化。 thres…

08 SpringBoot 自定定义配置

SpringBoot自定义配置有三种方式&#xff1a; 使用PropertySource进行自定义配置 使用ImportResource进行自定义配置 使用Configuration进行自定义配置 PropertySource ​ 如果将所有的配置都集中到 application.properties 或 application.yml 中&#xff0c;那么这个配置文…

解决javadoc一直找不到路径的问题

解决javadoc一直找不到路径的问题 出现以上问题就是我们在下载jdk的时候一些运行程序安装在C:\Program Files\Common Files\Oracle\Java\javapath下&#xff1a; 一开始是没有javadoc.exe文件的&#xff0c;我们只需要从jdk的bin目录下找到复制到这个里面&#xff0c;就可以使用…

去掉eslint

1、在vue.config.js文件里加上下面的代码&#xff0c;然后重启就可以了&#xff01; 2、vue.config.js文件代码&#xff1a; const { defineConfig } require(vue/cli-service) module.exports defineConfig({transpileDependencies: true,lintOnSave: false })

堆栈溢出的攻击 -fno-stack-protector stack smash 检测

在程序返回的一条语句堆栈项目处&#xff0c;用新函数的起始地址覆盖&#xff0c;将会跳转到执行新函数。 现在系统对这个行为做了判断&#xff0c;已经无法实施这类攻击或技巧。 1&#xff0c;测试代码 #include <stdio.h> void cc() {printf("I am cc( )\n"…

设置SSHkeys多服务器免登录配置(ssh config)

一、背景&#xff1a; 多邮箱或者多git账号进行同一台电脑开发的情况。 有时候&#xff0c;开发时可能会面临一个情况&#xff0c;就是通过自己的电脑&#xff0c;可能同时需要开发多个不同地方的项目&#xff0c;或者说&#xff0c;自己建立的项目已经配置好SSH验证免密登录&a…

C# WPF入门学习主线篇(二十三)—— 控件模板(ControlTemplate)和数据模板(DataTemplate)

C# WPF入门学习主线篇&#xff08;二十三&#xff09;—— 控件模板&#xff08;ControlTemplate&#xff09;和数据模板&#xff08;DataTemplate&#xff09; 在WPF开发中&#xff0c;控件模板&#xff08;ControlTemplate&#xff09;和数据模板&#xff08;DataTemplate&am…

基于Python+OpenCV+SVM车牌识别系统(GUI界面)【W3】

简介&#xff1a; 随着交通管理的日益复杂化和智能化需求的增加&#xff0c;车牌识别系统在安防、智慧交通管理等领域中扮演着重要角色。传统的车牌识别系统主要基于图像处理和模式识别技术&#xff0c;随着计算机视觉技术的发展&#xff0c;基于Python、OpenCV和机器学习算法的…

2024年6月-Docker配置镜像代理

步骤1&#xff1a;编辑 daemon.json 文件 vim /etc/docker/daemon.json步骤2&#xff1a;添加配置 将以下内容粘贴到文件中&#xff1a; {"insecure-registries": ["192.168.0.99:8800"],"data-root": "/mnt/docker","registr…

文件初阶入门(葵花宝典)

1. 文件的顺序读写 1.1 顺序读写函数的介绍 函数名 功能 适用于 fgetc 字符输入函数 所有输入流 fputc 字符输出函数 所有输出流 fgets 文本行输入函数 所有输入流 fputs 文本行输出函数 所有输出流 f…

小数二分个人见解

小数二分 小数二分题目 小数二分 整数二分 是找边界点&#xff0c;而小数二分找的是 近似值。 整数二分是在一个整型数组当中 查找&#xff0c;而小数二分是在数轴中 查找&#xff0c;都是每次可以排除一半的区间&#xff0c;只不过小数二分中while循环内的结束条件和整数二分…

大模型中的计算精度——FP32, FP16, bfp16之类的都是什么???

大模型中的计算精度——FP32, FP16, bfp16之类的都是什么&#xff1f;&#xff1f;&#xff1f; 这些精度是用来干嘛的&#xff1f;&#xff1f;混合精度 mixed precision training什么是混合精度&#xff1f;怎么转换呢&#xff1f; 为什么大语言模型通常使用FP32精度训练量化…

关于element-plus中el-select自定义标签及样式的问题

关于element-plus中el-select自定义标签及样式的问题 我这天天的都遇到各种坑&#xff0c;关于自定义&#xff0c;我直接复制粘贴代码都实现不了&#xff0c;研究了一下午&#xff0c;骂骂咧咧了一下午&#xff0c;服气了。官网代码实现不了&#xff0c;就只能 “ 曲线救国 ”…

昂科烧录器支持Prolific旺玖科技的电力监控芯片PL7413C1FIG

芯片烧录行业领导者-昂科技术近日发布最新的烧录软件更新及新增支持的芯片型号列表&#xff0c;其中Prolific旺玖科技的高度集成的电力监控芯片PL7413C1FIG已经被昂科的通用烧录平台AP8000所支持。 PL7413C1FIG是一款高度集成的电力监控芯片&#xff0c;用于测量电力使用情况的…

MySQL-分组函数

041-分组函数 重点&#xff1a;所有的分组函数都是自动忽略NULL的 分组函数的执行原则&#xff1a;先分组&#xff0c;然后对每一组数据执行分组函数。如果没有分组语句group by的话&#xff0c;整张表的数据自成一组。 分组函数包括五个&#xff1a; max&#xff1a;最大值mi…

私人云盘(自动云同步)

一、项目简介 模仿小米的云服务&#xff0c;实现一个通过TCP实现的私人云盘&#xff0c;因为能力有限&#xff0c;所以只实现自动云同步这一个功能&#xff0c;具体可以分为三个小功能&#xff0c;即保持云端和终端数据一致、实现文件的上传与下载以及手动同步 二、涉及到的知…