为什么不修剪你的神经网络?

机器算法验证 机器学习 神经网络 优化 修剪
2022-02-09 02:56:23

等人(2015) 使用一种迭代修剪的方法,通过删除具有非常低值的权重,将其网络减少到其原始大小的 10%,而不会损失准确性,因为这些权重变化很小。作为机器学习领域的新手,您为什么不这样做(除非您的网络已经非常小)?在我看来,对于深度学习,您的网络会更小、更快、更节能等,而无需实际成本。我们都应该将这种方法用于更大的神经网络吗?

3个回答

修剪确实非常有效,我认为它在训练后“部署”以供使用的网络上非常常用。

修剪的问题在于,您只能在训练完成后才能提高效率、速度等。您仍然必须使用全尺寸网络进行训练。在模型开发和部署的整个生命周期中,大部分计算时间都花费在开发过程中:训练网络、使用模型架构、调整参数等。在确定最终模型之前,您可能会训练网络数百次。与此相比,减少已部署网络的计算只是杯水车薪。

在 ML 研究人员中,我们主要尝试改进 DNN 的训练技术。我们通常不关心部署,因此不使用修剪。

有一些关于利用剪枝技术加速网络训练的研究,但进展不大。例如,请参阅我自己 2018 年的论文,该论文试验了对修剪和其他结构稀疏的 NN 架构的训练:https ://arxiv.org/abs/1810.00299

除了其他答案中提出的要点外,修剪后的网络可能不会更快常见的机器学习框架对计算密集矩阵乘法(即正常的、未修剪的层)具有非常有效的优化,但这些算法无法利用某些权重设置为 0(因为它们被修剪)这一事实的任何额外优势。

所以剪枝的结果往往是神经网络更小,但速度不快,性能更差。在许多情况下,更好的性能比更小的模型尺寸更重要,因此在这些情况下修剪没有用。

请注意,如果 1. 修剪掉绝大多数权重,修剪后的网络可能会更快,在这种情况下,稀疏矩阵乘法算法可能会开始变得更快;或 2.(在 CNN 中;我不确定这是否适用于其他架构)如果修剪不是权重级别而是通道级别(因此要么一次修剪整个通道,要么整个通道保持原样),这确实适用于优化;或 3. 给定专门的硬件或 ML 框架。

如前所述,您需要在大型网络上进行训练才能修剪它们。关于原因有一些理论,但我最熟悉的是“金票”理论。Michael Carbin 在 Jonathan Frankle的“彩票假设:寻找稀疏、可训练的神经网络”中提出了神经网络的金票理论,断言网络的一个子集已经非常接近,而训练的作用是找到和稍微改进网络的这个子集,同时淡化网络的错误部分。一个现实生活中的类比是,您的彩票中只有少数几张值得购买,但您需要大量购买才能找到它们。

与 dropout 背后的原始原理有关:“并行”训练许多网络,有时您将训练唯一的黄金票网络。