越复杂的神经网络 , 越多的数据 , 我们需要在训练神经网络的过程上花费的时间也就越多. 原因很简单, 就是因为计算量太大了. 可是往往有时候为了解决复杂的问题, 复杂的结构和大数据又是不能避免的, 所以我们需要寻找一些方法, 让神经网络训练快起来。
Stochastic Gradient Descent (SGD)
上图中红色方块是我们要训练的 data, 如果用普通的训练方法, 就需要重复不断地把整套数据放入神经网络 NN训练, 这样消耗的计算资源会很大。
换一种思路, 如果把这些数据拆分成小批小批的, 然后再分批不断放入 NN 中计算, 这就是SGD 。
每次使用批数据, 虽然不能反映整体数据的情况, 不过却很大程度上加速了 NN 的训练过程, 而且也不会丢失太多准确率。
Momentum 更新方法
传统的参数 W 的更新是把原始的 W 累加上一个负的学习率(learning rate) 乘以校正值 (dx). 这种方法可能会让学习过程曲折无比。
所以我们把这个人从平地上放到了一个斜坡上, 只要他往下坡的方向走一点点, 由于向下的惯性, 他不自觉地就一直往下走, 走的弯路也变少了. 这就是 Momentum 参数更新.
AdaGrad 更新方法
上图中v 是 n 次训练中参数 W 的修正量的累积和。
AdaGrad方法使得每个参数更新都会有不同的学习率,对错误方向产生阻力。
RMSProp 更新方法
RMSProp将仅Momentum用到了学习率的变化中。
Adam更新方法
Adam将dx替换为Momentum中的方法。
计算m 时有 momentum 下坡的属性, 计算 v 时有 adagrad 阻力的属性, 然后再更新参数时 把 m 和 V 都考虑进去. 实验证明, 大多数时候, 使用 adam 都能又快又好的达到目标, 迅速收敛。
参考:
[1] https://www.jianshu.com/p/13099c24c98e