梯度下降是机器学习常用的优化方法之一,用来求解无约束目标函数(损失函数)的极值。但是它收敛到的是局部最小值,当函数是凸函数时,可以收敛到全局最小值。当我们在模型中运用梯度下降法求解时,其实就是求解在该模型损失函数取得最小值时所对用的模型参数值是多少。当然梯度下降也可以单纯的用来求解一个函数的极值。
梯度是函数值上升变化最快的方向,可以求得函数的最大值;所以负梯度就是函数值下降变化最快的方向,可以求得函数的最小值。因为梯度指引的只是一个方向,具体要变化多少就需要步长,也就是学习率。下面是梯度下降算法的描述:
数据集为D = {(x1, y1), (x2, y2),......, (xm, ym)}, 为损失函数, θ(一个向量)为模型需要求解的参数。
初始化参数:模型需要求得的参数
迭代更新参数, 其中 i 为参数的分量,alpha为学习率,为所有样本的损失:
Repeat:
当损失函数的值小于一个阈值时,就停止迭代。
下面解释一下为什么梯度下降能收敛到局部最小值或全局最小值,这里用只有一个变量的线性回归损失函数来举例解释:
假如θ1初始化的地方如下图所示,在函数的右边。这时梯度的大小为正数,所以θ1减去一个正数就会减小,往中间移动。
假如θ1初始化的地方如下图所示,在函数的左边。这时梯度的大小为负数,所以θ1减去一个负数就会增加,也往中间移动。
所以最终都会往中间最小值的地方移动。
其次讲一下为什么学习率为固定值,依然能够收敛到局部最小值或全局最小值:
这是因为损失函数的导数在变。如上图所示,在往中间收敛的时候,损失函数的导数也是在不断减小的,所以参数的变化程度会越来越小,就感觉像步长变小了。
在这里举一个简单的线性回归,利用梯度下降求解模型参数的?:
线性回归的假设函数为, 其中θ0和θ1就是模型的参数;:
损失函数为 :
初始化θ0 ,θ1= 0;
将所有的样本带入到损失函数中,然后分别对θ0和θ1求导,并同时更新θ0和θ1:
直到的值小于一个阈值,则停止迭代;
在搜索极值的过程中,学习率大小的选择很重要。
学习率太小,函数值下降收敛的速度就很慢,因为每次走的步长很小;
学习率太大,收敛的过程就会出现震荡,还有可能最终不能收敛。
下面是调整学习率的一个方法:
可以选择一系列的学习率,然后画出每个学习率和迭代次数的关系图。这个关系图也可以检查梯度下降是否正常运行,因为应该在每一次迭代都有减小。
参考链接吴恩达的视屏:https://study.163.com/course/courseMain.htm?courseId=1004570029