梯度下降python编程实现,python实现梯度下降算法
前言梯度下降法是机器学习中最常用的优化方法之一,常用于求解目标函数的极值。基本原理很简单:可以沿着目标函数梯度递减的方向搜索最小值(也可以沿着梯度递增的方向搜索最大值)。在《【Python机器学习】梯度下降法(一)》中,简单分析了学习率对搜索过程的影响,发现:
当学习率较小时,收敛到极值的速度较慢。当学习率较高时,在搜索过程中容易出现波动。在《【Python机器学习】梯度下降法(二)》中,简单分析了冲动对搜索过程的影响,发现:
当学习率较低时,适当的动量可以加快收敛速度。当学习速率较高时,适当的动量可以起到减小收敛时振荡幅度的作用。接下来介绍梯度下降法中的第三个超参数:衰变。
学习率衰减因子:衰减
从上图可以看出,当学习率较高时,搜索过程中容易出现休克,休克的根本原因是搜索步长太大。
当用梯度下降法求解目标函数func(x)=x * x的最小值时,更新公式为x=v,其中x的更新量v为v=-dx * lr,dx为目标函数func(x)对x的一阶导数,如果lr能随迭代周期衰减减少,则可减少搜索步长以减缓冲击。学习率衰减因子诞生了:
Lr_i=lr_start * 1.0/(1.0 decay * i)以上公式为学习率衰减公式,其中Lr_i为第I次迭代时的学习率,lr_start为原始学习率,decay为[0.0,1.0]之间的小数。
衰减越小,学习率衰减越慢。当decay=0时,学习率保持不变。衰减越大,学习率下降越快。当decay=1时,学习率下降最快。
从各行可以看出,下降越大,学习率衰减越快。第三四行可以看出衰变确实可以减缓震荡。学习率为1.0衰减[0.0,0.001,0.1,0.5,0.9,0.99],迭代周期为300。
可以看出,当decay为0.1时,经过50次迭代,学习率已经从1.0急剧下降到0.2。如果decay设置的太大,可能会收敛到一个不是极值的地方。
文章转载自:https://uqer.io/community/share/5820515e228e5ba8f5571953,欢迎热烈讨论!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。