pytorch 查看当前学习率_深度学习入门之优化器

b430065ec6aeb0ebf83e62986f2a110a.png

​ 最优化问题是计算数学中最为重要的研究方向之一。在深度学习领域,优化算法同样是关键环节之一。即使完全相同的数据集与模型架构,不同的优化算法也很可能导致不同的训练结果,甚至有的模型出现不收敛现象。

​ 进行过深度学习模型训练的小伙伴都清楚:一个训练过程的完成包含以下几点:

  • 数据集加载
  • 网络搭建
  • 优化器设置
  • 学习率调整(可选)

​ 对caffe了解的童鞋应该比较清楚,在训练之前需要编写两个prototxt文件,分别是:(1)net.prototxt,它定义了训练网络以及相关数据集加载方式等;(2) solver.prototxt,它定义待优化的网络以及优化器以及学习率调整机制。下面给出了caffe与pytorch的相关优化器定义方式。

# copy from caffe/examples/mnist.
net: "lenet_train_test.prototxt"
base_lr: 0.001
momentum: 0.9
momentum2: 0.999
type: "Adam"

# pytorch version
net = YourNet()
optimizer = Adam(net.parameters(), lr=0.001, betas=(0.9, 0.999))

​ 深度学习相关论文看的多就会发现,大部分论文的优化器主要是SGD, Adam以及RMSprop,甚少见到其他形式的优化器。那么除了上述三种外还有哪些可供选择的优化器呢?

​ 通过查看Pytorch中的optim模块源码,可以发现:Pytorch框架中支持以下几种优化器。

2722bf5a0e5ad1ea77642b3d5f52c6d9.png

梯度下降简介

​ 梯度下降是目前神经网络中使用最为广泛的优化算法之一。为弥补基本梯度下降的种种缺陷,研究者们提出了一系列的变种算法,从最初的SGD逐步演变到Adam、RMSprop等。

Gradient Descent

​ 标准的梯度下降可以描述为: $$ theta = theta -eta cdot nabla_{theta}J(theta) $$ ​ 标准的梯度下降是对计算所有训练样例的梯度再进行参数更新。标准梯度下降方法的缺点是:训练速度慢,同时容易陷入局部最优。关于梯度下降的伪码如下:

for i in range(epoch):
    params_grad = evaluete_gradient(loss_fn, data, params)
    params = prams - learning_rate * params_grad

Stochastic Gradient Descent

​ 不同于标准梯度下降中计算所有样例的的损失后再计算梯度,SGD对每一个样例计算一次梯度并更新参数。可以描述为: $$ theta = theta -eta cdot nabla_{theta}J(theta; x^{(i)};y^{(i)}) $$ ​ SGD可以很轻易的跳出局部最优,但会因个别样例梯度过大而出现过大的波动,如下图所示。

8419e799ce2e8e709a00b03de3c78491.png

Mini-batch Gradient Descent

​ 批梯度下降是介于两者之间的方法,可以用如下公式进行描述:

​ 它在一定程度上避免了前两者的弊端,是当前深度学习领域最常用的方法,常用SGD称呼。

改进版优化器

​ 前述优化器可以一定程度上解决大部分优化问题,但是它们无法保证收敛到全局最优(近全局最优)。存在以下几点挑战:

  • 如何选择合适的学习率。学习率过小导致过慢收敛速度,过大则会影响收敛性能;
  • 如何调整学习率。
  • 不同参数学习率自适应问题。
  • 如何跳出局部最优。

​ 事实上,关于优化器的介绍,参考3与参考6已经介绍的非常详细。限于个人数学功底薄弱,就不再进行优化器的更多介绍了,请移步深度学习最全优化方法总结比较与An overview of gradient descent optimization algorithms。这里仅仅对每个优化器进行简单的公式汇聚。

Momentum

4fe08b8fd9c2a1937b684b13b198eccd.png

​ 动量是一种加速SGD收敛的方法,上图给出了带与不带动量时的SGD收敛示意图。动量方法用公式描述如下:

Nesterov Accelerated Gradient

​ NAG公式描述如下:

Adagrad

​ 它是一种自适应学习率的方法,对于低频率参数执行高学习率,对于高频参数执行地学习率。该特性使得它比较适合于处理稀疏数据。它公式描述如下:

RMSprop

​ 公式描述如下:

Adam

​ 公式描述如下:

AdaMax

​ 公式描述如下:

Other略

如何选择优化器

​ 关于如何选择优化器,目前还没有达成共识。可以参考一下优化器综述一文中的对比分析。目前最流程且使用率最高的当属Adam、SGD、RMSprop及带动量因子版本。

  • 对于稀疏数据,尽量使用学习率可自适应的优化方法,不用手动调节学习率;
  • SGD通过训练时间更长,在更好的学习率配置方案下往往具有更可靠的结果;
  • Adam在实际应用中效果比较好,大部分场景下均超过了其他的自适应技术;
  • 如果希望有更快的收敛速度,推荐使用学习率自适应的优化方法;

---------

  1. 机器学习:各种优化器Optimizer的总结与比较
  2. 深度学习——优化器算法Optimizer详解
  3. 深度学习最全优化方法总结比较
  4. 从SGD到Adam-深度学习优化算法概览
  5. 一文看懂各种神经网络优化算法:从梯度下降到Adam方法
  6. An overview of gradient descent optimization algorithms
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值