梯度下降是机器学习中寻找极值点的基础算法,它的思想也很简单。想象你站在山巅,山脉的起伏就带代表着,想要到达山谷的办法就是寻找下山最陡峭的地方,沿着这条路向下走,直到无法再向下。
在介绍梯度下降算法前,我们先直到什么是梯度,而梯度我们又应该先知道什么是导数
1.导数
这是导数的标准定义,导数表示变量在指定位置的变化程度,变化快慢
导数是高中就学习过的知识,也是微积分中重要的微分。导数的大小代表了函数的平缓或陡峭。
2.偏导数
当我们把函数扩展到N维欧氏空间,变量的增多催生了偏导数的概念,偏导数表示函数在某一个轴上的变换快慢。
3.方向导数
偏导数只能表示了函数在某一轴方向上的变化快慢,那考虑n维空间中的某一方向的变化快慢,就引入了方向导数的概念。
方向导数是一个数,它反映的就是f在l方向上的变化率。
考虑2维空间的方向函数推导
4.梯度
方向导数表示了函数在某一个方向的变换快慢,那我们想在n维空间中找到函数在哪个方向的变化最多怎么办?
为了解决这个问题引入了梯度概念。
梯度表示函数在变量空间的某一处,沿着哪个方向的变化率最大。
考虑2维空间
总结一下:
1.梯度是一个向量,即有方向,有大小
2.梯度的方向驶最大方向导数的方向
3.梯度的大小是最大方向导数的值
5.梯度下降算法
很容易联想,既然我们有了梯度,就有了在数据集中解决寻找极值点的办法。
我们需要的就是随机生成在函数上的一个点,然后寻找这个点在某个方向上的梯度方向,每次沿着梯度方向的反方向进行更新,知道这个点收敛。
这是我们一直函数方程的办法,但事实上我们不可能根据完全模拟出函数的方程,如果可以的话,我们也就不需要这么麻烦的办法去找极值了。我们可以采用求导的办法去寻找极值点。
考虑,我们对数据集的拟合方程为:
我们定义损失函数为:
因此有
前面提到梯度下降算法的更新为
由上面两式可以得到,针对离散点击的更新规则为
即
考虑把求和公式拿到外面