梯度下降算法概述

梯度下降算法概述

本文是翻译的 An overview of gradient descent optimization algorithms,翻译时并不一定遵照原文的表述,主要是以将问题表达清楚为主要目的。


在常见的神经网络优化算法中,梯度下降是最受欢迎的一种。同时,每一个 state-of-art 的深度学习库都包含了各种算法梯度下降的实现(如:lasagne,caffe和keras)。但是,这些算法经常是作为一个黑箱子优化器来使用,而对于它们的优缺点的解释却提及不多。

本文主要是提供不同优化梯度下降算法表现的直观解释,来帮助你使用它们。我们首先看看各个梯度下降算法的不同变形,然后简略的总结在训练过程中的挑战。然后我们介绍最常见的优化算法,阐述在解决这些挑战时它们的出发点和在更新时如何求导的问题。我们也将简要的介绍在并行与分布式中优化梯度下降的算法和结构。最后,我们考虑有助于优化梯度下降的条件策略。

梯度下降是一种最小化目标函数 J(θ) 的方法,其中 θRd 是模型的参数。梯度下降通过目标函数对参数的梯度方向的负方向更新参数。学习率 η 的大小就决定了我们走向局部最小值的步长。我们按照由目标函数生成的表面的斜坡的方向直到我们到达谷底。如果你对梯度下降不熟悉,你可以找到一个优化神经网络的入门教程

梯度下降的变形
依据我们所需计算的数据的梯度,梯度下降有三种不同变形。根据数据量,我们要在参数的正确率和计算时间上做一个协调。

批量梯度下降Batch gradient descent
批量梯度下降(简称BGD)计算的是损失函数对参数 θ 在整个训练数据集上的导数。

θ=θηθJ(θ)

因为在每一次更新中,需要在整个数据集上计算梯度,BGD非常慢而且在内存不够用时,它很难训练。BGD也不允许在线更新。

BGD的代码可能类似这样:

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

对于一个预定义的epoch,我们先计算损失函数对参数向量params在整个数据集上的梯度向量weights_grad。优秀的深度学习库都提供了高效的自动求导。如果你自己去计算导数,那么梯度检验是个不错的选择(这儿有些好的建议)

然后我们使用梯度更新参数,当然还有学习率,这决定了我们更新的力度。BGD保证了对于凸函数的全局最小和对于非凸的局部最小。

随机梯度下降 Stochastic gradient descent

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值