神经网络学习9--tensorflow的优化器optimizer

各种优化器的对比
下图是损失曲面的轮廓 和 不同优化算法的时间演化。我们的目的是设计一个优化器让其能够最快达到目标值。在神经网络中,每训练一次代表优化算法迭代了一次,对应图上则是点往前移动了一步,当优化器可以让点快速到达目标值时,说明我们需要的训练步骤最小,训练结果越接近目标值,损失也就越小,学习效果越优秀。
神经网络学习9--tensorflow的优化器optimizer

神经网络学习9--tensorflow的优化器optimizer
下图是Tensorflow中常见的优化器
神经网络学习9--tensorflow的优化器optimizer
比如:
Stochastic Gradient Descent (SGD)
Momentum
AdaGrad
RMSProp
Adam

SGD
最基础的优化器是GradientDescent,也是最常用的一种优化器。如果我们将传进来的数据只采用一部分,就是SGD方法。然后一部分一部分的去学习。这样子可以更快的去达到学习的效果。

Momentum
接下来更普遍的是Momentum优化器,它考虑了不仅仅是当前步的学习效率,还考虑了上一步的学习趋势,所以比SGD的方法更加快速。
大多数其他途径是在更新神经网络参数那一步上动动手脚. 传统的参数 W 的更新是把原始的 W 累加上一个负的学习率(learning rate) 乘以校正值 (dx). 这种方法可能会让学习过程曲折无比, 看起来像 喝醉的人回家时, 摇摇晃晃走了很多弯路.
所以我们把这个人从平地上放到了一个斜坡上, 只要他往下坡的方向走一点点, 由于向下的惯性, 他不自觉地就一直往下走, 走的弯路也变少了. 这就是 Momentum 参数更新. 另外一种加速方法叫AdaGrad.
神经网络学习9--tensorflow的优化器optimizer

AdaGrad 更新方法
神经网络学习9--tensorflow的优化器optimizer
这种方法是在学习率上面动手脚, 使得每一个参数更新都会有自己与众不同的学习率, 他的作用和 momentum 类似, 不过不是给喝醉酒的人安排另一个下坡, 而是给他一双不好走路的鞋子, 使得他一摇晃着走路就脚疼, 鞋子成为了走弯路的阻力, 逼着他往前直着走. 他的数学形式是这样的. 接下来又有什么方法呢? 如果把下坡和不好走路的鞋子合并起来, 是不是更好呢? 没错, 这样我们就有了 RMSProp 更新方法.

RMSProp 更新方法
神经网络学习9--tensorflow的优化器optimizer
有了 momentum 的惯性原则 , 加上 adagrad 的对错误方向的阻力, 我们就能合并成这样. 让 RMSProp同时具备他们两种方法的优势. 不过细心的同学们肯定看出来了, 似乎在 RMSProp 中少了些什么. 原来是我们还没把 Momentum合并完全, RMSProp 还缺少了 momentum 中的 这一部分. 所以, 我们在 Adam 方法中补上了这种想法.

Adam 更新方法
神经网络学习9--tensorflow的优化器optimizer
计算m 时有 momentum 下坡的属性, 计算 v 时有 adagrad 阻力的属性, 然后再更新参数时 把 m 和 V 都考虑进去. 实验证明, 大多数时候, 使用 adam 都能又快又好的达到目标, 迅速收敛. 所以说, 在加速神经网络训练的时候, 一个下坡, 一双破鞋子, 功不可没.