是前一篇论文中直接使用的网络剪枝。
背景
神经网络是过参数化的,存在显著冗余。
Vanhoucke等人[11]探索了一种具有8位整数(与32位浮点)激活的定点实现。Denton等人[12]通过找到参数的适当低阶近似值并将精度保持在原始模型的1%以内,利用了神经网络的线性结构。Gong等人。[13] 使用矢量量化的压缩深度对流。这些近似和量化技术与网络修剪正交,它们可以一起使用以获得进一步的增益[14]。已经有其他尝试通过用全局平均池化代替完全连接层来减少神经网络的参数数量。网络中的网络架构[15]和GoogLenet[16]通过采用这一理念,在几个基准测试上取得了最先进的成果。
存在问题:难以迁移,即重用在ImageNet数据集上学习的特征,并仅通过微调完全连接的层将其应用于新任务。Szegedy等人[16]注意到了这个问题,并促使他们在网络顶部添加线性层,以实现迁移学习。
网络修剪已被用于降低网络复杂性和减少过度拟合。修剪的早期方法是有偏权重衰减[17]。最优脑损伤[18]和最优脑外科医生[19]基于损失函数的Hessian修剪网络以减少连接数量,并表明这种修剪比基于数量级的修剪(如权重衰减)更准确。然而,二阶导数需要额外的计算。
HashedNets[20]是一种最近的技术,通过使用哈希函数将连接权重随机分组到哈希桶中,从而使同一哈希桶中的所有连接共享一个参数值,从而减少模型大小。这种技术可能受益于修剪。正如Shi等人在
[21]和Weinberger等人[22],稀疏性将最小化哈希冲突,使特征哈希更加有效。HashedNets可以与修剪一起使用,从而更好地节省参数。
作者的方案
三步:
1.通过正常的网络学习连接,学习哪些联系是重要的
2.修建连接
3.再次训练维护精度
1.正则化
L1正则化惩罚非零参数,从而导致更多接近零的参数。这在修剪后但在重新训练之前提供了更好的准确性。
剩余的连接不如L2正则化,导致重新训练后的精度较低。总体而言,L2正则化给出了最好的修剪结果。
2.dropout
从数量上讲,设Ci为第i层中的连接数,Cio为原始网络,Cir为重新训练后的网络,Ni为第一层中的神经元数。由于脱落作用于神经元,Ci随Ni呈二次方变化,根据方程1,因此修剪参数后的脱落率应遵循方程2,其中Do表示原始脱落率,Dr代表再培训期间的辍学率。
3.局部修剪和参数自适应
在重新训练过程中,保留修剪后连接的初始训练阶段的权重比重新初始化修剪后的层更好。细胞神经网络包含脆弱的协同适应特征[24]:当网络最初被训练时,梯度下降能够找到一个很好的解决方案,但在重新初始化一些层并对其进行再训练之后就不能了。因此,当我们重新训练修剪后的层时,我们应该保留保留的参数,而不是重新初始化它们。
4.迭代修剪
学习正确的连接是一个迭代的过程。修剪之后再训练是一次迭代,在多次这样的迭代之后,可以找到最小数量的连接。在不损失准确性的情况下,与单步激进修剪相比,该方法可以将AlexNet上的修剪率从5倍提高到9倍。每一次迭代都是一次贪婪的搜索,因为我们可以找到最好的连接。我们还根据参数的绝对值对其进行了概率修剪实验,但结果更糟。
5.修剪神经元
修剪连接后,可以安全地修剪具有零输入连接或零输出连接的神经元。这种修剪是通过移除与修剪后的神经元之间的所有连接来进一步实现的。
再训练阶段自动得出死亡神经元将同时具有零输入连接和零输出连接的结果。这是由于梯度下降和正则化造成的。
具有零输入连接(或零输出连接)的神经元对最终损失没有贡献,导致其输出连接(或输入连接)的梯度分别为零。只有正则化项才会将权重推到零。因此,在再训练过程中,死亡的神经元将被自动移除。