梯度下降算法优化综述An overview of gradient descent optimization algorithms

原文地址:https://arxiv.org/pdf/1609.04747.pdf

参考:
https://www.leiphone.com/news/201706/e0PuNeEzaXWsMPZX.html
https://wx.abbao.cn/a/11210-8799507743ab0bc4.html

梯度下降算法优化综述

Insight Centre for Data Analytics, NUI Galway
Aylien Ltd., Dublin
ruder.sebastian@gmail.com

Abstract摘要

Gradient descent optimization algorithms, while increasingly popular, are often used as black-box optimizers, as practical explanations of their strengths and weaknesses are hard to come by. This article aims to provide the reader with intuitions with regard to the behaviour of different algorithms that will allow her to put them to use. In the course of this overview, we look at different variants of gradient descent, summarize challenges, introduce the most common optimization algorithms, review architectures in a parallel and distributed setting, and investigate additional strategies for optimizing gradient descent.
梯度下降优化算法,虽然越来越流行,但往往是作为黑盒优化器,它的优点和缺点是很难得到的。本文旨在帮助读者如何去选择使用不同的算法。在这个概述的过程中,我们将看到不同变体的梯度下降,总结面临的挑战,这里介绍最常用的优化方法算法,在并行和分布式环境中审查体系结构,并研究梯度下降优化的附加策略。

hard to come by不可多得;难得
intuitions直觉( intuition的名词复数 ); 凭直觉感知的知识; 直觉力
with regard to关于; 就; 说起
In the course of在…期间,在…过程中
summarize总结,概述
architectures体系结构; 建筑学( architecture的名词复数 ); 建筑风格; 结构
parallel and distributed setting 并行和分布式环境

1Introduction简介

梯度下降是最流行的优化算法之一,尤其是在神经网络方面它是最常用的优化方法。同时,每一个最先进的深度学习库都包含各种优化梯度下降算法的实现(例如lasagne,caffe和keras文档)。然而,这些算法通常被用作黑盒优化器,它的优点和缺点是很难进行解释说明。

本文旨在帮助读者如何去选择使用不同的算法。在第2节中,我们首先看看梯度下降的各种变体。然后我们将在第3节简要总结训练期间所遇到的问题。随后,在第4节中,我们将介绍最常见的优化算法,展示了他们解决这些问题的目的和是如何引导出它们的更新规则的。之后,在第5节中,我们将简短地看一下在并行和分布式环境下优化梯度下降的算法和体系结构。最后,我们将考虑在第6节中有助于优化梯度下降的附加策略。

摘begin:
θ表示神经网络中的参数,J(θ)表示在给定参数取值下训练数据集上目标函数的大小,整个过程可以抽象为寻找一个参数θ,使得J(θ)最小。梯度下降算法会迭代式更新参数θ,不断沿着梯度的反方向让参数朝着目标函数更小的方向更新。

学习率η(learning rate)来定义每次参数更新的幅度。可以认为学习率定义的就时每次参数移动的幅度。
摘end:

2Gradient descent variants梯度下降变体

这里有三种变体的梯度下降,不同点在于我们使用多少数据来计算目标函数的梯度。根据数据量,我们在参数更新的准确性和执行更新所需的时间两者之间进行权衡。

2.1 Batch gradient descent批量梯度下降

Vanilla gradient descent 又称为batch gradient descent,BGD 采用整个训练集的数据来计算 cost function 对参数的梯度。

θ=θηθJ(θ)

正如我们需要计算整个数据集的梯度来执行一个更新,batch gradient descent 计算非常慢,对于不适合于内存的数据集来说是难以处理的。BGD也不允许我们在线更新我们的模型。

for i in range ( nb_epochs ):
params_grad = evaluate_gradient ( loss_function , data , params )
params = params - learning_rate * params_grad

一个预定数量的时代,我们首先计算损失函数的梯度向量params_grad对于整个数据关于我们的参数向量参数函数。注意到最先进的深度学习库提供自动分化,有效地计算出梯度关于一些参数.如果您自己提取梯度,那么梯度检查是一个好主意。6。
6有关如何正确检查坡度的一些重要技巧,请参阅 http://cs231n.github.io/neural-networks-3/
(w.r.t. :with regard to with reference to 关于的意思)

然后,我们更新参数的梯度方向的学习率决定我们执行的更新有多大。BGD保证收敛到凸误差曲面的全局最小值和非凸曲面的局部极小值。


梯度更新规则:
BGD 采用整个训练集的数据来计算 cost function 对参数的梯度:

缺点:
由于这种方法是在一次更新中,就对整个数据集计算梯度,所以计算起来非常慢,遇到很大量的数据集也会非常棘手,而且不能投入新数据实时更新模型

我们会事先定义一个迭代次数 epoch,首先计算梯度向量 params_grad,然后沿着梯度的方向更新参数 params,learning rate 决定了我们每一步迈多大。

BGD对于凸函数可以收敛到全局极小值,对于非凸函数可以收敛到局部极小值。


2.2 Stochastic gradient descent随机梯度下降

随机梯度下降(SGD)对比通过每个训练样本 xi 和标签 yi 进行参数更新:

θ=θη.θJ(θ;x(i);y(i))

BGD执行大数据集的冗余计算,在每个参数更新之前它会重新为类似的样本计算梯度。SGD在执行一个更新同时会去除这个冗余。因此,SGD通常更快,也可以用于在线学习。SGD高变异去频繁执行更新,导致目标函数波动巨大,看图1。

这里写图片描述
Figure 1: SGD fluctuation (Source: Wikipedia)

for i in range ( nb_epochs ):
  np. random . shuffle ( data )
  for example in data :
     params_grad = evaluate_gradient (loss_function , example , params )
     params = params - learning_rate * params_grad

梯度更新规则:

和 BGD 的一次用所有数据计算梯度相比,SGD 每次更新时对每个样本进行梯度更新,

对于很大的数据集来说,可能会有相似的样本,这样 BGD 在计算梯度时会出现冗余,

而 SGD 一次只进行一次更新,就没有冗余,而且比较快,并且可以新增样本。

看代码,可以看到区别,就是整体数据集是个循环,其中对每个样本进行一次参数更新。

缺点:

但是 SGD 因为更新比较频繁,会造成 cost function 有严重的震荡。
BGD 可以收敛到局部极小值,当然 SGD 的震荡可能会跳到更好的局部极小值处。

当我们稍微减小 learning rate,SGD 和 BGD 的收敛性是一样的。


2.3 Mini-batch gradient descent小批量梯度下降

Mini-batch gradient descent finally takes the best of both worlds and performs an update for every mini-batch of n training examples:
小批量梯度下降(Mini-batch gradient descent)综合了批量梯度下降与随机梯度下降,在每次更新速度与更新次数中间取得一个平衡,其每次更新从训练集中随机选择 m,m < n 个样本进行学习。

θ=θη.θJ(θ;x(i:i+n);y(i:i+n))

This way, it a) reduces the variance of the parameter updates, which can lead to more stable convergence;and b) can make use of highly optimized matrix optimizations common to state-of-the-art deep learning libraries that make computing the gradient w.r.t. a mini-batch very efficient.Common mini-batch sizes range between 50 and 256, but can vary for different applications.Mini-batch gradient descent is typically the algorithm of choice when training a neural network and the term SGD usually is employed also when mini-batches are used.
Note: In modifications of SGD in the rest of this post, we leave out the parameters x(i:i+n); y(i:i+n) for simplicity.

stable convergence稳定收敛
for simplicity为简单起见
leave out遗漏; 省略; 未顾及; 忽略
in the rest of剩下的

这种方式,它减少了参数更新的变化,从而导致更稳定的收敛性;可以利用高度优化的矩阵优化常见的最先进的深度学习库,使计算一个关于小批量的梯度非常有效。常见的小批量的范围在50和256之间,但可以为不同的应用程序。当训练神经网络时选择小批量梯度下降算法具有代表性,当使用小批量梯度下降时通常也采用SGD。注:在这篇文章的剩余部分修改了SGD,为了简单起见省略了参数 x(i:i+n) ; y(i:i+n) ;

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值