2.7 梯度下降法
梯度下降法(Gradient Descent,GD)是一个最优化算法,常用于机器学习和人工智能中递归性逼近最小偏差模型。
2.7.1 梯度下降法的作用
梯度下降法是机器学习中常见的优化算法之一,梯度下降法有以下几个作用。
(1)梯度下降法是迭代法的一种,可以用于求解最小二乘问题。
(2)在求解机器学习算法的模型参数,即无约束优化问题时,主要有梯度下降法和最小二乘法。
(3)在求解损失函数的最小值时,可以通过梯度下降法来一步步迭代求解,得到最小化的损失函数和模型参数值。
(4)如果需要求解损失函数的最大值,可通过梯度上升法来迭代。梯度下降法和梯度上升法可相互转换。
2.7.2 梯度下降法的直观理解
梯度下降法经典图示如图2-7所示。
图2-7 梯度下降法经典图示
假如最开始,我们在一座大山上的某处,因为到处都是陌生的,不知道下山的路,所以只能根据直觉摸索着,走一步算一步。在此过程中,每走到一个位置的时候,都会求解当前位置的梯度,沿着梯度的负方向,也就是当前最陡峭的位置向下走一步,然后继续求解当前位置的梯度,向这一步所在位置沿着最陡峭最易下山的方向走一步。不断循环求梯度,就这样一步步地走下去,一直走到我们觉得已经到了山脚。当然这样走下去,有可能我们不能走到山脚,而是到了某一个局部的山势低处。
由此,从上面的解释可以看出,梯度下降不一定能够找到全局的最优解,有可能是一个局部的最优解。当然,如果损失函数是凸函数,梯度下降法得到的解就一定是全局最优解。
梯度下降法的核心思想可以归纳为以下几点。
(1)初始化参数,随机选取取值范围内的任意数。
(2)进行如下迭代操作。
• 计算当前梯度。
• 修改新的变量。
• 计算,朝最陡的下坡方向走一步。
• 判断是否需要终止,如果不是,则返回计算当前梯度。
(3)得到全局最优解或者接近全局最优解。
2.7.3 梯度下降法算法描述
下面是梯度下降法的算法步骤。
(1)确定优化模型的假设函数及损失函数
对于线性回归,假设函数为:
其中,分别为模型参数、每个样本的特征值。
对于假设函数,损失函数为:
(2)相关参数初始化
主要初始化θi、算法迭代步长α、终止距离ζ。初始化时可以根据经验,将θ初始化为0,步长α初始化为1。当前步长记为φi。当然,也可随机初始化。
(3)迭代计算
计算当前位置损失函数的梯度,对于θi,其梯度表示为:
计算当前位置下降的距离:
判断是否终止。
确定是否所有θi的梯度下降距离φi都小于终止距离ζ,如果都小于ζ,则算法终止,此时θi的值为最终的结果,否则进入下一步。
更新所有的θi,更新后的表达式为:
令上式的,更新完毕后转入步骤(1)。
由此可看出,当前位置的梯度方向由所有样本决定,上式的目的是便于理解。
2.7.4 梯度下降法的缺点
梯度下降法有以下几个缺点。
(1)靠近极小值时收敛速度减慢。
(2)直线搜索时可能会产生一些问题。
(3)可能会以“之”字形下降。
梯度概念也有以下几个需注意的地方。
(1)梯度是一个向量,即有方向有大小。
(2)梯度的方向是最大方向导数的方向。
(3)梯度的值是最大方向导数的值。
2.7.5 如何对梯度下降法进行调优
实际使用梯度下降法时,各项参数指标不能一步就达到理想状态,对梯度下降法调优主要体现在以下几个方面。
(1)算法迭代步长α的选择:在算法参数初始化时,有时根据经验将步长初始化为1。实际取值取决于数据样本。可以从大到小,多取一些值,分别运行算法查看迭代效果,如果损失函数在变小,则取值有效。如果取值无效,说明要增大步长。但步长太大,有时会导致迭代速度过快,错过最优解。步长太小,迭代速度慢,算法运行时间长。
(2)参数的初始值选择:初始值不同,获得的最小值也有可能不同,梯度下降有可能得到的是局部最小值。如果损失函数是凸函数,则该值一定是最优解。由于有局部最优解的风险,因此需要多次用不同初始值运行算法,最终选择使损失函数最小化的初值。
(3)标准化处理:由于样本不同,特征取值范围也不同,导致迭代速度慢。为了减小特征取值的影响,可对特征数据标准化,新的数学期望为0,新方差为1,可节省算法运行时间。
2.7.6 随机梯度下降和批量梯度下降的区别
随机梯度下降(Stochastic GD,SGD)和批量梯度下降(Batch GD,BGD)是两种主要的梯度下降法,其目的是增加某些限制来加速运算求解过程。
下面通过介绍两种梯度下降法的求解思路,对其进行比较。
假设函数为:
损失函数为:
其中,m为样本个数,j为参数个数。
随机梯度下降法的求解思路
随机梯度下降法中损失函数对应的是训练集中每个样本的粒度。
损失函数可以写成如下形式:
对每个参数θ按梯度方向更新θi:
随机梯度下降法通过每个样本来迭代更新一次。
随机梯度下降法伴随的一个问题是噪声较批量梯度下降法要多,使得随机梯度下降法并不是每次迭代都向着整体最优化方向。
批量梯度下降法的求解思路
首先得到每个θ对应的梯度:
由于是求最小化风险函数,所以接下来按每个参数θ的梯度负方向更新θi:
从上式可以看到,它得到的虽然是一个最优解,但每迭代一步,都要用到训练集所有的数据,如果样本数据很大,这种方法迭代速度就很慢。
相比而言,随机梯度下降法可避免这种问题。
随机梯度下降法、批量梯度下降法相对来说都比较极端,其简单对比如表2-4所示。
表2-4 随机梯度下降法和批量梯度下降法对比
下面介绍能结合两种方法优点的小批量梯度下降法。
小批量(Mini-Batch)梯度下降法的求解思路
对于总数为m的样本数据,选取其中的n(1<n<m)个子样本来迭代。其参数θ按梯度方向更新θi:
2.7.7 各种梯度下降法性能比较
表2-5简单对比了批量梯度下降法(BGD)、随机梯度下降法(SGD)、小批量梯度下降法(Mini-batch GD)和在线梯度下降法(Online GD)的区别。
表2-5 不同梯度下降法性能比较
这里介绍一下Online GD。
Online GD与Mini-batch GD、SGD的区别在于,所有训练数据只用一次,然后丢弃。这样做的优点在于可预测最终模型的变化趋势。
Online GD在互联网领域用得较多,比如搜索广告的点击率(CTR)预估模型,网民的点击行为会随着时间改变。用普通的BGD算法(每天更新一次)一方面耗时较长(需要对所有历史数据重新训练);另一方面,无法及时反馈用户的点击行为迁移。而Online GD算法可以实时地依据网民的点击行为进行迁移。