CondenseNet特点在于可学习分组卷积的提出,结合训练过程进行剪枝,不仅能准确地剪枝,还能继续训练,使网络权重更平滑,是个很不错的工作



来源:晓飞的算法工程笔记 公众号

论文:Neural Architecture Search with Reinforcement Learning

Introduction


  DenseNet基于特征复用,能够达到很好的性能,但是论文认为其内在连接存在很多冗余,早期的特征不需要复用到较后的层。为此,论文基于可学习分组卷积提出CondenseNet,能够在训练阶段自动稀疏网络结构,选择最优的输入输出连接模式,并在最后将其转换成常规的分组卷积分组卷积结构。

CondenseNets


  分组卷积能够有效地降低网络参数,对于稠密的网络结构而言,可以将$3\times 3$卷积变为$3\times 3$分组卷积。然而,若将$1\times 1$卷积变为$1\times 1$分组卷积,则会造成性能的大幅下降,主要由于$1\times 1$卷积的输入一般有其内在的联系,并且输入有较大的多样性,不能这样硬性地人为分组。随机打乱能够一定程度地缓解性能的降低,但从实验来看还不如参数较少的DenseNet。

  另外,论文认为稠密连接虽然有利于特征复用,但是存在较大的冗余性,但很难定义哪个特征对当前层是有用的。为此,论文引入了可学习的分组卷积来解决上述问题。

  • Learned Group Convolution

  分组卷积的学习包含多个阶段,如图3和图4所示,前半段训练过程包含多个condensing阶段,结合引导稀疏化的正则化方法来反复训练网络,然后将不重要的filter剪枝。后半部分为optimization阶段,这个阶段对剪枝固定后的网络进行学习。实现细节如下:

  1. Filter Groups,卷积分组

  将标准卷积进行分组,比如$1\times 1$卷积的核大小为$O\times R$矩阵$\mathbb{F}$,将该卷积核分为$G$组,标记为$\mathbb{F}1,\mathbb{F}2,\cdots,\mathbb{F}G$,每个$\mathbb{F}g$大小为$\frac{O}{G}\times R$,$\mathbb{F}_{i,j}^g$代表$g$组内处理$i$输入和$j$输出的卷积核,注意这里没有对输入进行对应的分组。

  1. Condensation Criterion,压缩标准

  在训练的过程逐步剔除每个组中权重较低的输入特征子集,$i$输入特征对于$g$组的重要程度通过求和组内所有对应的权值获得${\sum}{i=1}^{O/G} |\mathbb{F}{i,j}g|$,将$\mathbb{F}g$中重要程度较小的输入特征对应的列置为零,从而将卷积层稀疏化。

  1. Group Lasso

  一般而言,为了减少剪枝带来的准确率影响,可以通过使用L1正则方法引导权值尽量稀疏。由于分组卷积的特性,CondenseNets需要更严格的列稀疏来引导组内的卷积尽量使用相同的输入子集,因此采用group级别的稀疏性,论文提出group-lasso正则化:

  根号内的项由列中最大的元素主宰,group-lasso能够引导稀疏的$F^g$列趋向完全为0。

  1. Condensation Factor

  可学习分组卷积不仅能够自动发现最优的输入输出连接模式,而且更灵活。组内使用的输入特征数不一定为$\frac{1}{G}$倍,而是根据定义condensation factor $C$(不一定等于$G$),允许每组选择$\lfloor \frac{R}{C} \rfloor$个输入。

  1. Condensation Procedure

  CondenseNet的剪枝在训练过程中进行,如图3所示,在每个$C-1$condensing阶段,会剪除$\frac{1}{C}$权重,在训练的最后,仅保留每个卷积组内的$\frac{1}{C}$权重。每个condensing阶段的训练周期设为$\frac{M}{2(C-1)}$,$M$为总的训练周期,所有condensing阶段共占训练的一半。

  需要注意,训练阶段并没有真正地将权重去除,而是使用二值tensor作为掩膜进行element-wise相乘,这样的实现在GPU上仍是高效的,不会带来太多额外的耗时。

  1. Learning rate

  训练使用cosine学习率退火,训练过程如图4所示,中间的损失突然上升是由于最后的condensing阶段后剪枝了一半的权重(最后的condensing阶段内仅$\frac{2}{C}$权重)导致的,但从图中可以看出,训练很快就恢复了。

  1. Index Layer

  在训练后,需要去除剪枝的权重转换为常规的网络结构,这样不仅能够降低网络参数,还能保证在计算能耗有限的设备上高效运行。为此CondenseNet在发布时需要加入Index层,该层的原理如图3最右所示,根据剪枝后的剩余权重对输入特征进行重排,将可学习分组卷积的剩余权重转换成分组卷积,训练阶段到测试阶段的转换如图1。

  需要注意,论文对$1\times 1$分组卷积的输出进行了重排,这样做的原因是为了让后面的分组卷积能够地使用到前面分组卷积提取的属性。

Architecture Design

  除了可学习分组卷积,论文还对原来的DenseNet结构进行了修改,如图5所示,共包含两点修改:

  • Exponentially increasing growth rate(IGR),Densenet每层增加$k$个新的特征图,$k$称为增长率。而论文发现越深的层实际更依赖较高维的特征,因此需要增强与当前层较近的特征连接,通过逐渐增加增长率来实现。设置增长率为$k=2^{m-1}k_0$,$m$为dense block下标,$k_0$为常数,这样能够增加较后层输出的特征的占比。
  • Fully dense connectivity(FDC),为了更多的特征重用,将所有的层进行了连接,并为不同的层提供了不同的下采样操作。

Experiments

  验证论文提出的改进方法的效果。

  CIFAR-10上的轻量级网络性能对比。

  CIFAR-10和CIFAR-100上的剪枝SOTA网络性能对比。

  ImageNet上的轻量级网络性能对比。

  ImageNet上的SOTA网络推理耗时对比。

  对不同超参进行了对比实验。

CONCLUSION


  CondenseNet特点在于可学习分组卷积的提出,整体的结构设计十分巧妙。以往的剪枝工作都是在网络训练后进行的,导致精度有较大的下降,而可学习分组卷积结合训练过程进行剪枝,不仅能准确地剪枝,还能继续训练,使网络权重更平滑,是个很不错的工作。





如果本文对你有帮助,麻烦点个赞或在看呗~

更多内容请关注 微信公众号【晓飞的算法工程笔记】

CondenseNet:可学习分组卷积,原作对DenseNet的轻量化改造 | CVPR 2018的更多相关文章

  1. 卷积神经网络学习笔记——轻量化网络MobileNet系列(V1,V2,V3)

    完整代码及其数据,请移步小编的GitHub地址 传送门:请点击我 如果点击有误:https://github.com/LeBron-Jian/DeepLearningNote 这里结合网络的资料和Mo ...

  2. Group Convolution分组卷积,以及Depthwise Convolution和Global Depthwise Convolution

    目录 写在前面 Convolution VS Group Convolution Group Convolution的用途 参考 博客:blog.shinelee.me | 博客园 | CSDN 写在 ...

  3. 深度学习之卷积神经网络(CNN)

    卷积神经网络(CNN)因为在图像识别任务中大放异彩,而广为人知,近几年卷积神经网络在文本处理中也有了比较好的应用.我用TextCnn来做文本分类的任务,相比TextRnn,训练速度要快非常多,准确性也 ...

  4. 深度学习之卷积神经网络(CNN)的应用-验证码的生成与识别

    验证码的生成与识别 本文系作者原创,转载请注明出处:https://www.cnblogs.com/further-further-further/p/10755361.html 目录 1.验证码的制 ...

  5. 深度学习之卷积神经网络CNN及tensorflow代码实例

    深度学习之卷积神经网络CNN及tensorflow代码实例 什么是卷积? 卷积的定义 从数学上讲,卷积就是一种运算,是我们学习高等数学之后,新接触的一种运算,因为涉及到积分.级数,所以看起来觉得很复杂 ...

  6. 分组卷积+squeezenet+mobilenet+shufflenet的参数及运算量计算

    来一发普通的二维卷积 1.输入feature map的格式为:m * m * h1 2.卷积核为 k * k 3.输出feature map的格式为: n * n * h2 参数量:k * k * h ...

  7. 深度学习之卷积神经网络CNN及tensorflow代码实现示例

    深度学习之卷积神经网络CNN及tensorflow代码实现示例 2017年05月01日 13:28:21 cxmscb 阅读数 151413更多 分类专栏: 机器学习 深度学习 机器学习   版权声明 ...

  8. 【神经网络与深度学习】卷积神经网络(CNN)

    [神经网络与深度学习]卷积神经网络(CNN) 标签:[神经网络与深度学习] 实际上前面已经发布过一次,但是这次重新复习了一下,决定再发博一次. 说明:以后的总结,还应该以我的认识进行总结,这样比较符合 ...

  9. JUC源码学习笔记4——原子类,CAS,Volatile内存屏障,缓存伪共享与UnSafe相关方法

    JUC源码学习笔记4--原子类,CAS,Volatile内存屏障,缓存伪共享与UnSafe相关方法 volatile的原理和内存屏障参考<Java并发编程的艺术> 原子类源码基于JDK8 ...

随机推荐

  1. cb11a_c++_顺序容器的操作4_容器大小操作_resize-max_size

    cb11a_c++_顺序容器的操作4 2 容器大小的操作 3 c.size() 容器当前的个数 4 c.max_size(),容器最大存储量 5 c.empty() 是否为空 6 c.resize(n ...

  2. VNC连接cnetos图形化界面

    VNC连接cnetos图形化界面 Linux系统在服务器上一般都直接最小化安装,是不安装图形界面的,但是有时候,有一些特殊情况,需要使用图形界面,而下面就利用VNC来实现类似windows的远程桌面功 ...

  3. 【hdoj】哈希表题hdoj1425

    hdoj1425 github链接 #include<cstdio> #include<cstring> using namespace std; const int offs ...

  4. 提交代码到gitbub.com

    提交代码到gitbub.com touch README.md //新建说明文件 git init //在当前项目目录中生成本地git管理,并建立一个隐藏.git目录 git add . //添加当前 ...

  5. 图解 Git 基本命令 merge 和 rebase

    Git 基本命令 merge 和 rebase,你真的了解吗? 前言 Git 中的分支合并是一个常见的使用场景. 仓库的 bugfix 分支修复完 bug 之后,要回合到主干分支,这时候两个分支需要合 ...

  6. 微服务配置中心 Apollo 源码解析——Admin 发送发布消息

    内容参考:https://www.toutiao.com/a6643383570985386509/ 摘要: 原创出处http://www.iocoder.cn/Apollo/admin-server ...

  7. skywalking中表字段的信息

    https://skyapm.github.io/document-cn-translation-of-skywalking/zh/6.2.0/concepts-and-designs/scope-d ...

  8. Spring学习笔记下载

    动力节点的spring视频教程相当的经典:下载地址 https://pan.baidu.com/s/1eTSOaae

  9. 发布Nuget包时遇到都意外

    准备好工具和发布教程.(这些网上都有,我就不说了,就说说我遇到都意外.) 在发布包都过程中,我给我都dll命名为Common.不知道是不是这个原因导致的我包发布上去后,程序对其引用时居然没主动引用进程 ...

  10. TreeMap实现