2.改善深层神经网络-第二周 优化算法
优化算法让神经网络运行的更快,有利于快速训练模型!
weight_decay:权重衰减项,防止过拟合的一个参数。
2.1 Mini-batch 梯度下降法
已知向量化可以有效的对所有m个例子进行计算,允许处理整个训练集。但是如果m太大的话,处理速度仍然缓慢。所以要用mini-batch。
对x而言,
对y而言,也要相应的拆分Y的训练集。
输入输出对
batch梯度下降法就是之前的梯度下降法,能够同时看到整个batch训练集的样本被处理,能够处理整个训练集。
mini-batch梯度下降法:每次同时处理的是单个的mini-batch,而不是同时处理全部的X和Y训练集。用这种方法进行一次迭代,可以有多次梯度下降。
2.2 理解Mini-batch 梯度下降法
要决定的变量:
mini-batch的大小
m:变成batch梯度下降,每次迭代需要处理大量训练样本。算法的主要弊端在于训练样本数量巨大时,单次迭代耗时太长。如果训练样本不大,该算法可以运行得很好。
1: 变成随机梯度下降(随机梯度下降法是有很多噪声的,且永远不会收敛,而是会一直在最小值附近波动),每个样本都是独立的mini-batch,一次迭代只处理一个。通过减小学习率,噪声会被改善或有所减少。随机梯度下降法的一大缺点是失去所有向量化的加速,因为一次性只处理了一个训练样本,效率过于低下。
事实上,取值应该在1到m之间,选择不大不小的mini-batch尺寸,也让学习率达到最快。
1-m这样做的好处:得到了大量向量化,如一个mini-batch中有1000个训练样本,就可以对这1000个样本向量化。无需等待整个训练集被处理完,就可以进行后续工作。也比随机梯度下降要更持续地靠近最小值的方向,也不一定在很小的范围内收敛或者波动。如果出问题的话,可以减少学习率。
2.3 指数加权平均
已有的优化方法:梯度下降,mini-batch梯度下降。
还有一些更加高效的优化方法。理解这些方法的基石:指数加权平均 or 指数加权移动平均。
旨在更好的平均温度,过去多少天温度的平均情况:
公式:(如何计算出每日温度的平均值)
2.4 理解指数加权平均
计算指数加权平均数
2.5 指数加权平均的偏差修正
偏差修正(Bias correction,可以让平均数运算更加准确)可以用于构建更好的优化算法,而不是简单直接的梯度下降法。
修正偏差可以帮助更好的预测,尤其是在初期时,把结果从紫线变成绿线。
偏差修正公式(主要在初期起作用,如果关心初始时期的偏差,在刚开始计算指数加权平均数的时候,偏差修正能帮助在早期做更好的预测):
2.6 动量梯度下降法
Momentum梯度下降法:运行速度几乎总是快于标准的梯度下降算法。
简而言之,基本的想法就是计算梯度的指数加权平均数,并利用该梯度更新权重。
传统的梯度下降,如要用较大的学习率,结果可能会偏离函数的范围。为避免摆动过大,学习率设置成小值。
在每次迭代中(第t次迭代),减缓梯度下降的程度。用动量梯度下降法(在抵达最小值的路上,减少摆动),可发现纵轴方向的摆动变小了,横轴方向运动更快。
控制着指数加权平均数,常用的值是0.9,平均了前10次迭代的梯度。关于偏差修正,因为在10次迭代后,移动平均已经过了初始阶段,不再是一种具有偏差的预测。实际上,使用梯度下降法或动量法时,不会受到偏差修正的困扰。
还有一种版本,去掉了,不过这个和上面带 的差别就在于的值不同。建议用带 的。
2.7 RMSprop
RMSprop,均方根,全称是root mean square prop算法,可以消除梯度下降们的摆动,可用更大的学习率加速梯度下降。
消除摆动+加速学习
是对整个微分进行平方。
2.8 Adam优化算法
Adam = momentum + RMSprop,有效适用于各种网络,适用于广泛的结构。
要进行偏差修正哦。
2.9 学习率衰减
加快学习算法的一个方法就是随时间慢慢减少学习率,即学习率衰减。
公式1
公式2,Other learning rate decay methods
指数衰减,学习率呈指数下降。还有离散下降。
手动衰减,适用于小数据。
2.10 局部最优的问题
局部最优与深度学习中的优化问题。
实际上,成本函数的零梯度点通常是鞍点。在高维度空间,更有可能碰到鞍点,而不会碰到局部最优。
平稳段使得学习十分缓慢,这也是像动量,RMSprop或者Adam这样的算法能够加速学习的地方,帮助尽早走出平稳段。
优化算法所面临的问题:
参考信息:https://zhuanlan.zhihu.com/p/32091071