默认你已经了解了导数,偏导,梯度和方向导数的概念
直观理解
比如我们在一座大山上的某处位置,这时候突然阴云密布,我们想要快速的下山,但是我们不知道怎么下山,于是决定走一步算一步,可是怎么走一步算一步呢?有种方法是这样我们先环顾下四周(360度)看一下哪里山坡最陡,然后向最陡峭的地方走一步,一致重复这个过程,按照这个方法一直到走到最低点(这个最低点事局部最优,因为按照这种方法我们是有可能不能走到山脚,而是到了某一个局部的山峰低处)。现在到数学上来,环顾四周看的其实就是这个山坡的坡度(斜率)也就是在这一点的方向导数,然后选择最陡峭的也就是在该点的负梯度方向(不知道为什么的同学,可以看下这篇https://blog.csdn.net/ws_6868/article/details/86665338)。
从上面的解释可以看出,梯度下降不一定能够找到全局的最优解,有可能是一个局部最优解。当然,如果损失函数是凸函数,梯度下降法得到的解就一定是全局最优解。
必要的概念
1. 输入特征(input feature): 又叫做输入变量,例如在预测房价和房屋面积的问题中,就是用来训练模型的房屋面积。
2. 输入目标 (input target): 又叫做输入的标签,例如在预测房价和房屋面积的问题中,就是用来训练模型和输入特征成对出现的房价。
3.一个training example(,):在监督学习中成对出现,一个是feature,另一个对应的代表标签。例如(89,100),(123,132)分别表示89平米的房子的价格是100万,123平米的房子的价格是132万。
4. 训练集(training set): 由若干个 training example 组成。例如[(89,100),(123,132),(110,120)]。
5. 假设函数(hypothesis function):在监督学习中,为了拟合输入样本,而使用的假设函数,记为hθ(x)。简单的理解就是给定x去预测y,是x -> y的一个映射。整个学习或者叫训练过程就是为了调节hθ(x)的参数,使得预测值y 与 输入的标签 更加的接近。
下图是个简单的模型示意图:
6. 损失函数(cost function):为了评估模型拟合的好坏,也就是评估hypothesis function好不好。损失函数越小,意味着拟合程度越好,对应的模型参数即为最优参数(这里先不说过拟合的现象)。在线性回归中,损失函数通常为样本输出和假设函数的差取平方。例如:
其中xi表示第i个样本特征,yi表示第i个样本对应的标签,hθ(xi)为hypothesis function也就是第i个样本的预测值。
下面进入正题梯度下降法
看完上面的概念,我们知道我需要最小化 cost function 从而使得模型最优。继续看下面这个图
我们想要 最小化cost function , 它是关于 ,的二元函数。上面图像相当于三维坐标系中的x轴,相当于三维坐标系中的y轴,相当于三维坐标系中的z轴,曲面的最低点也就是cost function的最优点。梯度下降法最简单理解就是首先选择一个,,然后一直改变,去降低直到找到最小值点(但有可能找到只是极小值点)就像上面图像的过程一样。具体怎么改变,呢?用的就是下面的公式
不断的重复整个过程,直到收敛,也就是,不在变化,与此同时,也会到达局部最优点。
这里的代表学习率(learning rate),决定着了在梯度下降迭代的过程中,每一步前进的长度,代表步长。
代表对和的偏导数也就是他的梯度gradf(,) = ,指明了下降的方向(负梯度的方向)。
这里需要特别注意的是
1 梯度的方向是由所有样本决定的。
2 更新,的值的时候要同时更新。
为了更清楚的解释梯度下降是怎么工作的?
我们假设到二维的情况
假设 只有一个变量,所以梯度下降法如下
下图表示的意思就是开始选择一个,然后我们要计算这点导数也就是取这一点的切线就是上图红色的直线,这条红色直线的斜率这就是在该点的导数,斜率为正所以它有正导数,因此θ1更新后等于θ1减去一个正数乘以α。α 也就是学习率也是一个正数。所以相当于我们将θ1向左移,使θ1变小,我们可以看到这么做是对的,实际上往这个方向移动确实更接近那边的最低点。
另外一边也是一样,斜率为负,θ1更新后等于θ1减去一个负数乘以α。所以相当于我们将θ1向右移,使θ1变大,我们可以看到这么做也是对的。
学习率的问题
如果学习率过小,收敛就会非常慢。就是用一个比较小的数乘以更新的值,就像从起点开始走,但是由于α 太小,因此只能迈出一个小碎步,结果就是只能一点点地挪动去努力接近最低点,这样就需要很多步才能到达最低点。
如果学习率过大,可能会越过最低点,可能无法收敛,甚至发散 。比如我们从已经接近最低点的点开始,就是图中最低点稍微左边那个店,因此导数指向右侧,但如果α 太大的话,我会迈出很大一步超过了最低点。现在代价函数变得更糟,因为离这个最低点越来越远,然后导数指向左侧,如果我的学习速率过大,我又会移动一大步(这里的一步比上步更大,具体为什么可以看下后面写的固定学习率的问题),从这点一下子变到左边更远的点,如此进行下去,直到离最低点越来越远。所以如果α太大,它会导致无法收敛,甚至发散。
固定学习率是否能够达到局部最优?
答案是可以的,首先假设在那个品红色的点开始,然后更新一步梯度下降,到了第一个绿色的点。如果我再更新一步,你会发现导数也即斜率相比于在品红点是没那么陡的,也就是随着我接近最低点,导数越来越小直到接近零。所以梯度下降一步后,新的导数会变小一点点,我再进行一步梯度下降时,导数项更小,θ1更新的幅度就会更小,然后移动更小的一步,随着梯度下降法的运行,移动的幅度会自动变得越来越小,直到收敛到局部极小值。
多个变量(输入特征不止一个)
参考资料
1. https://www.cnblogs.com/pinard/p/5970503.html
2. https://www.coursera.org/learn/machine-learning/supplement/2GnUg/gradient-descent