SWA(随机权重平均)——一种全新的模型优化方法
这两天被朋友推荐看了一篇热乎的新型优化器的文章,文章目前还只挂在arxiv上,还没发表到顶会上。本着探索的目的,把这个论文给复现了一下,顺便弥补自己在优化器方面鲜有探索的不足。
论文标题:Averaging Weights Leads to Wider Optima and Better Generalization
论文链接:https://arxiv.org/abs/1803.05407.pdf
官方代码:https://github.com/timgaripov/swa
随机权重平均(SWA)和随机梯度下降(SGD)有很多相似之处,准确来说SWA是基于SGD的改进版本。文章的主要比较对象也是SGD。
。典型的深度神经网络训练过程就是用 SGD 来优化一个损失函数,同时使用一个衰减的学习率,直到收敛为止。SWA 论文的结果证明,取 SGD 轨迹的多点简单平均值,以一个周期或者不变的学习 率,会比传统训练有更好的泛化效果。论文的结果同样了证明了,随机权重平均 (SWA)相比可以找到更广的最优值域。
SWA的灵感来自于实际观察,每次学习率循环结束时产生的局部最小值趋向于在损失面的边缘区域累积,这些边缘区域上的损失值较小(上面左图中,显示低损失的红色区域上的点W1,W2和W3)。通过对几个这样的点取平均,很有可能得到一个甚至更低损失的、全局化的通用解(上面左图上的Wswa)。
看一下swa的算法流程:
对 WSWA做了一个周期性的滑动平均,周期为 c,即每 c 步进行一次滑动平均, 其他时间就按普通 SGD 进行更新。可见,计算操作也是十分的简便。
就论文中的结果而言,可以看出 SWA相对于 SGD 来说有以下优点:1,不依赖学 习率的变化,设置恒定学习率的时候依然可以达到很好的收敛效果。而对于 SGD 而言,恒定学习率会导致收敛情况变差。2,收敛速度十分快,在原测试集上可 以在 150 个 epoch 就收敛得非常好,也非常平稳振荡幅度非常小。
个人主观分析:SWA 加入了周期性滑动平均操作来限制权重的变化,解决 了传统 SGD 在反向过程中的权重振荡问题。 SGD 是依靠当前 batch 的数据来更新 参数,每一个 epoch 都会调整一次参数,随机挑选的梯度方向极有可能不是最佳 梯度方向,甚至与最佳梯度方向有一个很大的夹角,这样大刀阔斧调整的参数, 极其容易振荡。而 SWA限制更新频率,对周期内参数取滑动均值,这样就解决 了 SGD 的问题。
关于复现
这次并没有用作者给的官方代码实现,而是用keras框架搭的一个自己的网络,用自己的数据集,来比较SGD和SWA的差异。代码暂时不方便上传,不过估计也没人care。。。不过对于SWA优化器的keras实现参考了https://github.com/kristpapadopoulos/keras-stochastic-weight-averaging
先看SGD的结果:
train loss和val loss大相径庭的原因跟数据集有关系,不用太care,主要关注的是train loss。
再看SWA的结果:
对 SGD 而言,每个 epoch 都会大刀阔斧调整参数(因为我设定的是恒定学习率)。 所以 SGD 的 loss 曲线抖动会比较大,而且要接近 200 个 epoch 才有比较好的收 敛效果。 对于 SWA而言,抖动幅度会比 SGD 小很多,而且 cycle 设置越大抖动会越小。大 概 150 个 epoch 就有比较好的收敛情况。这也是作者分析的,SWA 可以更容易 找到最优值域。
总结
SGD 的出现就是为了解决 mini-BatchGD 计算比较费时的问题,然而 SGD 的收敛 结果不会太好,往往不会好于 mini-batchGD。SGD 为了计算节省时间,舍弃了训 练稳定、最优收敛结果等性质。然而,SWA 刚好补充了 SGD 的这几点不足,在 计算方面,SWA 相对于 SGD 的计算量的增长可以忽略不记,只多了一个周期性 的权重平均而已。但是在稳定性和最优值域的寻找方面,SWA 是要远好于 SGD 的。尤其是这种训练时的稳定性,使得 SWA 比 SGD 更适合用于在线学习等模型 要求稳定性的领域。
SWA(随机权重平均)——一种全新的模型优化方法相关推荐
- SWA(随机权重平均) for Pytorch
Stochastic Weight Averaging for Pytorch 随机权重平均 一.什么是Stochastic Weight Averaging(SWA) 二.SWA与SGD的对比 三. ...
- Stochastic Weight Averaging (SWA) 随机权重平均
文章目录 相关链接 基础 思路 主要内容 概括 SWA图示 SWA算法 LR The Algorithm Batch normalization 在PyTorch中使用swa 最佳实践 Demo 最近 ...
- 【提分trick】SWA(随机权重平均)和EMA(指数移动平均)
1. SWA随机权重平均 1.1步骤 1.2代码 2.EMA指数移动平均 2.1步骤 2.2代码 3.总结 在kaggle比赛中,不管是目标检测任务.语义分割任务中,经常能看到SWA(Stochast ...
- 模型泛化技巧“随机权重平均(Stochastic Weight Averaging, SWA)”介绍与Pytorch Lightning的SWA实现讲解
文章目录 SWA简介 SWA公式 SWA常见参数 Pytorch Lightning的SWA源码分析 SWALR 参考资料 SWA简介 SWA,全程为"Stochastic Weight A ...
- SWA Object Detection随机权重平均【论文+代码】
随机权重平均 摘要 Introduction SWA 实验部分 消融实验 摘要 您想在不增加推断成本和不改变检测器的情况下提高对象检测器的1.0 AP吗?让我们告诉您一个这样的秘方.这个秘方令人惊讶地 ...
- WOFOST模型Matlab,一种WOFOST-PAR耦合模型建立方法与流程
本发明涉及作物生长模型建立方法,具体涉及一种WOFOST-PAR耦合模型建立方法. 背景技术: 作物的生长发育研究中,涉及到不同地区,不同气候带的时间变异性,因此我们需要通过参数调节,来适应不同地区的 ...
- 30种MySQL查询语句优化方法分享
30种MySQL查询语句优化方法分享,对于MySQL查询语句来说效率是最重要的能用一分钟搞定的绝不能花费两分钟.今天整理了30种MySQL查询语句优化方法,供大家学习使用. 30种MySQL查询语句优 ...
- 计算图替代——一种DNN框架计算图优化方法
1. 计算图优化背景 深度学习在各种实际应用中取得了巨大成功,使许多应用发生了革命性的变化,包括视频分析.自然语言处理等.随着可用的数据增多,硬件的计算能力增强,为了在复杂问题中取得好的表现,目前DN ...
- LIME:一种解释机器学习模型的方法
在本文中,我们将介绍一种方法,用来解释这篇论文中的任何一种分类器的预测结果,并且用开源包来实现. 动机:我们为什么要理解预测结果? 机器学习如今是非常火的一个话题.随着计算机在围棋等游戏中击败人类专家 ...
最新文章
- (填坑:SQL打印两次)mybatisplus+p6spy 日志打印
- MongodDB数据库安装和简单使用
- 大型ERP等数据库系统常见几种设计
- 苹果错误分析报告preferreuserinterface_数据分析的六个步骤,你做到了吗?
- python树形_Python处理树形数组
- oracle 中表,oracle中表操作
- Java虚拟机JVM的内存管理
- 高通855比高通675贵多少钱,性能差距有多大?
- 阿凡达时隔十年重映,王者归来还是炒冷饭?Python爬取上千条评论并分析
- bzoj 2427: [HAOI2010]软件安装(Trajan+树形DP)
- 关于计算机组件游戏,电脑游戏运行库组件补全的方法
- 状态反馈控制与状态观测器设置以及利用LQR方法求取状态反馈矩阵
- Android app使用TextToSpeech实现文字转换语音
- pythonmatplotlib怎么设置柱面_协调basemap quiver和matplotlib
- 一台电脑中,如何使 git 同时配置Github、Gitee等多种版本控制工具
- 终极指南 | 干了这篇收心文,从入门到精通手把手教你写出最牛白皮书!
- 解决ubuntu无法连接网络问题
- Js(二)SyntaxError Cannot use import statement outside a module
- 一季度出货量暴跌22%,小米手机已“师老兵疲”
- unity obi插件
热门文章
- 基于Python+django的高校资产管理系统-计算机毕业设计
- 数字图像处理 什么是霍夫变换?
- 计算机辅助物理化学实验 唐典勇课后答案,表面张力测定数据的模型拟合及MATLAB处理.pdf...
- 修改docker自定义网桥后的默认网卡名称
- 怎么把图片文字转换成word文档?介绍一个方法
- 互联网公司招聘--奇虎360--研发工程师--2016年笔试题
- HDU-2196Computer 树形DP-经典题
- python 作业3
- 计算机word茶的功效,乌龙茶的功效与作用 Microsoft Word 文档
- 什么是Docker, 为什么这么火