梯度下降~ML

  先得学会前一篇文章的代价函数,再来理解梯度下降。

  我们要求出代价函数中 J(θ0,θ1) 为最小值时的θ0和θ1,梯度下降就是一种常见的求解方式。

  操作:

  • 初始化θ0,θ1
  • 改变θ0,θ1使得J(θ0,θ1)取最小值或是局部最小值

  用两个图解释一下为什么还有局部最小值的情况

 

  两块红色的区域可以理解成山,梯度下降可以理解成就是为了下山。但是可能有两个地方能到达山底。

  而梯度下降的流程

  • 站在一个点
  • 环绕四周,找到坡度最大方向
  • 向那个方向走一段距离
  • 到达下一个点
  • 重复第一步

  而第二个图可以看出我们选取的起始点相差很少,但是却可能得到不同的结果。

  下面我们给出梯度下降算法:

  反复执行  (for j = 1 and j = 0) 

  • α :学习速率(可以理解为下山的速度)
  •  : 导数项

  值得注意的一点是这个梯度下降算法必须保证Simultaneous update(同步更新) 意思为:

  

  而这种是错误的方式:

  梯度下降函数解析

  我们把函数改写:(我们用一个θ来表示)

  

  这种写法和我们前面的写法是一样的,不过后面的式子表达的是导数,所以我们在数学中用d来表示。

  

  这个图就是上面的函数的一个状态,斜率是为正的,所以我们θ1减去一个正数应该左移。就会越来越接近底部。反之同理。

  现在我们来讨论一下α的过大或过小

  α过小

  我们之前说过α是梯度下降的速率,如果过小的话,会下降的非常慢。

  α过大

  可能会越过最低点,无法收敛,甚至发散。

  为什么会导致发散呢?

  原因:有可能α过大到跑到比低点到原点的距离还远的距离,就会发现斜率变大了,整个速率又变大了,就会离最低点越来越远。

  现在我们讨论一个特殊情况,如果刚开始的时候θ就在局部最低点它会怎么移动呢?

  答案是不动,因为在局部最低点的时候斜率为0,不管你下降速率多大他们的乘积还是0,所以是不会变的。

  现在我们讨论一下斜率

    用上面图的例子,我从一个位置梯度下降到另一个位置,他的斜率是不是稍微缓和了一下。因为下降速率是固定值,所以下降的就会越来越慢。

posted @ 2017-05-25 11:10  Sooda  阅读(239)  评论(0编辑  收藏  举报