02.改善深层神经网络:超参数调试、正则化以及优化-优化算法

优化算法

2.1mini-batch 梯度下降

优化算法,这能让你的神经网络运行得更快。

虽然之前的向量化的方法能够让我们较快地处理样本数据,但是当样本的数据变得较多的时候,处理速度仍然缓慢。比如说,如果????是 500 万或 5000 万或者更大的 一个数,在对整个训练集执行梯度下降法时,你要做的是,你必须处理整个训练集,然后才 能进行一步梯度下降法,然后你需要再重新处理 500 万个训练样本,才能进行下一步梯度,所以如果你在处理完整个 500 万个样本的训练集之前,先让梯度下降法处理一部分, 你的算法速度会更快

你可以把训练集分割为小一点的子集训练,这些子集被取名为 mini-batch,假设每一个子集中只有 1000 个样本,那么把其中的???? (1)到???? (1000)取出来,将其称为第一个子训练集,也叫做 mini-batch,然后你再取出接下来的 1000 个样本,从???? (1001)到???? (2000),然后再取 1000 个样本,以此类推。

(符号补充说明: X ( i ) X^{(i)} X(i)表示第i个训练样本; X [ i ] X^{[i]} X[i]表示神经网络的层数; X { i } X^{\{i\}} X{i}表示第i个mini-batch)

使用 batch 梯度下降法,一次遍历训练集只能让你做一个梯度下降,使用 mini-batch 梯度下降法,一次遍历训练集,能让你做 5000 个梯度下降。(理解精华⭐⭐⭐)

2.2理解mini-batch梯度下降法

batch梯度下降方法与mini-batch梯度下降的方法的区别:

02.改善深层神经网络:超参数调试、正则化以及优化-优化算法

使用 batch 梯度下降法时,每次迭代你都需要遍历整个训练集,可以预期每次迭代成本都会下降,所以如果成本函数????是迭代次数的一个函数,它应该会随着每次迭代而减少。

使用 mini-batch 梯度下降法,如果你作出成本函数在整个过程中的图,则并不是每次迭代都是下降的,而是走势总体朝下但是图形是有噪声的,因为不同的mini-batch可能比较难运算。

当mini-batch中训练集的大小数为m(训练集的大小)的时候,mini-batch梯度下降方法就变为batch梯度下降方法。(弊端在于特别是在训练样本数量巨大的时候,单次迭代耗时太长。)

当mini-batch中训练集的大小数为1的时候,叫做随机梯度下降算法。(弊端为失去所有向量化带给你的加速,因为一次性只处理了一个训练样本,这样效率过于低下

方法的选择:当你处理的样本数量比较小的时候,比如小于2000的时候可以直接使用batch梯度下降法,而当样本的数量很大的时候使用mini-batch梯度下降法。一般的 mini-batch 大小为 64 到 512

2.3 指数加权平均数

假设这里表示一年的天气温度:

02.改善深层神经网络:超参数调试、正则化以及优化-优化算法

你要做的是,首先使????0 = 0

每天,需要使用 0.9 的加权数之前的数值加上当日温度的 0.1 倍,即????1 = 0.9????0 + 0.1????1,所以这里是第一天的温度值。

第二天,又可以获得一个加权平均数,0.9 乘以之前的值加上当日的温度 0.1 倍,即????2 = 0.9????1 + 0.1????2,以此类推。

第二天值加上第三日数据的 0.1,如此往下。

大体公式就是某天的????等于前一天????值的 0.9 加上当日温度的 0.1。 如此计算,然后用红线作图的话,便得到这样的结果。

02.改善深层神经网络:超参数调试、正则化以及优化-优化算法

指数加权平均数的关键方程** v t v_t vt = β \beta β * v t − 1 v_{t-1} vt1 + (1 - β \beta β) θ t \theta_t θt**

而我们说根据 β \beta β的值我们可以估计上面表示平均天气的方法大约平均了 1/(1- β \beta β)天的天气数据。

理由就是你可以将上面的推导公式全部展开:

02.改善深层神经网络:超参数调试、正则化以及优化-优化算法

这样的话比如 β \beta β=0.9,那么在经过衡量了10天的天气数据后, ( 0.9 ) 10 (0.9)^{10} 0.910接近 1 / e ,我们说仿佛你在计算一个指数加权平均数,只关注了过去 10 天的温度,因为 10 天后,权重下降到不到当日权重的三分之一。

优点:通过该方法,你可以只仅仅拿到第t天的数据来不断更新v就可以,它占用极少内存。

2.4指数加权平均的偏差修正

是在估测初期,也就是不用 v t v_t vt,而是用 v t v_t vt/(1 - β t \beta^t βt),在刚开始训练的时候 β t \beta^t βt起作用,到后来t变大的时候, β t \beta^t βt​不起作用,表示偏差修正作用开始减弱。

2.5 动量梯度下降法

还有一种算法叫做 Momentum,或者叫做动量梯度下降法,运行速度几乎总是快于标准的梯度下降算法,简而言之,基本的想法就是计算梯度的指数加权平均数,并利用该梯度更新你的权重

02.改善深层神经网络:超参数调试、正则化以及优化-优化算法

通常我们的梯度下降就是这样的,上下的浮动导致下降的时间延长。

纵轴上,你希望学习慢一点,因为你不想要这些摆动,但是在横轴上,你希望加快学习,你希望快速从左向右移,移向最小值,移向红点。所以使用 动量梯度下降法,你需要做的是,在每次迭代中,确切来说在第????次迭代的过程中,你会计 算微分????????,????????,来计算 v d w v_{dw} vdw = β \beta β * v d w v_{dw} vdw +(1 − β \beta β)????W,之后同样计算, v d b v_{db} vdb = β \beta β* v d b v_{db} vdb + (1 − β \beta β)db。然后重新赋值权重:

????: = ???? − ???? * v d w v_{dw} vdw,????: = ???? − ???? * v d b v_{db} vdb

(????为学习率)

所以你有两个超参数,学习率????以及参数 β \beta β β \beta β控制着指数加权平均数。

2.6 RMSprop

root mean square prop 算法

在第????次迭代中,该算法会照常计算当下 mini-batch 的微分????????,????????,所以我会保留这个 指数加权平均数,我们用到新符号 s d w s_{dw} sdw s d w s_{dw} sdw = β \beta β * s d w s_{dw} sdw + (1- β \beta β) * ( d w ) 2 (dw)^2 (dw)2 s d b s_{db} sdb= β \beta β * s d b s_{db} sdb + (1- β \beta β) * ( d w ) 2 (dw)^2 (dw)2

接着更新参数值:02.改善深层神经网络:超参数调试、正则化以及优化-优化算法

得在横轴方向或者在例子中的????方向,我们希望学习速度,而在垂直方向,也就是例子中的????方向,我们希望减缓纵轴上的摆动

我们希望** s d w s_{dw} sdw会相对较小**,所以我们要除以一个较小的数,而希望** s d b s_{db} sdb又较大**,所以这里我们要除以较大的数字,这样就可以减缓纵轴上的变化。你看这些微分,垂直方向的要比水平方向的大得多,所以斜率在????方向特别大,所以这些微分中,????????较大,????????较小,因为函数的倾斜程度,在纵轴 上,也就是 b 方向上要大于在横轴上,也就是????方向上。????????的平方较大,所以????????????也会较大, 而相比之下,????????会小一些,亦或????????平方会小一些,因此????????????会小一些,结果就是纵轴上的 更新要被一个较大的数相除,就能消除摆动,而水平方向的更新则被较小的数相除。

02.改善深层神经网络:超参数调试、正则化以及优化-优化算法

RMSprop 的影响就是你的更新最后会变成这样(绿色线),纵轴方向上摆动较小,而横 轴方向继续推进。还有个影响就是,你可以用一个更大学习率????,然后加快学习,而无须在 纵轴上垂直方向偏离。

2.7 Adam 优化算法

Adam 优化算法基本上就是将 Momentum 和 RMSprop 结合在一起

02.改善深层神经网络:超参数调试、正则化以及优化-优化算法

02.改善深层神经网络:超参数调试、正则化以及优化-优化算法

$\beta 1 常 用 的 缺 省 值 为 0.9 , 1常用的缺省值为 0.9, 10.9,\beta$2推荐使用 0.999.

2.8学习率衰减

https://blog.csdn.net/qq_42325947/article/details/108589191