译:《有效神经网络的权重和连接学习》
论文地址:Learning both Weights and Connections for Efficient Neural Networks
Motivation
神经网络都是计算密集型和内存密集型的,使得它们难以在嵌入式系统上部署。此外,传统网络在训练型前会固定网络结构,因此训练是无法改变系统结构的。为了解决这些限制,作者提出了他们的剪枝方法,通过只学习重要的连接,在不影响网络精度的情况下,将神经网络所需存储和计算减少一个数量级。
如图,从这些数据中可以看到,每个连接的功耗主要由内存访问决定,大型网络不适合片上存储,因此需要成本更高的DRAM访问。
修剪网络的目标就是减少运行如此大型网络所需的功耗,以便它们可以在移动设备上实时运行。通过修剪而减小的模型大小还促进了包含DNN的移动应用的存储和传输。
相关工作
神经网络通常是过度参数化的,并且深度学习模型存在显著的冗余,因此有人提出各种方法来移除这些冗余:如使用8-bit整数定点实现激活;利用神经网络线性结构,找到参数的低阶近似;利用矢量量化压缩网络等
还有一些其它的尝试,通过用全局平均池化替换全连接层来减少神经网络的参数数量。
而网络剪枝已被用于降低网络复杂性和减少过度匹配。一个早期的剪枝方法是偏置权重衰减(biased weight decay),之后还有一些基于损失函数的海森(Hessian)的连接数量,但这些方法中的二阶导数需要额外的计算量。
HashedNets是一种减少模型大小的技术,方法是使用散列函数将连接权重随机分组到散列桶中,以便同一散列桶中的所有连接共享单个参数值。稀疏性将最大限度地减少散列冲突,使特征散列更加有效。
方法简介
如图,论文提出的方法分为三步:
正常训练模型
在正常训练模型之后,删除权重低于阈值的所有连接。这样可以将密集的、完全连接的层转换为稀疏层。
重新训练稀疏网络,以便剩余的连接可以补偿已删除的连接。
可以迭代地重复修剪和重新训练的阶段,以进一步降低网络复杂性。
一些技巧
正则化
选择正确的正则化方法会影响修剪和再训练的性能。L1正则化惩罚非零参数,导致更多接近零的参数。这在修剪之后,但在重新训练之前提供了更好的准确性。然而,剩余的连接不如L2正则化,导致重新训练后的准确率较低。
总而言之,L2正则化提供了最佳的修剪结果。
Dropout比例调整
当参数变得稀疏时,分类器将选择信息量最大的预测值,从而具有更小的预测方差,从而减少过拟合。由于修剪已经降低了模型的能力,重训练的Dropout比率应该较小。
Local Pruning and Parameter Co-adaptation
在重训练的过程中,应该保留幸存的参数,而不是重新初始化它们。
随着网络变得更深,神经网络容易遇到梯度消失问题,这使得深层网络的精度在剪枝后更难恢复,为了防止这种情况,可以固定卷积层的参数,只剪枝FC层之后重训练FC层,反之亦然。
迭代剪枝
迭代剪枝的效果比一次剪枝更好
剪枝神经元
一些0输入或0输出的神经元也应该被剪枝