【深度学习】优化器介绍

文章目录

  • 前言
  • 一、梯度下降法(Gradient Descent)
  • 二、动量优化器(Momentum)
  • 三、自适应学习率优化器


前言

深度学习优化器的主要作用是通过调整模型的参数,使模型在训练数据上能够更好地拟合目标函数(损失函数)并收敛到最优解。在深度学习中,优化器的任务是最小化损失函数,即模型预测的输出与真实标签之间的差异。
作用:
1.参数更新:优化器根据损失函数的梯度信息来更新模型的参数。梯度表示了损失函数在参数空间中的变化方向,优化器使用这一信息来调整参数,使得损失函数逐渐减少。
2.模型收敛:通过迭代过程,优化器帮助模型逐渐收敛到损失函数的局部最小值或全局最小值,从而提高模型的性能。
3.处理局部极小值:优化器的一些变种,如动量法和自适应学习率法,有助于处理梯度下降过程中可能遇到的局部极小值问题,提高模型训练的稳定性。
4.加速收敛:通过引入动量项或自适应学习率等机制,优化器可以加速模型的收敛过程,减少训练时间。
5.处理非凸优化问题:在深度学习中,损失函数通常高度非凸的,有多个局部最小值。优化器的设计考虑到这些问题,以在参数空间中找到良好的解。
6.适应学习率:自适应学习率优化器可以根据参数更新的情况自动调整学习率,使得在不同参数处使用不同的学习率,提高训练的效率。
7.处理梯度消失或爆炸:一些优化器设计考虑了深度神经网络中可能出现的梯度消失或梯度爆炸问题,通过合理的参数更新策略有助于缓解这些问题。
不同的优化器采用不同的策略来更新模型的权重,直接影响了模型的收敛速度和性能。

一、梯度下降法(Gradient Descent)

梯度下降算法是深度学习中常用的优化算法,分为以下三种:
1、批量梯度下降算法(Batch Gradient Descent):将整个训练集上的梯度进行累加,然后更新模型参数。使用该方法充分利用了并行运行,极大提高了运行效率,但是对计算机要求高。

def forward(x):
	return x * w
	
def cost(xs, ys):
	cost = 0
	for x, y in zip(xs, ys):
		y_pred = forward(x)
		cost += (y_pred - y) ** 2
	return cost / len(xs)
	
def gradient(xs, ys):
	grad = 0
	for x, y in zip(xs, ys):
		grad += 2*x*(x*w-y)
	return grad/len(xs)

for epoch in range(100):
	cost_val = cost(x_data, y_data)
	grad_val = gradient(x_data, y_data)
	w -= 0.01 * grad_val

梯度下降算法示意图如下:
在这里插入图片描述
2、随机梯度下降法(Stochastic Gradient Descent,SGD):每次迭代只使用一个训练样本来计算梯度和更新参数,这样可以更快地进行模型更新。此方法没有利用计算机的并行运算,计算效率低下。

def forward(x):
	return x * w
def loss(x, y):
	y_pred = forward(x)
	return (y_pred - y) ** 2
def gradient(x, y):
	return 2 * x * (x * w - y)

for epoch in range(100):
	for x, y in zip(x_data, y_data):
	grad = gradient(x, y)
	w = w - 0.01 * grad
	print("\tgrad: ", x, y, grad)
	l = loss(x, y)

3、小批量梯度下降算法(Mini-batch Gradient Descent):该方法权衡了批量梯度下降算法和随机梯度下降算法的优缺点,是深度学习中最常用的方法。

二、动量优化器(Momentum)

由于计算机性能的限制,使用整个样本集进行求解是不现实的。但小批量梯度下降算法容易陷入局部最优解,故引入动量项,模拟物体在梯度场中的运动惯性,考虑了上一次计算的梯度,有助于克服梯度下降中的震荡问题。
在这里插入图片描述
计算公式如下:
在这里插入图片描述

三、自适应学习率优化器

1、Adagrad优化器:根据参数的历史梯度进行学习率调整,适用于稀疏数据。公式如下:
在这里插入图片描述
优点:
(1)自适应学习率: Adagrad可以自适应地为每个参数提供不同的学习率。对于频繁更新的参数,学习率较小;对于不经常更新的参数,学习率较大。这有助于在训练过程中更好地平衡参数的更新。
(2)适用于稀疏数据: Adagrad对于稀疏数据的训练效果较好,因为它可以根据每个参数的历史梯度来调整学习率,对于出现较少的特征有更大的学习率。
(3)简单实现: Adagrad的实现相对简单,不需要手动调整学习率,这使得它在实践中易于使用。
缺点:
(1)学习率衰减过快: Adagrad在迭代过程中会不断累积梯度的平方,并将其用于学习率的调整。这导致了学习率的不断减小,可能会使得训练过早停滞,特别是对于深度神经网络。
(2)对非平稳问题敏感: Adagrad在处理非平稳问题(non-stationary problems)时可能表现不佳。由于它根据历史梯度进行学习率调整,可能在迭代早期就将学习率设得过小,导致性能下降。
(3)内存需求增加: 由于需要维护每个参数的历史梯度平方和,Adagrad需要额外的内存空间。这可能在大规模模型和大型数据集上导致内存需求过大。

2、RMSprop优化器:改进了Adagrad优化器,使用指数加权移动平均来平衡学习率。公式如下:
在这里插入图片描述
RMSprop对Adagrad的改进之一是采用了梯度平方的移动平均,而不是直接累积所有历史梯度的平方。这样可以减缓学习率下降的速度,更好地适应不同参数的更新频率,有助于在训练过程中更稳定地收敛。

3、Adam优化器:结合了动量和RMSprop,通过计算梯度的一阶矩和二阶矩估计来自适应地调整学习率。公式如下:
在这里插入图片描述
优点:
(1)自适应学习率: Adam使用了每个参数的自适应学习率,通过计算梯度的一阶矩估计(mean)和二阶矩估计(uncentered variance)来调整每个参数的学习率。这允许不同参数具有不同的学习率,更好地适应不同参数的梯度变化。
(2)动量项: Adam引入了动量项,通过计算梯度的一阶矩估计,保留了之前梯度的信息,有助于在优化过程中保持稳定的方向。
(3)偏置修正: Adam通过引入偏置修正(bias correction)来纠正梯度估计的偏差,尤其在训练初期,有助于更准确地估计梯度的动态。
(4)适用于大规模问题: Adam通常表现得很好,特别是在大规模数据集和深度神经网络的训练中。其自适应学习率和动量项的结合使其适用于不同类型的问题。
缺点:
(1)对超参数敏感: Adam有一些超参数,如学习率、β1(动量的衰减率)、β2(二阶矩估计的衰减率)等,对这些超参数的选择相对敏感。不同问题可能需要不同的调优,这使得在一些情况下需要仔细的超参数调整。
(2)可能不适用于非凸问题: 有一些研究表明,Adam可能在处理非凸优化问题时不如其他优化器表现好。在某些情况下,它可能导致模型收敛到局部极小值而不是全局最小值。
(3)内存使用较大: Adam需要存储每个参数的额外信息,如一阶矩估计和二阶矩估计的移动平均。这导致了较大的内存使用,尤其是在处理大规模模型时可能成为一个问题。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Fiddler工具 — 9.命令行和状态栏

1、命令行 命令行在Fiddler的左下方的黑色窗口,也叫QuickExec,可以调用 Fiddler的内置命令。 这一系列内置的函数用于筛选和操作会话列表中的session(会话)。 虽然它不是很显眼,但用好它,会让你的工作效率…

python 函数中字典的修改会影响函数外字典的值

def modify_dict(d):d[key] new valueprint(函数中字典d的位置,id(d))# 创建一个字典 original_dict {key: old value} print(函数外字典的位置,id(original_dict))# 调用函数来修改字典 modify_dict(original_dict)# 输出原始字典的值,可以看到它已经被修改了 pr…

致远OA getAjaxDataServlet XXE漏洞复现(QVD-2023-30027)

0x01 产品简介 致远互联-OA 是数字化构建企业数字化协同运营中台,面向企业各种业务场景提供一站式大数据分析解决方案的协同办公软件。 0x02 漏洞概述 致远互联-OA getAjaxDataServlet 接口处存在XML实体注入漏洞,未经身份认证的攻击者可以利用此漏洞读取系统内部敏感文件…

基于Spark个性化图书推荐系统

介绍 该系统基于Spark,结合了协同过滤算法和个性化推荐技术,实现了一款个性化的书籍推荐系统。 在该系统中,用户可以通过登陆注册后进入系统,查找和筛选自己喜欢的图书信息,同时也能够获得基于用户历史浏览、评分等数…

【PostgreSQL在线创建索引(CIC)功能的锁分析以及使用注意】

前一篇文章提到了普通创建索引会阻塞DML操作 PostgreSQL创建索引的锁分析和使用注意 而PostgreSQL里可以使用create index concurrently 在线创建索引(CIC)功能,降低创建索引在表上申请的锁的级别,ShareUpdateExclusiveLock级别的锁和RowExclusiveLock…

解决Qt Creator中文乱码的问题

方法1 使用QStringLiteral()包裹中文字符串 QString str1"中文测试!"; QString str2QStringLiteral("中文测试!");方法2 #if _MSC_VER > 1600//MSVC2015>1899,MSVC_VER14.0 #pragma execution_character_set("utf-8&qu…

第二百五十四回

文章目录 1. 概念介绍2. 思路与方法2.1 实现思路2.2 实现方法 3. 代码与效果3.1 示例代码3.2 运行效果 4. 内容总结 我们在上一章回中介绍了"如何给图片添加阴影"相关的内容,本章回中将介绍自定义Radio组件.闲话休提,让我们一起Talk Flutter吧…

7个Pandas绘图函数助力数据可视化

大家好,在使用Pandas分析数据时,会使用Pandas函数来过滤和转换列,连接多个数据帧中的数据等操作。但是,生成图表将数据在数据帧中可视化,通常比仅仅查看数字更有帮助。 Pandas具有几个绘图函数,可以使用它…

Java面向对象综合练习(拼图小游戏),用java图形化界面实现拼图小游戏

1. 设计游戏的目的 锻炼逻辑思维能力利用Java的图形化界面,写一个项目,知道前面学习的知识点在实际开发中的应用场景 2. 游戏的最终效果呈现 Hello,各位同学大家好。今天,我们要写一个非常有意思的小游戏 —《拼图小游戏》 我们…

【机器学习】循环神经网络(三)

四、序列预测问题 循环神经网络实现的序列到序列的映射(Recurrent Neural Network based Sequence-to-Sequence Mapping)是一种使用循环神经网络来将一个序列数据映射到另一个序列数据的方法,它可以用于机器翻译、文本摘要、对话生成等任务。…

多国管理中心多语言区块链源码一元夺宝程序仿趣步奕跑/原生计步器/原生人脸识别

前后台分开的,后台是TP3.2的框架了,应该是比较老的程序了。 目前把整体UI 改版黄色系风格,集成了一元夺宝程序,用户数据同步趣步,效果看起来很棒,另外加入股票走势图(K线图)&#xf…

使用即时设计绘制原型设计方便吗?和Axure RP相比怎么样?

对于原型设计,APP 和 Web 都是一样的,因为产品原型是用来确定需求的工具。我们使用这种工具的目的是为了快速迭代,从而深入挖掘和筛选产品的需求。 绘制原型,最重要的原则是:快速、清晰! Axure 工具的优缺…

“单项突出”的赢双科技IPO加速,比亚迪是最强助力?

近日,新能源汽车核心部件供应商赢双科技首次递表科创板,其凭借旋转变压器产品就坐稳了新能源车企主要供应商的地位,从核心业务及业绩情况来看,赢双科技不愧为“单项冠军”。 据悉,赢双科技本次IPO拟募资8.47亿元&…

css中有哪些方式可以隐藏页面元素?区别?

面试官:css中,有哪些方式可以隐藏页面元素?区别? 一、前言 在平常的样式排版中,我们经常遇到将某个模块隐藏的场景 通过css隐藏元素的方法有很多种,它们看起来实现的效果是一致的 但实际上每一种方法都有一丝轻微的…

短视频矩阵系统+无人直播源码+视频批量分发----开发实践

核心技术 1. AI自动直播: 智能系统通过丰富可定制的文案库, 拥有有料有趣的灵魂。不仅能自动语音讲解内容,还可以在直播中和用户灵活互动。直播中可将团购商品同话术自动上下架。 2. AI剪辑 可一键智能批量成片,也可跟着模板剪…

XDOJ78.机器人

标题 机器人 类别 综合 时间限制 1S 内存限制 256Kb 问题描述 机器人按照给定的指令在网格中移动,指令有以下四种: N 向北(上)移动 S 向南(下)移动 E 向东(右)移动 W 向西&…

国标GB28181视频监控EasyCVR平台:视频集中录制存储/云端录像功能及操作介绍

安防视频监控系统EasyCVR视频综合管理平台,采用了开放式的网络结构,可以提供实时远程视频监控、视频录像、录像回放与存储、告警、语音对讲、云台控制、平台级联、磁盘阵列存储、视频集中存储、云存储等丰富的视频能力,同时还具备权限管理、设…

linux centos 账户管理命令

在CentOS或其他基于Linux的系统上,账户管理涉及到用户的创建、修改、删除以及密码的管理等任务。 linux Centos账户管理命令 1 创建用户: useradd username 这将创建一个新用户,但默认不会创建家目录。如果想要创建家目录,可以…

19、Kubernetes核心技术 - 资源限制

目录 一、概述 二、Kubernetes 中的资源单位 2.1、CPU资源单位 2.2、内存资源单位 三、Pod资源限制 四、namespace资源限制 4.1、为命名空间配置内存和 CPU 配额 4.2、为命名空间配置默认的内存请求和限制 4.3、为命名空间配置默认的CPU请求和限制 五、超过容器限制的…

FreeRTOS概述

什么是FreeRTOSFreeRTOS官网地址 FreeRTOS 是市场领先的面向微控制器和小型微处理器的实时操作系统 (RTOS),与世界领先的芯片公司合作开发,现在每 170 秒下载一次。MIT 通过 FreeRTOS 开源许可免费分发,包括一个内核和一组不断丰富的 IoT 库&…