梯度下降算法概述

翻译 2016年08月31日 13:52:29

梯度下降算法概述

本文是翻译的 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

相关文章推荐

梯度下降算法

  • 2017年11月13日 16:19
  • 377KB
  • 下载

机器学习笔记02-代价函数与梯度下降算法(一)

在阅读这篇博文之前你需要了解的数学知识: 1,误差:本篇用平方差误差公式。 2,函数的收敛性:当函数趋向无穷大或无穷小,或某个具体数值时,该函数总是逼近某个值,这就是函数的收敛性。 3,导数:导数的数...
  • xinzhi8
  • xinzhi8
  • 2017年03月22日 14:36
  • 979

梯度下降算法

  • 2014年03月22日 14:56
  • 814B
  • 下载

(尤其是训练集验证集的生成)深度学习 tensorflow 实战(2) 实现简单神经网络以及随机梯度下降算法S.G.D

在之前的实战(1) 中,我们将数据清洗整理后,得到了'notMNIST.pickle'数据。 本文将阐述利用tensorflow创建一个简单的神经网络以及随机梯度下降算法。 [ja...

梯度下降算法动态演示matlab文件

  • 2013年04月26日 15:51
  • 1021B
  • 下载

梯度下降算法的Python实现

梯度下降算法的Python实现 http://yphuang.github.io/blog/2016/03/17/Gradient-Descent-Algorithm-Implementation-...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:梯度下降算法概述
举报原因:
原因补充:

(最多只允许输入30个字)