梯度下降是迭代法的一种,可以用于求解最小二乘问题(线性和非线性都可以)。在求解机器学习算法的模型参数,即无约束优化问题时,梯度下降(Gradient Descent)是最常采用的方法之一,另一种常用的方法是最小二乘法。在求解损失函数的最小值时,可以通过梯度下降法来一步步的迭代求解,得到最小化的损失函数和模型参数值。反过来,如果我们需要求解损失函数的最大值,这时就需要用梯度上升法来迭代了。在机器学习中,基于基本的梯度下降法发展了两种梯度下降方法,分别为随机梯度下降法和批量梯度下降法。
简单地说,梯度下降就是沿着沿梯度下降的方向求解极小值时的自变量。
关于梯度的知识可参考《多变量微积分5——梯度与方向导数》
梯度下降的原理
二元函数w(x,y) = (x – 10)2 + (y – 10)2,其梯度:
如果在w上选取一点(xn, yn),w沿着梯度下降方向,在x方向上的变化率:
自变量x沿着梯度下降方向的变化:
反复迭代,在达到临界点时,就可求得w在极小值时的x;同理可求得在极小值时的y。
问题是这样做实在太慢,迭代过程及其耗时,所以人们在此基础上设计出更加快速的处理办法——舍弃精确值,求得可接受的近似值。
梯度下降法
计算过程
实际应用中,梯度下降法增加了“学习率”的概念:
上式中的α就是学习率,也称为“步长”。梯度下降算法每次迭代,都会受到学习速率α的影响。
本节剩余内容摘自 https://blog.csdn.net/chenguolinblog/article/details/52138510
如果α较小,则达到收敛所需要迭代的次数就会非常高;如果α较大,则每次迭代可能不会减小代价函数的结果,甚至会超过局部最小值导致无法收敛。如下图所示情况:
根据经验,可以从以下几个数值开始试验α的值,0.001 ,0.003, 0.01, 0.03, 0.1, 0.3, 1, …
α初始值位0.001, 不符合预期乘以3倍用0.003代替,不符合预期再用0.01替代,如此循环直至找到最合适的α,然后对于这些不同的 α 值,绘制 J(θ)随迭代步数变化的曲线,然后选择看上去使得 J(θ)快速下降的一个α值。观察下图,可以发现这2种情况下代价函数 J(θ)的迭代都不是正确的:
根据经验,可以从以下几个数值开始试验α的值,0.001 ,0.003, 0.01, 0.03, 0.1, 0.3, 1, …
α初始值位0.001, 不符合预期乘以3倍用0.003代替,不符合预期再用0.01替代,如此循环直至找到最合适的α,然后对于这些不同的 α 值,绘制 J(θ)随迭代步数变化的曲线,然后选择看上去使得 J(θ)快速下降的一个α值。观察下图,可以发现这2种情况下代价函数 J(θ)的迭代都不是正确的:
第一幅图,曲线在上升,明显J(θ)的值变得越来越大,说明应该选择较小的α
第二幅图,J(θ)的曲线,先下降,然后上升,接着又下降,然后又上升,如此往复。通常解决这个问题,还是选取较小的α。
闹心事太多,先到这里,待续。。。。
批量梯度下降法
随机梯度下降法
小批量梯度下降法
示例及码实现
作者:我是8位的
出处:http://www.cnblogs.com/bigmonkey
本文以学习、研究和分享为主,如需转载,请联系本人,标明作者和出处,非商业用途!
扫描二维码关注公众号“我是8位的”
原文地址:https://www.cnblogs.com/bigmonkey/p/8711430.html