神经网络通常过度参数化,具有大量冗余。剪枝是消除冗余权重同时尽可能使准确度损失保持处于低位的进程。
下表中显示了这两种方法的对比。
(资料图)
剪枝器旨在减少模型参数数量,同时尽可能降低准确度损失。这是通过迭代方式来完成的,如下图所示。剪枝导致准确度降低,重新训练可恢复准确度。剪枝随后重新训练即构成一次迭代。在剪枝的首次迭代中,输入模型是基线模型,并且已经过剪枝和精调。在后续迭代中,从先前迭代所获取的精调后的模型会变为新的基线。此进程通常会重复数次,直至获取期望的稀疏模型。迭代方法是必需的,因为在单次传递中无法在维持准确度的同时进行模型剪枝。如果一次迭代移除的参数过多,那么准确度损失可能过于剧烈,可能无法恢复。
利用迭代剪枝的进程,可以达到更高的剪枝率,同时模型性能不会出现显著损失。
以下描述了迭代剪枝的 4 个主要阶段:
单步剪枝会实现EagleEye1算法。它仅通过采用了一个简单而又高效的评估组件,就得以在不同的已剪枝模型及其对应精调准确度之间引入强大的正关联,这个组件名为自适应批量归一化。它使您无需实际进行模型精调,即可获取可能达成的准确度最高的子网络。简而言之,单步剪枝方法会搜索一群满足所需模型大小的子网络(即,生成的剪枝后模型),并选择其中最有潜力的子网络。随后,通过对所选子网络进行重新训练来恢复准确度。
搜索满足所需剪枝率的子网络。
从一群具有评估组件的子网络中选择潜在网络。
对剪枝后的模型进行精调。
注释:
1.Bailin Li et al., EagleEye: Fast Sub-net Evaluation for Efficient Neural Network Pruning, arXiv:2007.02491
Vitis AI 优化器中为 PyTorch 提供了 3 种剪枝方法。请参阅以下决策树以选择适合您的网络的方法。
Copyright © 2015-2022 纵横科普网版权所有 备案号:浙ICP备2022016517号-12 联系邮箱:51 46 76 11 3 @qq.com