前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >以optim.SGD为例介绍pytorch优化器

以optim.SGD为例介绍pytorch优化器

作者头像
狼啸风云
修改2022-09-02 22:22:38
3.9K0
修改2022-09-02 22:22:38
举报

在神经网络优化器中,要为了优化我们的神经网络,使神经网络在我们的训练过程中快起来,节省时间。在pytorch中提供了 torch.optim方法优化我们的神经网络,torch.optim 是实现各种优化算法的包。最常用的方法都已经支持,接口很常规,所以以后也可以很容易地集成更复杂的方法。

如何使用optimizer

要使用torch.optim,你必须构造一个optimizer对象,这个对象能保存当前的参数状态并且基于计算梯度进行更新。

构建一个优化器

要构造一个优化器,你必须给他一个包含参数(必须都是variable对象)进行优化,然后可以指定optimizer的参数选项,比如学习率,权重衰减。具体参考torch.optim文档。

代码语言:javascript
复制
optimizer = optim.SGD(model.parameters(),lr = 0.01, momentum = 0.9)
optimizer = optim.Adam([var1,var2],lr = 0.0001)

model.parameters()是获取model网络的参数,构建好神经网络后,网络的参数都保存在parameters()函数当中。

参数

首先sgd的参数有三个,1)opfunc;2)x;3)config;4)state

  • config 第三个参数是一些配置变量,用来优化梯度下降用的,为了防止求得的最优解是局部最优解而不是全局最优解。 配置变量包括:learningRate(梯度下降速率),learningRateDecay(梯度下降速率的衰减),weightDecay(权重衰减),momentum(动量 or 冲量)等等

learning rate

学习率较小时,收敛到极值的速度较慢。 学习率较大时,容易在搜索过程中发生震荡。

weight decay

为了有效限制模型中的自由参数数量以避免过度拟合,可以调整成本函数。 一个简单的方法是通过在权重上引入零均值高斯先验值,这相当于将代价函数改变为E〜(w)= E(w)+λ2w2。 在实践中,这会惩罚较大的权重,并有效地限制模型中的自由度。 正则化参数λ决定了如何将原始成本E与大权重惩罚进行折衷。

learning rate decay

decay越小,学习率衰减地越慢,当decay = 0时,学习率保持不变。 decay越大,学习率衰减地越快,当decay = 1时,学习率衰减最快。

momentum

“冲量”这个概念源自于物理中的力学,表示力对时间的积累效应。

在普通的情况下x的更新 在加上冲量后就是在普通的情况下加上上次更新的x的与mom[0,1]的乘积

当本次梯度下降- dx * lr的方向与上次更新量v的方向相同时,上次的更新量能够对本次的搜索起到一个正向加速的作用。

当本次梯度下降- dx * lr的方向与上次更新量v的方向相反时,上次的更新量能够对本次的搜索起到一个减速的作用。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2020-05-15 ,如有侵权请联系 cloudcommunity@tencent.com 删除

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

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 如何使用optimizer
  • 构建一个优化器
  • 参数
    • learning rate
      • weight decay
        • learning rate decay
          • momentum
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档