外观
激活剪枝
Activation Pruning
一旦我们完成了网络训练,几乎总会剩下大量无用的神经元——它们对网络的性能几乎没有贡献,但仍然占用内存。换句话说,有很高比例的神经元,如果从训练好的网络中移除,并不会显著影响性能:

当然,我这不是在随意凭空而谈。我在自己的项目里已经一次又一次地通过实验验证了这一点。下面是核心思路。

训练完成后,我们将数据集通过模型运行(这次不进行反向传播),并分析各个神经元的平均激活值(activation)。在这里,我们常常观察到许多神经元的激活值始终接近于零。
因此,可以将它们从网络中剪枝(pruning),因为它们对模型的输出影响非常小。对于剪枝,我们可以设定一个剪枝阈值 (λ),并剪除所有激活值小于该阈值的神经元。
这在直觉上也讲得通。更具体地说,如果某个神经元很少具有高的激活值,那么我们就可以合理地认为它对模型的输出没有贡献,可以安全地将其剪除。

下表比较了剪枝后模型与原始(完整)模型在一系列剪枝阈值 (λ) 下的准确率:
在剪枝阈值 λ=0.4 时,模型的验证准确率仅下降了 0.62%,但参数数量下降了 72%。这是一个巨大的削减,而两个模型几乎同样出色!当然,这里存在权衡,因为我们没有做得和原始模型一样好。但在许多情况下,尤其是在部署机器学习模型时,准确率并不是决定这些的唯一主要指标。
相反,若干运营指标,如效率、速度、

内存消耗等,也是关键的决策因素。这正是模型压缩(model compression)技术在这种情况下如此关键的原因。