zoukankan      html  css  js  c++  java
  • 梯度下降法

    http://blog.csdn.net/sd9110110/article/details/52921141

    上一次说到代价函数,代价函数的作用就是找到最优的参数使假设函数与实际值相差最小。而梯度下降法(Gradient Descent)就是找到最优参数的方法之一。

    一,算法思想

    这里写图片描述

    • 1.从参数的某一个(组)值开始,比如从θ0=0和θ1=0开始。
    • 2.保持该(组)值持续减小,如果是一组值就要保证他们同步更新,直到找到我们希望找到的最小值。

    过程如图,就像下山一样,从一点开始,找到最快的方法下山到最低点,在你不会摔倒的情况下,你会怎么选择下山路径呢,肯定是选择梯度最大(也就是坡度最大)的路径。这就是梯度下降法的精髓。 
    这里写图片描述

    而梯度下降法还有一个特点就是可能因为起点不同而找到完全不同的最低点。 
    这里写图片描述

    事实证明,用于线性回归的代价函数都是凸函数,就像图中一样: 
    这里写图片描述

    所以不会出现这样不同的局部最低点,都会收敛于一个最低点。

    二,更新规则

    在梯度下降法中,为了使代价函数更加容易找到最小值,我们使用以下更新规则: 
    这里写图片描述

    α为学习速率,学习速率需要控制,不能过大也不能过小。太小了很好理解,这就会使得更新次数过大,找到最低点时间过长;而太大了就会在接近最低点的时候跨过最低点,下次迭代又会越过最低点,导致无法收敛,甚至发散,就像图中这样: 
    这里写图片描述

    从公式中就能看出这是借助偏导数,使得越接近最低点的时候收敛速度越慢,就像打高尔夫球,越接近洞口用的力度就会越小,才能精确地到达我们的目标,这里目标指的就是全局最低点。当收敛于最低点时,偏导数为0,那么θ0和θ1就会停止更新,也就是知道了代价函数的最低点,并解出θ0和θ1的最优解。

    同步更新: 
    这里写图片描述 
    同步更新重点在于更新θ1时J(θ0,θ1)中θ0取的是没有更新之前的θ0。

    如果还不清楚,对比一下非同步更新应该就明白了: 
    这里写图片描述

    三,批量梯度下降法

    对于上次说到的代价函数: 
    这里写图片描述

    对于下面的线性回归方程 
    这里写图片描述 
    使用梯度下降法,经过计算后,得到的偏导数为: 
    这里写图片描述

    所以,更新规则为: 
    这里写图片描述

    我们就可以通过这个更新规则找到代价函数的最小值,从而解出θ0和θ1的最优解,并借此找到最佳拟合直线。

    从上面就能看出,这是对许多样本批量处理的一种算法,这种算法就称为批量梯度下降法。

    四,对多特征线性回归的梯度下降法

    三中提到的是批量梯度下降法,也就是可以对多条记录梯度下降,相当于进行批量操作但这只是一个影响因数(特征向量),如果对于多特征应该如何处理呢?

    如对于下面的方程 
    这里写图片描述

    其实,跟单特征线性回归是一样的,就是用批量梯度下降算法分别对每个影响因数进行求偏导数。两者对比如下: 
    这里写图片描述

    新的公式就相当于是一个通式,对于多特征以及单特征都适用。只是在单特征中x0^(i)为1,也就是前面说的梯度下降法是多特征梯度下降法的特殊情况。

  • 相关阅读:
    分治法求最大子序列
    6.2 链表 (UVa 11988, 12657)
    6.1 栈和队列 (UVa 210, 514, 442)
    S-Tree (UVa 712) 二叉树
    Equilibrium Mobile (UVa 12166) dfs二叉树
    Patrol Robot (UVa 1600) BFS
    Knight Moves (UVa 439) BFS
    Tree Recovery (UVa 536) 递归遍历二叉树
    Parentheses Balance (Uva 673) 栈
    Self-Assembly (UVa 1572)
  • 原文地址:https://www.cnblogs.com/zkwarrior/p/8029180.html
Copyright © 2011-2022 走看看