1 优化器概览
• 梯度下降法变体
• 批处理梯度下降
• 随机梯度下降法
• 迷你批处理梯度下降法
• 面临的挑战
• 常用的梯度下降法
• Momentum
• Nesterov
• Adagrad
• AdaDelta
• RMSprop
• Adam
• 如何选择
• 小技巧
2 梯度下降优化算法
• 梯度下降法是训练神经网络最常用的优化算法
• 梯度下降法(英语:Gradient descent)是一个一阶最优化算法,通常也称为
最速下降法。要使用梯度下降法找到一个函数的局部极小值,必须向函数
上当前点对应梯度(或者是近似梯度)的反方向的规定步长距离点进行迭代
搜索
• 梯度下降方法基于以下的观察:如果实值函数f(x)在a点处可微且有定义,那
么函数f(x)在点a沿着梯度相反的方向-▽f(a)下降最快
1.批处理梯度下降
- 在凸优化(Convex Optimization)的情况下, 一定会找到最优解
- 在非凸优化的情况下, 一定能找到局部最优解
- 单次参数调整计算量大
- 不适合在线(Online)的情况
2.随机梯度下降
- 适合Online的情况
- 通常比批处理梯度下降法快(在批处理的情
况下, 有可能许多的数据点产生的梯度是相似
的, 这些计算是冗余的, 并不会有实际的帮助) - 通常目标函数震荡严重. 在神经网络优化情
况下(没有全局最优解), 这种震荡反而有可能
让它避免被套牢在一个局部最小值, 而找到更
好的局部最优解 - 通过调节学习率, 能够找到和批处理相似的
局部或者全局最优解
3.迷你批处理梯度下降
- 结合了批处理和随机梯度下降法的优点
- 减弱了目标函数震荡, 更加稳定
- 易于硬件加速实现, 常用的机器学习库都利用了这个特性提供了高性能的计
算速度 - 一般的迷你批大小为50至256, 取决于不同的应用
4.传统梯度下降法面临的挑战
• 传统迷你批处理不能保证能够收敛
• 当学习率太小, 收敛会很慢, 学习率太高容易震荡, 甚至无法收敛
• 可以按照某个公式随着训练逐渐减小学习率, 但是不同的数据集需要不同的
学习率变化曲线, 不容易估计
• 所有的参数使用同样的学习率并不合适
• 容易被套牢在马鞍点
3.Momentum
不同dimension的变化率不一样
• 动量在梯度在某一维度上的投影指向同一方向上增强, 在维度上的指向不断变化的
方向抵消
4.Nesterov accelerated gradient
• 动量+ 预测的前方的梯度
• 在多个RNN的任务中表现突出
5 Adagrad
• 对频繁出现的参数, 采用小的步长
• 对不频繁出现的参数, 采用大的步长
• 对稀疏数据集非常有用(文本数据). Google在训练从Youtube视频自动识别猫
用到了. Pennington et al训练词嵌入的GloVe也用到了
• 优势:
• 无需手动调整learning rate步长
• 设置初始步长为0.01即可
• 劣势:
• 随着训练, 分母总是增大, 步长会越来越小, 算法无法收敛
6 Adadelta
•只是累积过去的一段时间的梯度平方值
•完全无需设置步长
•为了便于实现, 采用类使用动量的策略:
7 RMSprop
• Geoff Hinton Lecture 6e of his Coursera Class ƞ=0.001
8 Adam
• 记录过去一段时间的梯度平方和(类似Adadelta和
RMSprop), 以及梯度的和(类似Momentum动量)
• 把优化看作铁球滚下山坡, Adam定义了一个带动量和摩
擦的铁球
9 如何选择
• 1. 如果数据集是稀疏的, 选择自适应学习率的方法会更快
收敛, 而且免去了需要调试学习率的烦恼
• 2. RMSprop, Adadelta, Adam的效果非常相似, 大多数情况
下Adam略好
10 Tips:
每一个epoch之前重新随机洗牌训练数据
• 使用Batch Normalization:
• 我们一般会对训练数据做正则化, 但是随着数据前馈, 后面layers的输入已经不是正则化的了,
Batch Normalization就是在后面layer之间做正则化
• 使得训练可使用更大的学习率, layer参数的初始化可以更加随意
• BN还有regularization的作用, 还可以减少对Dropout的依赖
• Early Stopping: Early stopping (is) beautiful free lunch" (NIPS 2015 Tutorial slides, slide 63
• 添加随机噪声到梯度
• 使得layer参数初始化更加随意,
• 使得model可以找到新的局部最小值