写在前面的话:部分内容来自:刘建平Pinard https://www.cnblogs.com/pinard/p/5970503.html 以及 百度百科
在求解机器学习算法的模型参数,即无约束优化问题时,梯度下降(Gradient Descent)是最常采用的方法之一,另一种常用的方法是最小二乘法。
什么叫梯度
在微积分里面,对多元函数的参数求∂偏导数,把求得的各个参数的偏导数以向量的形式写出来,就是梯度。比如函数f(x,y), 分别对x,y求偏导数,求得的梯度向量就是(∂f/∂x, ∂f/∂y)T,简称grad f(x,y)或者▽f(x,y)。对于在点(x0,y0)的具体梯度向量就是(∂f/∂x0, ∂f/∂y0)T.或者▽f(x0,y0),如果是3个参数的向量梯度,就是(∂f/∂x, ∂f/∂y,∂f/∂z)T,以此类推。
那么这个梯度向量求出来有什么意义呢?他的意义从几何意义上讲,就是函数变化增加最快的地方。具体来说,对于函数f(x,y),在点(x0,y0),沿着梯度向量的方向就是(∂f/∂x0, ∂f/∂y0)T的方向是f(x,y)增加最快的地方。或者说,沿着梯度向量的方向,更加容易找到函数的最大值。反过来说,沿着梯度向量相反的方向,也就是 -(∂f/∂x0, ∂f/∂y0)T的方向,梯度减少最快,也就是更加容易找到函数的最小值。
梯度下降法求解过程
举个例子
用口头语言去理解梯度下降
梯度下降实际就是类似于求导的概念,每次X,Y减少一丢丢,看看Z变化是啥样子。故这里有两个变量:X Y下降多少----梯度值 Z变化多少---变化值
梯度值我们正常使用 来表示 , 所以X Y的梯度值可以表示为和, 因为是已知的,所以和便也是已知的(就是对函数求个偏导)。OK,到这里便一目了然了,影响函数梯度的变量就是learningrate了,learningrate越大 X Y下降就越多,收敛就越快。
X Y一直减小,Z也跟着变。当Z变化量越来越小,就说明函数收敛了,到了极小值了(也可能极大值,那就是反向梯度了) 。那么变化量究竟要到多小,我们才能说他收敛了?那是不是得研究变化量的变化量了。其实也不用那么麻烦 就直接自己给个小一点的值吧,比如0.0000000000000001 哈哈哈哈,看个人需要。变化量越小越接近极值。
额外补充信息:
1.梯度下降法只能求出函数的局部最小值 无法求出函数的全局最小值
2.学习率(步长)不宜设置的过大,否则可能导致不收敛 即步长过大 直接迈过了局部最低点