【Tensorflow】-【学习笔记6】-加速神经网络训练&优化器

本文不会涉及数学推导. 大家可以在很多其他地方找到优秀的数学推导文章.

包括以下几种模式:
Stochastic Gradient Descent (SGD)
Momentum
AdaGrad
RMSProp
Adam

在这里插入图片描述
越复杂的神经网络 , 越多的数据 , 我们需要在训练神经网络的过程上花费的时间也就越多. 原因很简单, 就是因为计算量太大了. 可是往往有时候为了解决复杂的问题, 复杂的结构和大数据又是不能避免的, 所以我们需要寻找一些方法, 让神经网络聪明起来, 快起来.

Stochastic Gradient Descent (SGD)

在这里插入图片描述
所以, 最基础的方法就是 SGD 啦, 想像红色方块是我们要训练的 data, 如果用普通的训练方法, 就需要重复不断的把整套数据放入神经网络 NN训练, 这样消耗的计算资源会很大.

我们换一种思路, 如果把这些数据拆分成小批小批的, 然后再分批不断放入 NN 中计算, 这就是我们常说的 SGD 的正确打开方式了. 每次使用批数据, 虽然不能反映整体数据的情况, 不过却很大程度上加速了 NN 的训练过程, 而且也不会丢失太多准确率.如果运用上了 SGD, 你还是嫌训练速度慢, 那怎么办?
在这里插入图片描述
没问题, 事实证明, SGD 并不是最快速的训练方法, 红色的线是 SGD, 但它到达学习目标的时间是在这些方法中最长的一种. 我们还有很多其他的途径来加速训练.

Momentum 更新方法

在这里插入图片描述
大多数其他途径是在更新神经网络参数那一步上动动手脚. 传统的参数 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 都能又快又好的达到目标, 迅速收敛. 所以说, 在加速神经网络训练的时候, 一个下坡, 一双破鞋子, 功不可没.

优化器 optimizer

各种不同的优化器

Tensorflow里面的优化器。

Tensorflow 中的优化器会有很多不同的种类。最基本, 也是最常用的一种就是

GradientDescentOptimizer

Tf.train.GradientDescentOptimizer(learning_rate, use_locking=False,name='GradientDescent)

这是最基础的梯度下降算法,也就是大家一般在教科书中接触到的最朴素的方法。
他的参数实际上只有一个,那就是
learning_rate学习率,这里我们简写做ε(伊普西龙)。
还有一个默认是False的参数use_locking,在官方文档的解释是,如果这个参数是True则对更新操作使用,这里我的理解就是如果是True的话,就不进行梯度下降的更新了,这个我们没有必要管它,在之后的优化器中我们不再介绍这个参数。
GradientDescentOptimizer的计算方法很简单,就是用学习率乘每个参数所对应的梯度▽θ更新网络参数。这里倒三角代表梯度,θ代表参数,f代表损失函数,v代表计算得到的参数的更新大小,▽f(θ)代表经过损失函数的梯度,中括号代表了计算[t]代表一次计算时网络的情况,而[t+1]代表新后网络中可学习的参数。

v[t] = -ε*▽f(θ[t])
Θ[t+1] = θ[t] +v[t]

其余可能用到的:

Tf.train.MomentumOptimizer

Tf.train.AdamOptimizer

在Google搜索中输入“tensorflow optimizer可以看到Tensorflow提供了7种优化器:
Tf.train.GradientDescentOptimizer
Tf.train.AdadeltaOptimizer
Tf.train.AdagradOptimizer
Tf.train.MomentumOptimizer
Tf.train.AdamOptimizer
Tf.train.FtrlOptimizer
Tf.train.RMSPropOptimizer

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值