李宏毅机器学习笔记-3 梯度下降(Gradient Descent)

3 Gradient Descent - 梯度下降


1 为什么要用 Gradient Descent

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

    李宏毅机器学习笔记-3 梯度下降(Gradient Descent)

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

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

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

  • 而这个方法就是 Gradient Descent

2 Gradient Descent 怎么做

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

  • 举个例子:

    李宏毅机器学习笔记-3 梯度下降(Gradient Descent)

    稍微解释一下就是:

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

    李宏毅机器学习笔记-3 梯度下降(Gradient Descent)

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

    李宏毅机器学习笔记-3 梯度下降(Gradient Descent)

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

3 梯度下降算法plus

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

3.1 Adagrad

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

    李宏毅机器学习笔记-3 梯度下降(Gradient Descent)

  • 举个例子,

    李宏毅机器学习笔记-3 梯度下降(Gradient Descent)

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

    李宏毅机器学习笔记-3 梯度下降(Gradient Descent)

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

3.2 Stochastic Gradient Descent

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

    李宏毅机器学习笔记-3 梯度下降(Gradient Descent)

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

    李宏毅机器学习笔记-3 梯度下降(Gradient Descent)

3.3 Feature Scaling

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

    李宏毅机器学习笔记-3 梯度下降(Gradient Descent)

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

    李宏毅机器学习笔记-3 梯度下降(Gradient Descent)

    上图下方两幅图表示的是 w1,w2 的变化对 Loss 的影响,

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

    李宏毅机器学习笔记-3 梯度下降(Gradient Descent)

4 Gradient Descent 的数学原理

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

5 Gradient Descent 的局限性

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

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

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

    李宏毅机器学习笔记-3 梯度下降(Gradient Descent)