梯度下降算法Gradient descent algorithm
repeat until convergence{
申明:此文章内容来自于 Doctor AndrewNG的视频,经过编辑而成
问题提出:虽然给定一个假设函数,我们能够根据cost function知道这个假设函数拟合的好不好,但是毕竟函数有这么多,总不可能一个一个试吧?因此我们引出了梯度下降:能够找出cost function函数的最小值;
梯度下降背后的思想是:开始时我们随机选择一个参数的组合(θ0,θ1,…,θn),计算代价函数,然后我们寻找下一个能让代价函数值下降最多的参数组合。我们持续这么做直到到到一个局部最小值(local minimum)。直白的话说,梯度下降原理:将函数比作一座山,我们站在某个山坡上,往四周看,从哪个方向向下走一小步,能够下降的最快。如图所示。
梯度下降示意图
具体做法:
(1)先确定向下一步的步伐大小,我们称为Learning rate;
(2)任意给定一个初始值:;
(3)确定一个向下的方向,并向下走预先规定的步伐,并更新初始值;
(4)当下降的高度小于某个定义的值,则停止下降;
更新初始值的方法:用 θj 减去α乘以这一部分,如下图。关于这个公式,我来详细讲解一下(1)符号 := 表示赋值 这是一个赋值运算符。(2) α 是一个数字 被称为学习速率 什么是α呢? 在梯度下降算法中 它控制了 我们下山时会迈出多大的步子。
梯度下降的参数更新
直白解释上述公式:上述公式就是给出更新θj的方法使得其逼近θj’。期望结果是:当θj大于θj’时,需要减少θj;当θj小于θj’时,需要增加θj,当θj等于θj’时,θj保持不变。那这个公式如何做到呢?首先α是个正数,其次J(θ0,θ1)是代价函数,而对代价函数的导数θj,就是说代价函数在θj的点的斜率,也就是刚好与函数曲线相切的这条直线。
当θj大于θj’时,J(θ0,θ1)的导数是正数,应用公式θj减去一个正数,此时θj变小;当θj小于θj’是,J(θ0,θ1)的导数是负数,应用公式θj减去一个负数,此时θj变大;当θj等于θj’是,J(θ0,θ1)的导数是0,应用公式θj减去0,此时θj把持不变,从而完成θj的更新。这也解释了为什么即使学习速率α 保持不变时 梯度下降也可以收敛到局部最低点。
那么α发挥什么作用呢?
根据上述公式,他主要在调节θj逼近最小值得速率。如果α太小,即选的学习速率太小,结果就是一点点地挪动去努力接近最低点,这样就需要很多步才能到达最低点,所以如果α太小的话,可能会很慢 ,因为它会一点点挪动,它会需要很多步才能到达全局最低点。示意图如下:
学习率低导致逼近速度慢
如果α太大,那么梯度下降法可能会越过最低点,甚至可能无法收敛,下一次迭代又移动了一大步,越过一次,又越过一次,一次次越过最低点,直到你发现实际上离最低点越来越远,所以,如果α太大,它会导致无法收敛,甚至发散,示意图如下:
学习率高导致overshoot the minimum
特点:
(1)初始点不同,获得的最小值也不同,因为我们并没有尝试完所有的参数组合,所以不能确定我们得到的局部最小值是否便是全局最小值(global minimum)
(2)当我们接近局部最低时,导数值会自动变得越来越小,所以梯度下降将自动采取较小的幅度。
总结一下,在梯度下降法中 当我们接近局部最低点时,梯度下降法会自动采取,更小的幅度 这是因为当我们接近局部最低点时 很显然在局部最低时导数等于零。所以当接近局部最低时 导数值会自动变得越来越小 所以梯度下降将自动采取较小的幅度 这就是梯度下降的做法 所以实际上没有必要再另外减小α 这就是梯度下降算法。
作者:黄泽武
链接:http://www.jianshu.com/p/492e1c9ddf45
來源:简书