本系列是《玩转机器学习教程》一个整理的视频笔记。本小节主要介绍在线性回归中使用梯度下降法。
一
线性回归中的梯度下降法
前几小节为了更好的介绍梯度下降法的过程,我们将损失函数定义成二次曲线的形式。在这一小节将梯度下降法真正的应用在线性回归中。
此时将梯度下降法应用于线性回归中,相应的损失函数变成了真实值与预测值之间差值的平方之和,而参数不再是仅仅是一个theta而是一个向量θ。
- 对于简单线性回归此时的θ是包含两个参数的向量(其中一个是截距,另一个是样本唯一特征的系数);
- 而对于样本中拥有n个特征的多元线性回归问题来说,此时的θ是包含(n 1)个参数的向量(其中一个是截距,另外n个元素是样本中n个特征对应的系数)。
由于此时theta不在是一个值,因此不能用导数来表示。对于多元变量进行求导,也就是梯度值,此时梯度就是损失函数J对θ向量中每一个参数都求偏导的结果,因此此时的梯度本身也是一个向量。由于θ中是包含(n 1)个元素的向量,所以相应的梯度就是一个(n 1)维的向量。此时的梯度代表的方向和导数一样,对应的损失函数J增大的最快的方向。
此时将前面介绍的二维梯度下降法很容易的扩充到了高维空间的情况。区别只在于之前处理的导数只是一个数字,而现在处理的"导数"是一个向量,在这种情况下,梯度下降法依然是成立的。
下面看一看拥有两个参数的梯度下降法的可视化:
一圈一圈的代表的是等高线,也就是代表损失函数J的取值,越外面的圈相应的损失函数J的取值就越大,越里面的圈相应损失函数J的取值越小,在图中心位置达到J的最小值。上图的损失函数是z = x方 2y方的函数,对应的x和y是参数,z对应的是损失函数的取值。
通过上图可以看出,当我们有多个参数的时候,在每一点的位置向J取值更小的方向前进其实是有非常多的选择,但是此时梯度下降方式是损失函数J下降最快的方向,这也是每一次要求梯度,用梯度的反方向作为真正θ前进的方向的原因。
二
线性回归中梯度下降法的公式推导
前几个小节介绍的线性回归损失函数如下所示,此时使用样本中有n个特征的多元线性回归问题为例,当然简单线性回归也是一样的。
最终目标就是损失函数J,求损失函数J对θ向量的梯度:
相应的对J上对θ这个向量去求梯度值,也就是损失函数J对θ每一个维度的未知量去求导。此时需要注意,求导过程中,θ是未知数,相应的X和y都是已知的,都是在监督学习中获得的样本信息。对于最右边式子的每一项都是m项的求和,显然梯度的大小和样本数量有关,样本数量越大,求出来的梯度中,每一个元素相应的也就越大,这个其实是不合理的,求出来的梯度中每一个元素的值应该和m样本数量是无关的,为此将整个梯度值再除上一个m,相应的目标函数的式子变成了下面的式子:
将梯度除以m相当于目标函数本身变成了MSE,也就是对原来的目标函数除上m。在一些资料看到,在线性回归中使用梯度下降法要优化的目标函数在MSE基础上除以2,如果损失函数这样取的话,就会和对损失函数J求导中平方拿出来的2约掉,其实就相当于J(θ)的梯度前的系数变成1/m。这两倍的差距在实际应用过程中效果差别不大,因此使用上面的损失函数MSE或者下面在MSE基础上除以2的损失函数作为目标函数都是可以的。但是如果没有1/m的话,梯度中的元素就会特别的大,在具体编程实践中就会出现一些问题。这也是在告诉我们,当我们在使用梯度下降法来求函数的最小值的时候,有时候需要对目标函数进行一些特殊的设计,不见得所有的目标函数都非常的合适,虽然理论上梯度中每一个元素都非常大的话,我们依然可以通过调节eta(学习率)来得到我们想要的结果,但是那样的话可能会影响效率。