【Machine Learning】梯度下降算法介绍_01

梯度是什么
梯度下降又是什么?
梯度下降是用来干嘛的?
梯度下降算法学习

一、何为梯度

说法一:
在微积分里面,对多元函数参数求偏导数,把求的各参数的偏导数以向量的形式写出来,就是梯度。 那么这个梯度向量求出来有什么意义呢?梯度向量从几何意义(数学意义)上讲,就是函数变化增加最快的地方,沿着梯度向量的方向更容易找到函数的最大值,沿着向量相反的方向,梯度减小最快,更容易找到函数最小值
说法二:
梯度是函数在某点处的一个方向,并且沿着该方向变化最快,变化率最大。沿着梯度这个方向,使得值变大的方向是梯度上升的方向,沿着使值变小的方向便是下降的方向。综上,梯度下降的方向就是在该点处使值变小最快的方向

二、梯度下降的用处

【百度百科】梯度下降是迭代法的一种,可以用于求解最小二乘问题(线性和非线性都可以)。在求解机器学习算法的模型参数,即无约束优化问题时,梯度下降(Gradient Descent)是最常采用的方法之一,另一种常用的方法是最小二乘法。在求解损失函数的最小值时,可以通过梯度下降法来一步步的迭代求解,得到最小化的损失函数和模型参数值。反过来,如果我们需要求解损失函数的最大值,这时就需要用梯度上升法来迭代了。在机器学习中,基本的梯度下降法发展了两种梯度下降方法,分别为随机梯度下降法和批量梯度下降法。
具体的梯度下降知识可参考:梯度下降算法

三、梯度下降算法分析学习

3.1 求梯度

在上篇文章中我们得出了最小二乘项的代价函数(不好理解的话,可以理解为极大似然估计时,某个部分必须取得极小值,它被称为代价函数):
J ( θ ) = 1 2 i = 1 m ( y ( i ) θ T x ( i ) ) 2 J(\theta)=\frac{1}{2} \sum_{i=1}^{m}\left(y^{(i)}-\theta^{T} x^{(i)}\right)^{2} 其中, m m 代表样本个数, y ( i ) y(i) 表示第 i i 个样本的标签值(就是我们高中数学的因变量), θ \theta 的转置表示各个特征的权重参数的矩阵, x ( i ) x(i) 表示各个特征的取值(就是自变量)。
我们知道可以用数学方法直接求出代价函数的极小值,进而求出权重参数为:
θ = ( X T X ) 1 X T y \theta=\left(X^{T} X\right)^{-1} X^{T} y 上式中的参数 θ \theta 是特征的权重参数向量,如果有5个特征,它就对应着5个元素,如果它有100个特征,对应着100个元素。
在用梯度求解时的代价函数与直接求法有一点小区别,代价函数要除以样本个数,言外之意,我们的代价函数不会因为样本个数太多,而变得越大吧,应该不受样本个数的影响吧,因此,微调后的代价函数为:
J ( θ ) = 1 2 m i = 1 m ( y ( i ) θ T x ( i ) ) 2 J(\theta)=\frac{1}{2 m} \sum_{i=1}^{m}\left(y^{(i)}-\theta^{T} x^{(i)}\right)^{2}
如何用梯度下降来求权重参数的向量呢? 还是从概念入手,首先得求出梯度来吧,说白了就是求出代价函数的偏导数。为什么是偏导数呢?因为就像上面说的,如果有100个特征,那可是对应着100个权重参数的,自然要对每个 θ \theta 求导数,也就是含有多个自变量的函数求导数,也就是求偏导。
J ( θ ) θ = 1 m i = 1 m ( y ( i ) θ T x ( i ) ) x ( i ) \frac{\partial J(\theta)}{\partial \theta}=-\frac{1}{m} \sum_{i=1}^{m}\left(y^{(i)}-\theta^{T} x^{(i)}\right) x^{(i)}
其中 θ j \theta_{j} 表示第 j j 个特征的权重参数, x ( i ) x^{(i)} 表示第 i i 个样本的第 j j 个特征的权重参数。

3.2 参数迭代公式

每次调整一点点,不能一次调整太多,调整的系数称为学习率,因此每次参数的调整迭代公式可以写为如下所示:
θ j = θ j ( 1 m i = 1 m ( y ( i ) θ T x ( i ) ) x j ( i ) ) \theta_{j}^{\prime}=\theta_{j}-\left(-\frac{1}{m} \sum_{i=1}^{m}\left(y^{(i)}-\theta^{T} x^{(i)}\right) x^{(i)}_{j}\right) 其中 θ j \theta_{j}^{\prime} 表示第 t + 1 t+1 个迭代时步的第 j j 个特征的权重参数, θ j \theta_{j} 为第 t t 个迭代时步的第 j j 个特征的权重参数。相减是因为梯度下降,沿着导数求得的反方向

3.3 应用技巧

观察上式,权重参数的迭代公式,如果我们参与计算的所有样本为 m m 个,如果样本个数为10万个,共有10个特征,共需要迭代1万步,可想而知这个计算量得多大呀?10万 * 10 * 1万 = 1e10。因此,在实际的应用中,往往选取10万个样本中的一小批来参与本时步的迭代计算,比如每次随机选取20个样本点,再乘以一个学习率,即下面的公式:
θ j = θ j + α 1 20 i = 1 20 ( y ( i ) θ T x ( i ) ) x ( i ) \theta_{j}^{\prime}=\theta_{j}+\alpha \frac{1}{20} \sum_{i=1}^{20}\left(y^{(i)}-\theta^{T} x^{(i)}\right) x^{(i)} 这样的计算量就小很多了吧,因此在机器学习中,每个时步要想让所有的样本都参与计算,往往是不可取的,相对应的,是随机选取一小批数据来参与当前时步的迭代计算,才是上策。

四、总结

        在最小二乘项中的两种求解方法:直接发和梯度下降法,而在现实中,往往更复杂的模型是不可能直接求出权重参数的,更可能是通过梯度下降的方法求权重参数。当然!!!这两种方法都相同的是:建立模型—>得到目标函数—>求解样本的似然函数—>然后极大对数似然估计求参数—>获取代价函数
        除了梯度下降算法之外还有批量梯度下降(BGD)、随机梯度下降(SGD),这里就不一一介绍了,具体可参考此博文,叙述的比较详细。

发布了213 篇原创文章 · 获赞 303 · 访问量 49万+

猜你喜欢

转载自blog.csdn.net/Jiajikang_jjk/article/details/99731119