zoukankan      html  css  js  c++  java
  • 梯度下降~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,所以是不会变的。

      现在我们讨论一下斜率

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

  • 相关阅读:
    HashMap和Hashtable的区别
    java倒计时三种简单实现方式
    AngularJS---基本操作
    AngularJS---认识AngularJS
    Java线程面试题
    JAVA中高访问量高并发的问题怎么解决?
    Java高并发,如何解决,什么方式解决
    Map总结
    Github
    反射
  • 原文地址:https://www.cnblogs.com/SHOR/p/6902692.html
Copyright © 2011-2022 走看看