机器学习优化算法:从梯度下降到Adam及其实验改进

机器学习优化算法:从梯度下降到Adam及其实验改进

在机器学习和深度学习领域,模型的训练过程本质上是一个优化问题。优化算法的作用是通过调整模型参数,使得模型在给定的数据
集上实现最优性能。而优化算法的效率和效果直接决定了模型的收敛速度和最终表现。

一、优化算法的基本概念
  1. 目标函数与损失函数

    在机器学习中,我们通常定义一个目标函数(Objective Function),它衡量了模型预测值与真实值之间的差异。这个差异通常
    被称为损失(Loss)。我们的目标是通过调整模型参数,使得这个损失最小化。

  2. 优化器的作用

    优化算法负责根据当前的损失计算梯度,并更新模型参数以减小损失。常见的优化算法包括梯度下降(Gradient Descent)、随
    机梯度下降(Stochastic Gradient Descent, SGD)、Adam(Adaptive Moment Estimation)等。

  3. 参数更新规则

    参数更新是优化器的核心步骤。基本的更新公式可以表示为:
    θ t + 1 = θ t − η ⋅ g t \theta_{t+1} = \theta_t - \eta \cdot g_t θt+1=θtηgt

    其中, θ t \theta_t θt 表示第 t t t 步的参数, η \eta η 是学习率(Learning Rate), g t g_t gt 是当前步的梯度。

二、基础优化算法
  1. 梯度下降(Gradient Descent, GD)

    梯度下降是一种简单而直观的优化算法。它通过计算损失函数相对于模型参数的梯度,沿着负梯度方向更新参数以最小化损失。

    • 优点

      • 简单易懂。
      • 能够保证在凸函数的情况下收敛到全局最优解。
    • 缺点

      • 需要计算整个数据集的梯度,计算量大,尤其是在大数据集上效率低下。
      • 收敛速度较慢。
  2. 随机梯度下降(Stochastic Gradient Descent, SGD)

    为了提高梯度下降的效率,研究者提出了随机梯度下降。SGD每次只使用一个样本或者一小部分样本(小批量)来计算梯度,从而
    加速了参数更新的过程。

    • 优点

      • 计算速度快。
      • 能够处理大规模数据集。
    • 缺点

      • 由于仅依赖于单个样本的信息,梯度估计可能不稳定,导致优化过程震荡。
三、自适应学习率方法
  1. AdaGrad(Adaptive Gradient)

    AdaGrad是一种自适应学习率的方法。它通过历史梯度信息自动调整每个参数的学习率。具体来说,对于每个参数
    (\theta_i),其学习率的调整如下:

η i = η 0 G i i + ϵ \eta_i = \frac{\eta_0}{\sqrt{G_{ii} + \epsilon}} ηi=Gii+ϵ η0

其中, G i i G_{ii} Gii 是梯度在第 ( i ) (i) (i)个参数方向上的累积平方和。

  • 优点

    • 自动处理稀疏特征。
    • 在某些任务上表现良好。
  • 缺点

    • 可能会过早降低学习率,导致收敛速度变慢。
  1. AdaDelta

    AdaDelta是对AdaGrad的一种改进。它引入了两个自适应参数:动量(momentum)和逐步衰减(decaying average of
    gradients)。

    动量的计算公式为:

v t = β 1 v t − 1 + ( 1 − β 1 ) g t v_t = \beta_1 v_{t-1} + (1 - \beta_1) g_t vt=β1vt1+(1β1)gt

而梯度平方的估计则使用指数加权平均:

s t = β 2 s t − 1 + ( 1 − β 2 ) g t 2 s_t = \beta_2 s_{t-1} + (1 - \beta_2) g_t^2 st=β2st1+(1β2)gt2

参数更新公式为:

θ t + 1 = θ t − v t s t + ϵ \theta_{t+1} = \theta_t - \frac{\sqrt{v_t}}{\sqrt{s_t + \epsilon}} θt+1=θtst+ϵ vt

  1. RMSProp(Root Mean Square Propagation)

    RMSProp也是一种自适应学习率方法,它使用指数加权移动平均来估计梯度的平方。

    参数更新公式为:

v t = β 2 v t − 1 + ( 1 − β 2 ) g t 2 v_t = \beta_2 v_{t-1} + (1 - \beta_2) g_t^2 vt=β2vt1+(1β2)gt2

θ t + 1 = θ t − η ⋅ g t v t + ϵ \theta_{t+1} = \theta_t - \eta \cdot \frac{g_t}{\sqrt{v_t + \epsilon}} θt+1=θtηvt+ϵ gt

四、Adam优化算法
  1. Adam的提出

    Adam(Adaptive Moment Estimation)结合了动量和自适应学习率的思想,是一种非常高效的优化算法。它同时维护梯度的一阶
    矩估计和二阶矩估计。

  2. 具体实现

    • 一阶矩估计:

m t = β 1 m t − 1 + ( 1 − β 1 ) g t m_t = \beta_1 m_{t-1} + (1 - \beta_1) g_t mt=β1mt1+(1β1)gt

  • 二阶矩估计:

    v t = β 2 v t − 1 + ( 1 − β 2 ) g t 2 v_t = \beta_2 v_{t-1} + (1 - \beta_2) g_t^2 vt=β2vt1+(1β2)gt2

参数更新公式为:

θ t + 1 = θ t − η ⋅ m t v t + ϵ \theta_{t+1} = \theta_t - \eta \cdot \frac{m_t}{\sqrt{v_t + \epsilon}} θt+1=θtηvt+ϵ mt

  1. Adam的变体

    • Adamax:将二阶矩估计替换为超参数化的估计,使得优化过程更加稳定。

    • AMSGrad:引入了梯度的上界估计,可以保证全局收敛性。

五、实验比较与调参技巧
  1. 常见调参问题

    • 学习率选择

      学习率的选择对模型性能影响巨大。过大的学习率可能导致参数震荡,无法收敛;过小的学习率则会使得训练过程过于缓慢。

    • 动量的使用

      动量可以帮助加速优化过程,并在一定程度上缓解梯度消失或爆炸问题。

    • 梯度裁剪(Gradient Clipping)

      对于某些任务,尤其是深度网络中,梯度可能会变得非常大或者非常小。梯度裁剪可以限制梯度的大小,防止参数更新幅度过
      大。

  2. 实验比较

    为了验证不同优化算法的效果,我们可以在一个简单的神经网络上进行实验,比如训练一个多层感知机(MLP)用于分类任务。

    • 数据集选择

      MNIST手写数字识别是一个常用的测试平台。

    • 模型结构

      使用两层全连接网络,输入维度为784(28x28),输出类别数为10。

    • 训练过程

      分别使用GD、SGD、AdaGrad、RMSProp、Adam等优化算法进行训练,记录训练过程中的损失值和准确率变化。

  3. 调参技巧

    • 学习率衰减

      在训练过程中,可以采用学习率衰减策略(如指数衰减),以逐步降低学习率。

    • 批量归一化(Batch Normalization)

      批量归一化可以在一定程度上加速训练过程,并且能够帮助模型更快地收敛。

    • 混合优化器

      在某些情况下,可以结合不同的优化算法,或者在训练过程中动态调整优化策略。

六、高级主题与研究方向
  1. 大规模分布式训练

    随着深度学习模型规模的不断扩大,单机训练已经难以满足需求。如何在分布式环境下高效地进行模型训练,成为了优化算法研
    究的重要方向。

  2. 模型压缩与加速

    在保证模型性能的前提下,如何减少模型参数量和计算复杂度,也是当前的研究热点。优化算法在这类任务中扮演着重要角色。

  3. 自适应优化器

    最近的一些研究开始尝试设计更加智能的优化算法,这些算法能够根据训练过程中的动态信息自动调整参数设置,而无需手动调
    参。

七、总结与展望
  1. 总结

    从简单的梯度下降到现代的各种自适应优化算法,深度学习优化技术的发展极大地推动了人工智能的进步。不同优化算法有其各
    自的优缺点,在实际应用中需要根据具体任务和数据特点进行选择。

  2. 展望

    随着计算能力的提升和新问题的出现,优化算法的研究将会继续深入。未来可能会涌现出更多高效、智能的优化方法,为深度学
    习的发展提供强有力的支持。

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

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

相关文章

DIFY源码解析

偶然发现Github上某位大佬开源的DIFY源码注释和解析,目前还处于陆续不断更新地更新过程中,为大佬的专业和开源贡献精神点赞。先收藏链接,后续慢慢学习。 相关链接如下: DIFY源码解析

赛博算卦之周易六十四卦JAVA实现:六幺算尽天下事,梅花化解天下苦。

佬们过年好呀~新年第一篇博客让我们来场赛博算命吧! 更多文章:个人主页 系列文章:JAVA专栏 欢迎各位大佬来访哦~互三必回!!! 文章目录 #一、文化背景概述1.文化起源2.起卦步骤 #二、卦象解读#三、just do i…

「AI学习笔记」深度学习的起源与发展:从神经网络到大数据(二)

深度学习(DL)是现代人工智能(AI)的核心之一,但它并不是一夜之间出现的技术。从最初的理论提出到如今的广泛应用,深度学习经历了几乎一个世纪的不断探索与发展。今天,我们一起回顾深度学习的历史…

AIGC技术中常提到的 “嵌入转换到同一个向量空间中”该如何理解

在AIGC(人工智能生成内容)技术中,“嵌入转换到同一个向量空间中”是一个核心概念,其主要目的是将不同类型的输入数据(如文本、图像、音频等)映射到一个统一的连续向量空间中,从而实现数据之间的…

单细胞分析基础-第一节 数据质控、降维聚类

scRNA_pipeline\1.Seurat 生物技能树 可进官网查询 添加链接描述 分析流程 准备:R包安装 options("repos"="https://mirrors.ustc.edu.cn/CRAN/") if(!require("BiocManager")) install.packages("BiocManager",update = F,ask =…

【13】WLC HA介绍和配置

1.概述 本文对AireOS WLC的HA进行介绍,和大多数网络架构设计一样,单台的WLC是无法保证设备的冗余性的,而且WLC也不是双引擎的设备,所以需要依靠High Available的技术来为WLC提供高可用性。 2.WLC HA类型 AireOS WLC的高可用性技术可以分为N+1的SSO的HA。不是所有的设备都…

Alibaba开发规范_编程规约之命名风格

文章目录 命名风格的基本原则1. 命名不能以下划线或美元符号开始或结束2. 严禁使用拼音与英文混合或直接使用中文3. 类名使用 UpperCamelCase 风格,但以下情形例外:DO / BO / DTO / VO / AO / PO / UID 等4. 方法名、参数名、成员变量、局部变量使用 low…

【Elasticsearch 基础入门】Centos7下Elasticsearch 7.x安装与配置(单机)

Elasticsearch系列文章目录 【Elasticsearch 基础入门】一文带你了解Elasticsearch!!!【Elasticsearch 基础入门】Centos7下Elasticsearch 7.x安装与配置(单机) 目录 Elasticsearch系列文章目录前言单机模式1. 安装 J…

Gurobi基础语法之 addConstr, addConstrs, addQConstr, addMQConstr

在新版本的 Gurobi 中,向 addConstr 这个方法中传入一个 TempConstr 对象,在模型中就会根据这个对象生成一个约束。更重要的是:TempConstr 对象可以传给所有addConstr系列方法,所以下面先介绍 TempConstr 对象 TempConstr TempC…

深度学习可视化指标方法工具

1. TensorBoard 简介:由TensorFlow提供的可视化工具,现已支持多种深度学习框架。 功能: 图可视化:展示计算图结构,帮助理解模型架构。 标量仪表板:跟踪损失和准确率等指标的变化。 直方图仪表板&#xf…

【自开发工具介绍】SQLSERVER的ImpDp和ExpDp工具01

1、开发背景 大家都很熟悉,Oracle提供了Impdp和ExpDp工具,功能很强大,可以进行db的导入导出的处理。但是对于Sqlserver数据库只是提供了简单的图形化的导出导入工具,在实际的开发和生产环境不太可能让用户在图形化的界面选择移行…

小程序-视图与逻辑

前言 1. 声明式导航 open-type"switchTab"如果没有写这个,因为是tabBar所以写这个,就无法跳转。路径开始也必须为斜线 open-type"navigate"这个可以不写 现在开始实现后退的效果 现在我们就在list页面里面实现后退 2.编程式导航…

list的使用,及部分功能的模拟实现(C++)

目录(文章中"节点"和"结点"是同一个意思) 1. list的介绍及使用 1.1 list的介绍 1.2 list的使用 1.2.1 list的构造 1.2.2 list iterator的使用 1.2.3 list capacity 1.2.4 list element access 1.2.5 list modifiers 1.2.6 list…

StarRocks BE源码编译、CLion高亮跳转方法

阅读SR BE源码时,很多类的引用位置爆红找不到,或无法跳转过去,而自己的Linux机器往往缺乏各种C依赖库,配置安装比较麻烦,因此总体的思路是通过CLion远程连接SR社区已经安装完各种依赖库的Docker容器,进行编…

Axure PR 9 旋转效果 设计交互

大家好,我是大明同学。 这期内容,我们将学习Axure中的旋转效果设计与交互技巧。 旋转 创建旋转效果所需的元件 1.打开一个新的 RP 文件并在画布上打开 Page 1。 2.在元件库中拖出一个按钮元件。 创建交互 创建按钮交互状态 1.选中按钮元件&#xf…

Java - 引用类型:强引用、软引用、弱引用和虚引用详解

文章目录 概述1. 强引用(Strong Reference)1.1 什么是强引用?1.2 强引用的特点1.3 强引用的使用场景1.4 强引用的注意事项 2. 软引用(Soft Reference)2.1 什么是软引用?2.2 软引用的特点2.3 软引用的使用场…

S4 HANA给科目分配允许记账的税码

本文主要介绍在S4 HANA OP中给科目分配允许记账的税码相关设置。具体请参照如下内容: 1. 给科目分配允许记账的税码 以上配置定义了总账科目可以使用什么税码进行记账。通常在科目主数据中会明确总账科目的“Tax Category”来请明确总账科目可以使用什么类型的税码…

xss-labs靶场

xss-labs靶场 xss攻击类型 反射型xss 即攻击者将恶意脚本嵌入到url或者表单中,当用户访问特定的url或者提交表单时(用户端请求时),恶意脚本会执行 攻击需要用户点击恶意链接或访问包含恶意参数的url触发 存储型xss 即攻击者将恶意脚本提交…

CVE-2024-23897-Jenkins任意文件读取漏洞复现

content Jenkins是什么CVE-2024-23897总结修复建议 Jenkins是什么 Jenkins是一人基于Java开发的、可扩展的持续集成引擎,用于持续、自动地构建/测试软件项目,可以监控一些定时执行的任务。 官网文档: Jenkins是一款开源 CI&CD 软件&…

解析 Oracle 中的 ALL_SYNONYMS 和 ALL_VIEWS 视图:查找同义词与视图的基础操作

目录 前言1. ALL_SYNONYMS 视图2. ALL_VIEWS 视图3. 扩展 前言 🤟 找工作,来万码优才:👉 #小程序://万码优才/r6rqmzDaXpYkJZF 1. ALL_SYNONYMS 视图 在 Oracle 数据库中,同义词(Synonym)是对数…