如何手写梯度下降法

梯度下降法是机器学习的一种学习方法。我觉得非常妙。通过一个一维的问题用梯度下降法,理解学习过程是怎样的。

假设g是目标函数f的梯度函数,w0是初始值,r是学习速度, g(w)=0时候,认为找到目标函数的局部极小点,设置精度p=0.001。

1.v=g(w0);

2.v < p 这里一般用 abs(v)

3.w1= w0 - v*r ;

       在这里得到新的w值重复1,2步骤。这里为什么是w0-v*r 这个是泰勒公式在梯度下降法中的应用。这一步抽象看作一个直角三角形去拟合一条曲线。图像抽象如下。

可以去调节r,就是增大或者缩小学习速度,看看这个红色的三角形的变化。





如果r设置过大,可能条件一就不能满足,条件二算出来的w也不算最优。

如果r太小,又学习太慢。

还有一个问题,收敛的条件,就是迭代到什么时候为止呢?


1.设置精度,当两次迭代的差异小于多少的时候,默认学不动了,学习停止。

  (带入梯度函数直接求,一维的用绝对值,二维以上的用范数。这里参考别人的代码觉得这种方法简单)

2.设置最大迭代次数

你可能感兴趣的:(如何手写梯度下降法)