zoukankan      html  css  js  c++  java
  • Andrew Ng机器学习算法入门(四):阶梯下降算法

    梯度降级算法简介

    之前如果需要求出最佳的线性回归模型,就需要求出代价函数的最小值。在上一篇文章中,求解的问题比较简单,只有一个简单的参数。梯度降级算法就可以用来求出代价函数最小值。
    梯度降级算法的在维基的定义:

    梯度下降法是一个一阶最优化算法,通常也称为最速下降法。 要使用梯度下降法找到一个函数的局部极小值,必须向函数上当前点对应梯度(或者是近似梯度)的反方向的规定步长距离点进行迭代搜索

    首先,复习一下之前前面的讲过求解最佳的代价函数的过程

    那么如何通过梯度降级算法解决这个问题呢?首先对θ0和θ1进行初始化,初始化的值是什么并不重要,但通常的选择是将它们都初始化为0。 我们在梯度下降算法中要做的,就是不停地一点点地改变θ0和θ1,试图通过这种改变使得J(θ0, θ1)变小,直到我们找到J的最小值,这个最小值就是一个局部最优解。
    求解的过程可能如下:

    最上面的点是起始点,就加上如同一个人站在起始点的位置,最后需要回到最低点的位置,就需要一步步地向下走

    梯度降级算法定义

    梯度降级算法的定义如下:

    • :=表示的就是赋值语句
    • a,学习速率,表示的是在每一步的步长。在上面的例子中,稼穑你是一个人需要从山顶下山,那么a表示的就是你每一步的长度
    • 后面的数学公式就是一个数学公式,是一个偏导数。

    需要注意一点的是,需要同时更新所有的theta参数,包括theta-0,theta-1。这个其实在偏导数里面也是一个最基本的常识了,这里不作过多的讲解。如果你不了解,那只要记住就可以了。
    下面的这个例子就是错误的,不是同时更新的。

    为了能够形象地说明梯度讲解算法的用法,那么我们简化梯度讲解算法,假设仅仅只存在一个参数theta-1
    通过在第三节中讲述的,J(θ1)的图形就是一个曲线。利用阶梯降级函数的定义

    那么最后的求解过程为:

    这样就找到了最优解,和第三节中得到的最优解也是一样的。
    需要注意的问题是,学习速率a的设置既不能太大也不能太小,否则就会出现下面的问题。

    如果a太小,那么寻找最优解的时间过长;如果a太大,那么有可能无法找到最优解。

    梯度降级算法在线性回归中的应用

    下面还是简单的给出梯度降级算法和线性回归的算法定义

    为了方便对算法的求解进行描述,我们还是假设仅仅只是存在θ1和θ2
    将右边定义的J(θ)导入到左边的梯度降级算法中,得到如下的结果:

    但是需要注意的是,在仅仅只是存在θ1和θ2的情况下,代价函数的图形为:

    是一个凹图像,这个之前说的是不一致的。之前的那个图像仅仅是为了表述方面而作的图。
    最后将3D图转换为轮廓图,得到最后的最小的代价函数如下:

    以上就是梯度降级算法在线性回归中的应用

    批梯度下降算法

    批梯度下降算法的定义就是,在每一步的梯度下降过程中,使用所有的训练样本。 当然还有一些算法仅仅只是使用部分的训练样本。目前讨论的都是使用所有的训练样本。

    为了能到远方,脚下的每一步都不能少

  • 相关阅读:
    [调参]batch_size的选择
    [调参]CV炼丹技巧/经验
    [Pytorch]Pytorch加载预训练模型(转)
    [PyTorch]论文pytorch复现中遇到的BUG
    [Opencv]图像的梯度与边缘检测(转)
    freemodbus移植、实例及其测试方法
    eclipse的C/C++开发搭建
    ROS安装
    U-boot移植
    QT开发实战一:图片显示
  • 原文地址:https://www.cnblogs.com/babers/p/6736414.html
Copyright © 2011-2022 走看看