在吴恩达深度学习视频以及大树先生的博客提炼笔记基础上添加个人理解,原大树先生博客可查看该链接地址大树先生的博客- ZJ
Coursera 课程 |deeplearning.ai |网易云课堂
CSDN:http://blog.csdn.net/junjun_zhao/article/details/79239514
Optimization Algorithms
学习目标:本周你将学习优化算法,这能让你的神经网络运行得更快。,机器学习的应用是一个高度依赖经验的过程,伴随着大量迭代的过程,你需要训练诸多模型才能找到合适的那一个。优化算法能够帮助你快速训练模型。
我们可以利用一个巨大的数据集来训练神经网络,而在巨大的数据集基础上进行训练速度很慢,因此,你会发现使用快速的优化算法,使用好用的优化算法能够,大大提高你和团队的效率。
Mini-batch 梯度下降法
对整个训练集进行梯度下降法的时候,我们必须处理整个训练数据集,然后才能进行一步梯度下降,即每一步梯度下降法需要对整个训练集进行一次处理,如果训练数据集很大的时候,如有 500 万或 5000 万的训练数据,处理速度就会比较慢。
但是如果每次处理训练数据的一部分即进行梯度下降法,则我们的算法速度会执行的更快。而处理的这些一小部分训练子集即称为 Mini-batch。
如:其中 的 x(1) x ( 1 ) 到 x(1000) x ( 1000 ) 取出来,将其称之为第一个子训练集,叫做 Mini-batch
对于(Batch)普通的梯度下降法,一个 epoch 只能进行一次梯度下降;而对于 Mini-batch 梯度下降法,一个 epoch 可以进行 Mini-batch 的个数 (5000个)次梯度下降。
个人理解: X{t} X { t } ,如 t = 5000, 一个 Mini-batch 有 1000 个数据 x(1) x ( 1 ) 到 x(1000) x ( 1000 ) , 就是一个 epoch 能进行 5000 次梯度下降,也就是上图的最外层循环。
经验: 如果有一个丢失的训练集,mini-batch 梯度下降法比 batch 梯度下降法运行地更快,所以几乎每个研习深度学习的人,在训练巨大的数据集时都会用到。
目标:如何执行梯度下降法,更好地理解其作用和原理。
不同 size 大小的比较
普通的 batch 梯度下降法和 Mini-batch 梯度下降法代价函数的变化趋势,如下图所示:
batch梯度下降:
随机梯度下降:
Mini-batch梯度下降:
得到了大量向量化,不需要等待整个训练集被处理完,就可以开始进行后续工作。
Mini-batch 大小的选择
个人理解:一开始使用向量化一次处理 m 个,太大了,时间太长,那就处理的稍微小点,但是也绝不可以一次处理一个,那向量化摆着不用干嘛,所以最后要 找一个 1 < size < m,这就是传说中的 mini-batch 了。
之前一直使用的是梯度下降算法。接下来,展示几个别的优化算法,它们比梯度下降法快,要理解这些算法,前提你需要用到指数加权平均,在统计中也叫作指数加权移动平均。
指数加权平均(Exponentially weighted averages )的关键函数:
下图是一个关于天数和温度的散点图:
β 为中间值时得到的红色曲线,比起绿线和黄线更好地平均了温度。
个人理解:指数加权平均:就是参考过去和现在的值,分别给上权重 β 和 1-β ,得到一个新的移动平均值。同时 1/1-β 就相当于平均了多少天的值。
指数加权平均数,这是几个优化算法中的关键一环,接下来进一步探讨算法的本质作用。进一步地分析,来理解如何计算出每日温度的平均值。
例子,当 β=0.9 时:
v100=0.9v99+0.1θ100v99=0.9v98+0.1θ99v98=0.9v97+0.1θ98… v 100 = 0.9 v 99 + 0.1 θ 100 v 99 = 0.9 v 98 + 0.1 θ 99 v 98 = 0.9 v 97 + 0.1 θ 98 …
展开:
v100=0.1θ100+0.9(0.1θ99+0.9(0.1θ98+0.9v97))=0.1θ100+0.1×0.9θ99+0.1×(0.9)2θ98+0.1×(0.9)3θ97+⋯ v 100 = 0.1 θ 100 + 0.9 ( 0.1 θ 99 + 0.9 ( 0.1 θ 98 + 0.9 v 97 ) ) = 0.1 θ 100 + 0.1 × 0.9 θ 99 + 0.1 × ( 0.9 ) 2 θ 98 + 0.1 × ( 0.9 ) 3 θ 97 + ⋯
上式中所有 θ 前面的系数相加起来为 1 或者接近于 1,称之为偏差修正。
总体来说存在, (1−ε)1/ε=1e ( 1 − ε ) 1 / ε = 1 e ,在我们的例子中, 1−ε=β=0.9 1 − ε = β = 0.9 ,即 0.910≈0.35≈1e 0.9 10 ≈ 0.35 ≈ 1 e 。相当于大约 10 天后,系数的峰值(这里是0.1)下降到原来的 1e 1 e ,只关注了过去 10 天的天气。(e ≈ 2.71828)
指数加权平均实现
v0=0 v1=βv0+(1−β)θ1 v2=βv1+(1−β)θ2 v3=βv2+(1−β)θ3 … v 0 = 0 v 1 = β v 0 + ( 1 − β ) θ 1 v 2 = β v 1 + ( 1 − β ) θ 2 v 3 = β v 2 + ( 1 − β ) θ 3 …
指数加权平均数公式好处,只占用极少内存,电脑内存中只占一行数字,然后把最新数据代入公式,不断覆盖。
因为,在计算当前时刻的平均值,只需要前一天的平均值和当前时刻的值,所以在数据量非常大的情况下,指数加权平均在节约计算成本的方面是一种非常有效的方式,可以很大程度上减少计算机资源存储和内存的占用。
学过了如何计算指数加权平均数,为了让平均数运算更加准确,我们引入偏差修正。
在我们执行指数加权平均的公式时,当 β=0.98 时,我们得到的并不是图中的绿色曲线,而是下图中的紫色曲线,其起点比较低。
如果第一天的值为如40,则得到的 v1=0.02×40=8 v 1 = 0.02 × 40 = 8 ,则得到的值要远小于实际值,后面几天的情况也会由于初值引起的影响,均低于实际均值。
使用: vt1−βt v t 1 − β t
当 t=2 时:
偏差修正得到了绿色的曲线,在开始的时候,能够得到比紫色曲线更好的计算平均的效果。随着 t 逐渐增大, βt β t 接近于 0,所以后面绿色的曲线和紫色的曲线逐渐重合了。
虽然存在这种问题,但是在实际过程中,一般会忽略前期均值偏差的影响。
动量( Momentum )梯度下降法
动量梯度下降的基本思想就是计算梯度的指数加权平均数,并利用该梯度来更新权重。运行速度几乎总是快于标准的梯度下降算法。
在我们优化 Cost function 的时候,以下图所示的函数图为例:
在利用梯度下降法来最小化该函数的时候,每一次迭代所更新的代价函数值如图中蓝色线所示在上下波动,而这种幅度比较大波动,减缓了梯度下降的速度,而且我们只能使用一个较小的学习率来进行迭代。
如果用较大的学习率,结果可能会如紫色线一样偏离函数的范围,所以为了避免这种情况,只能用较小的学习率。
但是我们又希望在如图的纵轴方向梯度下降的缓慢一些,不要有如此大的上下波动,在横轴方向梯度下降的快速一些,使得能够更快的到达最小值点,而这里用动量梯度下降法既可以实现,如红色线所示。
算法实现
β 常用的值是 0.9。
在我们进行动量梯度下降算法的时候,由于使用了指数加权平均的方法。原来在纵轴方向上的上下波动,经过平均以后,接近于0,纵轴上的波动变得非常的小;但在横轴方向上,所有的微分都指向横轴方向,因此其平均值仍然很大。最终实现红色线所示的梯度下降曲线。
除了上面所说的 Momentum 梯度下降法,RMSprop(root mean square prop)均方根也是一种可以加快梯度下降的算法。
同样算法的样例实现如下图所示:
这里假设参数b的梯度处于纵轴方向,参数w的梯度处于横轴方向(当然实际中是处于高维度的情况),利用 RMSprop 算法,可以减小某些维度梯度更新波动较大的情况,如图中蓝色线所示,使其梯度下降的速度变得更快,如图绿色线所示。
在如图所示的实现中,RMSprop将微分项进行平方,然后使用平方根进行梯度更新,同时为了确保算法不会除以 0,平方根分母中在实际使用会加入一个很小的值如 ε=10−8 ε = 10 − 8 。
Adam 优化算法的基本思想就是将 Momentum 和 RMSprop 结合起来形成的一种适用于不同深度学习结构的优化算法。
算法实现
超参数的选择
Adam 代表的是 Adaptive Moment Estimation 自适应时刻估计。
学习率衰减
在我们利用 mini-batch 梯度下降法来寻找 Cost function 的最小值的时候,如果我们设置一个固定的学习速率 α,则算法在到达最小值点附近后,由于不同 batch 中存在一定的噪声,使得不会精确收敛,而一直会在一个最小值点较大的范围内波动,如下图中蓝色线所示。
加快学习算法的一个办法就是,随时间慢慢减少学习率,我们将之称为学习率衰减。
但是如果我们使用学习率衰减,逐渐减小学习速率 α,在算法开始的时候,学习速率还是相对较快,能够相对快速的向最小值点的方向下降。但随着α的减小,下降的步伐也会逐渐变小,最终会在最小值附近的一块更小的区域里波动,如图中绿色线所示。
学习率衰减的实现
局部最优问题
在低纬度的情形下,我们可能会想象到一个Cost function 如左图所示,存在一些局部最小值点,在初始化参数的时候,如果初始值选取的不得当,会存在陷入局部最优点的可能性。
但是,如果我们建立一个神经网络,通常梯度为零的点,并不是如左图中的局部最优点,而是右图中的鞍点(叫鞍点是因为其形状像马鞍的形状)。
在一个具有高维度空间的函数中,如果梯度为 0,那么在每个方向,Cost function 可能是凸函数,也有可能是凹函数。但如果参数维度为 2万维,想要得到局部最优解,那么所有维度均需要是凹函数,其概率为 2−20000 2 − 20000 ,可能性非常的小。也就是说,在低纬度中的局部最优点的情况,并不适用于高纬度,我们在梯度为 0 的点更有可能是鞍点。
在高纬度的情况下:
参考文献:
[1]. 大树先生.吴恩达Coursera深度学习课程 DeepLearning.ai 提炼笔记(2-2)– 优化算法
PS: 欢迎扫码关注公众号:「SelfImprovementLab」!专注「深度学习」,「机器学习」,「人工智能」。以及 「早起」,「阅读」,「运动」,「英语 」「其他」不定期建群 打卡互助活动。