梯度下降法

在学习梯度下降法之前,我们得先明确一件事情。那就是梯度下降法在机器学习领域中并不是一个类似KNN的机器学习算法,
而是一个基于搜索的最优化方法。梯度下降法能够使一个损失函数最小化,而梯度上升法则是使一个效用函数最大化。
那什么是梯度呢?从数学方面来说,梯度是一个向量。我们在这里就以一个一元函数y=f(x) 为例,该一元函数在定义域中有可导。
我们知道对于一个一元函数来说,导数dy/dx的几何意义就是在某点切线的斜率。当切线的斜率大于0,则函数值沿X轴正方向增大,
反之若斜率小于0,则函数值沿X轴负方向增大。所以我们也可以说导数代表着方向,对应函数增大的方向。而在多元函数中,我们就
需要对多个‘x’求偏导,如y=f(x1,x2,…xn),对其各个x求偏导所组成的向量[dy/dx1,dy/dx2,…dy/dxn]就是在某点的梯度。
在这里,我们就知道了导数也就是我们所说的梯度。在多元函数中,梯度代表着方向,对应函数增大的方向。
为了方便可视化,我们拿一个二次函数当做例子来解释梯度下降法。二次函数为y=(x-2.5)*2+3.0。
函数部分如图1:
梯度下降法_第1张图片
在这里我们会随机选取一个起始点,然后求得该点所对应的梯度dy/dx。在上面已经说到,梯度的方向对应着函数增大的方向,那么梯度的反方向就对应着函数减小的方向,即-dy/dx。当我们的x值向着梯度的反方向移动,函数逐渐减小,也就是说逐渐的逼近函数的最小值。为了控制x的每次减小的幅度,我们往往在梯度前面乘上一个小于1的正数η,我们称η为学习率。这就类似于一个在二次函数曲线似的某一个位置放下一个小球,小球会一直往曲线最低处靠近,直至静止于最低处。则我们就可以得出一个式子。X=X-η(dy/dx),我们也 称η(dy/dx)为步长 ,每次随着梯度dy/dx值的不同,步长的值也有不同。我们就可以通过梯度的值来确定下一个走到的X的值。另外,在二次函数中,或者是说在一元函数中,梯度的方向也可以说就是正负号,如果在某点的梯度>0,那y就沿该点x坐标的正方向(右边)增大,沿该点x坐标的负方向(左边)减小。梯度<0则相反。 比如,图1中的二次函数。在X<2.5时,斜率<0,也就是说梯度<0,则y就沿着该点的x坐标的负方向增加,正方向减小。那如果我们要得到函数的最小值,也就是要往该点的正方向走,即往右边走。如图2:
梯度下降法_第2张图片
在图2中,我们选取x坐标为0的一个点,图中红色的 * 号是结束一次梯度下降法后,所取得的每个经过的点的位置,回到这个式子“X=X-η
(dy/dx)”,每次程序运行这一个,都会找到一个新的X,即会找到一个新的点,再通过这个点进行新的梯度判断,循坏往复直到到达最低点!我们需要注意的是这个η,当η的值过大,就会出现跳度过大的情况,即如图3:
梯度下降法_第3张图片
但是还会会根据判断新的位置点梯度的方向,再次向最低点靠拢。对于梯度下降法就简单的介绍到这里了,下次博客会具体从底层实现编写利用梯度下降法求出二次函数的最小值!本人是第一次写博客,还希望大家多多包涵啊!
本文的素材来自于慕课网的liuyubobobo老师的课程!推荐大家去听哦,简单易学!

你可能感兴趣的:(数据挖掘和人工智能)