神经网络学习9--tensorflow的优化器optimizer
各种优化器的对比
下图是损失曲面的轮廓 和 不同优化算法的时间演化。我们的目的是设计一个优化器让其能够最快达到目标值。在神经网络中,每训练一次代表优化算法迭代了一次,对应图上则是点往前移动了一步,当优化器可以让点快速到达目标值时,说明我们需要的训练步骤最小,训练结果越接近目标值,损失也就越小,学习效果越优秀。
下图是Tensorflow中常见的优化器
比如:
Stochastic Gradient Descent (SGD)
Momentum
AdaGrad
RMSProp
Adam
SGD
最基础的优化器是GradientDescent,也是最常用的一种优化器。如果我们将传进来的数据只采用一部分,就是SGD方法。然后一部分一部分的去学习。这样子可以更快的去达到学习的效果。
Momentum
接下来更普遍的是Momentum优化器,它考虑了不仅仅是当前步的学习效率,还考虑了上一步的学习趋势,所以比SGD的方法更加快速。
大多数其他途径是在更新神经网络参数那一步上动动手脚. 传统的参数 W 的更新是把原始的 W 累加上一个负的学习率(learning rate) 乘以校正值 (dx). 这种方法可能会让学习过程曲折无比, 看起来像 喝醉的人回家时, 摇摇晃晃走了很多弯路.
所以我们把这个人从平地上放到了一个斜坡上, 只要他往下坡的方向走一点点, 由于向下的惯性, 他不自觉地就一直往下走, 走的弯路也变少了. 这就是 Momentum 参数更新. 另外一种加速方法叫AdaGrad.
AdaGrad 更新方法
这种方法是在学习率上面动手脚, 使得每一个参数更新都会有自己与众不同的学习率, 他的作用和 momentum 类似, 不过不是给喝醉酒的人安排另一个下坡, 而是给他一双不好走路的鞋子, 使得他一摇晃着走路就脚疼, 鞋子成为了走弯路的阻力, 逼着他往前直着走. 他的数学形式是这样的. 接下来又有什么方法呢? 如果把下坡和不好走路的鞋子合并起来, 是不是更好呢? 没错, 这样我们就有了 RMSProp 更新方法.
RMSProp 更新方法
有了 momentum 的惯性原则 , 加上 adagrad 的对错误方向的阻力, 我们就能合并成这样. 让 RMSProp同时具备他们两种方法的优势. 不过细心的同学们肯定看出来了, 似乎在 RMSProp 中少了些什么. 原来是我们还没把 Momentum合并完全, RMSProp 还缺少了 momentum 中的 这一部分. 所以, 我们在 Adam 方法中补上了这种想法.
Adam 更新方法
计算m 时有 momentum 下坡的属性, 计算 v 时有 adagrad 阻力的属性, 然后再更新参数时 把 m 和 V 都考虑进去. 实验证明, 大多数时候, 使用 adam 都能又快又好的达到目标, 迅速收敛. 所以说, 在加速神经网络训练的时候, 一个下坡, 一双破鞋子, 功不可没.