前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >神经网络训练细节part2(上)

神经网络训练细节part2(上)

作者头像
听城
发布2018-08-30 11:13:31
4150
发布2018-08-30 11:13:31
举报
文章被收录于专栏:杂七杂八杂七杂八

回顾

训练神经网络的过程有四步组成,重复这四个步骤就可以得到完整的训练流程

  • 需要有一个完整的数据集图像和标签,从数据集中取出一小批样本
  • 通过网络做前向传播得到损失,考察分类效果
  • 然后通过反向传播来得到每一个权重的梯度
  • 这个梯度告诉我们如何去调整每一个权重,最终得到更好的分类结果

参数更新

SGD

在SGD(Stochastic gradient descent)中经常会遇到一个问题,就是梯度在某个方向非常小,在另一个方向有一个很大的速率,这样就会在一个方向进展很小,在另一个方向有很大变化,解决方法是动量更新(Momentum update)

代码语言:javascript
复制
#gradient descent update
x+= -learing_rate*dx
#momentum update
v = mu*v - learing_rate*dx#mu是一个系数[0,1],0.5,0.9
x+=v

学习率退火

在训练深度网络的时候,让学习率随着时间退火通常是有帮助的。可以这样理解:如果学习率很高,系统的动能就过大,参数向量就会无规律地跳动,不能够稳定到损失函数更深更窄的部分去。知道什么时候开始衰减学习率是有技巧的:慢慢减小它,可能在很长时间内只能是浪费计算资源地看着它混沌地跳动,实际进展很少。但如果快速地减少它,系统可能过快地失去能量,不能到达原本可以到达的最好位置。通常,实现学习率退火有3种方式:

  • 随步数衰减:每进行几个周期就根据一些因素降低学习率。典型的值是每过5个周期就将学习率减少一半,或者每20个周期减少到之前的0.1。这些数值的设定是严重依赖具体问题和模型的选择的。在实践中可能看见这么一种经验做法:使用一个固定的学习率来进行训练的同时观察验证集错误率,每当验证集错误率停止下降,就乘以一个常数(比如0.5)来降低学习率。
  • 指数衰减。公式为
\alpha=\alpha_0 e^{-kt}
\alpha=\alpha_0 e^{-kt}

,t是迭代次数

  • 1/t衰减的数学公式是
\alpha=\alpha_0/(1+kt)
\alpha=\alpha_0/(1+kt)

是超参数,t是迭代次数。

Adagrad

代码语言:javascript
复制
# 假设有梯度和参数向量x
cache += dx**2
x += - learning_rate * dx / (np.sqrt(cache) + eps)

RMSprop

代码语言:javascript
复制
cache =  decay_rate * cache + (1 - decay_rate) * dx**2
x += - learning_rate * dx / (np.sqrt(cache) + eps)

Adam

代码语言:javascript
复制
m = beta1*m + (1-beta1)*dx
v = beta2*v + (1-beta2)*(dx**2)
x += - learning_rate * m / (np.sqrt(v) + eps)
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018.08.28 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 回顾
  • 参数更新
    • SGD
      • 学习率退火
        • Adagrad
          • RMSprop
            • Adam
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档