论文阅读--On optimization methods for deep learning

news2024/11/24 9:27:23

深度学习的优化方法研究

论文信息:Le Q V, Ngiam J, Coates A, et al. On optimization methods for deep learning[C]//Proceedings of the 28th International Conference on Machine Learning, ICML 2011, Bellevue, Washington, USA, June 28 - July 2, 2011. DBLP, 2012.
本文提出时间较早,GPU和集群运算的并行计算还暂不普及
创新点:

  • 作者基于当前SGD的局限性和LBFGS和CG方法的优势,对各种常见优化算法进行了比较,找到不同任务的理论上最适应的优化算法极其适应的原因。
  • L-BFGS对于低维问题,尤其是卷积模型,L-BFGS具有很强的竞争力,有时甚至优于SGDs/CG。
  • 对于高维问题,CG更具竞争力,通常优于L-BFGS和SGDs。
  • SGDs使用大型小批处理和行搜索可以提高性能。

Abstract && Introduction

SGD 特点
优点:实现简单,当训练样本足够多时优化速度非常快。
缺点:
1.需要人为调整很多参数,比如学习率,收敛准则等。如果一个人不知道手头的任务,很难找到一个好的学习率或一个好的收敛准则。
2.它是序列的方法,不利于GPU并行或分布式处理。
3.针对SGD的局限性,目前现有的有限内存BFG(L-BFGS)和共轭梯度(CG)线搜索方法,可以极大简化和加快预训练深算法的过程

批处理方法,如有限内存BFG(L-BFGS)或共轭梯度(CG),具有线搜索过程的存在,通常训练起来更稳定,并且更容易检查收敛性。这些方法还通过在GPU上计算梯度和/或跨机器分布计算来享受并行性。

L-BFGS和CG需要计算整个数据集的梯度来进行更新,在数据集的一小部分上计算梯度的小批量训练很好地解决了这一弱点。当数据集较大时,小批量L-BFGS/CG速度很快。

本文分别在自编码器和稀疏自编码器训练上实证研究现成的重点比较L-BFGS、CG和SGDs优化算法的利弊。

概念介绍

  • SGD 随机梯度下降
    批量梯度下降(Batch Gradient Descent):它是指在每一次迭代时使用所有样本来进行梯度的更新
    随机梯度下降(Stochastic Gradient Descent):随机梯度下降是在每次迭代时使用一个样本来对参数进行更新
    小批量梯度下降(Mini-Batch Gradient Descent):使用一个以上而又不是全部的训练样本。
      梯度下降法的计算过程就是沿梯度下降的方向求解极小值,也可以沿梯度上升方向求解最大值。 假设模型参数为 θ \theta θ ,损失函数为 J ( θ ) J\left(\theta\right) J(θ) ,损失函数 J ( θ ) J\left(\theta\right) J(θ)关于参数 θ \theta θ 的偏导数,也就是梯度为 ▽ θ J ( θ ) \triangledown _{\theta}J\left ( \theta \right ) θJ(θ) ,学习率为 α \alpha α ,则使用梯度下降法更新参数为:
    θ t + 1 = θ t − α ⋅ ∇ θ J ( θ ) \theta_{t+1}=\theta_t-\alpha \cdot \nabla_\theta J(\theta) θt+1=θtαθJ(θ)

  • L-BFGS 有限内存BFGS
      L-BFGS由牛顿法发展而来,是为了提高计算效率而提出的近似计算方法,在施行牛顿法的过程中需要计算海森矩阵 H H H的逆 H − 1 H^{-1} H1,计算矩阵逆工作量巨大,所以采用符合拟牛顿条件的矩阵代替或进行计算,这种方法称为拟牛顿法,其代表性方法有DFP算法和BFGS算法,L-BFGS在BFGS的基础上进一步在有限的内存下进行近似而提高效率的算法。BFGS算法可以只使用 B 0 B_0 B0表达,那么L-BFGS在这个基础上,再一次进行近似,就是只用有限的内存来保存近m个向量的值来进行计算。

  • CG 共轭梯度
      使用梯度信息来获得共轭的搜索方向。而这种通过梯度信息来实现共轭方向法的算法被我们称为共轭梯度法(conjugate gradient method)
    最优化方法复习笔记–共轭梯度法

  • Autoencoders 自编码器
      Auto-Encoder,中文称作自编码器,是一种无监督式学习模型。它基于反向传播算法与最优化方法(如梯度下降法),利用输入数据
    X X X 本身作为监督,来指导神经网络尝试学习一个映射关系,从而得到一个重构输出 X R X^R XR
      Auto-Encoder可以学习到输入数据的隐含特征,这称为编码(coding),同时用学习到的新特征可以重构出原始输入数据,称之为解码(decoding)。从直观上来看,自动编码器可以用于特征降维,类似主成分分析PCA,但是其相比PCA其性能更强,这是由于神经网络模型可以提取更有效的新特征。
    自编码器
    在这里插入图片描述

  • Map-Reduce
    Map阶段:Map阶段的主要作用是"分",即把复杂的任务分解为若干个"简单的任务"来并行处理。Map阶段的这些任务可以并行计算,彼此间没有依赖关系。
    Reduce阶段:Reduce阶段的主要作用是"合",即对map阶段的结果进行全局汇总。

  • MNIST数据集(Mixed National Institute of Standards and Technology database)是美国国家标准与技术研究院收集整理的大型手写数字数据集,包含了60,000个样本的训练集以及10,000个样本的测试集。

结论

  作者通过实验得出的结论是:不同的优化算法有不同的优缺点,适合不同的场合,比如LBFGS算法在参数的维度比较低(一般指小于10000维)时的效果要比SGD(随机梯度下降)和CG(共轭梯度下降)效果好,特别是带有convolution的模型。

  而针对高维的参数问题,CG的效果要比另2种好。也就是说一般情况下,SGD的效果要差一些,这种情况在使用GPU加速时情况一样,即在GPU上使用LBFGS和CG时,优化速度明显加快,而SGD算法优化速度提高很小。

  在单机器训练上,LBFGS的优势主要是利用参数之间的2阶近视特性来加速优化,而CG则得得益于参数之间的共轭信息,需要计算Hessian矩阵。不过当使用一个大的minibatch且采用线搜索的话,SGD的优化性能也会提高。

  在单机器训练上比较SGD,LBFGS,CG三种算法的优化性能,当针对Autoencoder模型,SGD效果最差。这主要原因是LBFGS和CG能够使用大的minibatch数据来估算每个节点的期望激发值,这个值是可以用来约束该节点的稀疏特性的,而SGD需要去估计噪声信息。

  CG和L-BFG也是可以更好地利用GPU的方法,因为它们偏好更大的小批量。此外,如果使用平铺(局部连接)网络或具有相对少量参数的其他网络,则可以在Map-Reduce框架中计算梯度,并使用L-BFGS加速训练

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

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

相关文章

JAVA NIO深入剖析

4.1 Java NIO 基本介绍 Java NIO(New IO)也有人称之为 java non-blocking IO是从Java 1.4版本开始引入的一个新的IO API,可以替代标准的Java IO API。NIO与原来的IO有同样的作用和目的,但是使用的方式完全不同,NIO支持面向缓冲区的、基于通道的IO操作。NIO将以更加高效的方…

【已解决】Python读取sql数据,报错:Not an executable object,解决方案

【已解决】Python读取sql数据,报错:Not an executable object,解决方案 1.报错内容: 通过Python连接sql,读取sql中数据,报错:Not an executable object。具体代码及报错内容见下: …

为什么mac上有的软件删除不掉?

对于Mac用户来说,软件卸载通常是一个相对简单的过程。然而,有时你可能会发现某些软件似乎“顽固不化”,即使按照常规方式尝试卸载,也依然存在于你的电脑上。这到底是为什么呢?本文将探讨这一问题的可能原因。 1.卸载失…

实用指南:如何解决企业组网中网络卡顿问题?

随着互联网的发展,企业逐步将办公应用系统部署在内网服务器或者上云了,导致很多日常工作都需要网络才能访问。员工在工作的时候网络不给力,卡顿半天也打不开,非常影响工作效率和心情。 在企业组网过程中,网络卡顿现象的…

解决mysql去掉字段空格:中间空格,左侧空格,右侧空格,两端空格,水平制表符(tab键或者\t)空格,换行键(\n)空格,回车键(Enter键)空格

1. 复现错误 今天,查看我禅道上的日志,发现有这个错误: 数据库查询处的字段,存在空格,那么,怎么解决这个问题呢? 2. 解决思路 首先打开控制台,查看所调用的接口。 通过接口找到对应…

线程的概念及使用

1.C11 Thread线程库的使用 本文详细介绍C11 线程库的基本使用,包括如何创建线程、启动线程、等待线程完成、如何分离线程。 创建线程 线程的概念及使用 线程:进程内一个相对独立的、可调度的执行单元,是系统独立调度和分派CPU的基本单位指运行中的程序…

再创佳绩!移远通信RG500U-EA 5G模组获得全球首个紫光展锐V510平台GCF 认证

近日,移远通信工规级5G模组RG500U-EA顺利通过GCF认证,成为全球首款通过该认证的基于紫光展锐V510平台的5G模组。 GCF认证是一种国际性的产品一致性认证,该认证的通过,表明移远通信RG500U-EA模组满足不同运营商的规范要求&#xff…

CUDA学习笔记1——核函数与线程

CUDA安装并配置环境后&#xff0c;使用VS新建工程时会出现对应选项&#xff1a; CUDA核函数调用 CUDA核函数必须用限定词 global 修饰&#xff0c;返回类型必须为void&#xff0c;二者次序随意。函数名与()之间用三括号<<<网格大小&#xff0c;线程块大小>>&…

Visual Studio 2019中的安全问题

最近&#xff0c;在使用Visual Studio 2019的时候遇到了一个很奇怪的问题&#xff0c;如下所示。 这里一直在说scanf函数不安全&#xff0c;导致报错&#xff0c;然后上网查了查相关资料&#xff0c;发现在代码中加那么一句就可以了&#xff0c;而且必须放在最前面。 #define …

网络安全:个人信息保护,企业信息安全,国家网络安全的重要性

在当前的数字化时代&#xff0c;无论是个人&#xff0c;企业&#xff0c;还是国家&#xff0c;都会面临严重的网络安全威胁。网络安全不仅涉及我们的日常生活&#xff0c;也涉及到社会的稳定和国家的安全。这就需要我们高度重视网络安全&#xff0c;强化个人信息保护&#xff0…

HRB系列 电源升压模块直流可调低压升高压输出DC/DC升压变换器

特点 效率高达 80%以上1*2英寸标准封装单电压输出价格低稳压输出工作温度: -40℃~85℃阻燃封装&#xff0c;满足UL94-V0 要求温度特性好可直接焊在PCB 上 应用 HRB W2~40W 系列模块电源是一种DC-DC升压变换器。该模块电源的输入电压分为&#xff1a;4.5~9V、9~18V、及18~36V、…

Quarto 入门教程 (3):代码框、图形、数据框设置

简介 本文是《手把手教你使用 Quarto 构建文档》第三期&#xff0c;前两期分别介绍了&#xff1a; 第一期 介绍了Quarto 构建文档的原理&#xff1b;可创建的文档类型&#xff1b;对应的参考资源分享。 第二期 介绍了如何使用 Quarto&#xff0c;并编译出文档&#xff08;PDF…

设备管理团队如何做好停机维护工作_基于PreMaint设备数字化平台

在现代工业生产中&#xff0c;设备的正常运行对于企业的生产效率和利润至关重要。而停机维护作为设备管理的重要环节&#xff0c;旨在确保设备的安全性、可靠性和性能稳定。本文将介绍停机维护的概念&#xff0c;讨论如何计划停机维护&#xff0c;并重点探讨如何通过PreMaint设…

Linux 部署项目

部署 Linux 部署项目1. 宝塔部署1.1 前端部署1.2 后端部署 2. docker 部署2.1 后端部署2.2 前端部署 3. 跨域问题3.1 Nginx 代理&#xff08;推荐&#xff09;3.2 修改后端服务3.3 添加 web 全局请求拦截器 4. 域名解析DNSPod添加域名 Linux 部署项目 1. 宝塔部署 准备工作&am…

Kafka消费者群组和负载均衡

前言 在大数据时代&#xff0c;消息处理成为众多企业关注的焦点。而Kafka作为一种高性能、分布式的消息系统&#xff0c;通过其消费者群组和负载均衡的特性&#xff0c;实现了高效的消息处理和可靠的数据传递。 消费者群组 Kafka的消费者群组是一种灵活而强大的机制&#xff…

Java进阶——Java深入学习的笔记汇总 JVM底层、多线程、类加载 ...

前言 spring作为主流的 Java Web 开发的开源框架&#xff0c;是Java 世界最为成功的框架&#xff0c;持续不断深入认识spring框架是Java程序员不变的追求&#xff1b;而spring的底层其实就是Java&#xff0c;因此&#xff0c;深入学习Spring和深入学习Java是硬币的正反面&…

Win10系统打开组策略编辑器的两种方法

组策略编辑器是Win10电脑中很实用的工具&#xff0c;它可以帮助用户管理和设置计算机的安全性、网络连接、软件安装等各种策略。但是&#xff0c;很多新手用户不知道打开Win10电脑中组策略编辑器的方法步骤&#xff0c;下面小编给大家介绍两种简单的方法&#xff0c;帮助打开快…

uniapp EventChannel 页面跳转参数事件传递navigateBack,navigateTo 成功后通知事件区别

问题&#xff1a;navigateBack&#xff08;&#xff09;emit事件在onload()监听不到 从A页面跳转到B页面&#xff0c;在B点击产生数据后&#xff0c;跳转回到A&#xff0c;并告诉A点击的数据是什么&#xff0c;使用&#xff1a; navigateBack&#xff08;&#xff09; B页面&…

内存溢出和内存泄漏

内存溢出和内存泄漏 内存溢出 内存溢出相对于内存泄漏来说&#xff0c;尽管更容易被理解&#xff0c;但是同样的&#xff0c;内存溢出也是引发程序崩溃的罪魁祸首之一。由于GC一直在发展&#xff0c;所以一般情况下&#xff0c;除非应用程序占用的内存增长速度非常快&#xf…

李沐深度学习记录5:13.Dropout

Dropout从零开始实现 import torch from torch import nn from d2l import torch as d2l# 定义Dropout函数 def dropout_layer(X, dropout):assert 0 < dropout < 1# 在本情况中&#xff0c;所有元素都被丢弃if dropout 1:return torch.zeros_like(X)# 在本情况中&…