六游的博客小站
梯度下降法
发布于: 2019-03-05 更新于: 2019-03-31 阅读次数: 

什么是梯度下降法

首先我们需要知道的一点是梯度下降法并不是某种特定的机器学习算法,一种基于搜索的最优化方法,我们可以通过梯度下降法来最小化一个损失函数。与之对应的是梯度上升法,是用来最大化一个效用函数的方法。

从一个简单的例子了解梯度下降

我们先给出一个极其简单的损失函数,尽管我们用最普通的求导法则或者初中就学过的对称轴法就可以找出这个函数的最小值,但是我们主要是以这个函数为例子来了解梯度下降的思想。

1.png

我们首先取任意该损失函数定义域内的一点t,计算出该点的导数(dJ/dt),如果我们取的这个点在最小值的左方,那么这个导数值就为负,如果这个点在最小值的右方,这个导数就为正值。既然我们想要求该函数的最小值,我们就需要让这个点继续向切线下降的方向继续移动,向最小值靠近。这时我们发现,该点需要移动的方向恰巧与-(dJ/dt)的方向一致,所以我们定义了该点每次需要移动的距离:

$$-\eta\frac{dJ}{dt}$$

该式子中的 η代表了步进值,是梯度下降法中十分重要的一个超参数。我们在进行梯度下降最小化损失函数时应该取得合适的 η值, η过大或过小都会影响算法的结果或效率。

2.png
3.png

至此我们讨论的损失函数仅仅是非常简单的二次函数,但是在大多数情况下我们研究的函数要复杂很多。而且大多数情况下我们研究的函数有不止一个的极值点。面对这样的问题,我们可以多次使用梯度下降法,每次使用随机的不同的初始点。初始点的选择也是梯度下降的一个超参数

6.png

线性回归中的梯度下降

梯度下降是最小化损失函数的一种方法,所以我们先由线性回归预测方程的一般形式得出线性回归中的损失函数J的一般形式
预测方程:$\hat{y}^{(i)} = \theta_0+\theta_1X_1^{(i)}+\theta_2X_2^{(i)}+…+\theta_nX_n^{(i)}$
损失函数: $\displaystyle \sum^{m}_{i=1}({y^{(i)}-}\theta_0-\theta_1X_1^{(i)}-…-\theta_nX_n^{(i)})^2$
该损失函数中的未知数为$\theta$这个向量($\theta_o$->$\theta_n$),我们分别求这个损失函数对各个$\theta$的偏导数,得到一个可以表示各个特征值(梯度)偏移方向的向量。要注意下图中的$X_b$与之前我们向量化处理线性回归数据时一样,是在原数据之前加上一个1得到的向量

4.png

这时我们注意到,得到的向量中的每个元素都是m个数的和,为了数据统一我们在前面乘上一个$\frac{1}{m}$,这个时候我们发现我们要求的损失函数变成了$\displaystyle \sum^{m}_{i=1}({y^{(i)}-}\hat{y}^{(i)})^2$,这个式子就是在评价线性回归算法指标中的MSE

5.png

梯度下降法向量化与数据标准化

观察上面我们得到的用来表示梯度下降方向的式子,该向量中的每一项都是由同一个向量$X_b^{(i)}\theta-y^{(i)}$与另一个向量$X_n$的数乘,进一步我们可以结果向量看作是$X_b^{(i)}\theta-y^{(i)}$的转置与矩阵$X_b$

7

由于在真实的数据中,一个事物的不同特征值可能会拥有不同的数据规模(例如房屋价格可能达到几百万,房屋的面积可能只有一百多平米)。这样会很大程度的影响梯度下降的效率与准确性,所以在做梯度下降时我们应当先将数据均值方差归一化在进行梯度下降。

随机梯度下降法

至此我们在求解一个损失函数最小值时,针对每一个我们选择的随机的一个点,都要把我们所有的数据代入求导数和来判断在该点时梯度的移动方向。这样如果我们的数据集特别的大,数量特别的多,那么我们拟合的过程就会变得特别慢,效率十分低。针对此情况我们提出了随机梯度下降法。在拟合的过程中,针对每一个点,我们只随机选取数据集中的一条或几条数据来进行研究即可。

更多关于梯度下降法的思考

TODO…

--- 本文结束 The End ---