梯度下降法

一、梯度下降法(Gradient Descent)

在求解机器学习算法的模型参数,即无约束优化问题时,梯度下降(Gradient Descent)是最常采用的方法之一。梯度下降法是一个最优化算法,通俗的来讲就是沿着梯度下降的方向迭代求解某个函数的最小值。

梯度:在微积分里面,对多元函数的参数求∂偏导数,把求得的各个参数的偏导数以向量的形式写出来,就是梯度。从几何意义上讲,梯度就是函数变化增加最快的地方。

首先来看看梯度下降的一个直观的解释。比如我们在一座大山上的某处位置,由于我们不知道怎么下山,于是决定走一步算一步,也就是在每走到一个位置的时候,求解当前位置的梯度,沿着梯度的负方向,也就是当前最陡峭的位置向下走一步,然后继续求解当前位置梯度,向这一步所在位置沿着最陡峭最易下山的位置走一步。这样一步步的走下去,一直走到觉得我们已经到了山脚。当然这样走下去,有可能我们不能走到山脚,而是到了某一个局部的山峰低处。

    从上面的解释可以看出,梯度下降不一定能够找到全局的最优解,有可能是一个局部最优解。当然,如果损失函数是凸函数(自行百度,哈哈哈),梯度下降法得到的解就一定是全局最优解。

梯度下降法

接下来就直接讲梯度下降的算法过程啦!

第一步:要确定目标函数或损失函数,以及给定终止门限阀值 梯度下降法

               比如线性回归的损失函数为:

梯度下降法

第二步:初始化参数值梯度下降法,初始化学习率梯度下降法

第三步:判断所有参数梯度下降的距离是否都满足小于终止门限阀值 梯度下降法,若满足则终止算法,若不满足则继续。

第四步:利用参数更新公式(如下)对所有参数进行同时更新,更新完毕后继续进入第三步。

                  梯度下降法

可以观察到对每一个参数进行更新时,我们借用到全部的所有样本进行的一个求解!

 

这里有必要再解释一个概率:

步长(就是学习率梯度下降法和梯度的乘积):步长决定了在梯度下降迭代的过程中,每一步沿梯度负方向前进的长度。用上面下山的例子,步长就是在当前这一步所在位置沿着最陡峭最易下山的位置走的那一步的长度。

注意点:

1. 学习率的大小会影响收敛速度以及是否能收敛,学习率大相对而言下降的快,但可能发散收敛不了,所以学习率一般取得比较小。

2. 有刚才的下山的例子我们知道,如果函数不是凸函数的话,那么得到的解很有可能不是全局最优解,而是局部最优。所以我们需要初始化参数梯度下降法多次,对每次的局部最优解进行比较,选取最小的解为我们的最优解,这样一定程度上能让我们的最优解逼近于全局最优。

3. 特征缩放,消化特征值的影响,对特征值进行归一化处理进行缩放,加快收敛速度。

二、三种梯度下降

1、批量梯度下降(BGD)

这就是我们常说的梯度下降,更新参数时,使用所有的样本进行一个求解。更新公式为:

梯度下降法

2、随机梯度下降(SGD)

其实和批量梯度下降法原理类似,区别在与求梯度时没有用所有的m个样本的数据,而是仅仅选取一个样本j来求梯度。更新公式为:

梯度下降法

很显然,和批量梯度下降法是两个极端,一个采用所有数据来梯度下降,一个用一个样本来梯度下降。自然各自的优缺点都非常突出。对于训练速度来说,随机梯度下降法由于每次仅仅采用一个样本来迭代,训练速度很快,而批量梯度下降法在样本量很大的时候,训练速度不能让人满意。对于准确度来说,随机梯度下降法用于仅仅用一个样本决定梯度方向,导致解很有可能不是最优。对于收敛速度来说,由于随机梯度下降法一次迭代一个样本,导致迭代方向变化很大,不能很快的收敛到局部最优解。

    那么,有没有一个折中的办法能够结合两种方法的优点呢?此时,就引入了小批量梯度下降法。

3、小批量梯度下降(Mini-batch GD / MBGD)

小批量梯度下降法是批量梯度下降法和随机梯度下降法的折衷,也就是对于m个样本,我们采用x个样子来迭代,1<x<m。更新公式为:

梯度下降法