【通俗理解】Adaptive Gradient Algorithm(自适应梯度算法)——从梯度下降到优化器选择

news2024/11/27 19:32:46

【通俗理解】Adaptive Gradient Algorithm(自适应梯度算法)——从梯度下降到优化器选择

关键词提炼

#自适应梯度算法 #梯度下降 #学习率 #优化器 #Adam #RMSprop #机器学习 #深度学习

第一节:自适应梯度算法的类比与核心概念【尽可能通俗】

自适应梯度算法就像是爬山过程中的“智能向导”,它根据当前的坡度(梯度)和已经走过的路程(历史梯度信息),动态调整步伐大小(学习率),从而更高效地到达山顶(最优解)。
与传统的梯度下降算法相比,它更加灵活,能够自动适应不同的地形,避免走弯路或陷入泥潭。

第二节:自适应梯度算法的核心概念与应用

2.1 核心概念

核心概念定义比喻或解释
自适应梯度算法根据历史梯度信息动态调整学习率的优化算法。像是爬山时的智能向导,根据地形和体力动态调整步伐。
梯度下降一种通过计算梯度并沿梯度反方向更新参数来最小化损失函数的算法。像是沿着山坡一步步往下走,直到找到最低点。
学习率控制参数更新步长的超参数。像是爬山时的步伐大小,太大可能摔倒,太小则走得慢。
Adam优化器一种流行的自适应梯度算法,结合了Momentum和RMSprop的优点。像是集合了多种爬山技巧的超级向导,更加高效且稳定。

2.2 优势与劣势

方面描述
优势能够自动调整学习率,适应不同的优化问题;收敛速度快,稳定性好。
劣势可能对初始学习率敏感;在某些情况下可能出现过拟合或收敛到局部最优解。

2.3 与梯度下降的类比

自适应梯度算法在梯度下降的基础上,增加了一个“智能”的学习率调整机制。
就像是在爬山时,不再只是盲目地按照固定的步伐往下走,而是根据当前的地形和体力状况,动态调整步伐大小,从而更加高效地到达山顶。

第三节:公式探索与推演运算

3.1 梯度下降的基本形式

梯度下降的基本形式为:

θ t + 1 = θ t − η ∇ θ L ( θ t ) \theta_{t+1} = \theta_t - \eta \nabla_\theta L(\theta_t) θt+1=θtηθL(θt)

其中, θ t \theta_t θt 是第 t 次迭代的参数, η \eta η 是学习率, ∇ θ L ( θ t ) \nabla_\theta L(\theta_t) θL(θt) 是损失函数 L ( θ ) L(\theta) L(θ) 关于参数 θ \theta θ 的梯度。

3.2 自适应梯度算法的核心公式

以Adam优化器为例,其核心公式包括:

计算梯度的一阶矩估计(Momentum)

m t = β 1 m t − 1 + ( 1 − β 1 ) ∇ θ L ( θ t ) m_t = \beta_1 m_{t-1} + (1 - \beta_1) \nabla_\theta L(\theta_t) mt=β1mt1+(1β1)θL(θt)

计算梯度的二阶矩估计(加权的梯度平方和)

v t = β 2 v t − 1 + ( 1 − β 2 ) ( ∇ θ L ( θ t ) ) 2 v_t = \beta_2 v_{t-1} + (1 - \beta_2) (\nabla_\theta L(\theta_t))^2 vt=β2vt1+(1β2)(θL(θt))2

偏差修正

m ^ t = m t 1 − β 1 t \hat{m}_t = \frac{m_t}{1 - \beta_1^t} m^t=1β1tmt
v ^ t = v t 1 − β 2 t \hat{v}_t = \frac{v_t}{1 - \beta_2^t} v^t=1β2tvt

参数更新

θ t + 1 = θ t − η m ^ t v ^ t + ϵ \theta_{t+1} = \theta_t - \eta \frac{\hat{m}_t}{\sqrt{\hat{v}_t} + \epsilon} θt+1=θtηv^t +ϵm^t

其中, β 1 \beta_1 β1 β 2 \beta_2 β2 是衰减率,用于控制一阶矩和二阶矩的衰减速度; ϵ \epsilon ϵ 是一个小常数,用于防止分母为零。

3.3 公式推导与理解

  1. Momentum:通过引入动量项 m t m_t mt,可以加速梯度下降在相关方向上的收敛,同时抑制震荡。
  2. 二阶矩估计:通过计算梯度的平方和 v t v_t vt,可以自适应地调整每个参数的学习率,使得在梯度较大的方向上学习率较小,在梯度较小的方向上学习率较大。
  3. 偏差修正:由于 β 1 \beta_1 β1 β 2 \beta_2 β2 的存在,初始时刻的 m t m_t mt v t v_t vt 会偏向零,因此需要进行偏差修正。
  4. 参数更新:结合动量项和二阶矩估计,动态调整学习率,并进行参数更新。

第四节:相似公式比对

公式/算法共同点不同点
SGD(随机梯度下降)都用于最小化损失函数,通过梯度进行参数更新。SGD使用固定的学习率,而自适应梯度算法动态调整学习率。
RMSprop都使用梯度的平方和来调整学习率。RMSprop只考虑了梯度的二阶矩,而Adam还结合了Momentum。
Momentum都使用了动量项来加速收敛和抑制震荡。Momentum没有考虑梯度的二阶矩,而Adam结合了二者。

第五节:核心代码与可视化

import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns

# 假设一个简单的二次损失函数 L(theta) = (theta - 3)^2
def loss_function(theta):
    return (theta - 3) ** 2

# 损失函数的梯度
def gradient(theta):
    return 2 * (theta - 3)

# Adam优化器
class AdamOptimizer:
    def __init__(self, learning_rate=0.01, beta1=0.9, beta2=0.999, epsilon=1e-8):
        self.learning_rate = learning_rate
        self.beta1 = beta1
        self.beta2 = beta2
        self.epsilon = epsilon
        self.m_t = 0
        self.v_t = 0
        self.t = 0

    def update(self, theta):
        self.t += 1
        grad = gradient(theta)
        self.m_t = self.beta1 * self.m_t + (1 - self.beta1) * grad
        self.v_t = self.beta2 * self.v_t + (1 - self.beta2) * grad ** 2
        m_hat = self.m_t / (1 - self.beta1 ** self.t)
        v_hat = self.v_t / (1 - self.beta2 ** self.t)
        theta_new = theta - self.learning_rate * m_hat / (np.sqrt(v_hat) + self.epsilon)
        return theta_new

# 初始化参数和优化器
theta = 0
optimizer = AdamOptimizer(learning_rate=0.1)

# 记录迭代过程中的theta值
theta_history = [theta]

# 进行迭代
for i in range(100):
    theta = optimizer.update(theta)
    theta_history.append(theta)

# 可视化结果
sns.set_theme(style="whitegrid")
plt.plot(theta_history, label='Theta values during optimization')
plt.axhline(y=3, color='red', linestyle='--', label='Optimal theta (3)')
plt.xlabel('Iteration')
plt.ylabel('Theta')
plt.title('Adam Optimizer Convergence')
plt.legend()
plt.show()

# 打印详细的输出信息
print(f"Final theta value: {theta_history[-1]:.4f}")
print(f"Optimal theta value: 3.0000")
输出内容描述
优化过程中的theta值图示显示了优化过程中theta值的变化情况。
最终的theta值打印出优化结束后的theta值。
最优的theta值打印出理论上的最优theta值(3)。

打比方的核心内容

自适应梯度算法就像是爬山时的“智能向导”,它根据当前的地形(梯度)和已经走过的路程(历史梯度信息),动态调整步伐大小(学习率)。这样,无论山路是陡峭还是平缓,都能找到最合适的步伐,从而更高效地到达山顶(最优解)。

参考文献

  1. Diederik P. Kingma and Jimmy Ba. Adam: A Method for Stochastic Optimization. International Conference on Learning Representations, 2015. 论文链接

该论文提出了Adam优化器,一种结合了Momentum和RMSprop优点的自适应梯度算法,并展示了其在多种任务上的优异表现。

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

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

相关文章

【eNSP】动态路由协议RIP和OSPF

动态路由RIP(Routing Information Protocol,路由信息协议)和OSPF(Open Shortest Path First,开放式最短路径优先)是两种常见的动态路由协议,它们各自具有不同的特点和使用场景。本篇会对这两种协…

差分 + 模拟,CF 815A - Karen and Game

目录 一、题目 1、题目描述 2、输入输出 2.1输入 2.2输出 3、原题链接 二、解题报告 1、思路分析 2、复杂度 3、代码详解 一、题目 1、题目描述 2、输入输出 2.1输入 2.2输出 3、原题链接 815A - Karen and Game 二、解题报告 1、思路分析 一个经典的差分数组的…

vue3【实战】响应式的登录界面

效果预览 WEB 端效果 移动端效果 技术方案 vue3 vite Element Plus VueRouter UnoCSS TS vueUse AutoImport 技术要点 响应式设计 移动端&#xff1a;图片切换为绝对定位&#xff0c;下移一层&#xff0c;成为背景图片 <el-imageclass"w-screen h-screen lt-md…

加速科技精彩亮相中国国际半导体博览会IC China 2024

11月18日—20日&#xff0c;第二十一届中国国际半导体博览会&#xff08;IC China 2024&#xff09;在北京国家会议中心顺利举办&#xff0c;加速科技携重磅产品及全系测试解决方案精彩亮相&#xff0c;加速科技创始人兼董事长邬刚受邀在先进封装创新发展论坛与半导体产业前沿与…

php反序列化1_常见php序列化的CTF考题

声明&#xff1a; 以下多内容来自暗月师傅我是通过他的教程来学习记录的&#xff0c;如有侵权联系删除。 一道反序列化的CTF题分享_ctf反序列化题目_Mr.95的博客-CSDN博客 一些其他大佬的wp参考&#xff1a;php_反序列化_1 | dayu’s blog (killdayu.com) 序列化一个对象将…

RustDesk 搭建

RustDesk 服务端下载&#xff1a;https://github.com/rustdesk/rustdesk-server/releases RustDesk 客户端下载&#xff1a;https://github.com/rustdesk/rustdesk/releases RustDesk 官方部署教程&#xff1a;https://rustdesk.com/docs/zh-cn/ 1&#xff1a;RustDesk 概览# 1…

Qt读写Usb设备的数据

Qt读写Usb设备的数据 问题:要读取usb设备进行通讯&#xff0c;qt好像没有对应的库支持。解决&#xff1a;libusbwindow下载 :Linux下载: QtUsb 开源的第三方库库里面的函数说明&#xff1a;window版本&#xff1a;Linux中也提供的直接下载测试代码&#xff1a;库下载&#xff1…

模板初阶,STL简介(C++)

1.模板 1.1泛型编程 在之前的文章中讲过C支持函数重载&#xff0c;比如实现一个交换函数&#xff0c;可以是不同的数据类型&#xff0c;但是这样&#xff0c;需要增加大量函数&#xff0c;且可维护度比较低。 如&#xff1a; void Swap(int& left, int& right) {int …

Cannot find a valid baseurl for repo: centos-sclo-rh/x86_64

yum install 报错: Cannot find a valid baseurl for repo: centos-sclo-rh/x86_64 CentOS7的SCL源在2024年6月30日停止维护了。 当scl源里面默认使用了centos官方的地址&#xff0c;无法连接&#xff0c;需要替换为阿里云。 cd /etc/yum.repos.d/ 找到 CentOS-SCLo-scl.repo 和…

蓝桥杯不知道叫什么题目

小蓝有一个整数&#xff0c;初始值为1&#xff0c;他可以花费一些代价对这个整数进行变换。 小蓝可以花贵1的代价将教数增加1。 小蓝可以花费3的代价将整数增加一个值,这个值是整数的数位中最大的那个(1到9) .小蓝可以花费10的代价将整数变为原来的2倍, 例如&#xff0c;如果整…

2024年11月HarmonyOS应用开发者高级认证全新题库

注意事项&#xff1a;切记在考试之外的设备上打开题库进行搜索&#xff0c;防止切屏三次考试自动结束&#xff0c;题目是乱序&#xff0c;每次考试&#xff0c;选项的顺序都不同&#xff0c;作者已于2024年11月22日又更新了一波题库&#xff0c;题库正确率99%&#xff01; 新版…

技术文档的高质量翻译对俄罗斯汽车推广的影响

进入新市场需要的不仅仅是一个伟大的产品&#xff1b;它要求深入了解当地消费者的期望、法规和文化差异。对于希望在俄罗斯取得成功的国际汽车制造商来说&#xff0c;技术文件的质量是一个关键因素。手册、规范和服务指南在产品和用户之间形成了直接的桥梁&#xff0c;影响着客…

【组件】前端ElementUi 下拉Tree树形组件 带模糊搜索自动展开高亮功能 树结构 封装为组件使用

【组件】前端ElementUi 下拉Tree树形组件 带模糊搜索自动展开高亮功能 树结构 【组件】前端ElementUi 下拉Tree树形组件 带模糊 https://live.csdn.net/v/436057 单独使用 <template><div><el-popoverstyle"overflow-y: auto; "placement"bottom…

论文阅读:Dual-disentangled Deep Multiple Clustering

目录 摘要 引言 模型 实验 数据集 实验结果 结论 摘要 多重聚类近年来引起了广泛关注&#xff0c;因为它能够从不同的角度揭示数据的多种潜在结构。大多数多重聚类方法通常先通过控制特征之间的差异性来提取特征表示&#xff0c;然后使用传统的聚类方法&#xff08;如 …

SQL 复杂查询

目录 复杂查询 一、目的和要求 二、实验内容 &#xff08;1&#xff09;查询出所有水果产品的类别及详情。 查询出编号为“00000001”的消费者用户的姓名及其所下订单。&#xff08;分别采用子查询和连接方式实现&#xff09; 查询出每个订单的消费者姓名及联系方式。 在…

thread_id_key != 0x7777(`fibers` 包与 Node.js 16 及以上版本存在兼容性问题)

文章目录 fibers4.0.3 与 node-v16.13.2-win-x64 的兼容性1. Node.js 版本兼容性2. 特定包版本 (fibers4.0.3)3. 解决方案和替代方案 结论解决方案 运行yarn serve 启动项目&#xff0c;就会弹出上述错误。 fibers4.0.3 与 node-v16.13.2-win-x64 的兼容性 要判断 fibers4.0.3…

数据结构 (6)栈的应用举例

1. 递归调用 递归函数在执行时&#xff0c;会将每一层的函数调用信息&#xff08;包括局部变量、参数和返回地址&#xff09;存储在栈中。当递归函数返回时&#xff0c;这些信息会从栈中弹出&#xff0c;以便恢复之前的执行状态。栈的后进先出&#xff08;LIFO&#xff09;特性…

网络安全在数字时代保护库存数据中的作用

如今&#xff0c;通过软件管理库存已成为一种标准做法。企业使用数字工具来跟踪库存水平、管理供应链和规划财务。 然而&#xff0c;技术的便利性也带来了网络威胁的风险。黑客将库存数据视为有价值的目标。保护这些数据不仅重要&#xff0c;而且必不可少。 了解网络安全及其…

php常用伪协议整理

前言 欢迎来到我的博客 个人主页:北岭敲键盘的荒漠猫-CSDN博客 本文整理php常见的伪协议 php伪协议介绍 直观点&#xff0c;就是php可以识别的协议。 类似于我们访问网站的http协议&#xff0c;我们用浏览器访问我们自己本地文件的file协议等。 php可以识别这些协议&#xf…

【软件入门】Git快速入门

Git快速入门 文章目录 Git快速入门0.前言1.安装和配置2.新建版本库2.1.本地创建2.2.云端下载 3.版本管理3.1.添加和提交文件3.2.回退版本3.2.1.soft模式3.2.2.mixed模式3.2.3.hard模式3.2.4.使用场景 3.3.查看版本差异3.4.忽略文件 4.云端配置4.1.Github4.1.1.SSH配置4.1.2.关联…