引入

1. 随机梯度下降的特点

随机梯度下降法(Stochastic Gradient Descent)作为深度学习中主流使用的最优化方法, 有以下的优点:

  • 躲避和逃离假的鞍点局部极小点的能力

这篇论文认为, 这些局部极小也包含着一些有用的信息, 能够帮助提升模型的能力.

2. 局部极小的意义

神经网络的最优化一般来说, 不会收敛在全局最小上, 而是收敛在某个局部极小上. 这些局部极小有着的区别. 而对于好坏的区分, 一般认为:

  • 局部极小有着平坦的区域flat basin, 这些点对应模型的泛化性比较好, 是更好的局部极小

3. SGD与局部极小

SGD在最优化过程中, 会避免陡峭的局部极小, 这是因为:

  • 计算得到的梯度是由mini-batch得到的, 因此是不精确的
  • 当学习率learning rate比较大的时候, 沿着这个不精确的梯度的某一步移动不会到达具有陡峭局部的极小点

这是SGD在最优化过程中的优点, 避免了收敛域陡峭的局部极小.

但当学习率比较小的时候, SGD方法又趋向于收敛到最近的局部极小.

SGD的这两种截然不同的行为, 会在训练的不同阶段表现出来:

  • 初始阶段使用大的学习率, 快速移动到靠近平坦局部极小的区域
  • 当搜索进行到没有提升的阶段, 降低学习率, 引导搜索收敛到最终的局部极小里面

4. 模型训练与局部极小

局部极小的数量, 随着模型中参数的增多, 呈指数式增加. 因此神经网络中的局部极小数不胜数. 同一个模型, 因为初始化的不同, 或者训练样本batch顺序的不同, 会收敛到不同的局部极小中去, 因此模型的表现也就会有差异.

往往在实际中, 不同的局部极小产生的最终的总误差近似, 但是实际上, 不同局部极小对应的不同模型在预测时会产生不同的错误. 这种模型之间的差异在进行Ensemble(投票, 平均)会被利用到, 往往对最终的预测结果都有提升, 因此在各种比赛中, 多模型Ensemble被广泛使用.

5. Ensemble与神经网络

由于神经网络训练的耗时, 导致多模型的Ensemble在深度学习领域应用不如传统的机器学习方法广泛. 因为用于Ensemble的每个基模型, 都是单独训练的, 往往单个模型的训练就比较耗时了, 因此这种提升模型表现的方法成本是相当高的.

这篇论文提出了一种方法, 不需要增加额外的训练消耗, 通过一次训练, 得到若干个模型, 并对这些模型进行Ensemble, 得到最终的模型.

原理

1. 概括

首先, 在对神经网络使用SGD方法进行训练时, 利用SGD方法能够收敛逃离局部极小的特点, 在一次训练过程中, 使模型\(M\)次收敛于不同的局部极小, 每次收敛, 都代表这一个最终的模型, 我们将此时的模型进行保存. 然后使用一个较大的学习率逃离此时的局部极小.

在论文中, 对学习率的控制使用了一种余弦函数, 这种函数表现为:

  • 急剧提升学习率
  • 在某次训练过程中, 学习率迅速下降

这种训练方式就像在最优化路程中, 截取了几个快照Snapshot, 因此命名为Snapshot Ensembling. 下图中的右半部分就是对这种方法的图像表现.

2. 神经网络的隐式与显式Ensemble

各种Dropout技术是一种隐式Ensemble技术, 在训练的时候, 随机地将隐藏层中的部分结点, 且在每次训练过程中隐藏的结点都不相同, 而在训练时则使用所有结点.

因此, 在使用Dropout技术训练的过程中, 通过随机地去除隐藏层的结点, 创建了无数个共享权重的模型. 这些模型在预测的时候, 被隐式地Ensemble在一起.

这篇论文提出的Snapshot Ensemble则是显式地将多个不共享权值的模型组合在一起, 达到提升的效果.

3. 详述

总的来说, Snapshot Ensemble就是在一次训练(最优化)过程中, 在最终收敛之前, 访问多个局部极小, 在每个局部极小保存快照即作为一个模型, 在预测的使用使用所有保存的模型进行预测, 最后取平均值作为最终结果.

而这些模型保存点(快照点)不是随意选取的, 我们希望:

  • 有尽量小的误差
  • 每个模型误分类的样本尽量不要重复, 保证模型的差异性

这就需要在最优化过程中进行一些特别的操作.

观察标准的最优化路径, 通常来说, 开发集的误差只有在学习率下调之后才会急剧下降, 按照正常的学习率下降策略, 上述情况往往会在很多个Epoch之后才会出现.

然而, 很早地降低学习率继续训练, 对最后的误差并不会造成大的影响, 却极大地提高了训练的效率, 使得模型在较少的epoch轮数迭代后就达到局部极小成为了可能.

因此, 论文中采用了Cyclic Cosine Annealing方法, 很早地就下调了学习率, 使训练尽快地到达第一个局部极小, 得到第一个模型. 然后提升学习率, 扰乱模型, 使得模型脱离局部极小, 然后重复上述步骤若干次, 直到获取指定数量的模型.

而学习率的变化, 论文中使用如下的函数:

\[\alpha(t)=f(\mod(t-1, \lceil T/M \rceil))
\]

其中, \(t\)是迭代轮数, 这里指的是batch轮数; \(T\)是总的batch数量; \(f\)是单调递减函数; \(M\)是循环的数量, 也就是最终模型的数量. 换句话说, 我们将整个训练过程划分成了\(M\)个循环, 在每个循环的开始阶段, 使用较大的学习率, 然后退火到小的学习率. \(\alpha=f(0)\)给予模型足够的能量脱离局部极小, 而较小的学习率\(\alpha=f(\lceil T/M \rceil)\)又能使模型收敛于一个表现较好的局部极小.

论文中使用如下的shifted cosine function:

\[\alpha(t)=\frac{\alpha_0}{2}(\cos(\frac{\pi\mod(t-1,\lceil T/M \rceil)}{\lceil T/M \rceil})+1)
\]

\(\alpha_0\)是初始的学习率, 而\(\alpha=f(\lceil T/M \rceil)\approx0\)这保证了最小的学习率足够小. 每个batch作为一次循环(而不是每个epoch). 以下是整个学习过程的表现.

论文阅读 SNAPSHOT ENSEMBLES的更多相关文章

  1. 论文阅读(Xiang Bai——【PAMI2017】An End-to-End Trainable Neural Network for Image-based Sequence Recognition and Its Application to Scene Text Recognition)

    白翔的CRNN论文阅读 1.  论文题目 Xiang Bai--[PAMI2017]An End-to-End Trainable Neural Network for Image-based Seq ...

  2. BITED数学建模七日谈之三:怎样进行论文阅读

    前两天,我和大家谈了如何阅读教材和备战数模比赛应该积累的内容,本文进入到数学建模七日谈第三天:怎样进行论文阅读. 大家也许看过大量的数学模型的书籍,学过很多相关的课程,但是若没有真刀真枪地看过论文,进 ...

  3. 论文阅读笔记 - YARN : Architecture of Next Generation Apache Hadoop MapReduceFramework

    作者:刘旭晖 Raymond 转载请注明出处 Email:colorant at 163.com BLOG:http://blog.csdn.net/colorant/ 更多论文阅读笔记 http:/ ...

  4. 论文阅读笔记 - Mesos: A Platform for Fine-Grained ResourceSharing in the Data Center

    作者:刘旭晖 Raymond 转载请注明出处 Email:colorant at 163.com BLOG:http://blog.csdn.net/colorant/ 更多论文阅读笔记 http:/ ...

  5. Deep Reinforcement Learning for Dialogue Generation 论文阅读

    本文来自李纪为博士的论文 Deep Reinforcement Learning for Dialogue Generation. 1,概述 当前在闲聊机器人中的主要技术框架都是seq2seq模型.但 ...

  6. 论文阅读笔记 Word Embeddings A Survey

    论文阅读笔记 Word Embeddings A Survey 收获 Word Embedding 的定义 dense, distributed, fixed-length word vectors, ...

  7. 论文阅读笔记六:FCN:Fully Convolutional Networks for Semantic Segmentation(CVPR2015)

    今天来看一看一个比较经典的语义分割网络,那就是FCN,全称如题,原英文论文网址:https://people.eecs.berkeley.edu/~jonlong/long_shelhamer_fcn ...

  8. 论文阅读笔记 Improved Word Representation Learning with Sememes

    论文阅读笔记 Improved Word Representation Learning with Sememes 一句话概括本文工作 使用词汇资源--知网--来提升词嵌入的表征能力,并提出了三种基于 ...

  9. 论文阅读:Prominent Object Detection and Recognition: A Saliency-based Pipeline

    论文阅读:Prominent Object Detection and Recognition: A Saliency-based Pipeline  如上图所示,本文旨在解决一个问题:给定一张图像, ...

随机推荐

  1. Python目录与文件操作

    一.判断一个路径是否存在 os.path.exists(path) 如果路径存在则返回True,否则返回False. import os import getpass # 获取当前系统用户名 user ...

  2. 7.深入k8s:任务调用Job与CronJob及源码分析

    转载请声明出处哦~,本篇文章发布于luozhiyun的博客:https://www.luozhiyun.com 在使用job中,我会结合源码进行一定的讲解,我们也可以从源码中一窥究竟,一些细节k8s是 ...

  3. Spring编程式注解使用不当导致其他事务无法正常提交

    1.事故背景 原本在使用的是注解式事务,后面因为需要在事务中增加异步推送机制,所以需要将推送机制放到事务之外,修改后发现系统经常出现事务长时间无法提交导致回滚. 2.排查流程 (1)一开始重启应用是能 ...

  4. flink创建视图的几种方式

    import org.apache.flink.api.common.typeinfo.BasicTypeInfo; import org.apache.flink.api.java.typeutil ...

  5. 更好地使用google

    精确搜索:双引号 精确搜索就是在你要搜索的词上,加上双引号,这时google就会完全的匹配你所要搜索的字符串 "今日黄瓜" 站内搜索:site 例如我想在stackoverflow ...

  6. 为何要做seo关键词排名

    http://www.wocaoseo.com/thread-229-1-1.html 武汉seo百度指数在150左右,做seo的同仁们都知道这样的一件事情. 真正搜索武汉seo关键词能作为潜在客户的 ...

  7. 学习seo技术要不断地扩大思维和思路

    http://www.wocaoseo.com/thread-148-1-1.html        目前学习seo技术的人员是越来越多了,通过查看seo这个词的指数,就能发现一些状况,从最初的每天3 ...

  8. 归纳从文件中读取数据的六种方法-JAVA IO基础总结第2篇

    在上一篇文章中,我为大家介绍了<5种创建文件并写入文件数据的方法>,本节我们为大家来介绍6种从文件中读取数据的方法. 另外为了方便大家理解,我为这一篇文章录制了对应的视频:总结java从文 ...

  9. 【Flutter 实战】17篇动画系列文章带你走进自定义动画

    老孟导读:Flutter 动画系列文章分为三部分:基础原理和核心概念.系统动画组件.8篇自定义动画案例,共17篇. 动画核心概念 在开发App的过程中,自定义动画必不可少,Flutter 中想要自定义 ...

  10. GitHub 热点速览 Vol.35:Let's Go,Rust 大放异彩

    摘要:语言之争,一直存在于各类社群,不论是单个编程语言的交流群,亦或是 NoSQL.云开发等技术群,总能看到"要不要换 Go"."Rust 比 C++ 更强"的 ...