论文解读:神经网络修剪最新研究进展

我想简单介绍近期两篇关于神经网络修剪的论文(免责声明,其中一篇是我们自己的论文):

  • Christos Louizos, Max Welling, Diederik P. Kingma (2018) 《Learning Sparse Neural Networks through L0Regularization》

  • Lucas Theis, Iryna Korshunova, Alykhan Tejani, Ferenc Huszár (2018) 《Faster gaze prediction with dense networks and Fisher pruning》

标题中所写的「修剪」通常是指减少或控制非零参数的数量或神经网络中频繁使用的特征图数量。在较高的层次上,至少有三种方法可以做到这一点,而修剪只是其中的方法之一:

  • 正则化(regularization):修改目标函数/学习问题,所以优化后可能会得到一个参数较少的神经网络。参见 Louizos et al, (2018)

  • 修剪(pruning):面向大规模神经网络,并删除某些意义上冗余的特征或参数。参见 (Theis et al, 2018)

  • 增长(growing):虽然这一方法传播得不够广泛,但是也可以采取这第三种方法,从小型网络开始,按某种增长标准逐步增加新的单元。参见「学界 | 为数据集自动生成神经网络:普林斯顿大学提出 NeST」

为什么要这样做?

对网络进行修剪有不同的原因。最显然的理由是,修剪能在保持相同性能的前提下降低计算成本。删除那些在深度网络结构中不真正使用的特征可以加速推断和训练的过程。你也可以认为,修剪是一种架构搜索的形式:找出每层需要多少特征才能获取最佳性能。

第二种观点是,通过减少参数数量可以减少参数空间的冗余,从而提高泛化能力。正如我们在对深度网络泛化的近期研究中所看到的,参数的原始数量(L_0 范数)实际上并不是泛化能力的充分预测因子。也就是说,我们凭借经验发现修剪网络有助于泛化。同时,社区也正在不断开发(或者,可能在某些情况下是重新发现)新的参数相关量对泛化进行预测和描述。Fisher-Rao 范数就是一个很好的例子。有趣的是,Fisher 修剪 (Theis et al, 2018) 和 Fisher-Rao 范数有着密切的联系,这可能暗示了修剪、参数冗余性和泛化能力深层次的关联(参见「深度 | 可视化线性修正网络:看 Fisher-Rao 范数与泛化之间的关系」)。

L_0 正则化

我认为 Christos Louizos 等人关于 L_0 的论文(第一篇)非常有意思,它可以被视作我几个月前在 machine learning cookbook 中提到的机器学习问题转化的直接应用。这是一个很好的例子,它可以说明如何通过这些一般性的思想,将棘手的机器学习优化问题转化为可执行的 SGD 过程。

因此,我会把该论文总结为一系列的步骤,每个步骤都会对优化问题作出一些推进:

1. 从可能难以优化的理想损失函数入手:通常训练损失加上参数的 L_0 范数,进行线性组合。L_0 范数简单地计算向量中的非零项,是一个不可微的分段常值函数。这是一个困难的组合优化问题。

2. 应用变分优化将不可微函数变成可微函数。这通常需要引入关于参数 θ 的概率分布 p_ψ(θ)。即使目标函数对任何 θ 都不可微,平均损失函数 p_ψ 也可能关于 ψ 可微。为了找到最优的 ψ,通常可以使用强化梯度估计,这也就导致了进化策略的应用。但是,进化策略一般方差很高,因此我们需要进行下一步。

3. 对 p_ψ 应用参数重设技巧构建一个低方差梯度估计器。但是,这只适用于连续变量。为了处理离散变量,我们需要执行第 4 步。

4. 应用 concrete relaxation,通过连续近似的方法逼近离散随机变量。现在,我们就有了一个低方差梯度估计器(相比于强化梯度估计而言),可以通过反向传播和简单的蒙特卡罗采样进行计算。你可以将这些梯度用于 SGD(Adam),这也就是论文中所做的工作。

有趣的是,其中并没有提到 Eq.(3) 和进化策略或变分优化之间的关联。取而代之,其中提到了与基于奖励机制的 spike-and-slab prior 的不同关联。我建议可以带着这种相关性思想阅读这篇论文。

作者接下来表明,这的确能起作用,并且与其他用于减少参数数量的方法相比更具优势。

根据上述步骤,你可以顺着从一个问题向另一个问题转换的思路来领会本文,这能让你对这个方法进行推广和改进。例如,REBAR 或 RELAX 梯度估计器能为 concrete relaxation 提供一个无偏、低方差的替代方案,可能也能获得不错的性能。

Fisher 修剪

我想谈的第二篇文章来自我们自己的实验室。该论文更加注重建立快速神经网络以预测图像显著性的具体应用,而不是一个纯粹的方法类论文。修剪后的网络能捕捉 Twitter 裁剪照片背后的特征关联。

我们的目标也是降低网络中的计算成本,特别是迁移学习设置中的计算成本:如果在预训练过的神经网络上进行构建,你将同时继承解决原始的源任务所需的大量复杂性,这其中大部分对于解决目标任务而言是多余的。我们的高级修剪目标与上一篇论文存在区别:与 L_0 范数或组稀疏度不同的是,我们使用了一个略显复杂的公式直接估计该方法正向传播所需的时间。这是相邻层参数数量的二次函数。有趣的是,这将导致网络架构倾向于交替堆叠厚层和薄层,如下所示:

通过一次减少一个卷积特征图,我们贪婪地修剪训练好的网络。选择下一个需要修剪的特征图有一个重要原则,即最小化由此带来的训练损失函数值的增加。从这个标准出发,对损失函数进行二阶泰勒展开,并添加更多的假设,我们会得到以下保持参数 θ_i 的修剪信号:

其中,F_i 表示 Fisher 信息矩阵的第 i 个对角项。上面的公式仅处理单一参数,但是我们可以通过推广得到移除整个特征图的方法。修剪过程即每次迭代中去除具有最小 Δ 的参数或特征图,此外,在迭代步骤之间要对网络进行重新训练。如果你想了解更多详情,请参阅论文。

除了论文中提到的内容之外,我还想指出一些 Fisher 修剪和之前在博客中提到的想法之间的一些联系。

Fisher-Rao 范数

首先,Fisher 修剪与 Fisher-Rao 范数之间存在一些联系。让我们首先假设 Fisher 信息是对角的——理论上来说这是一个过于简化且不合理的假设,但实际上这种简化能获得很有帮助的算法。在上述假设下,θ 的 Fisher-Rao 范数变成下面的形式:

写成这种形式,你就很容易意识到 FR 范数和 Fisher 修剪标准之间的联系。根据所使用的 Fisher 信息的特定定义,你可以将 FR 范数近似地解释如下:

  • 移除一个随机参数后,训练对数似然度(经验 Fisher 信息)的期望值下降

  • 移除一个参数后,模型(模型 Fisher 信息)定义的条件分布的近似变化

在现实世界中,Fisher 信息矩阵并不是对角的,这实际上是理解泛化的一个重要方面。一方面,只考虑对角元素使得 Fisher 修剪对网络的某些参数重设(非对角雅克比矩阵)是敏感的。不过,Fisher-Rao 范数和参数冗余之间可能还有着更深的联系,尚有待发掘。

弹性权重固化

利用 Fisher 对角信息值指导修剪也和弹性权重固化(Elastic Weight Consolidation)有相似之处(Kirkpatrick et al, 2017)。在弹性权重固化(EWC)中,Fisher 信息值用于确定哪些权重对于源任务而言比较重要。在 EWC 中,该算法是从贝叶斯在线学习的角度派生而来的,不过你也可以从泰勒展开的角度推导它,就像 Fisher 修剪那样。

我用「共享硬盘」的比喻来理解和解释 EWC。(注意:就如同所有的比喻一样,这可能完全没有意义。)神经网络的参数就像是一个硬盘或某种存储容器。在某一任务上训练神经网络需要对训练数据进行压缩,并将它们保存到硬盘当中。如果你没有一个防止数据重写的机制,数据就很可能被覆盖:在神经网络中,灾难性遗忘也以相同的方式发生。EWC 就像是多个用户之间共享硬盘的协议,用户不能相互覆盖彼此的数据。Fisher 信息值可以被视为一个软性的「不可覆盖」标志。在对第一个任务进行神经网络训练之后,我们可以计算 Fisher 信息值,该值能显示哪些参数存储了有关该任务的关键信息。Fisher 值较低的参数是冗余的,它们可以被覆盖然后重新用来存储新的信息。在这个比喻当中,Fisher 信息值的总和可以衡量硬盘驱动器满载的程度,而修剪就像是抛弃实际上不用于存储任何东西的硬盘驱动部分。

小结

本文中,我提到近期的两种方法,它们通过计算应该去掉哪些参数或特征自动学习(修改)神经网络架构。在我看来,方法和文章本身都很有趣。L_0 方法更像是一个简单的优化算法,它可能比 Fisher 修剪中每次去除一个特征的迭代方案更可取。但是,如果你从一个很大的预训练模型开始,想进行迁移学习的设置,Fisher 修剪可能更加适用。

原文链接:http://www.inference.vc/pruning-neural-networks-two-recent-papers/

理论
3
思源
思源

机器之心编辑

返回顶部