无论是机器学习(Machine Learning),还是深度学习(Deep Learning)都为建好的模型构建一个损失函数,然后通过求解损失函数最小值。求解方法很多,梯度下降方法是其中一种。下面我们逐个介绍梯度下降法(GD)、随机梯度下降法(SGD)和随机平均梯度下降法(SAGD)。先来看梯度下降法的基本思想。
基本原理
如果抛开具体场景,从数学抽象角度来看,无论是监督式还是非监督式,每个机器学习模型都有自己对应的损失函数,并且损失函数中包含了若干个未知的模型参数,我们假设就是这样的损失函数。它是总体样本的损失,称之为总损失,它等于整体样本的平均损失。也就是:
(1)
其中表示第i个样本的损失, ,表示样本的个数。 是m个训练数据组成的一个mn维的向量,这里只是为了表示方便,是模型参数,假设有p个模型参数,即表示为。
因为m个样本是给定的,也就是说损失函数是关于的函数。
关于模型求解其实是找到“最好的”,使得损失函数最小,这等价于找到“最好的”模型参数使得最小,所以可以将问题转换为:求关于的损失函数的最小值。我们采用局部搜索的方法,具体思路如下:
(1)我们先随机给定参数向量的一个初始值;
(2)在的极小范围内寻找到的最小值对应的;
(3)在的极小范围内寻找到的最小值对应的;
...
一直这样进行下去,直到找到最小值点或者找到的已经非常接近最小值点后终止。我们以只有一个参数的为例来说明这个思路,如图:
图中圆表示对应的极小范围,这个极小范围是非常小的(肉眼几乎看不见),为了能在图中表示出来,特意将其放大,这个范围究竟多小,后面再解释。在图中,我们从开始进行搜索,找到,最后我们会搜索到,它就是最小值点,也是我们要求解的。有读者会说这里并不是最小值点啊,只是局部极小值点。没错,它确实是极小值点。这是因为我们随机给定的不是很好。如图,我们重新选取,然后按照上面的方法搜索,最终就能达到最小值。所以本文不再区分极小值和最小值,均以最小值称呼。根据多元函数的Taylor公式,将在处展开:
(2)
上式中省略号表示后面还有无穷多项,但他们中每一项至少包含类似或者更高次的项。上面说到的极小范围指的是极小,以至于(2)式等价于如下形式:
(3)
只有(2)式的常数项和一次项。我们再进一步假设:当极小,以至于(3)式左右两边误差忽略不计,也就是可以看成相等,如下:
(4)
极小范围如下表示:(且极小),极小值范围其实是一个p为空间的球。每一项极小等价于球的半径极小。
到这里,我们的问题就转换为:
(4)式在条件下求最小值,其中(4)式是多元一次函数,也就是p为空间中的超平面。
下面使用Lagrange乘数法求解该问题。注意到超平面只有在边界上取得最值。边界指的是
下面先构造Lagrange函数:
对上式每个和求偏导得到:
解得:
(5)
(6)
(6)式中有两个值,一个大于0,另外一个小于0,那么究竟是哪个?我们再看。使用极小值点必要条件相关定理,对求二阶偏导,得到:
表示先对求一阶偏导,然后对再求偏导,这样会得到如下阶矩阵:
这个矩阵的对角线元素为,其余元素为0。根据极小值点必要条件,当矩阵A是正定矩阵时,(5)~(6)式的解为极小值。当且仅当时,矩阵A才是正定矩阵。也就是
令(),则(5)式化为:
写成向量形式,就是:
(7)
其中表示在处的梯度向量:
(7)式表明:
给定一个初始值,(7)式求解的为的极小值,且()。这就是梯度下降法的基本思路。
下面基于此介绍梯度下降法。
梯度下降法(Gradient Descent)
根据上面的公式:
极小范围对应着极小,即趋向于0,此时趋向于无穷大,那么趋向于0。所以梯度下降法其实就是给定一个极小的值,比如,然后根据(7)式:
从开始如下搜索:
接着如下搜索:
一直进行下去,直到使得
与真实值误差在允许的范围内终止。
这就是梯度下降法。有的地方也称之为批量梯度下降(Batch Gradient Descent,BGD),这里的批量指的是使用所有m个样本数据。
随机梯度下降法(Stochastic Gradient Descent,SGD)
事实上表示的是总损失,它等于样本平均梯度,即:
其中表示的是第i个数据样本的损失。那么在梯度下降法中需要对求梯度,而对求梯度等于各个样本点损失函数梯度之和,即:
如果数据量非常大,比如亿,求解计算量将相当大。那么我们想:能否每次只随机选择单个样本,使用单个样本的梯度代替样本平均梯度呢?也就是:
这就是随机梯度下降法。每次迭代前随机从m个样本中选取一个样本,注意每次选取的样本可能不同。所以上式中的是动态变动的。
随机平均梯度下降法(Stochasitc Average Gradient Descent,SAGD)
使用随机梯度下降法的时候,我们发现每次从m个样本中随机选择单个样本,虽然一定程度减轻了每次迭代的计算量,但是单个样本对于总体样本来说,真是沧海一粟,不能很好表示整体样本特征,导致收敛速度非常慢。有时与梯度下降法比较,虽然单次迭代的计算量减小了,但是迭代次数多,整体的计算量并没有显著的减少。那么我们又想,既然每次随机选择单个样本不能表示m个数据的整体特征,能否每次随机从m个样本中多选一些样本呢?比如q个(q远远小于m),然后使用这q个样本的平均梯度代替整体样本平均梯度,如下:
注意是随机选取的q个样本。这样可以如下迭代求解:
这就是随机平均梯度下降法。
这里需要再介绍一个概念:“轮次”。随机平均梯度下降法中的随机其实我们可以如下做到:
首先将m个随机数据随机打散成几组,每组q个样本(最后一组可能不足q个)。然后从第一组开始取就可以了,一直取下去,但是当所有样本都取过之后,此时迭代还未得到,我们需要再次从第一组继续迭代。第一次当所有样本被使用过称之为“一轮”(epoch)。实际我们需要经过多轮选取样本才能得到。
这个方法也称之为小批量随机梯度下降法(Mini Batch Gradient Descent,MBGD)。
下面是三种方法的在手写数字识别中训练精确度和训练时间的比较,如图:
图的最左边Batch size=1对应随机梯度下降法,中间是不同的Batch size,对应随机平均梯度下降法,最右边Batch size=full,也就是取所有样本,对应梯度下降法。
随机梯度下降法:精度较高,训练时间中等
随机平均梯度下降法:训练时间较短,精度中等
梯度下降法:训练时间较长,精度偏低。
总结
上面三种梯度下降法听起来有些玄乎,其实只有两点:
(1)在某个极小的范围内,可以使用Taylor公式近似,将变成一个超平面;
(2)从m个样本随机选取一些样本数k,使用他们的平均梯度代替整体样本平均梯度,三个方法对应的随机样本数分别为:
梯度下降法:k=m
随机梯度下降法:k=1
随机平均梯度下降法:k=q(q远远小于m)。