改善深层神经网络:第二周优化算法

小批量梯度下降

一共500 000个数据,每批数据1000个,需要5000批,

小批量梯度下降过程

** 函数假设 **

批量梯度下降

(1)函数求导

(2)theta更新公式

可以看到每次更新都需要用到全部训练数据,计算量很大

eta = 0.1 # 学习率
n_iterations = 1000
m = 100
theta = np.random.randn(2,1) # 随机初始值
for iteration in range(n_iterations):
    gradients = 2/m * X_b.T.dot(X_b.dot(theta) - y)
    theta = theta - eta * gradiens

随机梯度下降

theta更新公式

批量梯度下降的最要问题是计算每一步的梯度时都需要使用整个训练集,这导致在规模较大的数据集上,其会变得非常的慢。与其完全相反的随机梯度下降,在每一步的梯度计算上只随机选取训练集中的一个样本。很明显,由于每一次的操作都使用了非常少的数据,这样使得算法变得非常快。由于每一次迭代,只需要在内存中有一个实例,这使随机梯度算法可以在大规模训练集上使用。

另一方面,由于它的随机性,与批量梯度下降相比,其呈现出更多的不规律性:它到达最小值不是平缓的下降,损失函数会忽高忽低,只是在大体上呈下降趋势。随着时间的推移,它会非常的靠近最小值,但是它不会停止在一个值上,它会一直在这个值附近摆动。因此,当算法停止的时候,最后的参数还不错,但不是最优值。
当损失函数很不规则时(如图 4-6),随机梯度下降算法能够跳过局部最小值。因此,随机梯度下降在寻找全局最小值上比批量梯度下降表现要好。
虽然随机性可以很好的跳过局部最优值,但同时它却不能达到最小值。解决这个难题的一个办法是逐渐降低学习率。 开始时,走的每一步较大(这有助于快速前进同时跳过局部最小值),然后变得越来越小,从而使算法到达全局最小值。 这个过程被称为模拟退火,因为它类似于熔融金属慢慢冷却的冶金学退火过程。 决定每次迭代的学习率的函数称为learning schedule。 如果学习速度降低得过快,你可能会陷入局部最小值,甚至在到达最小值的半路就停止了。 如果学习速度降低得太慢,你可能在最小值的附近长时间摆动,同时如果过早停止训练,最终只会出现次优解。

n_epochs = 50 
t0, t1 = 5, 50  #learning_schedule的超参数
def learning_schedule(t):
    return t0 / (t + t1)
theta = np.random.randn(2,1)
for epoch in range(n_epochs):
    for i in range(m):
        random_index = np.random.randint(m)
        xi = X_b[random_index:random_index+1]
        yi = y[random_index:random_index+1]
        gradients = 2 * xi.T.dot(xi,dot(theta)-yi)
        eta = learning_schedule(epoch * m + i)
        theta = theta - eta * gradiens

小批量梯度下降

小批量梯度下降在参数空间上的表现比随机梯度下降要好的多,尤其在有大量的小型实例集时。作为结果,小批量梯度下降会比随机梯度更靠近最小值。但是,另一方面,它有可能陷在局部最小值中(在遇到局部最小值问题的情况下,和我们之前看到的线性回归不一样)。 图4-11显示了训练期间三种梯度下降算法在参数空间中所采用的路径。 他们都接近最小值,但批量梯度的路径最后停在了最小值,而随机梯度和小批量梯度最后都在最小值附近摆动。 但是,不要忘记,批次梯度需要花费大量时间来完成每一步,但是,如果你使用了一个较好的learning schedule,随机梯度和小批量梯度也可以得到最小值。

理解小批量梯度下降

噪声原因,maybe x{1}y{1}是比较容易计算的,x{2}y{2}却是难以计算的
随机梯度下降永远不会收敛,一直在最小值附近波动,使用减小学习率可以改善噪声,但有一缺点,会失去所有向量化带给你的加速,因为每次只处理一个样本。

batch的选择,

  • 样本数据小于2000,用批量梯度下降
  • 大数据,用2的幂设置,64-512

指数加权平均

Vt可以近似等于前 1 1 − B \frac{1}{1-B} 1B1天的平均值?B越大,平均的天数越多,则曲线越平滑

当时看的一脸懵逼,看这篇文章豁然开朗:https://zhuanlan.zhihu.com/p/29895933

指数加权平均修正偏差

理想是绿色的线,但是实际画的是紫色的线,发现前期偏差会更大,因为最开始我们设置V0=0,如图中左半部分所示,导致偏差,现在我们不用Vt,用\(\frac{V_t}{1-B_t}\),我们就可以修正偏差,并且随着t(天数的增加),Bt会逐渐趋向于0,最终拟合绿色那条线可以很好

Adagrad

对于每一个变量,其更新公式类似如下

假设我们我们n用下图所示的衰减,化简后如下

在凸优化背景中,AdaGrad算法具有一些令人满意的理论性质。然而,经验上已经发现,对于训练深度神经网络而言,从训练开始时累计梯度平方会导致有效学习率过早和过量的减少AdaGrad在某些深度学习模型上效果不错,但不是全部

RMSProp

RMSProp算法修改AdaGrad以在非凸设定下效果更好,改变梯度累计为指数加权的移动平均。RMSProp使用指数衰减平均以丢弃遥远过去的历史。

动量梯度下降法

李宏毅老师ppt

在物理世界,我们有惯性这一说法,那么可以把这种特性加入梯度下降中
加入动量后的梯度更新公式

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值