神经网络压缩类论文阅读笔记


title: 神经网络剪枝类论文阅读笔记
date: 2021-05-04 13:29:08
categories: 学习日志
tags:

  • 神经网络
  • 神经网络剪枝
    mathjax: true
    toc: true

0、my codes

https://github.com/kangxiatao/prune-master
https://gitee.com/kangxiatao/prune-master

1、筛选修剪

AutoPrune: Automatic Network Pruning by Regularizing Auxiliary Parameters

自动剪枝:通过正则化辅助参数自动进行网络剪枝

作者提出AutoPrune,通过优化一组辅助参数来实现剪枝,不过是基于权重剪枝,或能推广到神经元剪枝。

其实是用这组超参数把网络稀疏问题表述为一个优化问题,一组超参数与权重的乘积表示为修剪后的权值矩阵。

在我看来有个很明显的缺点,不管结果如何,用测试集得到一种先验就很蠢,他是根据测试集L1正则化得到的M和训练集L1正则化得到的W,M为所说的辅助参数,M x W为新的权重。

A dynamic CNN pruning method based on matrix similarity

一种基于矩阵相似度的动态CNN剪枝方法

因与我的论文有一点相似之处,所以纳入进来。

大概思路:选过滤器或特征图进行矩阵相似度对比,按一定比例删除相似的。

Channel Pruning for Accelerating Very Deep Neural Networks

通道剪枝加速神经网络

这是一篇ICCV2017的文章,关于用通道剪枝(channel pruning)来做模型加速,通道减枝是模型压缩和加速领域的一个重要分支。

作者不是传统的按范数值剪枝,他利用通道间的冗余来剪枝,先用lasso找出具有代表性的通道,再用最小二乘法重构剩余通道的输出。

最开始的权重是无惩罚训练的,lasso惩罚用来找一个掩码向量(选取通道),最小二次法再进一步优化,个人不太喜欢这种做法,直接对权重做lasso惩罚,虽然没有显式的求解lasso,但简洁有效的做到了稀疏。

Channel-level Acceleration of Deep Face Representations

深度人脸表征的通道级加速

目前的一些网络压缩不一定适用于深层人脸网络,作者提出两种方法,一种基于消除低活跃通道,另一种基于耦合剪枝,重复使用已经计算的元素。

感觉这篇论文有点水,中间没有细看。

Dynamic Channel Pruning: Feature Boosting and Suppression

动态通道剪枝:特征增强和抑制

作者发现神经元的重要性高度依赖输入,提出了动态剪枝,动态模型保证了模型的完整性。在推理过程中,动态网络可以使用输入数据来选择网络的部分进行评估,于是乎可以做增强或抑制处理。

不过动态的剪枝也只能是在运算的环节起到加速作用,并没有减少权重的存储量。

Dynamic Network Surgery for Efficient DNNs

高效DNN的动态网络手术

作者用pruning 和 splicing 来实现动态剪枝,与上一篇不同,此文的动态是指恢复一些被剪掉的连接,因为在复杂的神经网络连接中,连接的重要性难以衡量,可能存在其他冗余的连接被剪掉之后,它可能会变得极其重要。

实现方案是用一个掩码矩阵来标记,通过判别函数得到掩码矩阵。判别函数通过权重的绝对值平方和方差与设定的上下两个阈值比较得到。

我觉得不行。

Filter Pruning via Geometric Median for Deep Convolutional Neural Networks Acceleration

用于深度卷积神经网络加速的几何中值滤波剪枝

作者提出用范数值大小剪枝不合理,按中值剪枝合理。

Infinite Feature Selection

无限的特征选择

本文提出的是一个滤波算法,评估特征的重要性来选择特征,感觉是纯学术上瞎胡闹,不看了。

Learning to Prune Filters in Convolutional Neural Networks

学习修剪神经网络的过滤器

文章提出了一种“try-and-learn”的算法去训练一个pruning agent,过程也很容易理解,先随机剪掉一些,再根据评估得到奖励,利用奖励机制优化pruning agent。

这篇文章和我们的无损剪枝有点像,倒也用不着这么复杂。

NISP: Pruning Networks using Neuron Importance Score Propagation

利用神经元重要性评分传播网络剪枝

作者发现目前的剪枝方法考虑的只是单层或相邻的两层,忽略了网络中整体传播的影响,思路是用一个神经网络重要性分数传播(NISP)算法,将网络剪枝描述为一个二进制整数优化问题。

实现部分我懒得看了,差不多得了。

Optimal Brain Damage

最佳脑损伤

这篇文章最让我震惊的是它的发表自1990,至今在各种网络中都能取得非常优异剪枝效果。我在最新的一些论文中总是能看到它的影子,具体做法就是计算目标函数对参数求二阶导数,用于表示参数的贡献度,基于贡献度修剪,其中的公式和近似方法先保留,很经典。

Optimal Brain Surgeon and General Network Prunng

最佳脑外科医生和一般网络修剪

OBD的改进版,主要运算方面的改进,递归计算海森矩阵的逆矩阵。

Pruning Filter in Filter

在过滤器中修剪过滤器

作者认为修剪后的结构比权重更为重要,并引入一个可学习矩阵作为滤波器骨架,反应每个滤波器的形状。

Rethinking the Smaller-Norm-Less-Informative Assumption in Channel Pruning of Convolution Layers

重新思考卷积层通道剪枝中的值小不重要假设

作者对依据范数值大小剪枝做了些讨论,并提出给卷积通道加一个门,来判断该通道有没有起作用。

Strategies for Re-training a Pruned Neural Network in an Edge Computing Paradigm

在边缘计算范式下重新训练修剪神经网络的策略

部署在边缘移动设备之后很难再重新训练,作者提出了剪枝后重训练的概念。

Soft filter pruning for accelerating deep convolutional neural networks

用于加速深度卷积神经网络的软过滤器修剪

一种动态剪枝方法,它能够让被剪掉的过滤器参与一定的训练从而提高剪枝的效率。

The Generalization-Stability Tradeoff In Neural Network Pruning

神经网络剪枝中的泛化-稳定性权衡

文章对泛化展开了一些讨论,最后通过自己的实验得到如下结论:“减少参数量,减少网络对噪声的过拟合,从而提高泛化能力(test acc)” 的说法是不够准确的,因为大网络在不减少参数量的情况下,一样可以有很好的泛化能力,剪枝能提高网络性能的根本原因是在训练过程中引入了训练噪声,从而提高了泛化能力。

2、稀疏惩罚

Fast ConvNets Using Group-wise Brain Damage

使用群体脑损伤的快速卷积网络

没有特别细致的看,不知道是不是最先提出的,以组的方式修剪卷积张量核。

LEARNING SPARSE NEURAL NETWORKS THROUGH L0 REGULARIZATION

通过正则化L0学习稀疏神经网络

主要是提出一种分布来替代L0优化目标函数,类似伯努利分布的推广,但是我偷懒,没有推导下去。

Learning the Number of Neurons in Deep Networks

学习深度神经网络的神经元数量

使用一个稀疏正则化器,让网络变得更紧凑,文中对group lasso求了闭式解,表明最终神经元参数会趋零。

Learning Structured Sparsity in Deep Neural Networks

深度神经网络的结构稀疏性学习

对Lasso的一种推广,即将特征分组后的Lasso,Group Lasso。

Learning Efficient Convolutional Networks through Network Slimming

通过网络瘦身学习高效卷积网络

将L1正则化施加到BN层的缩放因子上,L1正则化推动BN层的缩放因子趋向于零,从而鉴别出不重要的通道或者神经元。

Pruning Filters for Efficient ConvNets

高效卷积网络的剪枝过滤器

采用L1范数来评估CNN中过滤器的重要性,实现模型剪枝。

PRUNE YOUR NEURONS BLINDLY: NEURAL NETWORK COMPRESSION THROUGH STRUCTURED CLASS-BLIND PRUNING

盲目地修剪你的神经元:神经网络通过结构化的类盲修剪进行压缩

标题很装啊,就是L1惩罚稀疏后结构化剪枝,使得网络更紧凑非稀疏。

Sparse Convolutional Neural Networks

稀疏卷积神经网络

矩阵分解加稀疏约束的融合怪罢了

TRAINING COMPRESSED FULLY-CONNECTED NET-WORKS WITH A DENSITY-DIVERSITY PENALTY

用密度-多样性惩罚训练压缩的全连接网络

看标题就知道,文章将全连接层的密度和多样性也加入损失进行惩罚,意图使得网络变得更稀疏多样性更差。

这点与我们角相异惩罚的想法相反,多样性更差意味着特征表达能力更差,精度上不能接受。

3、对抗剪枝

Towards Optimal Structured CNN Pruning via Generative Adversarial Learning

通过生成对抗学习实现最优结构化 CNN 剪枝

主要思路就是把剪枝网络设为生成器,将输出特征作为Fake,再选一个泛化优异的模型做Baseline,Baseline的输出作为Real,再设计一个全连接层做判别器,最终达到低精度损失的剪枝目的。

这篇很晚才看到,我们前段时间正好做了个类似的实验,还觉得自己对抗剪枝的想法很新颖,做了些相关测试,后来才看到该文献,发现与前人暗合,就放弃了,实在可惜。

4、彩票理论

SNIP: SINGLE-SHOT NETWORK PRUNING BASED ON CONNECTION SENSITIVITY

基于连接敏感度的单次网络剪枝

19年的一篇会议论文,作者提到现有的方法破坏了网络的效用,不能保持原网络的性能,而且剪枝再训练的过程极其繁琐。他们设计了一个标准,以数据相关的方式直接衡量连接的重要性,减少了对权值的依赖,一开始就对网络进行一次剪枝,然后在稀疏剪枝后的网络上进行训练。

具体做法就是定义一个辅助矩阵来做剪枝标记,根据剪掉和保留导致的损失值变化来确定其网络的连接,按照需求的剪枝率保留损失值变化大的,最后近似成把导数大小(无论符号)作为对损失的影响,所以根据导数来设定权重分数进行修剪。

一些细节问题:

  • 初始化权重对损失值变动影响很大,所以初始化的时候要注意梯度在合理的范围,整个网络方差保持不变具有更好鲁棒性。

  • 损失值变化与数据集关系也很大,作者说选取小批量数据就可

The Lottery Ticket Hypothesis: Finding Sparse, Trainable Neural Networks

彩票假设:寻找稀疏的、可训练的神经网络

作者的假设:密集、随机初始化的前馈网络包含子网络(中奖彩票),当独立训练时,这些子网络在类似的迭代次数中达到与原始网络相当的测试精度。

彩票假说的提出,是对传统“预训练-剪枝-精度恢复”工作流的挑战。在这之前通常认为预训练模型的权重对压缩后模型的精度恢复十分重要,然而彩票理论却认为通过随机初始化权重的子网络仍可以达到原始网络的精度。

作者找到的中奖彩票的原始初始化彩票:它们的连接具有初始权重,这使得训练特别有效。然后提出了一个算法,以确定中奖彩票和一系列的实验,支持彩票假说和这些偶然初始化的重要性。

寻找中奖网络:作者提出了迭代幅值剪枝(IMP,iterative magnitude pruning)方法:首先,对初始的稠密网络进行多轮训练,直到模型收敛。然后确定最小的s%个权值,并创建一个二值掩模对这些权值进行剪枝。随后,使用之前的初始化权值重新训练稀疏化后的网络。在模型收敛后,我们重复该剪枝过程,并使用新一轮剪枝后发现的掩模设置初始化权值。我们重复这个过程,直到达到期望的稀疏程度,或者测试准确率显著下降。

正好我前一段时间思考了这么一个问题,我还是蛮相信缘分的。NeurlPS2020的剪枝相关论文都有提到彩票理论,剪枝邻域的探索还在继续。(好好看好好学)

PICKING WINNING TICKETS BEFORE TRAINING BY PRESERVING GRADIENT FLOW

通过保持梯度流在训练前挑选中奖彩票

作者定义一个称之为梯度信号保持的剪枝标准,是基于SNIP和彩票假设的一种扩展,SNIP只考虑一个权重的梯度,容易删除一些重要的连接,彩票假设需要重复的训练。

做法是将梯度再进行一次微分,相当于根据损失值的变化率来评估,称保持梯度流,用泰勒近似来求解的,公式这一块没有SNIP清晰(简单)。

效果很不错,思路还是易懂的,数学上吃了亏,求解的地方自己没推导出来,先跳过了,有机会再钻研一下吧。

Pruning neural networks without any data by iteratively conserving synaptic flow

通过迭代保存突触流在没有任何数据的情况下修剪神经网络

作者提出找到稀疏网络不需要训练,或者不需要查看数据,他们从数学上推导并通过实验验证了一个守恒定律,解释了现有的基于梯度修剪算法为什么初始化时会导致层崩溃,该理论还阐明了如何完全避免层崩溃,从而激发了一种新的修剪算法――迭代突触流修剪(SynFlow)。

  • 文中的两个假设:剪枝的临界压缩等于网络的最大压缩;层大小和平均层分数之间成反比。

  • 突触显著性(Synaptic saliency):一类分数指标,梯度与参数的阿达玛积。 S ( θ ) = ∂ R ∂ θ ⊙ θ \mathcal{S}(\theta)=\frac{\partial \mathcal{R}}{\partial \theta} \odot \theta S(θ)=θRθ

  • 文中证明出的定理:

    • 突触显著性的神经元守恒 ( S i n = ⟨ ∂ R ∂ θ i n , θ i n ⟩ ) = ( S out  = ⟨ ∂ R ∂ θ out  , θ out  ⟩ ) . \left(\mathcal{S}^{i n}=\left\langle\frac{\partial \mathcal{R}}{\partial \theta^{i n}}, \theta^{i n}\right\rangle\right) = \left(\mathcal{S}^{\text {out }}=\left\langle\frac{\partial \mathcal{R}}{\partial \theta^{\text {out }}}, \theta^{\text {out }}\right\rangle\right) . (Sin=θinR,θin)=(Sout =θout R,θout ).

    • 突触显著性的网络守恒

    • 迭代、积极和保守的评分实现了最大的临界压缩

  • 守恒和迭代修剪可避免层崩溃

  • 重新定义一个与数据无关的损失函数

Logarithmic Pruning is All Y ou Need

你需要对数修剪

自彩票假说之后提出了很多假说,本文否定了很多假设,提供了更严格的界限:超参数化网络只需要每个目标子网络权重的对数因子神经元数(除深度之外的所有变量)。前面的意思就是可以得到一个对数因子来确定剪枝网络的参数量,作者进行了很多证明和推导,不过我没整明白。

ROBUST PRUNING AT INITIALIZATION

初始化时的健壮修剪

作者使用原则性的缩放和重新参数化来解决极限修剪时的层崩塌问题,其中提出的EOC初始化方法有待考究,原文相当的长,附录中有大量的推导,对于我来说还是太早了。

*、网络压缩相关(剪枝之后的进一步压缩方法)

Binarized neural networks Training deep neural networks with weights and activations constrained to+ 1 or-1

二值化神经网络:训练神经网络的权值和激活约束为+1或−1

这是2016年的一篇关于模型量化的文章,在网络量化中,有一种极为诱惑的量化方式:1bit量化——极致的压缩!但是1bit的网络在训练时有诸多细节需要完善。

通过简单的二值化函数,前向传播时权重会与一个权重系数相乘,反向传播时先更新之后再量化。

其中BN操作和其他优化的乘法可以用位移操作来代替,加快运算速度。

DEEP COMPRESSION: COMPRESSING DEEP NEURAL NETWORKS WITH PRUNING, TRAINED QUANTIZATION AND HUFFMAN CODING

深度压缩:通过剪枝、训练量化和霍夫曼编码对深度神经网络进行压缩

首先权重剪枝(小于阈值的剪掉,压缩稀疏行/列储存),然后量化和权重共享(聚类方法),最后Huffman Coding进一步压缩。

通过这三阶段的压缩,直接进行一个敌的无。

Learning both Weights and Connections for Efficient Neural Networks

学习权重和有效的神经网络连接

剪枝三步走,训练、剪枝、重训练。

Predicting Parameters in Deep Learning

预测深度学习中的参数

说的好听,其实是低秩近似的方法,over。

Pruning Convolutional Neural Networks for Resource Efficient Transfer Learning

剪枝卷积神经网络在资源高效传输中的应用

论文中提出了一个基于泰勒展开的新准则,用它去近似由于修剪网络参数引起的损失函数的变化。

文中有不少巧妙的细节,值得学习,保留。

#、…

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值