【深度学习】常见优化算法

2023-11-06

本文介绍常见的一阶数值优化算法,这些方法在现代神经网络框架(tensorflow, caffe, torch)中已经是标准配置。

问题

设系统参数为 ω \omega ω。对于样本 i i i,其代价函数为 Q i ( ω ) Q_i(\omega) Qi(ω)。在n个样本组成的训练集上,其整体代价函数为:
Q ( ω ) = ∑ i = 1 n Q i ( ω ) Q(\omega)=\sum_{i=1}^nQ_i(\omega) Q(ω)=i=1nQi(ω)

要求 ω \omega ω使得上式最小,由于没有闭式解,需要通过近似迭代逐步逼近。

基础一阶优化

GD

GD(Gradient Descent)以 η \eta η为学习率,在每次迭代中用一阶泰勒展开近似:
ω t + 1 = ω t − η ∇ Q ( ω ) \omega_{t+1}=\omega_t - \eta\nabla Q(\omega) ωt+1=ωtηQ(ω)

将求和与梯度互换。GD方法的增量来源于对所有样本同时求梯度之和:
ω t + 1 = ω t − η ∑ i = 1 n ∇ Q i ( ω ) \omega_{t+1}=\omega_t - \eta\sum_{i=1}^n\nabla Q_i(\omega) ωt+1=ωtηi=1nQi(ω)

ω \omega ω的维度为D,代价函数 Q Q Q是个标量,减号后的梯度也是一个D维向量。

SGD

SGD(Stochastic Gradient Descent)在每次迭代中,顺次使用每个样本的梯度,更新参数:

for i=1 to n
ω t + 1 = ω t − η ∇ Q i ( ω ) \omega_{t+1}=\omega_t - \eta \nabla Q_i(\omega) ωt+1=ωtηQi(ω)

一种折衷的方法是,把m个样本组成一个mini-batch,使用mini-batch的总梯度更新参数:

for i=1 to n/m
ω t + 1 = ω t − η ∑ j = 1 m ∇ Q i j ( ω ) \omega_{t+1}=\omega_t - \eta \sum_{j=1}^m \nabla Q_{ij}(\omega) ωt+1=ωtηj=1mQij(ω)

其中 Q i j ( ω ) Q_{ij}(\omega) Qij(ω)为第i个minibatch中第j个样本的代价。

为书写简便,以下说明中不再出现样本序号i。 ∇ Q ( ω ) \nabla Q(\omega) Q(ω)可以指一个样本、一个mini-batch或者全部样本的梯度只和。

更快的一阶优化

这些方法都以GD为基础,但收敛速度更快,换句话说 ϵ t \epsilon_t ϵt更小。
关于收敛速度的意义,请参看这篇博客

ASGD

ASGD(Average Stochastic Gradient Descent)选择一个迭代的时间点(代数) t 0 t_0 t0,在这个时间点之前,和SGD一样:
ω ˉ t = ω t \bar{\omega}_t = \omega_t ωˉt=ωt

在这个时间点之后,使用 t 0 t_0 t0到当前时刻 t t t的平均值:
ω ˉ t = 1 t − t 0 + 1 ∑ τ = t 0 t ω τ \bar{\omega}_t = \frac{1}{t-t_0+1}\sum_{\tau=t_0}^t\omega_\tau ωˉt=tt0+11τ=t0tωτ

AdaGrad

AdaGrad1(Adaptive Gradient)方法对参数的每一维进行归一化,使用的分母是之前步骤中该维度的平方和:
ω t + 1 d = ω t d − η 1 ∑ τ = 1 t − 1 [ ∇ Q ( ω t ) d ] 2 ∇ Q ( ω t ) \omega_{t+1}^d=\omega_t^d-\eta\frac{1}{\sqrt{\sum_{\tau=1}^{t-1} \left[ \nabla Q(\omega_t)^d\right]^2}}\nabla Q(\omega_t) ωt+1d=ωtdητ=1t1[Q(ωt)d]2 1Q(ωt)
相当于为每一维参数设定了不同的学习率:压制常常变化的参数,突出稀缺的更新。能够更有效地利用少量有意义样本。

AdaDelta

AdaDelta2(Adaptive Delta)和AdaGrad一样为每一维参数设定不同学习率,但是不用再设定基础学习率 η \eta η

首先维护一个期望D,描述之前迭代中的参数变化情况,同样是个D维向量:
D t = γ D t − 1 + ( 1 − γ ) Δ ω t 2 D_t=\gamma D_{t-1}+(1-\gamma)\Delta\omega^2_t Dt=γDt1+(1γ)Δωt2

另一个期望G,描述之前迭代中的梯度的平方:
G t = γ G t − 1 + ( 1 − γ ) ∇ Q ( ω ) t 2 G_t=\gamma G_{t-1} + (1-\gamma)\nabla Q(\omega)_t^2 Gt=γGt1+(1γ)Q(ω)t2

使用D和G的比值作为权重,分别归一化每一维参数:
ω t + 1 d = ω t d − D t d G t + 1 d ∇ Q ( ω ) \omega_{t+1}^d=\omega_t^d-\frac{D_t^d}{G_{t+1}^d}\nabla Q(\omega) ωt+1d=ωtdGt+1dDtdQ(ω)

减号后的归一化参数决定了:单位梯度变化对应多少参数变化。

Adam

Adam3(Adaptive Moment Estimation)的思路和AdaGrad相似,都使用梯度平方根归一化学习率。

注意:为书写简便,后续的矩阵相乘相除都逐元素进行,更新也对参数每一维单独进行。

维护一个一阶momentum,等价于梯度:
m t = α ⋅ m t − 1 + ( 1 − α ) ⋅ ∇ Q ( ω ) m_t=\alpha\cdot m_{t-1} + (1-\alpha)\cdot \nabla Q(\omega) mt=αmt1+(1α)Q(ω)

另一个二阶momentum,等价于梯度平方:
v t = β ⋅ v t − 1 + ( 1 − β ) ⋅ ∇ Q ( ω ) 2 v_t=\beta\cdot v_{t-1}+(1-\beta)\cdot \nabla Q(\omega)^2 vt=βvt1+(1β)Q(ω)2

由于 m , v m,v m,v都初始化为0,使用t次幂让其在头几次迭代中更大一些:
m ^ t = m t 1 − α t , v ^ t = v t 1 − β t \hat m_t=\frac{m_t}{1-\alpha^t}, \hat v_t=\frac{v_t}{1-\beta^t} m^t=1αtmt,v^t=1βtvt

使用梯度平方 v v v归一化学习率,更新幅度为梯度 m m m:
ω t + 1 = ω t − η 1 v ^ t m ^ t \omega_{t+1}=\omega_t-\eta\frac{1}{\sqrt{\hat v_t}}\hat m_t ωt+1=ωtηv^t 1m^t

Rprop

RProp4(Resilient Propagation)比较本次梯度 ∇ Q ( ω ) t + 1 d \nabla Q(\omega)_{t+1}^d Q(ω)t+1d和上次梯度 ∇ Q ( ω ) t d \nabla Q(\omega)_t^d Q(ω)td符号变化来为参数d的变化加权。

如果两次梯度符号相反,则抑制参数变化( η − < 1 \eta^-<1 η<1):
ω t + 1 d = ω t d − η − ⋅ ∇ Q ( ω ) \omega_{t+1}^d=\omega_t^d-\eta^-\cdot \nabla Q(\omega) ωt+1d=ωtdηQ(ω)

如果两次符号相同,则增强参数变化( η + > 1 \eta^+>1 η+>1):
ω t + 1 d = ω t d − η + ⋅ ∇ Q ( ω ) \omega_{t+1}^d=\omega_t^d-\eta^+\cdot \nabla Q(\omega) ωt+1d=ωtdη+Q(ω)

RMSprop

RMSprop5(Root Mean Square Propagation)类似于简化版的AdaDelta,但是是独立发展而来的。

维护期望G,描述之前迭代中的梯度的平方:
G t = γ G t − 1 + ( 1 − γ ) ∇ Q ( ω ) t 2 G_t=\gamma G_{t-1} + (1-\gamma)\nabla Q(\omega)_t^2 Gt=γGt1+(1γ)Q(ω)t2

用G修正学习率:
ω t + 1 d = ω t d − η G t + 1 d ∇ Q ( ω ) \omega_{t+1}^d=\omega_t^d-\frac{\eta}{G_{t+1}^d}\nabla Q(\omega) ωt+1d=ωtdGt+1dηQ(ω)

NAG

NAG6(Nesterov’s Accelerated Gradient),发明者是毛国数学家Yurii Nesterov。

参数变化由 γ \gamma γ控制:
m t = γ ⋅ m t − 1 + η ⋅ ∇ Q ( ω − γ ⋅ m t − 1 ) m_t = \gamma \cdot m_{t-1} + \eta \cdot \nabla Q(\omega - \gamma\cdot m_{t-1}) mt=γmt1+ηQ(ωγmt1)

导数的计算点不再是当前参数 ω \omega ω,而是从当前参数根据前次变化前进一小步。

m t m_t mt更新参数:
ω t + 1 = ω t − m t \omega_{t+1}=\omega_t-m_t ωt+1=ωtmt

总结

提速可以归纳为以下几个方面:

  • 使用momentum来保持前进方向(velocity);
  • 为每一维参数设定不同的学习率:在梯度连续性强的方向上加速前进;
  • 用历史迭代的平均值归一化学习率:突出稀有的梯度;

辨:其他优化方法

共轭梯度法(Conjugate Gradient)也是一阶方法,针对特殊形式的代价函数:
Q ( ω ) = 1 2 ω T A ω − ω T b Q(\omega) = \frac{1}{2}\omega^T A \omega - \omega^Tb Q(ω)=21ωTAωωTb

常见的各种牛顿法, L-BFGS核心都是二阶优化方法,利用了代价函数的Hessian矩阵:
x t + 1 = x t − η ⋅ H [ Q ( ω ) ] − 1 ∇ Q ( ω ) x_{t+1}=x_t - \eta \cdot H[Q(\omega)]^{-1}\nabla Q(\omega) xt+1=xtηH[Q(ω)]1Q(ω)
换句话说,牛顿法用线性函数拟合代价函数的导数,而不是代价函数本身。

单纯形法,插值法等只计算代价函数值,不需要求导。


  1. Duchi, J., Hazan, E., & Singer, Y. (2011). Adaptive Subgradient Methods for Online Learning and Stochastic Optimization. Journal of Machine Learning Research, 12, 2121–2159. ↩︎

  2. Zeiler, M. D. (2012). ADADELTA: An Adaptive Learning Rate Method. Retrieved from http://arxiv.org/abs/1212.5701 ↩︎

  3. Kingma, D. P., & Ba, J. L. (2015). Adam: a Method for Stochastic Optimization. International Conference on Learning Representations, 1–13. ↩︎

  4. Martin Riedmiller und Heinrich Braun: Rprop - A Fast Adaptive Learning Algorithm. Proceedings of the International Symposium on Computer and Information Science VII, 1992 ↩︎

  5. http://www.cs.toronto.edu/~tijmen/csc321/slides/lecture_slides_lec6.pdf ↩︎

  6. https://blogs.princeton.edu/imabandit/2013/04/01/acceleratedgradientdescent/ ↩︎

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【深度学习】常见优化算法 的相关文章

随机推荐

  • 二叉树问题

    什么是二叉树 平衡二叉树 红黑二叉树 有哪些区别和应用 二叉树 Binary Tree 是结点的有限集合 这个集合或者为空 或者是由一个根结点和两颗互不相交的分别称为左子树和右子树的二叉树组成 二叉树中的每个结点至多有两棵子树 且子树有左右
  • 堆(Heap)——(一)优先队列

    堆可以利用数组 链表或者搜索二叉树实现 但是最好方法是利用完全二叉树 1 完全二叉树 完全二叉树从根结点到倒数第二层满足完美二叉树 最后一层可以不完全填充 其叶子结点都靠左对齐 如下图 重新构建一种树 专注于插入和删除最大或最小 即 根节点
  • Zabbix的问题日志清单查看

    Zabbix的问题日志清单查看 一 检查Zabbix状态 二 检查仪表表盘告警情况 三 检查所有邮件告警日志 四 触发器日志查看 五 当前告警查询 六 问题清单查询 一 检查Zabbix状态 二 检查仪表表盘告警情况 三 检查所有邮件告警日
  • docker的服务编排

    docker 服务编排 docker compose命令 docker compose 网络管理 想学习更全面的docker知识可以点击右侧 Docker的概念及基本指令学习 全 docker 服务编排 docker 服务编排也叫docke
  • Either all Options must start with + or -, or no

    Directory Options If you had Directory options note that they all have to be prepended with a or or none of them at all
  • Linux中influx数据库进程杀不掉,父进程为1

    influx数据库一直杀不掉 父进程为1是个僵尸进程 后来我才发现 influx是运行运行状态 我只需要使用命令 停掉influx即可停止改进程
  • iwebsec靶场 SQL注入漏洞通关笔记8- 大小写过滤注入

    系列文章目录 iwebsec靶场 SQL注入漏洞通关笔记1 数字型注入 mooyuan的博客 CSDN博客 iwebsec靶场 SQL注入漏洞通关笔记2 字符型注入 宽字节注入 mooyuan的博客 CSDN博客 iwebsec靶场 SQL
  • numpy中的ndarray与pandas的Series和DataFrame之间的相互转换

    简介 在数据分析中 经常涉及numpy中的ndarray对象与pandas的Series和DataFrame对象之间的转换 让大家产生困惑 本文将简单介绍这三种数据类型 并以股票信息为例 给出相关对象之间转换的具体示例 ndarray数组对
  • opencv mat布局显示视频流

    采用Merge对mat进行定位 放置 并将数据copy到mat中 实现分块布局显示视频流 cv Mat ori img cv Mat img base mode cv Mat img black mode cv Mat img fireda
  • uniapp打包h5静态资源路径错误解决 相对路径修改

    如果用HBuilderX打开的话直接可视化添加 或者在src manifest json文件源码中修改
  • 快速解决浏览器访问http或者不安全https 地址栏出现不安全或者Not secure

    在2018 年开始 google 浏览器 开始对 http 所有的网址都做出了 不安全的提示 如 这样的话 让很多 http的网址显得很 不安全 在对外展示的时候 不禁给客户留下不好的印象 解决此问题的 正规方案当然是 改成 浏览器推荐的
  • Qt打开指定目录并选中指定文件

    目录 方法一 使用Qt自带的方法 方法二 使用windows自带工具 有时自动生成文件之后 点击某个按钮我们希望能够自动跳转到文件所在目录 打开之后不依附于运行程序 可能还需要选中该文件 环境 win10 Qt5 9 6 MinGW 方法一
  • echarts引入china报错(The GeoJSON of the map must be provided)

    原因 echarts版本过高 ECharts 之前提供下载的矢量地图数据来自第三方 由于部分数据不符合国家 测绘法 规定 目前暂时停止下载服务 经过一番摸索 实践出两种方法 末尾附china json文件 没有乱码噢 解决方法1 使用ech
  • LINUX 环境安装 PROJ 并编译 ,QT 添加 PROJ库

    LINUX 环境安装GIS库 PROJ 并编译 QT 添加 PROJ库 介绍 proj库 是一个很方便的经纬度坐标转平面投影坐标转换库 在开发GIS应用时 可能需要进行GPS坐标计算两点之间的距离 测算两点连线的方位角 都可以利用这个开源的
  • 【 华为OD机试 2023】 单向链表中间节点(C++ Java JavaScript Python 100%)

    文章目录 题目描述 输入描述 输出描述 用例 题目解析 代码思路 C JavaScript Java Python 题目描述 求单向链表中间的节点值 如果奇数个节点取中间 偶数个取偏右边的那个值 输入描述 第一行 链表头节点地址 后续输入的
  • SqlServer查看表大小

    查看SqlServer 数据库中各个表多少行 SELECT A NAME B ROWS FROM sysobjects A JOIN sysindexes B ON A id B id WHERE A xtype U AND B indid
  • 微信小程序封装wx.request请求以及携带token

    首先在pages中新建一个api的文件夹 对ajax请求统一管理 文件夹中request js完成对wx request的封装 在index js中完成接口管理 目录以下图 ajax 在request js中对wx request进行封装
  • 2021年职场百态:半数互联网人被迫内卷下,年轻人开始青睐“铁饭碗”

    2021年 职场人因何而Emo 2021年 新冠疫情 新的经济发展阶段 以及新的人口趋势交叠 构成了当下社会的焦虑底色 而这一情绪反映到普罗大众的生活中 就是 Emo 冲上了2021年度热词榜 Emo 一词 原本是 emotional 的缩
  • 华为S9306交换机版本升级及补丁安装步骤

    文章目录 背景介绍 升级前的准备 开启S9306 FTP服务 WIN7 10远程登陆FTP交换机查看配置是否成功 备份S9306交换机配置及版本文件 正式升级新版本操作步骤 第一步 上传升级过渡版本 第二步 设置交换机升级版本为启动运行版本
  • 【深度学习】常见优化算法

    本文介绍常见的一阶数值优化算法 这些方法在现代神经网络框架 tensorflow caffe torch 中已经是标准配置 问题 设系统参数为 omega 对于样本 i i i 其代价函数为