网站大量收购独家精品文档,联系QQ:2885784924

深度学习案例教程 教案5.6不同优化器对比.docx

深度学习案例教程 教案5.6不同优化器对比.docx

  1. 1、本文档共5页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多

06不同优化器对比

1

我们本节来学习不同优化器对比。

神经网络的学习目的是找到使损失函数的值尽可能小的参数,这是寻找最优参数的问题,解决这个问题的过程称为最优化。

优化器就是用来更新和计算模型参数以最小化损失函数的工具。有许多不同的优化器,包括最基本的梯度下降(SGD)、带动量的梯度下降、RMSProp、Adam等。

2

下面我们来看一个故事。

有一个性情古怪的探险家。他在广袤的干旱地带旅行,坚持寻找幽深的山谷。他的目标是要到达最深的谷底(他称之为“至深之地”)。这也是他旅行的目的。并且,他给自己制定了两个严格的“规定”:一个是不看地图;另一个是把眼睛蒙上。

因此,他并不知道最深的谷底在这个广袤的大地的何处,而且什么也看不见。在这么严苛的条件下,这位探险家如何前往“至深之地”呢?他要如何迈步,才能迅速找到“至深之地”呢?

3

探险家虽然看不到周围的情况,但是能够知道当前所在位置的坡度(通过脚底感受地面的倾斜情况)。于是,朝着当前所在位置的坡度最大的方向前进,就是SGD的策略。勇敢的探险家心里可能想着只要重复这一策略,总有一天可以到达“至深之地”。

4

SGD是最基本的梯度下降方法,每次更新都使用一部分样本来计算梯度。

5

但是SGD的缺点比较明显。

每一轮迭代使用的训练数据一般是小批量的,没有使用全部的训练数据,因此更新方向会发生锯齿状甚至随机震荡状;

某些梯度分量的值比另外一些分量的值要大的多,导致个别分量主导了梯度的更新方向,而期望的梯度更新方向却行进的非常缓慢。

那么,我们来看一下其他的优化器呢。

6

Momentum是一种带动量的梯度下降方法,它在更新参数时不仅考虑当前的梯度,还考虑上一次的梯度方向,这样可以加速收敛,并有可能跳过局部最小值。

它将一段时间内的梯度向量进行了加权平均,在一定程度上消除了更新过程中的不确定性因素,比如摆动现象,使得梯度更新朝着一个越来越明确的方向前进。

7

接下来是RMSProp,这一种自适应学习率的方法,它通过调整每个参数的学习率来加速训练。

8

最后,Adam。Adam结合了Momentum和RMSProp的思想,既考虑了过去的梯度的指数衰减平均值,也考虑了过去的平方梯度的指数衰减平均值。

这么多优化器,那我们在具体实操的时候如何选择呢?

目前没有哪种算法在解决所有的问题中都表现良好,每种算法都有自己的擅长解决的问题。

所以大家都可以尝试一下。

9

接下来,我们来看个简单的使用SGD的代码示例。

10

首先导入了torch.optim模块,这个模块提供了各种优化器的实现。

11

依次创建了一个模型对象、一个SGD优化器对象,SGD优化器对象的学习率为0.01。

12

在训练循环中,首先调用optimizer.zero_grad()方法,将梯度缓存清零。

然后,通过将输入数据input传递给模型,得到模型的输出output。

接着使用损失函数criterion计算输出和目标target之间的损失值loss。

调用loss.backward()方法,计算损失相对于模型参数的梯度。

然后调用optimizer.step()方法,使用梯度更新模型的参数,完成一次参数更新。

13

最后这一行创建了一个新的Adam优化器对象,使用了相同的模型参数和学习率0.01作为参数。

本节不同优化器对比就先了解到这里。

文档评论(0)

xiaobao + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档