批量梯度下降法(Batch Gradient Descent)

批量梯度下降:在梯度下降的每一步中都用到了所有的训练样本。

思想:找能使代价函数减小最大的下降方向(梯度方向)。

    ΔΘ = - αJ      α:学习速率

 

梯度下降的线性回归

  线性模型的代价函数:

    

 

  对于更新项,为什么是 - α▽J :

  Θ如果在极值点右边,偏导大于0,则Θ要减去偏导的值(Θ偏大,减去一个正值)

  Θ如果在极值点左边,偏导小于0,则Θ要减去偏导的值(Θ偏小,减去一个负值)

 

  实现方法:同步更新每个Θ

  特点:当α过小时,梯度下降算法收敛得很慢(步长小)。当α过大时,可能会越过最低点,甚至发散(步长太大)。

     确定α之后,在算法随后的运行过程中,我们没有必要另外减小α的值,因为梯度下降算法能够自动减小步长。

     随着算法的进行,越接近局部最小值点,偏导的那一项越小,Θ的变化量也就越小。

  图中可以看出,初始Θ取粉色点所在的值,随着算法的进行步长越来越小。所以在算法运行过程中我们可以保持α固定不变,算法会自动收敛到局部最小值。

 

 

梯度检验(Gradient Checking)

  当对一个比较复杂的模型使用梯度下降算法时,可能存在一些不易察觉的错误。有时候cost虽然看上去在不断减小,但是最终结果可能并不是最优解。为发现以及避免这些错误的出现,我们采取一种叫做梯度检验的方法(数值计算梯度)。

            

注意:在代码中,梯度检验部分的代码比较耗时,所以仅在检验的时候使用,检验完就及时注释掉。

 

posted on 2017-07-13 21:53  J_K_Guo  阅读(1379)  评论(0编辑  收藏  举报