[深度学习]梯度下降算法、优化方法(SGD,Adagrad,Adam...)

求解神经网络,也就是求解 y =f(wx + b) 中的w 和 b。

那么如何找到正确的权重值 w 和 b 呢?

  1. 随机搜索。需要很多权重值,随机采样,然后把它们输入损失函数,再看它们效果如何。(stupid)
  2. 梯度下降算法。首先,初始化 w 和 b, 然后,使用梯度下降算法,对 w 和 b 进行更新。

下面,就对梯度下降算法,及其优化变体进行解释。

梯度下降算法

形象化解释:

当你一个人走在山谷中,你可能不能直接看到一条直接的线路下到谷底,但可以凭借脚下的感觉,感知当地地形的几何形状,知道哪个方向地面的倾斜是朝向下山的方向。然后你朝那个方向走一步,你就下降了一点。然后再次用你的脚找出下山的方向。就这样一次一次的重复,最终你希望能够到达谷底。

斜率:至少在一维上,函数的导数就是斜率。

梯度:在多元情况下函数的导数,就叫做梯度。梯度就是偏导数组成的向量。

梯度有和自变量x一样的形状。梯度中的每个元素可以告诉我们,相关方向上,函数f的斜率。梯度指向函数增加最快的方向,相应地,负梯度方向就指向了函数下降最快的方向。(证明:多元函数沿其负梯度方向下降最快

 

梯度下降算法:

1. 我们对 w 和 b 进行随机初始化。

2. 我们计算损失和梯度,然后沿着梯度相反的方向,更新权重值。只需要记住:梯度指向损失函数增加最快的方向,所以负梯度方向指向损失函数减小最快的方向。所以,每次向负梯度的方向前进一小步,一直重复,最后网络将会收敛。

其中,步长是一个超参数,告诉我们每次在负梯度方向前进多少距离。这个步长也被叫做学习率。

基本的梯度下降方法,也就是每一步,我们都朝梯度方向迈进一小步。优化方法,也就是高级一点的走法,它们运用一些更加新的法则。你可以采取稍微好一点的步骤,在多步总整合梯度下降的步骤。这些优化方法,比这样普通梯度下降法更好用。

梯度下降的本质是,利用每一步的梯度,来决定下一步的方向。不同的优化方法有不同的更新策略,来决定究竟如何使用梯度信息。但背后都基于同样的基本算法,每一步都试着往下坡走。

我们定义了一种损失误差,计算我们的分类器在训练样本中的每一步表现有多糟糕。我们设定,损失误差,是整个训练集误差的平均值。但实际中,N可能会非常非常大。例如,ImageNet数据集,N为130万。所以,如果使用全量N来计算loss,计算成本会非常高。因此,在实际操作中,我们往往会使用随机梯度下降,它并非计算整个训练集的误差和梯度值。而是在每一次迭代中,选取一小部分训练样本组成minibatch(小批量)。batchsize一般都取2的幂,如32,64,128等。然后我们利用minibatch来估算误差总和以及实际梯度。深度学习中的batch的大小对学习效果有何影响?

 

优化方法

深度学习优化方法总结比较(SGD,Adagrad,Adadelta,Adam,Adamax,Nadam)

猜你喜欢

转载自blog.csdn.net/u013250416/article/details/81090059