我是靠谱客的博主 柔弱咖啡豆,最近开发中收集的这篇文章主要介绍【卷积神经网络的加速】Speeding up Convolutional Neural Networks with Low Rank Expansions,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

主题:【深度卷积神经网络的加速】

Speeding up Convolutional Neural Networks with Low Rank Expansions

附上论文链接:上一篇中提到的低秩方法的参考文献

http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.748.118&rep=rep1&type=pdf

 

 

摘要:

1.卷积层的重复性计算消耗了大部分时间,论文提出了两种方法来加速这些计算过程。

通过cross-channel 和 filter redundancy 的方法来构建秩为1的低秩filter。

2. 方法与架构无关所以可以轻松应用于现有的CPU以及GPU的卷积加速。

 

  • Introduction
  1. 对已经训练好的CNN,进行少量的修改已达到加速的效果。性能会有少量的损失,但是可以调整到所需要的级别。
  2. 主要是利用了不同特征通道(channel)和 滤波器(filter)之间的冗余。
  3. 论文提供了两种近似方案,并为每种方案提供两种优化方法,每一种优化方案都能够应用于当今的GPU和CPU

 

  • Related Work
  1.  算法部分

     Denton 使用低秩近似和滤波器的优化,对单一卷积层实现1.6倍加速,准确度损失1%。   

     Mamalet 使用秩为1的filter,与平均池化层进行结合,但是这种设计不能用于一般的网络结构设计。  

     Vanhoucke 表示将权值进行八位量化可以对网络进行有效的加速,同时对网络acc损失最小.

      Rigamonti 表明多个图像滤波器可以通过一组共享的可分离(rank-1)滤波器进行近似,从而实现大幅加速,精度损失最小。

 

     2.硬件部分

     cuda-convnet 和Caffe 表明高度优化的CPU和GPU代码可以为CNN提供卓越的计算性能。

     通过在GPU上的批量图像上有效计算的FFT,在傅里叶域中执行卷积。

     方法表明,可以利用特定的CPU架构,例如,通过使用SSSE3和SSSE4定点指令以及内存中数据的适当对齐。

     Farabet表明,使用CNN的定制FPGA实现可以大大提高处理速度。

     3.特定架构

     选择性搜索的搜索空间缩减技术通过廉价地识别图像中的少量候选对象位置,大大减少了必须计算CNN的完全前向通过的次数。

     PS:这篇论文中提出的优化方法不依托于任意架构,可与上述所提的方法进行融合。

三.Filter Approximations

利用不同信道与filter之间的存在冗余这一事实,对已训练好的神经网络进行加速。

 

第一种方法

单通道输入图像与d*d*N的filter进行卷积,复杂度为O(d*d*N*h’*w’)h’,w’为输出的尺寸

通过M个滤波器的较小基组的线性组合来近似滤波器组

得到的新的复杂度

时,复杂度得到有效的压缩。

 

另一种方法:

将(d*d)filter分解为一列(d*1)乘以一行(1*d)的序列的乘积,这样一来秩为1.,且卷积关系相互独立。复杂度可以减少为O(2dH’W’)。

 

论文使用的方法:

利用冗余在信道维度中执行低秩分解,可以实现大幅加速。

PS:::FFT的方法可以与该方法结合,对单一卷积过程进行加速,但是由于计算FFT时产生的开销,FFT加速往往对大型滤波器更好)

 

 

2.1Approximating Convolutional Neural Network Filter Banks

1.用自己的话介绍了CNN的过程,他说卷积层是最expensive的,不大理解

2.3D的filter与输入的channel数量相同,举了RGB图像作为输入的例子。

N为卷积核的数量,若channel数位C的话,上面模型的复杂度位O(CNd*dH‘W’)

 

提出两种优化方法:

  1. M<N,使用M个filter进行线性组合来近似原filter.从下图右半部分就可以准确理解a={a1…..aN}为系数,优化之后,复杂度为O(CMd*dH‘W’+cMNH’W’)。
    若再进一步考虑到将近似过后的filter进行分解,分解成秩为1的filter(一行乘以一列,数量为M,下图左半部份),复杂度进一步减少为O(MC(d + N)H‘W‘),所以当M<<d*min{d,N}时,该方法可有效降低复杂度。PS:上图以单一通道为例。
  2. 根据1中所提到的方法,对于每个通道中的filter都可以进行2D的可分解filter来近似。方法1之利用了输出时的通道间的冗余,方法2将会结合输入域输出时的通道间的冗余

 

 

假定W>>d,那么上图复杂度可以被简化为O(K(N +C)dH0W 0)

当K(N +C)<<NCd时,该方法有显著提高。

    1. optimization

针对上文提到的两种scheme,提出两种具体的优化方法来得到最优的可分解的fiter:

  1. 最小化filter重建误差直接重建原始滤波器。
  1. 针对Scheme1

 

 

函数双凸,在给定Sm的情况下,{an}的值可以唯一确定

左半部分为L2重建误差,右半部分核范数||Sm||*,详细推理过程在论文

  1. 针对Scheme2

通过用两个变量对可分性进行建模来避免核范数约束,这种优化更简单。

在优化水平和垂直滤波器组之间交替执行共轭梯度下降,得到最优解。

  1. 最小化输出误差,间接地近似卷积层filter。

直接对权值参数进行估计得到的最佳结果的结果不一定会是预测结果最好的。

作为替代方案,可以通过在给定训练数据的情况下重建原始卷积层的输出来对filter进行估计优化。

L是卷积层的层数,是的l层卷积层的输出,X={xi}为输入的训练数据

通过原始卷积层的输出和优化后的输出的L2误差来反向传播训练近似层。*(如上图所示),然后一层一层的向下进行。

两个优点:1.和输入数据相关,原始滤波器中和数据相关性较小的维度将会被忽略。2.近似层的优化可以通过学习来一步一步叠加。例:当地一层被估计好了之后,接下来的输入数据将会走向估计层而不是原始层。

PS:若直接根据分类的acc结果对整个网络进行优化估计,则会由于过拟合而加入惩罚项。

  • 实验过程与结

1.使用预训练的CNN对场景文本执行不区分大小写的字符分类。给出基本模型细节以及加速优化的效果。

2.原始:四层CNN,输出层softmax进行分类,输入是24*24的灰度图像,输出为26个不区分大小写的字母和10个数字(共36类)

Maxout groups :

3.训练集样本数量为163222,测试集数量5379(在ICDAR2003的训练数据集中移除非字符和数字的样本)CNN的训练使用SGD完成, 除了第一层卷积层之外,其余所有层dropout=0.5防止过拟合,并且在训练过程中自适应地降低学习率。

4.在第二和第三层卷积层应用之前提到的优化方法。(第四层核为1*1,第一层会对输入造成影响)网络加速效果显着,因为Conv2和Conv3占整个网络处理时间的90%,如表所示。

重建误差随着加速的倍速增加而逐渐恶化,与滤波器重建相比,数据重建优化方案对于相同的加速比给出较低的误差。(第二种优化方案效果更佳)

在不同的解决方案下,加速倍速的提升对acc造成的影响。

最后

以上就是柔弱咖啡豆为你收集整理的【卷积神经网络的加速】Speeding up Convolutional Neural Networks with Low Rank Expansions的全部内容,希望文章能够帮你解决【卷积神经网络的加速】Speeding up Convolutional Neural Networks with Low Rank Expansions所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(53)

评论列表共有 0 条评论

立即
投稿
返回
顶部