我是靠谱客的博主 机灵楼房,最近开发中收集的这篇文章主要介绍李宏毅机器学习笔记-3 梯度下降(Gradient Descent)3 Gradient Descent - 梯度下降,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

3 Gradient Descent - 梯度下降


1 为什么要用 Gradient Descent

  • 首先让我们回顾一下机器学习的三部曲,

    1526779514205

    在 step 2 中,我们要定义一个 Loss Function,用来判断我们找出的函数的好坏。

    在 step 3 中,我们要挑出一个可以使得 Loss 函数值最小的一个函数,当做最好的函数。

  • 想一想我们以前是怎么求一个函数的最小值的,或许看一下就出来了,或者简单求个导。但是在神经网络中,我们面临的是一个参数可能上万个,百万个甚至更多的函数,显然我们需要更好的方法。

  • 而这个方法就是 Gradient Descent

2 Gradient Descent 怎么做

  • 首先我们要知道 梯度(Grad) 这个概念,梯度就是 一个函数增长最快的方向。而 Gradient Descent 就是沿着梯度的反方向,也就是下降得最快的方向前进,直至找到一个最小值(理论上来说可能只能找到极小值,但是经过一些变种,好像可以增大找到最小值的概率)。

  • 举个例子:

    1526780913875

    稍微解释一下就是:

    1. 先随机(或者其他更有效的方法)设置一个初始值 θ0 θ 0
    2. 算出 θ0 θ 0 上的梯度值 L(θ) ∇ L ( θ ) ;
    3. θ1=θ0ηL(θ) θ 1 = θ 0 − η ∇ L ( θ ) 。其中 η η 叫做 learning rate ,决定步长。
    4. 算出 θ1 θ 1 上的梯度值 L(θ) ∇ L ( θ ) ………..循环 2, 3 两个步骤,直至达到目标。
  • 直观的解释如下图:

    1526781804661

  • 以上就是 Gradient Descent 最通用的操作了。观察一下上面的公式,我们能调的参数也就 η η ,如果 η η 的值没有取好的话, η η 越大,学习速度越快,但是可能没办法收敛; η η 越小,学习速度越慢,但是不容易跳过最小值。可能根本就无法得到想要的结果。以下是 η η 的大小对 Loss 的影响:

    1526782350164

  • 接下去会介绍一些改进版的梯度算法,主要区别就是在算法过程中如何动态改变 η η 的值。

3 梯度下降算法plus

  • 基本原则:learning rate 的设置一般都是随着学习的深入逐渐变小的。
    • 前期离目标比较远,所以让 learning rate 大一点,使学习速度更快。
    • 后期离目标比较近,所以让 learning rate 小一点,使算法可以收敛。

3.1 Adagrad

  • 将每个参数的 learning rate 除以之前算过的所有导数的 均方根(N 个项的和除以 N 再开平方)

    1526783344356

  • 举个例子,

    1526783431543

  • 由于 ηt η t σt σ t 都有一个 t+1 t + 1 ,所以实际计算时可以抵消掉,如下图:

    1526784450795

  • 上图的式子中, ti=0(gi)2 ∑ i = 0 t ( g i ) 2 想做的其实是算二次微分,但是为什么这么做以及为什么可以这么做就不详细说明了。

3.2 Stochastic Gradient Descent

  • 在前面的 Gradient Descent 中,我们每一次更新参数都要算出 Total Loss,也就是每次都要遍历所有的训练样本才能更新一次参数。这种做法的好处是可以算出下降得最快的路径,缺点是每次的计算量比较大,耗费的时间比较长。

    1526786638790

  • 而 Stochastic Gradient Descent 的思想是,我们每算出一个训练样本的微分就更新一次参数。这样做的好处就是一个字:。虽然走的不是最优路线,但是学习起来非常快。

    1526786686564

3.3 Feature Scaling

  • 假设 y=b+w1x1+w2x2 y = b + w 1 x 1 + w 2 x 2 ,如果 x1,x2 x 1 , x 2 的分布很不一样,那就应该对其中某一个变量做 Scaling(缩放),使得两个变量的分布一样。

    1526799141361

  • 为什么要做缩放呢?以上面的公式 y=b+w1x1+w2x2 y = b + w 1 x 1 + w 2 x 2 为例,下面是两个其对应的神经元,但是不同的是,左边的 x2 x 2 输入是比较大的如 100,200... , 100 , 200 , . . . 之类的,但是右边的 x2 x 2 输入比较小。

    1526799507992

    上图下方两幅图表示的是 w1,w2 w 1 , w 2 的变化对 Loss L o s s 的影响,

    • 左边的等高线是椭圆形,因为 Gradient Descent 并不是朝着最低点走,而是沿着等高线走,其路线就是图上箭头方向,这样子的方向要更新参数是比较困难的;
    • 右边就是正圆形,不管在哪里初始化参数,都可以笔直朝着圆心方向走,更新参数就变得比较容易。
  • 怎么做缩放?方法有很多,这里提供一种比较常用的方法。

    1526800177440

4 Gradient Descent 的数学原理

  • 这部分没听懂,现在先放着,以后有空再补坑。

5 Gradient Descent 的局限性

  1. 会陷入局部最优(Local Minimum);

  2. 有一些微分是 0 的点甚至连局部最优都不是,这种点我们叫做 saddle point

  3. 我们实际在做的时候,并不会真的更新到微分值等于 0 的点,可能只是小于一个比较小的值(比如 106 10 − 6 )就不更新参数了,而我们无从得知这个点是不是一个比较优的值,可能只是处于一个平坦的高原地区。

    1526801808827

最后

以上就是机灵楼房为你收集整理的李宏毅机器学习笔记-3 梯度下降(Gradient Descent)3 Gradient Descent - 梯度下降的全部内容,希望文章能够帮你解决李宏毅机器学习笔记-3 梯度下降(Gradient Descent)3 Gradient Descent - 梯度下降所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(82)

评论列表共有 0 条评论

立即
投稿
返回
顶部