随机加权平均 -- 在深度学习中获得最优结果的新方法

标签: AI开发 | 发表时间:2018-06-21 16:06 | 作者:
出处:https://www.leiphone.com

本文为雷锋网字幕组编译的技术博客 A Simple Guide to the Versions of the Inception Network,原标题,作者为 Bharath Raj。

翻译 | 龙翔    整理 |  孔令双

原文链接:

https://towardsdatascience.com/stochastic-weight-averaging-a-new-way-to-get-state-of-the-art-results-in-deep-learning-c639ccf36a

雷锋网 AI 研习社:在这篇文章中,我将讨论最近两篇有趣的论文。它们提供了一种简单的方式,通过使用一种巧妙的集成方法提升神经网络的性能。

  1. Garipov 等人提出的 “Loss Surfaces, Mode Connectivity, and Fast Ensembling of DNNs”  

  2. Izmailov 等人提出的 “Averaging Weights Leads to Wider Optima and Better Generalization” 

若希望更容易理解这篇博客,可以先阅读这一篇论文:

  1. Vitaly Bushaev 提出的 “Improving the way we work with learning rate” 

传统的神经网络集成方法

传统的集成方法通常是结合几种不同的模型,并使他们对相同的输入进行预测,然后使用某种平均方法得到集合的最终预测。 它可以是简单的投票法,平均法。或者甚至可以使用另一个模型,根据集成模型的输入学习并预测正确的值或标签。岭回归是一种特殊的集成方法,被许多在 Kaggle 竞赛获奖的机器学习从业人员所使用。



网络快照集成法是在每次学习率周期结束时保存模型,然后在预测过程中同时使用保存下来的模型。

当集成方法应用在深度学习中时,可以通过组合多个神经网络的预测,从而得到一个最终的预测结果。通常情况下,集成不同结构的神经网络是一个很好的方法,因为不同的模型可能在不同的训练样本上犯错,因此集成模型将会得到更大的好处。



网络快照集成法使用基于退火策略的循环学习率策略。

但是,你也可以集成相同结构的神经网络模型,也会得到很棒的结果。在网络快照集成法论文中,作者基于这种方法使用了一个非常酷的技巧。作者在训练相同网络时使用权重快照,在训练结束后用这些结构相同但权重不同的模型创建一个集成模型。这种方法使测试集效果提升,而且这也是一种非常简单的方法,因为你只需要训练一次模型,将每一时刻的权重保存下来就可以了。

想要了解更多的细节,你可以参考这个博客。如果你还没有使用循环学习率策略,那么你一定要了解它。因为这是当前最先进而且最简单的训练技巧了,计算量不大,也几乎不需要额外成本就可以提供很大的收益。

上面的例子都是基于模型的集成方法,因为它们是通过结合多个模型的预测从而产生最终的预测结果。

但在这篇博客即将讨论的论文中,作者提出了一种新的基于权重的集成方法。这种方法通过结合相同网络结构不同训练阶段的权重获得集成模型,然后进行预测。这种方法有两个优点:

当结合权重时,我们最后仍然是得到一个模型,这提升了预测的速度

实验结果表明,这种方法打败了当前最先进的网络快照集成法

来看看它是怎么实现的吧。但首先我们需要了解一些关于损失平面和泛化问题的重要结论。

权重空间中的解决方案

第一个重要的观点是:一个训练好的网络是多维权重空间中的一个点。对于一个给定的网络结构,每一种不同的权重组合将得到不同的模型。因为所有模型结构都有无限多种权重组合,所以将有无限多种组合方法。训练神经网络的目标是找到一个特别的解决方案(权重空间中的点),从而使训练集和测试集上的损失函数的值达到很小。

训练过程中,通过改变权重,训练算法改变网络的结构,并在权重空间中不断搜索。随机梯度下降法在损失平面上传播,损失平面的高低由损失函数的值决定。

局部与全局最优解

可视化与理解多维权重空间的几何特点是非常困难的。同时,这也是非常重要的,因为在训练时,随机梯度下降法的本质是在多维空间的损失平面上传播,并努力找到一个好的解决方案--损失平面上的一个损失函数值很低的"点”。众所周知,这些平面有许多局部最优解,但并不是所有局部最优解都是优秀的解决方案。

Hinton: “为了处理14维空间中的超平面, 可视化3维空间并大声对自己说“14”。 每个人都这样做。“



局部和全局最优解。在训练和测试过程中,平滑的最低值会产生相似的损失。然而,训练和测试过程中产生的局部损失,有非常大的差异。换句话说,全局最小值比局部最小值更通用。

判断解决方案好坏的一个标准就是该方案解的平滑性。 这一思想在于训练数据和测试数据会产生类似的但并不完全一样的损失面。你可以想象一下,一个测试表面相对于训练表面移动一点。对于一个局部解,在测试过程中,因为这一点移动,一个给出低损失值的点会给出一个高损失值。这意味着这个”局部“解决方案没有产生最优值——训练损失小,而测试损失大。另一方面,对于一个”全局“平滑解决方案,这一点移动会导致训练和测试损失的差值很小。

我之所以解释局部和全局解决方案的不同,是因为这篇博客聚焦的新方法提供非常好的全局解决方案。

快照集成

最初,随机梯度下降(SGD,Stochastic Gradient Descent) 会在权重空间产生大的跃变。随后,当学习率由于余弦退火算法越来越小时, SGD 会收敛到某个局部解,该算法会对模型拍个”快照“,即将这个局部解加入到集合中。接着,学习率再次被重置成高值,SGD在收敛到某个不同的局部解之前,再次产生一个大的跃变。

快照集成方法的循环长度是20到40个 epoch(使用训练集的全部数据对模型进行一次完整的训练,称为一个epoch)。长学习率循环的思想在于能够在权重空间找到足够多不同的模型。如果模型相似度太高,集合中各网络的预测就会太接近,而体现不出集成带来的好处。

快照集成确实效果很好,提高了模型的性能,但是快速几何集成更有效。

快速几何集成 (FGE)

快速几何集成与快照集成类似,但有一些与快照集成不同的特征。FGE使用线性分段循环学习率策略代替余弦。其次,FGE的循环长度更短——每个循环只有2到4个epoch。最初的直觉认为,短循环是错误的,因为每次循环结束时产生的模型都非常相似,差别不大,所以集成这些模型不能带来益处。然而,正如作者发现的,由于在足够多的不同模型间,存在低损失的连接通路,沿着那些通路,采用短循环是可行的,而且在这一过程中,会产生差异足够大的模型,集成这些模型会产生很好的结果。因此,与快照集成相比,FGE提高了模型的性能,每次循环经过更少的epoch就能找到差异足够大的模型(这使训练速度更快)。



左边:传统观点认为好的局部最小值被高损失区域分隔开。如果我们观察连接局部最小值的直线,会发现这是正确的。中间和右边:然而,在局部最小值之间存在通路,这些通路上的损失值始终很低。FGE沿着这些通路拍快照,并利用这些快照构建一个集合。

为了从快照集成或者FGE中获益,需要存储多种模型并得出这些模型的预测,然后对这些预测求平均,作为最终的预测。因此,集合的附加性能需要消耗更多的计算。所以没有免费的午餐。或许是有的?这是一篇关于随机加权平均的新论文所获得的成果。

随机加权平均(SWA,Stochastic Weight Averaging)

随机加权平均和快速几何集成非常近似,除了计算损失的部分。 SWA 可以应用于任何架构和数据集,而且都能产生较好的结果。这篇论文给出了参考建议,SWA可以得到更大范围的最小值,上文已经讨论过这一点的好处。SWA不是经典意义上的集成。在训练结束的时候,会产生一个模型,这个模型的性能优于快照集成,接近FGE。 

左边:W1,W2和W3 代表了3个独立的训练网络,Wswa是它们的平均。 中间:与SGD相比,Wswa 在测试集上产生了更优越的性能。右边:注意即使Wswa在训练集上的性能更差,它在测试集上的效果仍然更好。

SWA的灵感来自于实际观察,每次学习率循环结束时产生的局部最小值趋向于在损失面的边缘区域累积,这些边缘区域上的损失值较小(上面左图中,显示低损失的红色区域上的点W1,W2和W3)。通过对几个这样的点取平均,很有可能得到一个甚至更低损失的、全局化的通用解(上面左图上的Wswa)。

这儿展示了 SWA 是如何工作的。不需要集成很多模型,只需要两个模型。

第一个模型存储模型权重的平均值(公式中的 w_swa )。这就是训练结束后的最终模型,用于预测。

第二个模型(公式中的w)变换权重空间,利用循环学习率策略找到最优权重空间。

随机加权平均权重更新公式

每次学习率循环结束的时候,第二个模型的当前权重会被用于更新正在运行的平均模型的权重,即对已有的平均权重和第二个模型产生的新权重进行加权平均(左图中的公式)。采用这个方法,训练时,只需要训练一个模型,存储两个模型。而预测时,只需要一个当前的平均模型进行预测。用这个模型做预测,比前面提到的方法,速度快得多。之前的方法是用集合中的多个模型做预测,然后对多个预测结果求平均。实现

该论文的作者提供了他们自己的实现,这个实现是用PyTorch完成的。

当然,著名的fast.ai库也实现了SWA。每个人应该都在使用这个库。如果你还没有看到这个课程,请点击此链接。

感谢您的阅读!

雷锋网字幕组编译。

相关 [随机 加权平均 深度学习] 推荐:

随机加权平均 -- 在深度学习中获得最优结果的新方法

- - 雷锋网
本文为雷锋网字幕组编译的技术博客 A Simple Guide to the Versions of the Inception Network,原标题,作者为 Bharath Raj. 翻译 | 龙翔    整理 |  孔令双. 雷锋网 AI 研习社:在这篇文章中,我将讨论最近两篇有趣的论文. 它们提供了一种简单的方式,通过使用一种巧妙的集成方法提升神经网络的性能.

深度学习二三事

- - FreeBuf.COM | 关注黑客与极客
我知道博客标题中使用否定词很奇怪,但是前几天有一波讨论正好相应于我正在思考的一些问题. 这一切开始于 Jeff Leek 发表的 一篇有关说明在小样本范围内使用深度学习的文章. 要言之,他认为当样本较小时(生物领域中属于常见现象),带有少许参数的线性模型甚至比带有少量层和隐藏单元的深度网络性能更优.

关于深度学习——Deep Learning

- - 互联网旁观者
转载自: http://blog.csdn.net/abcjennifer/article/details/7826917. Deep Learning是机器学习中一个非常接近AI的领域,其动机在于建立、模拟人脑进行分析学习的神经网络,最近研究了机器学习中一些深度学习的相关知识,本文给出一些很有用的资料和心得.

深度学习的本质探究??

- - ITeye博客
原创 2016-10-07 朱洁 . 标志型事件,阿尔法围棋(AlphaGo)战胜李世石. alphago是一款围棋人工智能程序,由谷歌(Google)旗下DeepMind公司的戴维·西尔弗、艾佳·黄和戴密斯·哈萨比斯与他们的团队开发,这个程序利用“价值网络”去计算局面,用“策略网络”去选择下子. 2015年10月阿尔法围棋以5:0完胜欧洲围棋冠军、职业二段选手樊麾;2016年3月对战世界围棋冠军、职业九段选手李世石,并以4:1的总比分获胜.

深度学习利器:TensorFlow实战

- - 孟飞阳的博客
深度学习及TensorFlow简介. 深度学习目前已经被应用到图像识别,语音识别,自然语言处理,机器翻译等场景并取得了很好的行业应用效果. 至今已有数种深度学习框架,如TensorFlow、Caffe、Theano、Torch、MXNet,这些框架都能够支持深度神经网络、卷积神经网络、深度信念网络和递归神经网络等模型.

深度学习三大框架对比

- -
| 导语 Science is NOT a battle, it is a collaboration. 人工智能的浪潮正席卷全球,诸多词汇时刻萦绕在我们的耳边,如人工智能,机器学习,深度学习等. “人工智能”的概念早在1956年就被提出,顾名思义用计算机来构造复杂的,拥有与人类智慧同样本质特性的机器.

Nimbus: Hulu的深度学习平台

- - 董的博客
Hulu是美国领先的互联网专业视频服务平台,目前在美国拥有超过2500万付费用户. Hulu的目标是帮助用户在任意时刻、任何地点、以任何方式查找并欣赏到高质量的电视剧、电影和电视直播. 实现这一目标离不开各个团队的努力,而AI在其中扮演者越来越重要的角色. 在Hulu, 我们拥有诸多的researcher团队,如广告团队,推荐团队,视频理解团队等ji等.

深度学习大牛Bengio教授在Reddit吐槽

- - 博客园_新闻
     Deep Learning 界的三架马车,目前 Geoffrey Hinton 已被 Google 收编, Yann LeCun 已被 Facebook 收编,还留在学术界的 Yoshua Bengio 最近心情好,在 reddit 上定期回答问题. 我抽取了一些比较有料的观点在下面,希望对大家了解这方面有帮助(再不上船可就晚了).

深度学习技术可以给你带来第三只眼

- - 互联网分析沙龙
智能手机已经采用了多种技术,使得日常任务更易于完成. 打开谷歌地图或其他使用手机GPS传感器的导航应用. 但是美国普渡大学一位教授认为,当前的技术只能做到这些. 普渡大学研究员们正在研发一种技术,可以从根本上将智能手机转化成人的第三只眼睛. 这项技术使用一种被称为深度学习(deep learning)的算法系统,使智能手机摄像头立即辨识它看到的物体.

深度学习word2vec笔记之应用篇

- - 我爱机器学习
1)该博文是Google专家以及多位博主所无私奉献的论文资料整理的. 2)本文仅供学术交流,非商用. 所以每一部分具体的参考资料并没有详细对应,更有些部分本来就是直接从其他博客复制过来的. 如果某部分不小心侵犯了大家的利益,还望海涵,并联系老衲删除或修改,直到相关人士满意为止. 3)本人才疏学浅,整理总结的时候难免出错,还望各位前辈不吝指正,谢谢.