Press "Enter" to skip to content

Dropout 可能要换了,Hinton 等研究者提出神似剪枝的 Targeted Dropout

这篇 TargetedDropout论文接受为 NIPS/NeurIPS 2018 关于紧凑神经网络的 Workshop,该研讨会关注构建紧凑和高效的神经网络表征。具体而言,其主要会讨论剪枝、量化和低秩近似等神经网络压缩方法;神经网络表示和转换格式;及使用 DNN 压缩视频和媒体的方式。

 

该 Workshop 的最佳论文是机器之心曾介绍过的 Rethinking the Value of NetworkPruning  ,这篇论文重新思考了神经网络过参数化的作用,该论文表示剪枝算法的价值可能在于识别高效结构、执行隐性的架构搜索,而不是在过参数化中选择「重要的」权重。

 

Workshop 地址:https://nips.cc/Conferences/2018/Schedule?showEvent=10941

 

当然,本文还是重点关注这种 TargetedDropout,它将剪枝隐性地构建到Dropout中,难道也是在隐性地搜索高效神经网络架构?

 

目前有很多研究工作都关注训练一个稀疏化的神经网络,而稀疏化涉及将神经网络的权重或整个神经元的激活值配置为零,并且同时要求预测准确率不能有明显下降。在学习阶段,我们一般能用正则项来迫使神经网络学习稀疏权重,例如 L1 或 L0 正则项等。当然稀疏性也可以通过后期剪枝实现,即在训练过程中使用完整模型,训练完在使用一些策略进行剪枝而实现稀疏化。

 

理想情况下,给定一些能度量任务表现的方法,剪枝方法会去除对模型最没有益处的权重或神经元。但这一过程非常困难,因为数百万参数的哪个子集对任务最重要是没办法确定的。因此常见的剪枝策略侧重于快速逼近较优子集,例如移除数量较小的参数,或按照任务对权重的敏感性进行排序,并去除不敏感的权重。

 

研究者新提出来的 TargetedDropout基于这样的观察:Dropout正则化在每次前向传播中只激活局部神经元,因此它本身在训练过程中会增加稀疏性属性。这鼓励神经网络学习一种对稀疏化具有鲁棒性的表示,即随机删除一组神经元。作者假设如果我们准备做一组特定的剪枝稀疏化,那幺我们应用Dropout到一组特定的神经元会有更好的效果,例如一组数值接近为零的神经元。

 

作者称这种方式为 TargetedDropout,其主要思想是根据一些快速逼近权重重要性的度量对权重或神经元进行排序,并将Dropout应用于那些重要性较低的元素。与正则化Dropout观察结果相似,作者表示该方法能鼓励神经网络学习更重要的权重或神经元。换而言之,神经网络学习到了如何对剪枝策略保持足够的鲁棒性。

 

相对于其它方法,TargetedDropout的优点在于它会令神经网络的收敛对剪枝极其鲁棒。它同时非常容易实现,使用TensorFlow 或 PyTorch 等主流框架只需要修改两行代码。此外,该网络非常明确,我们所需要的稀疏性程度都可以自行设定。

 

评审员对该方法总体是肯定的,但对其收敛性,也提出了质疑。由于对神经元(权重)重要性的估计,是基于Dropout(剪枝)前的情况,而不是实际Dropout(剪枝之后,这样估值误差有可能在优化迭代过程中累积,最终导致发散的结果。论文作者承诺,在最终版的附录中,会给出更详细的证明。

 

最后,Hinton 等研究者开源了实验代码,感兴趣的读者可以参考源代码:

 

项目地址:https://github.com/for-ai/TD/tree/master/models

 

在项目中,我们会发现对Dropout重要的修正主要是如下代码。其中模型会对权重矩阵求绝对值,然后在根据 targ_rate 求出要对多少「不重要」的权重做Dropout,最后只需要对所有权重的绝对值进行排序,并 Mask 掉前面确定具体数量的「不重要」权重。

 

 norm = tf.abs(w)
 idx = tf.to_int32(targ_rate * tf.to_float(tf.shape(w)[0]))
 threshold = tf.contrib.framework.sort(norm, axis=0)[idx]
 mask = norm < threshold[None, :]

 

确定哪些权重不重要后,接下来的Dropout操作就和和一般的没什幺两样了。下面,我们具体看看这篇论文吧。

 

论文:TargetedDropout

 

 

论文地址:https://openreview.net/pdf?id=HkghWScuoQ

 

神经网络因为其有大量参数而显得极为灵活,这对于学习过程而言非常有优势,但同时也意味着模型有大量冗余。这些参数冗余令压缩神经网络,且还不会存在大幅度性能损失成为可能。我们介绍了一种 TargetedDropout,它是一种用于神经网络权重和单元后分析(Post hoc)剪枝的策略,并直接将剪枝机制构建到学习中。

 

在每一次权重更新中,TargetedDropout会使用简单的挑选准则确定一组候选权重,然后再将Dropout应用到这个候选集合以进行随机剪枝。最后的神经网络会明确地学习到如何对剪枝变得更加鲁棒,这种方法与更复杂的正则化方案相比非常容易实现,同时也容易调参。

 

2 TargetedDropout

 

2.1Dropout

 

我们的研究工作使用了两种最流行的伯努利Dropout技术,即 Hinton 等人提出的单元Dropout[8, 17] 和 Wan 等人提出的权重Dropout[20]。对于全连接层,若输入张量为 X、权重矩阵为 W、输出张量为 Y、Mask 掩码 M_io 服从于分布 Bernoulli(α),那幺我们可以定义这两种方法为:

 

 

单元Dropout在每一次更新中都会随机删除单元或神经元,因此它能降低单元之间的相互依赖关系,并防止过拟合。

 

 

权重Dropout在每一次更新中都会随机删除权重矩阵中的权值。直观而言,删除权重表示去除层级间的连接,并强迫神经网络在不同的训练更新步中适应不同的连接关系。

 

2.2 基于数量级的剪枝

 

目前比较流行的一类剪枝策略可以称之为基于数量级的剪枝,这些策略将 k 个最大的权重数量级视为最重要的连接。我们一般可以使用 argmax-k 以返回所有元素中最大的 k 个元素(权重或单元)。

 

单元剪枝[6],考虑权重矩阵列向量的 L2范数:

 

 

权重剪枝[10],若 top-k 表示相同卷积核中最大的 k 个权值,考虑权重矩阵中每一个元素的 L1范数:

 

 

其中权重剪枝一般能保留更多的模型准确度,而单元剪枝能节省更多的计算力。

 

2.3 方法

 

若有一个由θ参数化的神经网络,且我们希望按照方程 (1) 和 (2) 定义的方法对 W 进行剪枝。因此我们希望找到最优参数θ*,它能令损失函数ε(W(θ*)) 尽可能小的同时令 | W(θ* )| ≤ k,即我们希望保留神经网络中最高数量级的 k 个权重。一个确定性的实现可以选择最小的 |θ| − k 个元素,并删除它们。

 

但是如果这些较小的值在训练中变得更重要,那幺它们的数值应该是增加的。因此,通过利用靶向比例γ和删除概率α,研究者将随机性引入到了这个过程中。其中靶向比例(targeting proportion)表示我们会选择最小的γ|θ| 个权重作为Dropout的候选权值,并且随后以丢弃率α独立地去除候选集合中的权值。

 

这意味着在 TargetedDropout中每次权重更新所保留的单元数为 (1 − γ · α)|θ|。正如我们在后文所看到的,TargetedDropout降低了重要子网络对不重要子网络的依赖性,因此降低了对已训练神经网络进行剪枝的性能损失。

 

如下表 1 和表 2 所示,研究者的权重剪枝实验表示正则化方案的基线结果要比 TargetedDropout差。并且应用了 TargetedDropout的模型比不加正则化的模型性能更好,且同时参数量还只有一半。通过在训练过程中逐渐将靶向比例由 0 增加到 99%,研究者表示我们能获得极高的剪枝率。

 

 

表 1:ResNet-32 在 CIFAR-10 的准确率,它会使用不同的剪枝率和正则化策略。上表展示了权重剪枝策略的结果,下表展示了单元剪枝的结果。

 

 

表 2:比较 TargetedDropout和 ramping TargetedDropout的 Smallify。实验在 CIFAR-10 上使用 ResNet-32 完成。其中左图为三次 targeted 中最好的结果与 6 次 smallify 中最好结果的对比,中间为检测出最高的剪枝率,右图为 ramp targ 检测出的更高剪枝率。

 

3 结语

 

我们提出了一种简单和高效的正则化工具 TargetedDropout,它可以将事后剪枝策略结合到神经网络的训练过程中,且还不会对特定架构的潜在任务性能产生显着影响。最后 TargetedDropout主要的优势在于简单和直观的实现,及灵活的超参数设定。

Be First to Comment

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注