点击上方“AI公园”,关注公众号,选择加“星标“或“置顶”
前戏作者:Max Pechyonkin
编译:ronghuaiyang
Hinton:“要处理14维空间中的超平面,想象一个三维空间,大声对自己说“14”。每个人都这么做。”
在本文中,我将讨论两篇有趣的论文,它们提供了一种简单的方法,通过使用一种智能的集成方法来提高任何给定神经网络的性能。它们是:
“Loss Surfaces, Mode Connectivity, and Fast Ensembling of DNNs” by Garipov et. al
“Averaging Weights Leads to Wider Optima and Better Generalization” by Izmailov et. al
提前阅读材料,更容易理解这篇文章的上下文:
“Improving the way we work with learning rate” by Vitaly Bushaev
传统的集成方法结合了几个不同的模型,使它们在相同的输入上进行预测。然后采用平均的方法确定总体的最终预测。它可以是简单的投票,一个平均值,甚至是另一个学会了通过集成模型的输入来预测正确的值或标签的模型。岭回归是一种将多种预测相结合的特殊方法,这种方法被Kaggle-winning machine learning practitioners所使用
当应用于深度学习时,集成可以用来组合多个神经网络的预测,从而产生一个最终的预测。通常在集成中使用不同架构的神经网络是一个好主意,因为它们很可能在不同的训练样本上出错,因此集成的好处会更大。
但是,你也可以使用相同的体系结构集成模型,它也可以提供令人惊讶的好结果。利用这种方法的一个非常酷的技巧在snapshot ensembling paper中提出。作者在训练相同网络的同时保存权值快照,然后在训练后创建具有相同架构但权值不同的网络集合。这可以提高测试性能,而且这也是一种非常方便的方法,因为你只需要训练一个模型一次,只需要不时地保存权值。
你可以参考这篇很棒的文章了解更多细节。如果你还没有使用循环学习速率,那么你绝对应该使用它,因为它已经成为标准的最先进的训练技术,非常简单,不需要大量的计算,而且几乎不需要额外的成本就可以获得显著的收益。
上面所有的例子都是模型空间中的集合,因为它们组合了几个模型,然后使用模型的预测来生成最终的预测。
然而,在我在这篇文章中讨论的论文中,作者建议在权值空间中使用一个新的集合。该方法通过将同一网络在不同训练阶段的权值进行组合得到一个集合,然后使用该模型与权值组合进行预测。这种方法有两个好处:
当结合权重时,我们最后仍然得到一个模型,这加快了预测
事实证明,这种方法优于目前的快照集成
让我们看看它是如何工作的。但首先我们需要了解一些关于损失曲面和可推广解的重要概念。
第一个重要的观点是,训练的网络是多维权重空间中的一个点。对于给定的体系结构,每个不同的网络权重组合都会产生一个单独的模型。由于任意给定的体系结构都有无穷多个权重组合,因此会有无穷多个解。神经网络的训练目标是找到一个在训练和测试数据集上都能提供低损失函数值的特解(权重空间中的点)。
在训练过程中,通过改变权值,训练算法改变网络,在权值空间中运动。梯度下降算法在损失平面上运动,平面高度值由损失函数的值给出。
多维权值空间的几何形象化和理解是非常困难的。同时,理解它是非常重要的,因为在训练过程中,随机梯度下降本质上是在这个多维的空间中穿越一个损失曲面,并试图找到一个好的解决方案——在损失曲面上损失值低的“点”。已知这类表面有许多局部优化。但事实证明,它们并非都一样好。
Hinton:“要处理14维空间中的超平面,想象一个三维空间,大声对自己说“14”。每个人都这么做。”
窄最优和宽最优。在训练和测试期间,扁平最小值将产生类似的损失。然而,在训练和测试中,窄的损失会产生非常不同的结果。换句话说,宽最小值比窄最小值更容易泛化。
一个可以区分好的解决方案和坏的解决方案的度量标准是它的“平整度”。其思想是训练数据集和测试数据集将产生相似但不完全相同的损失曲面。你可以想象一个测试表面会相对于训练表面移动一点。对于较窄的解决方案,在测试期间,由于这种转移,造成低损耗的点可能会有很大的损失。这意味着这种“狭义”的解决方案不能很好的泛化:训练损失小,测试损失大。另一方面,对于“宽”而平的解决方案,这种转换将导致训练和测试损失彼此接近。
我解释了窄解决方案和宽解决方案之间的区别,因为这篇文章重点关注的新方法会带来好的和宽的解决方案。
一开始,SGD将在权重空间上有一个大的飞跃。然后,由于余弦退火使得学习速率变小,SGD会收敛到某个局部解,算法会将模型加入到集合中,对模型进行“快照”。然后再次将速率重置为高值,SGD在收敛到某个不同的本地解决方案之前再次进行大跳跃。
快照集成方法中的循环长度是20到40个ephoch。长学习速率循环的思想是能够在权重空间中找到足够不同的模型。如果模型太相似,那么对集成中独立网络的预测就会太接近,集成的好处就会被忽略。
快照集成循环非常好用,可以提高模型性能,但是快速的几何集成循环更加好用。
快速几何集成与快照集成非常相似,但它有一些不同的特性。它使用线性分段循环学习速率表,而不是余弦。其次,FGE的循环长度要短得多——每个循环只有2到4个ephoch。乍一看,短周期是错误的,因为每个周期结束时的模型彼此接近,因此将它们组合起来不会带来任何好处。然而,正如作者所发现的那样,由于在足够不同的模型之间存在低损失的连接路径,因此可以在这些路径上小步移动,并且所遇到的模型将会有足够的不同,从而允许对它们进行集成,并获得良好的结果。因此,与快照集合相比,FGE显示出了提升,它使用了更小的步骤来找到模型(这使得它可以更快地进行训练)。
为了从快照集成或FGE中获益,需要存储多个模型,然后对所有模型进行预测,然后对最终预测进行平均。因此,为了集成的额外性能,需要付出更高的计算量。所以没有免费的午餐。到底有没有呢?这就是关于随机加权平均的新论文的切入点。
随机权重平均近似于快速几何集合,但计算损失很小。SWA可以应用于任何体系结构和数据集,并在它们中都显示出良好的结果。这篇论文认为SWA会导致更宽的最小值,我在上面讨论了它的好处。SWA在传统的理解上并不是一个整体。在培训结束时,你会得到一个模型,但是它的性能胜过快照集成和FGE方法。
SWA的直觉来自实际观察到的局部最小值在每个学习速率周期结束的时候趋向于积累在损失平面的边缘地区,这里损失值是很低的(点W1,W2和W3在上图的红色区域的边缘,红色区域的损失是很低的)。通过取几个这样的点的平均值,就有可能以更低的损失(上图中的Wswa)实现一个宽的、泛化的解决方案。
它是这样工作的。你只需要两个模型,而不是许多模型的集合:
第一个模型存储模型权值的运行平均值(公式中的Wswa)。这将是训练结束后的最终模型,用于预测。
第二个模型(公式中的w)将遍历权值空间,使用循环学习率策略对其进行探索。
每个学习速率周期结束时,通过对旧的正在运行的平均权值和新的来自第二个模型的权值去平均,来更新正在运行的平均模型。按照这种方法,你只需要训练一个模型,并且在训练期间只在内存中存储两个模型。对于预测,你只需要运行平均模型,并且对其进行预测要比使用前面描述的集成快得多,集成使用许多模型进行预测,然后对结果进行平均。
作者的论文提供了PyTorch实现的代码:https://github.com/timgaripov/swa。
— END—英文原文:https://towardsdatascience.com/stochastic-weight-averaging-a-new-way-to-get-state-of-the-art-results-in-deep-learning-c639ccf36a
在2019年,大家喜欢哪些内容呢,给下面的菜单投个票吧!
往期精彩回顾
1、人人都能看得懂的深度学习介绍!全篇没有一个数学符号!
2、深度学习物体检测论文阅读路线图以及官方实现
3、新手必看的Top10个机器学习算法(这些都学会了你就是老手了
4、论文看吐了没有?做研究的同学瞧一瞧看一看啦,教你读论文:为什么读以及如何读
5、面试时,遇到决策树相关的问题怎么办?看完下面的30道题,你应该就心里有底了
本文可以任意转载,转载时请注明作者及原文地址。
请长按或扫描二维码关注本公众号
来,给我好看吧!