模型剪枝三:Learning Structured Sparsity in Deep Neural Networks

article/2025/10/26 1:04:20

论文:https://arxiv.org/abs/1608.03665
代码:https://github.com/wenwei202/caffe/tree/scnn

1 核心思想

前面两篇文章https://blog.csdn.net/cdknight_happy/article/details/110953977和https://blog.csdn.net/cdknight_happy/article/details/111051396介绍的都是非结构化的剪枝,只是从每一层中移除了一些不重要的连接,但是本文作者的实验发现在CPU/GPU上,这种非常规的存储访问方式的实际加速效果非常有限。如下图所示,是对于AlexNet应用L1非结构化剪枝前后的速度对比,剪枝后模型准确率的衰减不超过2%:
在这里插入图片描述上图可以表明,即便模型剪枝后稀疏度很大(例如,超过了95%),但由于权重的分布非常广泛,局部相关性很小,得到的实际加速效果也非常有限。

使用低秩近似进行模型压缩时,一般都是先完成模型的训练,然后模型中的权重矩阵会用多个低秩矩阵的乘积近似,最后再进行模型的微调以提升准确率。低秩近似因为进行了矩阵的分解,可以取得有效的加速。但是,低秩近似只能应用于单个网络层,无法修改网络的结构。

本文作者受三个事实的启发:

  1. 模型中包含了冗余的滤波器和连接;
  2. CNN中一般使用的是三维卷积,但其实可以使用任意形状的卷积以消除不必要的计算;
  3. 因为梯度爆炸和梯度弥散问题,并不是网络越深效果越好。

提出了结构化稀疏学习(structured sparisity learning,SSL),通过Group Lasso进行模型的结构化剪枝。

1.1 SSL总体思路

假设DNN的某层是一个四维tensor, W ( l ) ∈ R N l × C l × M l × K l W^{(l)} \in R^{N_l \times C_l \times M_l \times K_l} W(l)RNl×Cl×Ml×Kl,L表示模型总的层数。SSL优化总的思路可以写成:
在这里插入图片描述
E D ( W ) E_D(W) ED(W)表示数据上的损失; R ( . ) R(.) R(.)表示非结构化的正则化项; R g ( . ) R_g(.) Rg(.)表示应用于每一层的结构化稀疏项。因为Group Lasso可以将一组参数全部变为0,所以作者用它来实现 R g ( . ) R_g(.) Rg(.),公式为 R g ( w ) = ∑ g = 1 G ∣ ∣ w ( g ) ∣ ∣ g R_g(w) = \sum_{g=1}^{G}||w^{(g)}||_g Rg(w)=g=1Gw(g)g w ( g ) w^{(g)} w(g)表示一组参数, ∣ ∣ . ∣ ∣ g ||.||_g .g表示group lasso, ∣ ∣ w ( g ) ∣ ∣ g = ∑ i = 1 ∣ w ( g ) ∣ ( w i ( g ) ) 2 ||w^{(g)}||_g = \sqrt{\sum_{i=1}^{|w^{(g)}|}(w_i^{(g)})^2} w(g)g=i=1w(g)(wi(g))2 ∣ w ( g ) ∣ |w^{(g)}| w(g) w ( g ) w^{(g)} w(g)中的权重数量。

1.2 在filters、channels、filters shape和depth四个维度应用SSL

group lasso中如何分组,就决定了在哪个维度进行SSL。作者提到了四种维度:
在这里插入图片描述filter-wise去掉某个filter;channel-wise去掉所有filter的某个channel;shape-wise调整filter的形状;depth-wise整体去掉某个网络层。

下面所列的公式中全部忽略了非结构化稀疏项 R ( . ) R(.) R(.)

1.2.1 filter & channel SSL

在这里插入图片描述
W n l , : , : , : ( l ) W^{(l)}_{n_l,:,:,:} Wnl,:,:,:(l)表示第 l l l层的第 n l n_l nl个滤波器; W : , c l , : , : ( l ) W_{:,c_l,:,:}^{(l)} W:,cl,:,:(l)表示第 l l l层中所有滤波器的第 c l c_l cl个channel。上面的公式中,是吧filter-wise和channel-wise SSL同步进行,这是因为如果进行了filter SSL,某个filter全部被置为0,计算之后也就生成了一个全为0的输出feature map,filter-wise SSL和channel-wise SSL是互补影响的,因此两者可以同步进行。

1.2.2 shape SSL

使用 W : , c l , m l , k l ( l ) W^{(l)}_{:,c_l,m_l,k_l} W:,cl,ml,kl(l)表示由第 c l c_l cl个channel中所有二维滤波器在 ( m l , k l ) (m_l,k_l) (ml,kl)位置组成的向量,shape SSL是指可以把某些系数裁剪掉,其计算公式为:
在这里插入图片描述

1.2.3 depth SSL

depth SSL是指可以把某些层裁剪掉,其计算公式为:
在这里插入图片描述
裁剪掉某层之后,会造成模型的信息传递被中断,所以作者使用了shortcut连接,如Fig. 2所示,如果某层被裁剪掉之后,前面层的信息会通过shortcut直接传输到后面层。

1.2.4 两种稀疏规则的实际实现

对卷积应用2D filter-wise稀疏:3D卷积是2D卷积的组合,进行1.2.1节所述的filter-wise SSL时,可以按照channel进行group lasso,也就是对 W n l , c l , : , : ( l ) W_{n_l,c_l,:,:}^{(l)} Wnl,cl,:,:(l)应用SSL。

针对GEMM结合使用filter-wise和shape-wise SSL:DNN的实现中,一般都是将卷积运算转成矩阵运算,例如在caffe中,就是通过im2col进行卷积运算,在下面的列子中,将 W n l , : , : , : ( l ) W_{n_l,:,:,:}^{(l)} Wnl,:,:,:(l)转换为了权重矩阵的一列,将 W , : , c l , m l , k l ( l ) W_{,:,c_l,m_l,k_l}^{(l)} W,:,cl,ml,kl(l)转换为了权重矩阵的一行。所以对权重矩阵进行稀疏化,同时移除掉某行和某列,就相当于同时进行filter-wise和shape-wise SSL。

在这里插入图片描述

2 实验

LeNet
在这里插入图片描述在这里插入图片描述Fig. 3表明,有大量的结构化稀疏的空间。

3 代码分析

TODO

本文初步知道了作者的思想,但是总是感觉理解不够深刻,后续复盘。

参考:
https://blog.csdn.net/h__ang/article/details/89357367
https://xmfbit.github.io/2018/02/24/paper-ssl-dnn/


http://chatgpt.dhexx.cn/article/w42Y5Ly7.shtml

相关文章

Exploring Sparsity in Image Super-Resolution for Efficient Inference

目录 原文翻译 Abstract 1. Introduction 2. Related Work 4. Our SMSR Network 4.1. Sparse Mask Generation 4.2. Sparse Mask Convolution 5. Experiments 5.1. Implementation Details 5.2. Model Analysis 5.3. Comparison with State-of-the-art Methods Conclusion …

稀疏大模型简述:从MoE、Sparse Attention到GLaM

文 | 唐工源 | 知乎 Sparsity, ..., is another important algorithmic advance that can greatly improve efficiency. 稀疏性,是(神经架构搜索)之外另一个重要的算法进步,可以大大提高效率。 The use of sparsity in models is…

Sparse Learning

Sparse Learning 本文的内容主要来自余凯老师在CVPR2012上给的Tutorial。前面在总结ScSPM和LLC的时候,引用了很多Tutorial上的图片。其实这个Tutorial感觉写的挺好的,所以这次把它大致用自己的语言描述一下。不过稀疏编码是前两年比较火的东西&#xff0…

理解sparse coding

稀疏编码系列: (一)----Spatial Pyramid 小结(二)----图像的稀疏表示——ScSPM和LLC的总结(三)----理解sparse coding(四)----稀疏模型与结构性稀疏模型 -------------…

干货!SparCL,将Sparsity用在连续学习任务,相同表现下训练效率提升23倍!

点击蓝字 关注我们 AI TIME欢迎每一位AI爱好者的加入! 作者简介 王梓枫 美国东北大学博士生,主要研究方向持续学习(Continual Learning)。 个人主页:https://kingspencer.github.io/ 报告题目 SparCL: 边缘设备上的稀疏…

MORE CONVNETS IN THE 2020S: SCALING UP KER- NELS BEYOND 51 × 51 USING SPARSITY

论文链接: https://arxiv.org/pdf/2207.03620.pdf code: https://github.com/VITA-Group/SLaKlink MORE CONVNETS IN THE 2020S: SCALING UP KER- NELS BEYOND 51 51 USING SPARSITY 一、引言(二)、大内核注意力(二)、卷积中的大…

Self-supervised Learning for Label Sparsity in Computational Drug Repositioning

论文地址:Self-supervised Learning for Label Sparsity in Computational Drug Repositioning 1. Introduction 药物重定位旨在根据已知的药物-疾病关联性揭示上市药物的新用途。其背后的逻辑是:目前市场上的小分子药物具有多靶点特性,这意…

xgboost:分割Sparsity-aware Split Finding

Sparsity-aware Split Finding1 在许多现实问题中,输入 x x x是稀疏的是很常见的。造成稀疏性的可能原因有很多: 1)数据中存在缺失值; 2)统计中频繁出现零项; 3)特征工程的处理结果,如独热编码。 重要的是使算法意识到数据中…

Sparsity constraint稀疏约束详解

Sparsity constraint稀疏约束详解 引子: 线性模型是我们经常使用的一种模型,比如: 文本分类中,bag-of-words 有p 20 K 个特征, 共有 N 5K 个文本样例; 在图像去模糊化,图像分类中,…

[机器学习速成课程] 稀疏性正则化 (Regularization for Sparsity)-学习笔记

稀疏性和 L1 正则化 学习目标: 计算模型大小通过应用 L1 正则化来增加稀疏性,以减小模型大小 降低复杂性的一种方法是使用正则化函数,它会使权重正好为零。对于线性模型(例如线性回归),权重为零就相当于完…

机器学习14:稀疏性-Sparsity

现实世界中,问题的特征的数量往往是很大的,而其中起决定性作用的往往是很小的一部分,稀疏规则化算子的引入会学习去掉这些没有信息的特征,也就是把这些特征对应的权重置为 0。 1.稀疏性正则化:L₁ 正则化 稀疏向量通常…

稀疏(sparsity)矩阵的行压缩存储

压缩矩阵行或列来存储矩阵的格式是很普遍的,它们不会存储不必要的元素(即空值)。但是它们也不是非常有效的,当在一个矩阵-向量积或预解决的每个简单标量中需要间接寻址。行压缩存储方式会把一个稀疏矩阵行的非零数值放在连续的存储…

redis删除锁

redis删除锁 参考:百度安全验证 前言 在分布式系统中,由于redis分布式锁相对于更简单和高效,成为了分布式锁的首先,被我们用到了很多实际业务场景当中。 但不是说用了redis分布式锁,就可以高枕无忧了,如…

Redis进阶: 锁的使用

Redis进阶: 锁的使用 1. 概念1. 原子性2. 事务 2. 使用Redis构建全局并发锁3. Redlock(redis分布式锁)总结 相关Blog 1. 概念 1. 原子性 原子性 原子性是数据库的事务中的特性。在数据库事务的情景下,原子性指的是:一个事务&…

redis锁的几种实现

1. redis加锁分类 redis能用的的加锁命令分表是INCR、SETNX、SET 2. 第一种锁命令INCR 这种加锁的思路是, key 不存在,那么 key 的值会先被初始化为 0 ,然后再执行 INCR 操作进行加一。 然后其它用户在执行 INCR 操作进行加一时&#xff0…

java redis锁_Java中Redis锁的实现

由于具体业务场景的需求,需要保证数据在分布式环境下的正确更新,所以研究了一下Java中分布式锁的实现。 Java分布式锁的实现方式主要有以下三种: 数据库实现的乐观锁 Redis实现的分布式锁 Zookeeper实现的分布式锁 其中,较常用的是前两种方式,但是数据库实现方式需要较多的…

Redis的分布式锁详解

一、什么是分布式锁: 1、什么是分布式锁: 分布式锁,即分布式系统中的锁。在单体应用中我们通过锁解决的是控制共享资源访问的问题,而分布式锁,就是解决了分布式系统中控制共享资源访问的问题。与单体应用不同的是&…

redis锁

一、redis锁的实现 加锁命令: SETNX key value: 当键不存在时,对键进行设置操作并返回成功1,否则返回失败0。 Key是锁的唯一标识,一般按业务来决定命名; Value 往往用来比较加锁的是哪一个线程或者哪一个…

超图 hypergraph 二分图 Bipartite graph

超图是什么 超图超图的意义应用 二分图 超图 超图是什么? 超图的本质特征在于它的超边,它可以连接两个以上的结点(包括两个)。按这样的意义来说,我们所熟悉的普通图只是超图的一个特例而已,而超图则定义了一个更加宽泛的图。 超图…

BiNE: Bipartite Network Embedding 阅读笔记

论文传送门 作者 华东师范大学: 高明周傲英Leihui Chen 中国科学技术大学:何向南 摘要 传统的学习图数据的节点表示的方法大都聚焦于一般的同构网络,忽略了二部图的特殊性质。因此这些方法对于二部图嵌入来说可能是次优的。 本文提出了B…