概述
梯度下降算法(Gradient Descent Optimization)是神经网络模型训练最常用的优化算法。对于深度学习模型,基本都是采用梯度下降算法来进行优化训练的。梯度下降算法背后的原理:目标函数
关于参数
的梯度将是损失函数(loss function)上升最快的方向。而我们要最小化loss,只需要将参数沿着梯度相反的方向前进一个步长,就可以实现目标函数(loss function)的下降。这个步长
又称为学习速率。参数更新公式如下:
其中
是参数的梯度,根据计算目标函数采用数据量的不同,梯度下降算法又可以分为批量梯度下降算法(Batch Gradient Descent),随机梯度下降算法(Stochastic Gradient Descent)和小批量梯度下降算法(Mini-batch Gradient Descent)。对于批量梯度下降算法,其
是在整个训练集上计算的,如果数据集比较大,可能会面临内存不足问题,而且其收敛速度一般比较慢。随机梯度下降算法是另外一个极端,
是针对训练集中的一个训练样本计算的,又称为在线学习,即得到了一个样本,就可以执行一次参数更新。所以其收敛速度会快一些,但是有可能出现目标函数值震荡现象,因为高频率的参数更新导致了高方差。小批量梯度下降算法是折中方案,选取训练集中一个小批量样本(一般是2的倍数,如32,64,128等)计算,这样可以保证训练过程更稳定,而且采用批量训练方法也可以利用矩阵计算的优势。这是目前最常用的梯度下降算法。
对于神经网络模型,借助于BP算法可以高效地计算梯度,这非常利于采用梯度下降算法对神经网络进行训练。梯度下降算法中一个重要的参数是学习速率,适当的学习速率很重要:学习速率过小时收敛速度慢,而过大时导致训练震荡,而且可能会发散。理想的梯度下降算法要满足两点:收敛速度要快;而且能全局收敛。为了这个理想,出现了很多经典梯度下降算法的变种,下面将分别介绍它们。
Exponentially weighted moving averages
在讲各种改进的梯度下降算法之前,我们先简单介绍一下exponentially weighted moving averages,即指数加权移动平均数,因为后面讲到的很多算法要用到这个概念。其针对的序列数据,比如
时刻的观测值为
,那么评估
时刻的移动平均值为:
其中
是上一时刻的移动平均值,其实也可以看成历史积累量