284354749 发表于 2017-6-21 18:55:26

随机梯度下降

  Stochastic grandient Descent(S.G.D.) 深度学习的核心
  优点:SGD在数据和模型尺寸方面扩展性很好,容易规模化
  详细介绍:
  SGD是用来解决梯度下降算法难以规模化的问题。
  计算梯度有一个经验法则,如果要计算的操作需要n次浮点运算,那么计算梯度需要三倍计算量。
  正如之前那样,损失函数非常巨大,它取决于你数据集的每一个元素。
  如果你的数据集较大,那会是非常大的计算量,但我们期望能训练大量的数据,因为实际问题中,有更多的数据总会有更多的收获。
  因为梯度下降比较直接,要实现它需要很多步,这意味着你要遍历的整个数据集上百次,这并不好,因此我们打算偷个懒。
  与其计算损失,还不如直接计算它的估计值,一个非常差的估计,实际上是差的惨不忍睹,这个估计差到你会怀疑为啥它还能有效,但这样就是可行,因为我们又花了时间让它没那么差。
  我们将要使用的估计值,是随机从数据集中抽取的很小一部分的平均损失,一般在1到1000个样本左右。
  我说到随机,因为这非常重要,如果你选样本时不够随机,那它就完全不再有效。
  因此,我们将取出数据集中非常小的一片,计算那些样本的损失和导数,并假设那个导数就是进行梯度下降正确的方向,它并不是每次都是正确的方向,实际上它偶尔还会增加实际的损失,而不是减少它,但我们通过每次执行非常非常小的步幅,多次执行这个过程来补偿它。
  因此,每一步变得更容易计算,但我们也付出了代价,相比于一大步,我们需要走很多小步,总的来说,我们还是赢了好多。
  事实上,相比于梯度下降,这样做异常有效。
  SGD的技巧:Momentum And Learning Rate Decay
  0均值,均方差较小
  1. Momentum
  保存梯度的移动平均 Running Average M<-0.9M+△L
  用移动平均代替当前一批数据的方向
  这种动量技术很有效,常常会有更好的收敛性。
  2. Learning Rate Decay
  通过观察loss曲线,得知模型的训练速度,这张图片对于每一个训练神经网络的人来说都非常熟悉。

  永远不要相信模型的训练速度,这和你的模型训练的有多好基本没什么关系。
  SGD被称作“black magic”
  Many Hyper-Parameters

[*]Initial Learning Rate
[*]Learning Rate Decay
[*]Momentum
[*]Batch Size
[*]Weight Initialization
  当训练出现问题的时候,首先应该想到降低学习率。
  后续将介绍一个AdaGrad模型,AdaGrad是SGD的优化版本,它使用了动量来防止过拟合,而且学习率能够自动衰减,使用AdaGrad能够降低训练过程对超参数的敏感度,但是它的准确率比使用动量的SGD低一些。
页: [1]
查看完整版本: 随机梯度下降