您现在的位置: 主页 > 香港九龙王 >

香港九龙王

模型剪枝不可忽视的推断效率提升方法

  目前,深度学习模型需要大量算力、内存和电量。当我们需要执行实时推断、在设备端运行模型、在计算资源有限的情况下运行浏览器时,这就是瓶颈。能耗是人们对于当前深度学习模型的主要担忧。而解决这一问题的方法之一是提高推断效率。

  剪枝正是提高推断效率的方法之一,它可以高效生成规模更小、内存利用率更高、能耗更低、推断速度更快、推断准确率损失最小的模型,此类技术还包括权重共享和量化。深度学习从神经科学中汲取过灵感,而剪枝同样受到生物学的启发。

  随着深度学习的发展,当前最优的模型准确率越来越高,但这一进步伴随的是成本的增加。本文将对此进行讨论。

  人工神经网络中的剪枝受启发于人脑中的突触修剪(Synaptic Pruning)。突触修剪即轴突和树突完全衰退和死亡,是许多哺乳动物幼年期和青春期间发生的突触消失过程。突触修剪从公出生时就开始了,家长们快报名!省教育一直持续到 20 多岁。

  神经网络通常如上图左所示:下层中的每个神经元与上一层有连接,但这意味着我们必须进行大量浮点相乘操作。完美情况下,我们只需将每个神经元与几个其他神经元连接起来,不用进行其他浮点相乘操作,这叫做「稀疏」网络。

  稀疏网络更容易压缩,我们可以在推断期间跳过 zero,从而改善延迟情况。

  如果你可以根据网络中神经元但贡献对其进行排序,那么你可以将排序较低的神经元移除,得到规模更小且速度更快的网络。

  如果你根据神经元权重的 L1/L2 范数进行排序,那么剪枝后模型准确率会下降(如果排序做得好的话,可能下降得稍微少一点),网络通常需要经过训练-剪枝-训练-剪枝的迭代才能恢复。如果我们一次性修剪得太多,则网络可能严重受损,无法恢复。因此,在实践中,剪枝是一个迭代的过程,这通常叫做「迭代式剪枝」(Iterative Pruning):修剪-训练-重复(Prune / Train / Repeat)。

  将权重矩阵中的多个权重设置为 0,这对应上图中的删除连接。为了使稀疏度达到 k%,我们根据权重大小对权重矩阵 W 中的权重进行排序,然后将排序最末的 k% 设置为 0。

  为使稀疏度达到 k%,我们根据 L2 范数对权重矩阵中的列进行排序,并删除排序最末的 k%。

  随着稀疏度的增加、网络删减越来越多,任务性能会逐渐下降。那么你觉得稀疏度 vs. 性能的下降曲线是怎样的呢?

  我们来看一个例子,使用简单的图像分类神经网络架构在 MNIST 数据集上执行任务,并对该网络进行剪枝操作。

  很多研究者认为剪枝方法被忽视了,它需要得到更多关注和实践。本文展示了如何在小型数据集上使用非常简单的神经网络架构获取不错的结果。我认为深度学习在实践中用来解决的许多问题与之类似,因此这些问题也可以从剪枝方法中获益。