图3显示了使用深度压缩的总体结果。Lenet-300-100和Lenet-5是在MNIST数据集上评估的,而AlexNet、VGGNet、GoogleNet和SqueezeNet是在ImageNet数据集上评估的。压缩比从10倍到49倍不等。即使对于那些全卷积神经网络(如GoogleNet和SqueezeNet),深度压缩仍然可以将它们压缩一个数量级。我们重点看一下SqueezeNet,它比有相同预测精度的AlexNet少50倍的参数,但仍然还可以再压缩10倍使其模型大小只有470KB,这使它可以很容易地在片上SRAM里使用。而访问SRAM比DRAM更快更节能。 我们还尝试了其他压缩方法,例如基于低秩近似的方法,但是压缩比没有那么高。你可以在Deep Compression的论文中找到完整的讨论。
图3 深度压缩的实验结果 DSD训练 深度神经网络可以被大量剪枝和压缩的事实意味着我们当前的训练方法具有一些局限性。它不能充分利用密集模型的全部容量来找到最佳局部最小值,而一个剪枝过的有着更少神经突触的稀疏模型也可以达到相同的精度。这带来了一个问题:我们是否可以通过恢复并重新学习这些权重来达到更好的精度吗? 让我们拿奥运会田径比赛的训练做个比喻。教练首先会让跑步运动员在高海拔的山地上训练,那里会有很多的限制:低氧、寒冷等。结果当跑步运动员再次返回平原地区时,他的速度就会有提高。对于神经网络来说也是相同的道理:给定严格约束的稀疏训练方法得到的网络模型有跟密集网络模型一样的性能。一旦你解除了这些约束,模型可以工作得更好。 理论上,以下是DSD训练能行之有效的因素: 1. 避开鞍点: 优化深度网络最大的困难之一是鞍点的扩散。 DSD训练方法通过剪枝和重新密集化的框架来避开鞍点。对收敛的模型做剪枝干扰了模型学习的模式并使得网络模型能够避开鞍点,这使模型有机会可以收敛到一个更好的局部或全局最小值。这个想法也跟“模拟退火”算法类似。虽然模拟退火算法在搜索图上随着概率降低而随机跳跃,但是DSD训练方法会确定性的偏离收敛值。这一收敛值是通过在第一次密集模型训练阶段中去除小权重值和增强稀疏支持得到的。 2. 正规化和稀疏训练: 稀疏训练步骤中的稀疏正规化将模型优化降维到较低维空间,在这个空间中的损失函数表面更平滑并且对噪声更鲁棒。很多数值实验证实了稀疏训练和最终DSD方法可以降低方差和减少误差。 3. 强大的重新初始化: 权重初始化在深度学习中起着重要的作用。传统的训练方法只有一次初始化的机会,而DSD方法在训练过程中给模型优化第二次(或更多)的机会。它基于更鲁棒的稀疏训练结果来重新初始化。我们基于稀疏模型结果来重新构建密集网络,这可以理解为剪枝权重的零初始化。其它的初始化方法也值得尝试。 4. 打破对称性: 隐藏单元的置换对称性会使权重对称,atv,因此在训练中容易相互影响。在DSD方法中,权重剪枝打破了与权重相关的隐藏单元的对称性,而且在最终的密集模型中是不对称的。 我们在几个主流的CNN/RNN/LSTM模型上进行了图像分类、图像描述和语音识别数据集的实验,发现这种“密集-稀疏-密集”的训练流程能够显著地提高模型精度。我们的DSD训练方法采用了三个步骤:密集,稀疏,密集。图4展示了每个步骤。
密集-稀疏-密集的训练流程 1.初始的密集训练: 第一个“密集”步骤通过在密集网络上的常规网络训练来学习连接权重。然而跟传统训练不同的是,该“密集”步骤的目的不是学习连接权重的最终值,而是学习哪些连接是重要的。 2. 稀疏训练: “稀疏”步骤会剪枝掉权重值较低的连接并重新训练稀疏网络。我们对试验中的所有层都使用相同的稀疏度,因此会有一个单一的超参数:稀疏度(sparsity)。我们对每一层的参数进行排序,从网络中去掉最小的N* sparsity个稀疏参数,将密集网络转换为稀疏网络。我们发现稀疏比率为50%-70%的效果非常好。然后我们重新训练稀疏网络,这可以在稀疏约束下完全复原模型的精度。 3. 最终的密集训练: (责任编辑:本港台直播) |