机器学习:优化方式:梯度下降(随机,批量),动量,adagrad,Adam /未完
一、梯度下降
-
梯度下降是一种优化算法,通过迭代的方式寻找模型的最优参数;
所谓最优参数指的是使目标函数达到最小值时的参数; - 当目标函数是凸函数时,梯度下降的解是全局最优解;但在一般情况下,梯度下降无法保证全局最优。
- 梯度实际上是损失函数对网络中每个参数的偏导所组成的向量;
- 正负号在告诉输入向量应该调大还是调小(正调大,负调小)
1.1 随机梯度下降
- 基本的梯度下降法每次使用所有训练样本的平均损失来更新参数; 因此,经典的梯度下降在每次对模型参数进行更新时,需要遍历所有数据;
- 当训练样本的数量很大时,这需要消耗相当大的计算资源,在实际应用中基本不可行。
1.2小批量随机梯度下降
- 为了降低随机梯度的方差,使模型迭代更加稳定,实践中会使用一批随机数据的损失来近似平均损失。
../机器学习基础/偏差与方差
- 使用批训练的另一个主要目的,是为了利用高度优化的矩阵运算以及并行计算框架。
1.3 小批量 SGD 的更新过程
- 在训练集上抽取指定大小(batch_size)的一批数据
{(x,y)}
- 【前向传播】将这批数据送入网络,得到这批数据的预测值
y_pred
- 计算网络在这批数据上的损失,用于衡量
y_pred
和y
之间的距离 - 【反向传播】计算损失相对于所有网络中可训练参数的梯度
g
- 将参数沿着负梯度的方向移动,即
W -= lr * g
1.4 “批”的大小对优化效果的影响
-
《深度学习》 8.1.3 批量算法和小批量算法
- 较大的批能得到更精确的梯度估计,但回报是小于线性的。
- 较小的批能带来更好的泛化误差,泛化误差通常在批大小为 1 时最好。 原因可能是由于小批量在学习过程中带来了噪声,使产生了一些正则化效果 (Wilson and Martinez, 2003)
- 但是,因为梯度估计的高方差,小批量训练需要较小的学习率以保持稳定性,这意味着更长的训练时间。
1.5 随机梯度下降存在的问题
- 随机梯度下降(SGD)放弃了梯度的准确性,仅采用一部分样本来估计当前的梯度;因此 SGD 对梯度的估计常常出现偏差,造成目标函数收敛不稳定,甚至不收敛的情况。
- 无论是经典的梯度下降还是随机梯度下降,都可能陷入局部极值点;除此之外,SGD 还可能遇到“峡谷”和“鞍点”两种情况 峡谷类似一个带有坡度的狭长小道,左右两侧是“峭壁”;在峡谷中,准确的梯度方向应该沿着坡的方向向下,但粗糙的梯度估计使其稍有偏离就撞向两侧的峭壁,然后在两个峭壁间来回震荡。
- 鞍点的形状类似一个马鞍,一个方向两头翘,一个方向两头垂,而中间区域近似平地;一旦优化的过程中不慎落入鞍点,优化很可能就会停滞下来。
1.6 随机梯度下降的改进方向
- SGD 的改进遵循两个方向:惯性保持和环境感知
这两个提法来自《百面机器学习》
- 惯性保持指的是加入动量 SGD 算法;
- 环境感知指的是根据不同参数的一些经验性判断,自适应地确定每个参数的学习速率
-
训练词向量的例子
- 不同词出现的频率是不同的,数据的稀疏性会影响其参数的稀疏性;
- 具体来说,对低频词如果不加措施,其参数的梯度在多数情况下为 0;换言之,这些参数更新的频率很低,导致难以收敛。
- 在实践中,我们希望学习低频词的参数时具有较大的学习率,而高频词其参数的更新幅度可以小一些。
二、动量(Momentum)算法 --保持惯性
2.1带动量的 SGD
-
引入动量(Momentum)方法一方面是为了解决“峡谷”和“鞍点”问题;一方面也可以用于SGD 加速,特别是针对高曲率、小幅但是方向一致的梯度。
如果把原始的 SGD 想象成一个纸团在重力作用向下滚动,由于质量小受到山壁弹力的干扰大,导致来回震荡;或者在鞍点处因为质量小速度很快减为 0,导致无法离开这块平地。 - 动量方法相当于把纸团换成了铁球;不容易受到外力的干扰,轨迹更加稳定;同时因为在鞍点处因为惯性的作用,更有可能离开平地。
- 动量方法以一种廉价的方式模拟了二阶梯度(牛顿法)
参数更新公式
- 从形式上看, 动量算法引入了变量
v充当速度角色,以及相相关的超参数
α。
动量算法描述
- 如果动量算法总是观测到梯度
g,那么它会在
−g方向上不断加速,直到达到最终速度。
- 在实践中,
α
的一般取0.5, 0.9, 0.99
,分别对应最大2
倍、10
倍、100
倍的步长 - 和学习率一样,
α
也可以使用某种策略在训练时进行自适应调整;一般初始值是一个较小的值,随后会慢慢变大。自适应学习率的优化 20000 方法
NAG 算法(Nesterov 动量)
三、自适应学习率优化算法 -- 环境感知
该算法的思想是独立地适应模型的每个参数:具有较大偏导的参数相应有一个较大的学习率,而具有小偏导的参数则对应一个较小的学习率
具体来说,
AdaGrad 算法描述
- 注意:全局学习率
ϵ
并没有更新,而是每次应用时被缩放 - 模拟退火算法,意味随着时间推移,学习率越来越小,从而保证算法的最终收敛。
- AdaGrad 存在的问题
学习率是单调递减的,训练后期学习率过小会导致训练困难,甚至提前结束
需要设置一个全局的初始学习率
四、Adam 集惯性保持和环境感知的优点于一身。
五、如何选择这些优化算法?
- 各自适应学习率的优化算法表现不分伯仲,没有哪个算法能在所有任务上脱颖而出;
- 目前,最流行并且使用很高的优化算法包括 SGD、带动量的 SGD、RMSProp、带动量的 RMSProp、AdaDelta 和 Adam。
- 具体使用哪个算法取决于使用者对算法的熟悉程度,以便调节超参数。
-
各优化算法的可视化
-
SGD 各优化方法在损失曲面上的表现
-
SGD 各优化方法在鞍点处上的表现
六、基于二阶梯度的优化算法
牛顿法
- 梯度下降使用的梯度信息实际上是一阶导数
- 牛顿法除了一阶导数外,还会使用二阶导数的信息
- 根据导数的定义,一阶导描述的是函数值的变化率,即斜率;二阶导描述的则是斜率的变化率,即曲线的弯曲程度——曲率
数学/泰勒级数
-
牛顿法更新过程 TODO
《统计学习方法》 附录 B
为什么牛顿法比梯度下降收敛更快?
常见的几种最优化方法(梯度下降法、牛顿法、拟牛顿法、共轭梯度法等) - 蓝鲸王子 - 博客园
几何理解
- 牛顿法就是用一个二次曲面去拟合你当前所处位置的局部曲面;而梯度下降法是用一个平面去拟合当前的局部曲面。
- 通常情况下,二次曲面的拟合会比平面更好,所以牛顿法选择的下降路径会更符合真实的最优下降路径。
-
通俗理解
- 比如你想找一条最短的路径走到一个盆地的最底部,
-
牛顿法的优缺点
- 优点 收敛速度快,能用更少的迭代次数找到最优解
- 每一步都需要求解目标函数的 Hessian 矩阵的逆矩阵,计算复杂
Hessian 矩阵即由二阶偏导数构成的方阵
拟牛顿法 TODO
- 梯度下降与优化方法(BGD & SGD & Momentum & AdaGrad & RMSProp & Adam)
- 【deeplearning.ai笔记第二课】2.2 优化算法(动量梯度下降,RMSprop,adam)
- 神经网络优化算法:指数加权平均、动量梯度下降法、RMSprop、Adam优化算法
- 机器学习小组知识点4&5:批量梯度下降法(BGD)和随机梯度下降法(SGD)的代码实现Matlab版
- 机器学习(六)梯度下降的优化算法和matlab/octave中的应用
- 机器学习基础(五十九)—— 高级优化算法(梯度下降、L-BFGS、共轭梯度)
- 机器学习的训练算法(优化方法)汇总——梯度下降法及其改进算法
- 机器学习中“批量梯度下降”公式推导
- 理解梯度下降在机器学习模型优化中的应用
- 机器学习小组知识点4:批量梯度下降法(BGD)
- NN优化方法对比:梯度下降、随机梯度下降和批量梯度下降
- 【机器学习详解】解无约束优化问题:梯度下降、牛顿法、拟牛顿法
- 各种神经网络优化算法:从梯度下降到Adam方法
- 机器学习入门和批量梯度下降法
- 梯度下降做做优化(batch gd、sgd、adagrad )
- 机器学习第二课:无约束优化问题(局部极小值的几种解法)(梯度下降法与拟牛顿法)
- NN优化方法对照:梯度下降、随机梯度下降和批量梯度下降
- 深度学习梯度下降的几种优化方式
- NN优化方法对照:梯度下降、随机梯度下降和批量梯度下降
- 三种梯度下降的方式:批量梯度下降、小批量梯度下降、随机梯度下降