本文共 1728 字,大约阅读时间需要 5 分钟。
单纯以算法为论,深度学习从业者的算法能力可能并不需要太大,因为很多时候,只需要构建合理的框架,直接使用框架是不需要太理解其中的算法的。但是我们还是需要知道其中的很多原理,以便增加自身的知识强度,而优化器可能正是深度学习的算法核心
本文基本完全参考以下连接:
原理简化讲解篇: 使用经验篇: 优化器tensorflow官方文档:官方文档所给的优化器很多,而且后续也在不停地添加当中,因此,我这里只列举基础和常用的几个:
优化器分类:Stochastic Gradient Descent (SGD):随机梯度,分批,随机放入一批,而不是全部放入,加快训练速度,却不会大大影响效果
Optimizer 主类:
RMSPropOptimizer
AdaGrad阻力因子考虑了当前的梯度,并没有考虑之前的梯度系数,这样会导致不管是迭代100次的或者是迭代10000次的,阻力都是一样的,没有区别。如果是运行到接近最优化处,其实阻力应该更大一些,因为此时只需要微调就行,所以这里增加了一个全局梯度累计,这样,梯度阻力会随着迭代的次数不断增大。 可能做到的改进:AdaGrad阻力因子没有考虑一个特殊情况,即如果下山最大梯度确实有个很大的90度折线,而且这个折线正是全局梯度方向,但是由于这个阻力因子的存在,可能每次梯度都很大,每次都阻碍,反而降低了下降速度,所以,这里可以添加了一个占比系数,即不仅仅考虑当前的梯度值,而且还要考虑之前的梯度值,这样,当梯度值一直很大时,说明可能是对的道路,阻力相应就减小。 公式: V = b2* V +(1-b2) * dx^2 W += -Learining rate * dx /sqrt(v)AdamOptimizer
Adam联合了momentum 的惯性原则 , 加上 adagrad 的对错误方向的阻力 公式: M += b1 * m -Learning rate * dx (momentum) V = b2* V +(1-b2) * dx^2 (AdaGrad) W += -Learining rate * M /sqrt(V)转载地址:http://aeepi.baihongyu.com/