机器学习之梯度下降法(GD)、随机梯度下降法(SGD)和随机平均梯度下降法(SAGD)

        无论是机器学习(Machine Learning),还是深度学习(Deep Learning)都为建好的模型构建一个损失函数,然后通过求解损失函数最小值。求解方法很多,梯度下降方法是其中一种。下面我们逐个介绍梯度下降法(GD)、随机梯度下降法(SGD)和随机平均梯度下降法(SAGD)。先来看梯度下降法的基本思想。

基本原理

        如果抛开具体场景,从数学抽象角度来看,无论是监督式还是非监督式,每个机器学习模型都有自己对应的损失函数,并且损失函数中包含了若干个未知的模型参数,我们假设f(x;\theta)就是这样的损失函数。它是总体样本的损失,称之为总损失,它等于整体样本的平均损失。也就是:

f(x;\theta)=\frac{1}{m}\sum_{i=1}^{m}f_i(x_i;\theta)          (1)

其中f_i(x_i;\theta)表示第i个样本x_i的损失,x_i=(x_{i1},x_{i2},...,x_{in})  ,m表示样本的个数。 x是m个训练数据组成的一个mn维的向量x=(x_{11},x_{12},...,x_{1n},x_{21},...,x_{mn}),这里x只是为了表示方便,\theta是模型参数,假设有p个模型参数,即\theta表示为\theta=(\theta_1,\theta_2,...,\theta_p)

因为m个样本是给定的,也就是说损失函数f(x;\theta)是关于\theta的函数。

        关于模型求解其实是找到“最好的”f(x;\bf{\theta}),使得损失函数f(x;\bf{\theta})最小,这等价于找到“最好的”模型参数\theta使得f(x;\bf{\theta})最小,所以可以将问题转换为:求关于\theta的损失函数f(x;\bf{\theta})的最小值。我们采用局部搜索的方法,具体思路如下:

(1)我们先随机给定参数向量\theta的一个初始值\theta^0

(2)在\theta^0的极小范围内寻找到f(x;\bf{\theta})的最小值对应的\theta^1

(3)在\theta^1的极小范围内寻找到f(x;\bf{\theta})的最小值对应的\theta^2

...

一直这样进行下去,直到找到最小值点\theta^*或者找到的\theta^*已经非常接近最小值点后终止。我们以只有一个参数的f(x;\bf{\theta})为例来说明这个思路,如图:

图中圆表示\theta对应的极小范围,这个极小范围是非常小的(肉眼几乎看不见),为了能在图中表示出来,特意将其放大,这个范围究竟多小,后面再解释。在图中,我们从\theta^0开始进行搜索,找到\theta^1,最后我们会搜索到\theta^k,它就是最小值点\theta^*=\theta^k,也是我们要求解的。有读者会说这里\theta^k并不是最小值点啊,只是局部极小值点。没错,它确实是极小值点。这是因为我们随机给定的\theta^0不是很好。如图,我们重新选取\theta^0,然后按照上面的方法搜索,最终就能达到最小值。所以本文不再区分极小值和最小值,均以最小值称呼。根据多元函数的Taylor公式,将f(x;\bf{\theta})\theta=\theta^0处展开:

f(x;\theta)=f(x;\theta^0)+\sum_{i=1}^{p}\frac{\partial f(x;\theta^0)}{\partial \theta_i}(\theta_i-\theta^0_i)+...                  (2)

上式中省略号表示后面还有无穷多项,但他们中每一项至少包含类似(\theta_i-\theta^0_i)^2或者更高次的项。上面说到的极小范围指的是(\theta_i-\theta^0_i)^2极小,以至于(2)式等价于如下形式:

f(x;\theta)\approx f(x;\theta^0)+\sum_{i=1}^{p}\frac{\partial f(x;\theta^0)}{\partial \theta_i}(\theta_i-\theta^0_i)            (3)

只有(2)式的常数项和一次项。我们再进一步假设:当(\theta_i-\theta^0_i)^2极小,以至于(3)式左右两边误差忽略不计,也就是可以看成相等,如下:

f(x;\theta)= f(x;\theta^0)+\sum_{i=1}^{p}\frac{\partial f(x;\theta^0)}{\partial \theta_i}(\theta_i-\theta^0_i)           (4)

极小范围如下表示:\sum_{i=1}^{p}(\theta_i-\theta^0_i)^2\leq R^2R>0且极小),极小值范围其实是一个p为空间的球。每一项(\theta_i-\theta^0_i)^2极小等价于球的半径R极小。

到这里,我们的问题就转换为:

(4)式在条件\sum_{i=1}^{p}(\theta_i-\theta^0_i)^2\leq R^2下求最小值,其中(4)式是多元一次函数,也就是p为空间中的超平面。

下面使用Lagrange乘数法求解该问题。注意到超平面只有在边界上取得最值。边界指的是

\sum_{i=1}^{p}(\theta_i-\theta^0_i)^2= R^2

下面先构造Lagrange函数:

F(x;\theta)= f(x;\theta^0)+\sum_{i=1}^{p}\frac{\partial f(x;\theta^0)}{\partial \theta_i}(\theta_i-\theta^0_i)-\lambda(\sum_{i=1}^{p}(\theta_i-\theta^0_i)^2- R^2)

对上式每个\theta_i\lambda求偏导得到:

\frac{\partial F(x;\theta)}{\partial \theta_i}= \frac{\partial f(x;\theta^0)}{\partial \theta_i}-2\lambda(\theta_i-\theta^0_i)=0

\sum_{i=1}^{p}(\theta_i-\theta^0_i)^2= R^2

解得:

\theta_i=\theta^0_i+\frac{1}{2\lambda}\frac{\partial f(x;\theta^0)}{\partial \theta_i}             (5)

\lambda^2=\sum_{i=1}^{p}\frac{1}{4R^2}(\frac{\partial f(x,\theta_0)}{\partial \theta_i})^2       (6)

(6)式中\lambda有两个值,一个大于0,另外一个小于0,那么究竟是哪个?我们再看。使用极小值点必要条件相关定理,对F(x;\bf{\theta})求二阶偏导,得到:

\frac{\partial^2 F(x;\theta)}{\partial \theta_i \partial \theta_j}=\left\{\begin{matrix} -2\lambda & i=j\\ 0& i\neq j \end{matrix}\right.

\frac{\partial^2 F(x;\theta)}{\partial \theta_i \partial \theta_j}表示F(x;\bf{\theta})先对\theta_i求一阶偏导,然后对\theta_j再求偏导,这样会得到如下p\times p阶矩阵:

A=(\frac{\partial^2 F(x;\theta)}{\partial \theta_i \partial \theta_j})_{p\times p}=\begin{bmatrix} -2\lambda &0 & ... & 0\\ 0& -2\lambda &... &0 \\ \vdots &\vdots &\ddots &0 \\ 0&0 &\dots & -2\lambda \end{bmatrix}

这个矩阵的对角线元素为-2\lambda,其余元素为0。根据极小值点必要条件,当矩阵A是正定矩阵时,(5)~(6)式的解\thetaf(x;\bf{\theta})极小值。当且仅当\lambda <0时,矩阵A才是正定矩阵。也就是

\lambda=-\sqrt{\sum_{i=1}^{p}\frac{1}{4R^2}(\frac{\partial f(x,\theta_0)}{\partial \theta_i})^2}

\eta =-\frac{1}{2\lambda }\eta>0),则(5)式化为:

\theta_i=\theta^0_i-\eta\frac{\partial f(x;\theta^0)}{\partial \theta_i}

写成向量形式,就是:

\theta=\theta^0-\eta\triangledown f(x;\theta^0)             (7)

其中\triangledown f(x;\theta^0)表示f(x;\bf{\theta})\theta=\theta^0处的梯度向量:

\triangledown f(x;\theta^0)=\begin{bmatrix} \frac{\partial f(x;\theta^0)}{\partial \theta_1}\\ \frac{\partial f(x;\theta^0)}{\partial \theta_2}\\ \vdots\\ \frac{\partial f(x;\theta^0)}{\partial \theta_p} \end{bmatrix}

(7)式表明:

给定一个初始值\theta^0,(7)式求解的\thetaf(x;\bf{\theta})的极小值,且\eta =-\frac{1}{2\lambda }\eta>0)。这就是梯度下降法的基本思路。

        下面基于此介绍梯度下降法。

梯度下降法(Gradient Descent)

根据上面的公式:

\eta =-\frac{1}{2\lambda }

\lambda=-\sqrt{\sum_{i=1}^{p}\frac{1}{4R^2}(\frac{\partial f(x,\theta_0)}{\partial \theta_i})^2}

极小范围对应着R极小,即R趋向于0,此时\lambda^2趋向于无穷大,那么\eta趋向于0。所以梯度下降法其实就是给定一个极小的\eta值,比如\eta=0.0001,然后根据(7)式:

\theta=\theta^0-\eta\triangledown f(x;\theta^0)

\theta^0开始如下搜索\theta^1

\theta^1=\theta^0-\eta\triangledown f(x;\theta^0)

接着如下搜索\theta^2

\theta^2=\theta^1-\eta\triangledown f(x;\theta^1)

一直进行下去,直到\theta^k=\theta^{k-1}-\eta\triangledown f(x;\theta^{k-1})使得

f(x;\theta^k)与真实值误差在允许的范围内终止。

这就是梯度下降法。有的地方也称之为批量梯度下降(Batch Gradient Descent,BGD),这里的批量指的是使用所有m个样本数据。

随机梯度下降法(Stochastic Gradient Descent,SGD)

        事实上f(x;\bf{\theta})表示的是总损失,它等于样本平均梯度,即:

f(x;\theta)=\frac{1}{m}\sum_{i=1}^{m}f_i(x_i,\theta)

其中f_i(x_i,\theta)表示的是第i个数据样本x_i的损失。那么在梯度下降法中需要对f(x;\bf{\theta})求梯度\triangledown f(x;\theta),而对f(x;\bf{\theta})求梯度等于各个样本点损失函数梯度之和,即:

\triangledown f(x;\theta)=\frac{1}{m}\sum_{i=1}^{m}\triangledown f_i(x_i,\theta)

如果数据量m非常大,比如m=10亿,求解\triangledown f(x;\theta)计算量将相当大。那么我们想:能否每次只随机选择单个样本x_i,使用单个样本的梯度\triangledown f_i(x_i,\theta)代替样本平均梯度\triangledown f(x;\theta)呢?也就是:

\theta^k=\theta^{k-1}-\eta\triangledown f_i(x_i;\theta^{k-1})

这就是随机梯度下降法。每次迭代\theta^k前随机从m个样本中选取一个样本x_i,注意每次选取的样本x_i可能不同。所以上式中的f_i(x_i;\theta^{k-1})是动态变动的。

随机平均梯度下降法(Stochasitc Average Gradient Descent,SAGD)

        使用随机梯度下降法的时候,我们发现每次从m个样本中随机选择单个样本,虽然一定程度减轻了每次迭代的计算量,但是单个样本对于总体样本来说,真是沧海一粟,不能很好表示整体样本特征,导致收敛速度非常慢。有时与梯度下降法比较,虽然单次迭代的计算量减小了,但是迭代次数多,整体的计算量并没有显著的减少。那么我们又想,既然每次随机选择单个样本不能表示m个数据的整体特征,能否每次随机从m个样本中多选一些样本呢?比如q个(q远远小于m),然后使用这q个样本的平均梯度代替整体样本平均梯度,如下:

\triangledown f(x;\theta)=\frac{1}{q}\sum_{t=1}^{q}\triangledown f_{i_t}(x_{i_t},\theta)

注意x_{i_1},x_{i_2},...,x_{i_q}是随机选取的q个样本。这样可以如下迭代求解\theta^*

\theta^k=\theta^{k-1}-\frac{\eta}{q}\sum_{t=1}^{q}\triangledown f_{i_t}(x_{i_t};\theta^{k-1})

这就是随机平均梯度下降法。

这里需要再介绍一个概念:“轮次”。随机平均梯度下降法中的随机其实我们可以如下做到:

首先将m个随机数据随机打散成几组,每组q个样本(最后一组可能不足q个)。然后从第一组开始取就可以了,一直取下去,但是当所有样本都取过之后,此时迭代还未得到\theta^*,我们需要再次从第一组继续迭代。第一次当所有样本被使用过称之为“一轮”(epoch)。实际我们需要经过多轮选取样本才能得到\theta^*

        这个方法也称之为小批量随机梯度下降法(Mini Batch Gradient Descent,MBGD)。

下面是三种方法的在手写数字识别中训练精确度和训练时间的比较,如图:

图的最左边Batch size=1对应随机梯度下降法,中间是不同的Batch size,对应随机平均梯度下降法,最右边Batch size=full,也就是取所有样本,对应梯度下降法。

随机梯度下降法:精度较高,训练时间中等

随机平均梯度下降法:训练时间较短,精度中等

梯度下降法:训练时间较长,精度偏低。

总结

        上面三种梯度下降法听起来有些玄乎,其实只有两点:

(1)在某个极小的范围内,可以使用Taylor公式近似f(x;\theta),将f(x;\theta)变成一个超平面;

(2)从m个样本随机选取一些样本数k,使用他们的平均梯度代替整体样本平均梯度,三个方法对应的随机样本数分别为:

梯度下降法:k=m

随机梯度下降法:k=1

随机平均梯度下降法:k=q(q远远小于m)。

发布了89 篇原创文章 · 获赞 79 · 访问量 10万+

猜你喜欢

转载自blog.csdn.net/L_15156024189/article/details/105357082
今日推荐