正确的优化算法可以成倍地减少训练时间

许多人在训练神经网络时可能会使用优化器,而不知道该方法称为优化。优化器是用于更改神经网络属性(例如权重和学习率)以减少损失的算法或方法。


文章目录

  • 梯度下降
  • 随机梯度下降
  • 小批量梯度下降
  • 其它优化算法
  • 各个优化算法比较动态图
  • 福利赠书
  • 推荐
  • 内容简介


梯度下降

梯度下降是最基本但使用最多的优化算法。它在线性回归和分类算法中大量使用。神经网络中的反向传播也使用梯度下降算法。

梯度下降是一种一阶优化算法,它依赖于损失函数的一阶导数。它计算应该改变权重的方式,以便函数可以达到最小值。通过反向传播,损失从一层转移到另一层,模型的参数(也称为权重)根据损失进行修改,从而使损失最小化。

优点:

  • 容易计算。
  • 易于实施。
  • 容易理解。

缺点:

  • 可能陷入局部最小值。
  • 在计算整个数据集的梯度后,权重会发生变化。因此,如果数据集太大,可能需要数年时间才能收敛到最小值。
  • 需要大内存来计算整个数据集的梯度

随机梯度下降

它是梯度下降的变体。它尝试更频繁地更新模型的参数。在这种情况下,模型参数在计算每个训练示例的损失后会发生变化。因此,如果数据集包含 1000 行,SGD 将在数据集的一个循环中更新模型参数 1000 次,而不是像梯度下降中那样更新一次。

θ=θ−α⋅∇J(θ;x(i);y(i)) ,其中 {x(i) ,y(i)} 是训练样本

由于模型参数更新频繁,参数在不同强度下具有较大的方差和损失函数波动。

优点:

  • 因此,频繁更新模型参数可以在更短的时间内收敛。
  • 需要更少的内存,因为不需要存储损失函数的值。
  • 可能会得到新的最小值。

缺点:

  • 模型参数的高方差。
  • 即使在达到全局最小值后也可能射击。
  • 要获得与梯度下降相同的收敛性,需要慢慢降低学习率的值。

小批量梯度下降

它是梯度下降算法所有变体中最好的。它是对 SGD 和标准梯度下降的改进。它在每批次后更新模型参数。因此,数据集被分成不同的批次,每批次之后,参数都会更新。

θ=θ−α⋅∇J(θ; B(i)),其中 {B(i)} 是训练样本的批次。

优点:

  • 经常更新模型参数并且方差也较小。
  • 需要中等的内存

所有类型的梯度下降都有一些挑战:

  • 选择学习率的最佳值。如果学习率太小,梯度下降可能需要很长时间才能收敛。
  • 对所有参数都有一个恒定的学习率。可能有一些参数我们不想以相同的速率改变。
  • 可能会陷入局部极小值。

其它优化算法

具体我就不再详细介绍,其它优化器如下:

  • Momentum
  • Nesterov Accelerated Gradient
  • Adagrad
  • AdaDelta
  • Adam

各个优化算法比较动态图

神经网络结构优化 神经网络算法优化模型_算法

可见Adam 是最好的优化器。对于稀疏数据,使用具有动态学习率的优化器。如果,想使用梯度下降算法,那么 min-batch 梯度下降是最好的选择。