/ DeepLearning

梯度下降及其衍生

但凡说起深度学习或者神经网络,梯度下降算法总是要被提及。梯度下降方法用于解决神经网络或者深度学习中的优化问题。

简单来说,训练神经网络的过程,就是在对损失函数(Loss function)与代价函数(Cost function)进行最小化的过程,以表示网络的预测值与真实结果之间的差距大小,即拟合程度。

目标函数、损失函数与代价函数

我们对一个问题进行建模,目的是求出能很好地拟合数据的最优化预测函数,该函数就被称为**目标函数(Objective function)** 。那么怎么检测我们所求得的函数是否是符合要求的最优化函数呢?假设真实的数据集为d,要拟合的函数为f(x),则我们定义残差平方为损失函数来计算一个样本的误差:

\[L(Y_i,f(x_i))=(Y_i-f(x_i))^2\]
损失函数反映了单个样本的期望与实际结果之间的误差。那么如果想评估整个数据集的误差怎么办呢?这时候我们就要引入代价函数的概念。代价函数的定义为整个训练集上所有样本误差的平均:
\[C(Y,f(x))=\frac{1}{m}\sum_n=1^m L(Y_m,f(x_m))= \frac{1}{m}\sum_{n=1}^m (Y_m-f(x_m))^2\]

梯度下降

求出了误差,要怎么来将误差减小到可接受的范围之内呢?这时候就要用到梯度下降的算法了。在这里我们用一个简单的函数图像来做一个简单的解释:
---------

事实上这样的损失函数是几乎不存在的,因为其太简单太完美,但是可以用其理解梯度下降。我们的目标是找到函数的最低点,那么我们可以求导,沿着该点的切线是目标函数上升最快的方向,然后向着斜率的反方向进行修正,从而达到可以接受的最低点,大概是这样子:
---------2

在多维空间中,这个过程往往是在多个方向共同下降的过程。用数学公式描述更新规则的基本方程是:
\[\omega=\omega-\alpha*\nabla\omega\]其中ω是权重向量,α是学习率,▽是所求得的梯度方向。
梯度矩阵的详细计算过程在这篇博文中进行了推导,这里就不再详细推导。

批量梯度下降、随机梯度下降与小批量梯度下降

梯度下降目前有三种思路,分别为批量梯度下降(Gradient Descent)、随机梯度下降(Stochastic Gradient Descent)与小批量梯度下降(Mini-batch Gradient Descent)。三者的区别主要体现为每次迭代模型参数时使用的样本数量的不同。
使用批量梯度下降时,每一轮迭代中首先计算整个训练集中所有样本的梯度矩阵,然后用该梯度矩阵集去对ω进行更新:
\[\frac{\partial L(\omega)}{\partial \omega_j}=-\frac{1}{m}\sum_{i=1}^m(y_i-f(x_i))x_i^j\]\[\omega=\omega+\frac{1}{m}\sum_{i=1}^m (Y_i-f(x_i))x_i^j\]
这种方法的好处是可以更容易得到全局最优解,收敛到鞍点的几率比SGD要小,缺点是如果样本很大的话,速度会很慢,而且对内存的要求也很高。

随机梯度下降是通过每个样本来迭代更新一次权重,而非使用全部样本来进行一次更新。虽然不是每次迭代都朝着全局最优的方向前进,但是从大趋势上来看是向着全局最优的。这种方法收敛更快,但是相比批量梯度下降来说,噪音较大,且为了确保收敛,需要采用更小的步长(学习率)。

小批量梯度下降则是集合了梯度下降和随机梯度下降的特点,将全部数据分为多批,迭代时使用每一小批样本来计算梯度、更新一次权重。这样做的优点是收敛不会很慢,同时对于SGD的局部最优情况也有所缓解,噪音相比更小。单样本迭代的话,容易被误差比较大的样本所影响,从而更有可能收敛到局部最优解而非全局最优解;如果是分批次或者是全部样本进行迭代的话,可以减小个别偏差较大的样本的影响,从而缩减整体方差
总的来说,随机梯度下降一般来说效率高,收敛到的路线曲折,但一般得到的解是我们能够接受的,在深度学习中,用的比较多的是mini-batch梯度下降

关于学习速率

在梯度下降中,学习速率也是一个需要考虑的超参数,如果学习速率过大,则可能直接越过理想的收敛点,导致最终模型发散;而速率过小的话,则需要迭代很多次才可以达到收敛;速率在收敛位置较大时,会发生震荡,从而导致收敛慢,甚至无法稳定。

理想的学习速率是:刚开始设置较大,有很快的收敛速度,然后慢慢衰减,保证稳定到达最优点。所以,前面的很多算法都是学习速率自适应的。除此之外,还可以手动实现这样一个自适应过程,如实现学习速率指数式衰减:\[\eta(t)=\eta_0*10^{-t/r}\]


Reference:
一文简述深度学习优化方法——梯度下降
机器学习中的目标函数、损失函数、代价函数有什么区别?
梯度下降法的三种解释(BGD,SGD,MBGD)
深入理解机器学习中的:目标函数,损失函数和代价函数
如何理解随机梯度下降(Stochastic gradient descent,SGD)?
一文看懂常用的梯度下降算法

梯度下降及其衍生
Share this

Subscribe to Zed's Blog