学习权重和链接以提高神经网络的效率
【论文】模型剪枝(Network Pruning)论文详细翻译_u013044310的博客-CSDN博客
摘要
神经网络需要大量计算, 又占用大量内存, 因此难以在嵌入式系统上部署。另外, 传统网络在训练开始前就确定了体系结构;因此, 训练无法改善体系结构。为了解决这些限制,我们描述了一种减少神经网络所需的存储和计算的方法,而不影响它们的准确性,只学习重要的连接。我们的方法使用三个步骤来修建冗余连接。首先,我们训练网络来了解哪些连接时重要的。接下来,我们修建不重要的连接。最后,我们重新训练网络,以微调其余连接的权重。在 ImageNet 数据集上, 相比于AlexNet 我们的方法减少了 9x的参数(从6100万到 670万),而不会导致精度损失。在VGG16网络基础上做类似的实验发现,整个网络可以在没有丢失准确性的情况下减少13x的参数。
1简介
为了实现修建网络的目标,我们提出了一种方法,以保留原始精度的方式修建网络连接。在初始训练阶段后,我们删除所有的权重低于阈值的连接。此修建将稠密的完全连接层转换为稀疏图层。这一阶段学习网络的拓扑,即了解哪些连接是重要的,并删除不重要的连接。然后我们重新训练稀疏网络,以便其余的连接可以补偿已删除的连接。修建和再训练的阶段可以反复重复,以进一步减少网络复杂性。实际上,这个训练过程和人类大脑的发展也非常类似,神经元突触在孩子的发育的前几个月大量产生, 并在接下来的时间里逐渐修剪不常使用的连接, 逐渐发育成适合所生存世界的成年人。
2、相关工作
深度神经网络明显有非常大的冗余。这就导致了计算和内存使用的浪费。有各种各样的方法来消除冗余: Vanhoucke 等. [11] 探索了一个带有8位整数 (vs 32 位浮点) 激活的定点实现。丹顿等人 [12] 利用神经网络的线性结构, 通过寻找参数的适当的低秩逼近, 并保持在原始模型的1% 内的准确性。与类似的精度损失, 锣等人 [13] 使用矢量量化压缩深度模型, 减少存储, 但由于访问codebook而增加了一级间接的内存索引。这些逼近和量化技术与网络修剪是正交的, 它们可以一起使用来获得更好的压缩效果。(以后慢慢看一下,都没听过)
还有其他试图通过将完全连通的层替换为全局平均池来减少神经网络参数的数量。网络体系结构 [14] 和 GoogLenet [15] 通过采纳这个想法在几个指标上达到最先进的结果。但是, 这种方法使得迁移学习, 即复用从ImageNet 数据集上所学到的特征, 并仅通过微调全连接层将它们应用到新任务中变得更加困难。这个问题是由 Szegedy 和 al [15] 指出的, 并使他们产生了在网络顶部增加一个线性层, 以实现迁移学习的灵感。(这里也基本没有听过,包括迁移学习啥的,后面看)
网络修剪已被用于减少网络复杂性和减少过度拟合。修剪的早期的方法是有偏权重衰减(biased weight decay)。Optimal Brain Damage [17] 和Optimal Brain Surgeon [18] 基于损失函数的海森矩阵来修剪网络结构,减少连接的数量, 并且建议这样修剪比基于权重的修剪是更加准确。然而,计算二重导数对于今天的大规模神经网络来说是困难的。
Dropout [19] 和 DropConnect [20] 零激活和连接在网络减少过度拟合而不是提高效率。在 [21] 中的开头部分描述了类似的方法。Dropout不论是在最初的目的还是在它的训练过程中通过断开连接或激活层(稠密层仍然是稠密层, 在部署时没有参数保存)而不是修剪他们这两方面来说,都:不同于我们的方法。(大名鼎鼎的dropout,到时候去看)
HashedNets [22] 是最近的一种方法, 通过使用哈希函数将连接权重随机分组到哈希桶中来减少模型大小, 以便同一哈希桶内的所有连接共享单个参数值。这种技术可以从修剪中受益。正如在石等人 [23] 和温伯格等 [24] 中指出的, 稀疏性将最小化哈希碰撞使特征哈希更有效。HashedNets 可以与修剪一起使用, 以提供更好的参数节约。(又是没听过的)
3、除了学习权重之外还学习怎样连接
3.1 正则化
选择正确的正则化对剪枝和再训练的性能有影响。L1正则化惩罚非零参数,导致更多的参数接近于零。这在修剪后,再训练之前具有更好的准确性。然而,其余的连接不如L2正则化好,导致再训练后的精度较低。总的来说,L2正则化给出了最好的剪枝结果。这将在实验部分进行进一步的讨论。
3.2 Dropout和Capacity Control
Dropout被广泛用于防止过拟合, 这也适用于再训练。然而, 在再训练期间, 必须调整Dropout率, 以匹配模型的变化。韩丁的Dropout [19] 可以被视为一个 “软Dropout”, 因为对于每次训练,每个参数概率都有概率被取消连接,而不是训练之前就指定了一些Dropout的参数。修剪可以被视为一个 “硬Dropout”, 其中的参数是永远被修剪,而且没有机会在重新参与训练。当参数变得稀疏时, 分类器将选择最具信息量的预测因子, 因而具有更少的预测方差, 从而减少了过度拟合。由于修剪已经降低了模型容量, 再训练的时候Dropout率应该更小。(Dropout率,这段大概理解了,但是Dropout还是要去仔细看一下)
量化, 令 为第i层的参数个数 ,
是原始网络的参数个数,
再训练后的网络的参数个数,
是第i层中的神经元个数。由于Dropout对神经元起作用, 并且 Ci 与 i有一个正交关系?, 因此根据等式 1, 修剪后的Dropout率参数应遵循等式 2, 其中 Do 表示原始的Dropout率, Dr 表示在再训练后的Dropout率。
3.3 局部修剪与参数协同适应 (Local Pruning and Parameter Co-adaptation)
在再训练过程中,保留初始训练阶段幸存于修剪的权重比重新初始化修剪层的权重更好。CNNs具有脆弱的协同适应特征(co-adapted feature):梯度下降在初始训练的时候能找到优秀的解决方案,但在重新初始化一些层并且重新训练它们后不能。因此,当我们重新训练修剪后的层时,我们应该保留幸存的参数,而不是重新初始化它们。(意思应该是把之前幸存的参数作为预训练的值)
从保留的权重开始重新训练修剪后的层需要更少的计算,因为我们不需要通过整个网络反向传播。此外,随着网络的不断深入,神经网络更容易出现梯度消失的问题,这使得深度网络的剪枝误差难以恢复。(这里剪枝误差和网络深度还有梯度消失的关系不太明白)为了防止这种情况的发生,我们修复了CONV层的参数,并且在只修剪了FC层后才重新训练FC层,反之亦然。
3.4 迭代修剪
学习正确的连接是一个迭代的过程。修剪后再训练是一次迭代,经过多次这样的迭代之后,可以找到最小数的连接。在不损失精度的情况下,该方法可以将AlexNet上的剪枝率从5x提高到9x。每次迭代都是一个贪婪的搜索,因为我们可以找到更好的连接。我们也实验探索了基于参数绝对值的剪枝,但效果不好
3.5 修剪神经元
剪枝连接后,具有零输入连接或零输出连接的神经元可以安全地剪枝。这种修剪是通过去除与被修剪过的神经元之间的所有连接来进一步进行的。再训练阶段自动到达结果,死亡的神经元将没有输入和输出连接(好像是说这个神经元修剪的过程是在再训练的时候自动完成的)这是由于梯度下降和正则化造成的,具有零输入连接(或零输出连接)的神经元对最终损失没有贡献,从而导致其输出连接(或输入连接)的梯度分别为零。只有正则化项才能将权重推到零,因此,死亡的神经元将在再训练过程中被自动移除。
4 实验
剪枝阈值为一个质量参数(quality parameter)乘以一个层的权值的标准偏差(standard deviation of a layer's weights)
L1正则化在剪枝后直接比L2提供了更好的精度,因为它将更多的参数推近于零。然而,再训练后L2优于L1,因为进一步将值推向零没有任何好处。一个尝试是使用L1正则化进行剪枝,然后使用L2进行再训练,但这并没有击败在两个阶段简单地使用L2。一种模式中的参数不能很好的适应另一种模式。
最大的收益来自迭代修剪。
有两个绿点的精度略高于原始模型,我们认为,这种精度的提高是由于修剪找到正确的网络容量,从而减少过拟合。
CONV层和FC层都可以被修剪,但灵敏度不同。下图显示了每一层对网络剪枝的敏感性。
CONV层比全连接层更敏感。第一个卷积层直接与输入图像相互作用,对修剪最为敏感。我们推测这种灵敏度是由于输入层只有3个通道,因此比其他卷积层的冗余更少。我们使用灵敏度结果来找到每个层的阈值:例如,最小的阈值被应用于最敏感的层,这就是第一个卷积层。
将修剪后的层存储为稀疏矩阵的开销仅为15.6%,存储相对索引而不是绝对索引可以将FC层索引所占用的空间减少到5位。类似的,CONV层索引只能用8位来表示。
修剪后,AlexNet和VGGNet的存储需求足够小,所有的权重可以存储在芯片上,而不是芯片外的DRAM,那需要更大数量级的能量来访问。 我们剪枝方法的目标是专门针对稀疏DNN(sparse DNN)的固定功能硬件,这给通用硬件的稀疏计算(sparse computation)带来了困难。
上图显示了修剪前(左)和修剪后(右)的权重分布的直方图。权重来自于AlexNet的第一层全连接层。这两个面板有不同的y轴尺度。最初的权重分布以零为中心,尾巴迅速下降。几乎所有的参数都在[−0.015,0.015]之间。修剪后,大的中心区域被删除。网络参数在再训练阶段对自己进行调整。结果表明,这些参数在[−0.025,0.025]之间形成了一个双峰分布,并在x轴上的分布更大。
6. 结论
我们提出了一种通过找到正确的连接来提高神经网络的能量和存储效率而不影响准确性的方法。
这导致实时图像处理的内存容量和带宽需求更小,使其更容易部署在移动系统上。