优化算法2D可视化的补充

4. 分析上图,说明原理(选做)

1、为什么SGD会走“之字形”?其它算法为什么会比较平滑?

      之所以会走"之字形",是因为它在每次更新参数时只考虑当前的样本梯度。这导致参数更新非常不稳定,每个样本的梯度方向不一致,从而产生了"之字形"的更新路径。

     其他算法相对比较平滑的原因是它们引入了不同的策略来平衡参数更新的稳定性和速度。

例如,Momentum算法引入了动量概念,它在更新参数时考虑了之前更新的方向和速度。通过积累之前梯度的指数衰减平均值,动量算法可以在梯度方向一致时加速收敛,并减少参数更新的震荡,从而使得更新路径更加平滑。Adagrad和RMSprop算法引入了自适应学习率的概念。它们通过梯度的历史信息对学习率进行调整,可以根据梯度值的大小对参数的不同方向分配不同的学习率。这样可以使得梯度大的方向学习率减小,梯度小的方向学习率增大,从而更加平滑地更新参数。Adam算法在Momentum和RMSprop的基础上进一步改进,结合了二者的优点。Adam算法不仅考虑了动量对更新路径的影响,还引入了关于梯度平方的一阶矩量和二阶矩量的估计,通过对梯度的偏移和峰值信息进行动态调整,进一步提高更新路径的平滑性。

2、Momentum、AdaGrad对SGD的改进体现在哪里?速度?方向?在图上有哪些体现?

    Momentum算法在更新时,引入了动量的概念,考虑了之前梯度更新的方向和速度。通过积累之前梯度的指数衰减平均值,动量算法可以在梯度方向一致时加速收敛,并减少参数更新的震荡。它在速度方面对SGD的改进的体现在:相当于增加了更新方向的平滑性。在图上,这个改进体现为更新路径会比SGD更加平滑,能够加速收敛。

  

     Adagrad,它通过历史梯度信息对每个参数自适应地调整学习率。Adagrad的学习率随着时间步的增加而不断衰减,在每个参数那里都单独调整。这对于处理非平稳、强烈相关的数据具有很好的效果。在速度方面对SGD的改进的体现在:可以自适应地调整每个参数的学习率,以更贴合各自的梯度,能够让更新更快速及早达到收敛。在图上,这个改进体现为更新路径更加平缓而且每个维度更新幅度差异不大。

3.仅从轨迹来看,Adam似乎不如AdaGrad效果好,是这样么?

   轨迹上来看,是这样,因为此时Adam和AdaGrad的学习率并不相同,并且Adam和AdaGrad选择的均是一个恰当的学习率。

但是图中的学习率都是调整过的,我们随机换一个相同的学习率(0.1)

由上可见:Adam优于Adagrad

所以上述观点错误,没有一个模型会永远由于另一个,知识参数不对而已。

5、调整学习率、动量等超参数,轨迹有哪些变化?

lr=0.01时:

 lr太小,30次根本不够搜索的,改为1000次

这次Momentum找到了最小点,Adam马上找到,而其他两种算法还差得多

lr=0.1,搜索1000次

只有AdaGrad没有找到最小点 

 lr=1,搜索1000次

r=100,搜索100次 

 可以发现,SGD和Momentum很容易错过全局最小值,Adam需要较长的时间和较多的搜索次数来找到全局最小值,AdaGrad效果最好。

5. 总结SGD、Momentum、AdaGrad、Adam的优缺点

上个博客有

但是我发现学长总结更直观

6. Adam这么好,SGD是不是就用不到了? 

    SGD最大的缺点是下降速度慢,而且可能会在沟壑的两边持续震荡,停留在一个局部最优点。SGD没有用到二阶动量,因此学习率是恒定的(实际使用过程中会采用学习率衰减策略,因此学习率递减)。AdaGrad的二阶动量不断累积,单调递增,因此学习率是单调递减的。因此,这两类算法会使得学习率不断递减,最终收敛到0,模型也得以收敛。

但AdaDelta和Adam则不然。二阶动量是固定时间窗口内的累积,随着时间窗口的变化,遇到的数据可能发生巨变,使得可能会时大时小,不是单调变化。这就可能在训练后期引起学习率的震荡,导致模型无法收敛。

   并且Adam有两大罪状

  谈到现在,到底Adam好还是SGD好?这可能是很难一句话说清楚的事情。去看学术会议中的各种paper,用SGD的很多,Adam的也不少,还有很多偏爱AdaGrad或者AdaDelta。可能研究员把每个算法都试了一遍,哪个出来的效果好就用哪个了。

      而从这几篇怒怼Adam的paper来看,多数都构造了一些比较极端的例子来演示了Adam失效的可能性。这些例子一般过于极端,实际情况中可能未必会这样,但这提醒了我们,理解数据对于设计算法的必要性。优化算法的演变历史,都是基于对数据的某种假设而进行的优化,那么某种算法是否有效,就要看你的数据是否符合该算法的胃口了。

7. 增加RMSprop、Nesterov算法

上个博客有

对比Momentum与Nesterov

两个算法都是动量优化法,Nesterov项是momentum的改进,在梯度更新时做一个校正,让之前的动量直接影响当前的动量,避免前进太快,同时提高灵敏度。

对比AdaGrad与RMSprop

两个都是自适应学习率优化法,RMSprop解决了对历史梯度一直累加而导致学习率一直下降的问题,适合处理非平稳目标,对于RNN效果很好,但RMSprop依然依赖于手动选择全局学习率。

8. 基于MNIST数据集的更新方法的比较

# coding: utf-8
import os
import sysimport numpy as npfrom jiwang.Server import SGD, Momentum, AdaGrad, Adamsys.path.append(os.pardir)  # 为了导入父目录的文件而进行的设定
import matplotlib.pyplot as plt
from nndl4.dataset import load_mnist
from common.util import smooth_curve
from common.multi_layer_net import MultiLayerNet
from common.optimizer import *# 0:读入MNIST数据==========
(x_train, t_train), (x_test, t_test) = load_mnist(normalize=True)train_size = x_train.shape[0]
batch_size = 128
max_iterations = 2000# 1:进行实验的设置==========
optimizers = {}
optimizers['SGD'] = SGD()
optimizers['Momentum'] = Momentum()
optimizers['AdaGrad'] = AdaGrad()
optimizers['Adam'] = Adam()
# optimizers['RMSprop'] = RMSprop()networks = {}
train_loss = {}
for key in optimizers.keys():networks[key] = MultiLayerNet(input_size=784, hidden_size_list=[100, 100, 100, 100],output_size=10)train_loss[key] = []# 2:开始训练==========
for i in range(max_iterations):batch_mask = np.random.choice(train_size, batch_size)x_batch = x_train[batch_mask]t_batch = t_train[batch_mask]for key in optimizers.keys():grads = networks[key].gradient(x_batch, t_batch)optimizers[key].update(networks[key].params, grads)loss = networks[key].loss(x_batch, t_batch)train_loss[key].append(loss)if i % 100 == 0:print("===========" + "iteration:" + str(i) + "===========")for key in optimizers.keys():loss = networks[key].loss(x_batch, t_batch)print(key + ":" + str(loss))# 3.绘制图形==========
markers = {"SGD": "o", "Momentum": "x", "AdaGrad": "s", "Adam": "D"}
x = np.arange(max_iterations)
for key in optimizers.keys():plt.plot(x, smooth_curve(train_loss[key]), marker=markers[key], markevery=100, label=key)
plt.xlabel("iterations")
plt.ylabel("loss")
plt.ylim(0, 1)
plt.legend()
plt.show()

从结果中可知,与SGD相比,其他3种方法学习得更快,而且速度基本相同,仔细看的话,AdaGrad的学习进行得稍微快一点。这个实验需要注意的地方是,实验结果会随学习率等超参数、神经网络的结构(几层深等)的不同而发生变化。不过,一般而言,与SGD相比,其他3种方法可以学习得更快,有时最终的识别精度也更高。


总结:

1、本来觉得自己上个博客总结的还不错,看了上届学长的总结,觉得更直观,更好,直接盗了

2、每个优化算法在不同的模型上的表现是不一样的,而且会因为学习率等参数的不同,引起效果的不同。

3、今天24考研结束,作为25考研的我感觉天都黑了,没人在前面挡着了。

参考链接:

NNDL 作业11:优化算法比较_基于mnist数据集的更新方法-CSDN博客 

NNDL 作业11:优化算法比较_"ptimizers[\"sgd\"] = sgd(lr=0.95) optimizers[\"mo-CSDN博客

HBU-NNDL 作业11:优化算法比较_adam不收敛-CSDN博客

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/518255.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

TortoiseGit 本地仓库和远程仓库建立联系_入门试炼_02

TortoiseGit 简介: TortoiseGit 简称 tgit, 中文名海龟Git。TortoiseGit是一个开放的GIT版本控制系统的源客户端。 文章目录一、前提准备1.1. 生成秘钥和公钥1.2. 把 SSH Key 填到Git 服务器的配置中一、前提准备 声明:此处介绍通过SSH URL方式传输&…

来自 Spring Cloud 官方的消息,Spring Cloud Alibaba 即将毕业

2019 年 7 月 24 日晚,Spring Cloud 官方发布公告: 仓库迁移是官方决定Spring Cloud Alibaba 即将毕业 根据官方最新的发版规则,我们会把孵化器中的 Spring Cloud Alibaba 仓库迁移回 Alibaba 官方仓库,进行正式的毕业发布&#…

TortoiseGit 克隆_入门试炼_03

文章目录一、 Git克隆1.1. 右击选择Git克隆1.2. 输入URL1.3. 提示输入密码一、 Git克隆 1.1. 右击选择Git克隆 在本地文件夹的空白位置处,右击鼠标,在菜单中选择【Git克隆】: 1.2. 输入URL 标签说明URL是git项目地址,简言之后…

5分钟在PAI算法市场发布自定义算法

概述 在人工智能领域存在这样的现象,很多用户有人工智能的需求,但是没有相关的技术能力。另外有一些人工智能专家空有一身武艺,但是找不到需求方。这意味着在需求和技术之间需要一种连接作为纽带。 今天PAI正式对外发布了“AI市场”以及“PA…

Gartner:阿里云蝉联全球第三、亚太第一

4月23日消息,国际研究机构Gartner发布最新云计算市场追踪数据,阿里云亚太市场排名第一,全球市场排名第三。阿里云亚太市场份额从26%上涨至28%,接近亚马逊和微软总和;全球市场份额从7.7%上涨至9.1%,进一步拉…

消息点击率翻倍,原来这就是闲鱼背后的神器

阿里妹导读:IFTTT是一个被称为 “网络自动化神器” 的创新型互联网服务理念,它既实用,概念又简单,可以通过标准化协议满足用户的强需求,让各种互联网产品为用户服务,2010年刚推出,就拥有了极高的…

TortoiseGit 将工作区变动文件提交本地仓库_入门试炼_04

文章目录一、将工作区代码提交到本地仓库1.1. 新增/改动文件1.2. 将变动文件提交本地仓库1.3. 填写提交注释说明一、将工作区代码提交到本地仓库 Git的使用类似TFS、SVN等源代码或者文件管理器,惯例的流程: 1.1. 新增/改动文件 改动/修改本地项目中的…

MongoDB Sharding 请勿复用已删除的 namespace

SERVER-17397: Dropping a Database or Collection in a Sharded Cluster may not fully succeed 是 MongoDB 里老大难的问题,库或集合删除操作如果没有完全执行成功,再新建相同名字的集合,可能导致读到老版本数据的问题。 集合分片原理 Mon…

32岁被裁补偿N+2:“感谢裁我,让我翻倍!” 网友:求同款被裁!

2020年的冬天,“冷”的有些频繁。最近浏览一则新闻,19年12月19日,《马蜂窝被曝裁员40% UGC模式变现难?》爆火,据悉马蜂窝将裁员40%,交易中心成了“重灾区”,赔偿N2,留下的除搜索推荐…

JavaScript-操作DOM对象-创建和插入dom节点

插入节点 我们获得了某个Dom节点&#xff0c;假设这个dom节点是空的&#xff0c;我们通过innerHTML就可以增加一个元素了&#xff0c;但是这个DOM节点已经存在元素了&#xff0c;我们就不能这么干了&#xff01;会产生覆盖 将标签 追加 到其他标签 <p id"js">J…

技术架构演进|0到千万DAU,微淘如何走过?

导读&#xff1a;大家经常看到手淘里面的第二个TAB 就是微淘了&#xff01;目前有几千万 DAU&#xff0c;几百亿关注关系&#xff0c;每天几十万的商家生产内容&#xff0c;对系统的挑战较大。产品形态上目前以关注 feeds 流为主&#xff0c;是商家非常重要的获取流量阵地&…

TortoiseGit 更新远程仓库最新代码到本地仓库_入门试炼_05

文章目录1. 更新项目1. 更新项目 拉取和远程仓库保持版本一致

自动驾驶中高精地图的大规模生产:视觉惯导技术在高德的应用

导读&#xff1a;导航、驾驶辅助、自动驾驶等技术的不断发展对地图的精细程度提出了更高的要求。常规的道路级地图对于智能交通系统存在很多不足&#xff0c;针对自动驾驶应用的需求&#xff0c;我们提出了利用视觉惯导技术制作高精地图的方法。 本文将首先介绍视觉和惯导的主…

如何选择基于 Kubernetes 的 PaaS?

作者 | Bram Dingelstad译者 | 弯月&#xff0c;责编 | 郭芮头图 | CSDN 下载自视觉中国出品 | CSDN&#xff08;ID&#xff1a;CSDNnews&#xff09;我们都遇到过这种情况&#xff1a;有人发现了一个bug&#xff0c;然而这不是一般的软件bug&#xff0c;甚至都不是通常意义上的…

TortoiseGit 推送本地仓库变动文件至远程仓库_入门试炼_06

文章目录1. 将本地仓库变动文件提交远程1. 将本地仓库变动文件提交远程 或者

JavaScript-获得和设置表单的值

文本框 text下拉框 单选框 radio多选框 checkbox隐藏域 hidden密码框 password… 表单的目的&#xff1a;提交信息 获得要提交的信息 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>Title</title…

Cloud Toolkit 部署应用到 EDAS Kubernetes 集群

1、在 IntelliJ IDEA 上单击 Cloud Toolkit 的图标&#xff0c;在下拉列表中选择 Deploy to EDAS -> EDAS for Kubernetes Application 2、在 Deploy to EDAS 对话框配置应用部署参数。 说明&#xff1a;如果您还没有在 EDAS 上创建应用&#xff0c;在对话框右上角单击 Cr…

架构师前辈告诉你:代码该如何才能自己写得容易,别人看得也不痛苦

来源 | 编程新说责编 | Carol头图 | CSDN 下载自视觉中国切身感受在这个世界上&#xff0c;最难看懂的文档&#xff0c;永远是同事写的需求文档。最难看懂的代码&#xff0c;永远是同事写的业务代码。我很纳闷&#xff0c;像Spring这样的官方英文文档&#xff0c;我看起来也不太…

20万天猫智慧门店背后的商业思考和技术重构

阿里妹导读&#xff1a;2016年&#xff0c;「新零售」被首次提出&#xff0c;在这些年里&#xff0c;无论是互联网公司、零售企业&#xff0c;还是像酒店、机场等这些服务型业态&#xff0c;都在积极探索新的零售模式。对于天猫这样一个服务了全球诸多品牌的平台来说&#xff0…