概述
3 Gradient Descent - 梯度下降
1 为什么要用 Gradient Descent
首先让我们回顾一下机器学习的三部曲,
在 step 2 中,我们要定义一个 Loss Function,用来判断我们找出的函数的好坏。
在 step 3 中,我们要挑出一个可以使得 Loss 函数值最小的一个函数,当做最好的函数。
想一想我们以前是怎么求一个函数的最小值的,或许看一下就出来了,或者简单求个导。但是在神经网络中,我们面临的是一个参数可能上万个,百万个甚至更多的函数,显然我们需要更好的方法。
而这个方法就是 Gradient Descent。
2 Gradient Descent 怎么做
首先我们要知道 梯度(Grad) 这个概念,梯度就是 一个函数增长最快的方向。而 Gradient Descent 就是沿着梯度的反方向,也就是下降得最快的方向前进,直至找到一个最小值(理论上来说可能只能找到极小值,但是经过一些变种,好像可以增大找到最小值的概率)。
举个例子:
稍微解释一下就是:
- 先随机(或者其他更有效的方法)设置一个初始值 θ0 θ 0 ;
- 算出 θ0 θ 0 上的梯度值 ∇L(θ) ∇ L ( θ ) ;
- 令 θ1=θ0−η∇L(θ) θ 1 = θ 0 − η ∇ L ( θ ) 。其中 η η 叫做 learning rate ,决定步长。
- 算出 θ1 θ 1 上的梯度值 ∇L(θ) ∇ L ( θ ) ………..循环 2, 3 两个步骤,直至达到目标。
直观的解释如下图:
以上就是 Gradient Descent 最通用的操作了。观察一下上面的公式,我们能调的参数也就 η η ,如果 η η 的值没有取好的话, η η 越大,学习速度越快,但是可能没办法收敛; η η 越小,学习速度越慢,但是不容易跳过最小值。可能根本就无法得到想要的结果。以下是 η η 的大小对 Loss 的影响:
接下去会介绍一些改进版的梯度算法,主要区别就是在算法过程中如何动态改变 η η 的值。
3 梯度下降算法plus
- 基本原则:learning rate 的设置一般都是随着学习的深入逐渐变小的。
- 前期离目标比较远,所以让 learning rate 大一点,使学习速度更快。
- 后期离目标比较近,所以让 learning rate 小一点,使算法可以收敛。
3.1 Adagrad
将每个参数的 learning rate 除以之前算过的所有导数的 均方根(N 个项的和除以 N 再开平方)。
举个例子,
由于 ηt η t 和 σt σ t 都有一个 t+1−−−−√ t + 1 ,所以实际计算时可以抵消掉,如下图:
上图的式子中, ∑ti=0(gi)2−−−−−−−−√ ∑ i = 0 t ( g i ) 2 想做的其实是算二次微分,但是为什么这么做以及为什么可以这么做就不详细说明了。
3.2 Stochastic Gradient Descent
在前面的 Gradient Descent 中,我们每一次更新参数都要算出 Total Loss,也就是每次都要遍历所有的训练样本才能更新一次参数。这种做法的好处是可以算出下降得最快的路径,缺点是每次的计算量比较大,耗费的时间比较长。
而 Stochastic Gradient Descent 的思想是,我们每算出一个训练样本的微分就更新一次参数。这样做的好处就是一个字:快。虽然走的不是最优路线,但是学习起来非常快。
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(缩放),使得两个变量的分布一样。
为什么要做缩放呢?以上面的公式 y=b+w1x1+w2x2 y = b + w 1 x 1 + w 2 x 2 为例,下面是两个其对应的神经元,但是不同的是,左边的 x2 x 2 输入是比较大的如 ,100,200,... , 100 , 200 , . . . 之类的,但是右边的 x2 x 2 输入比较小。
上图下方两幅图表示的是 w1,w2 w 1 , w 2 的变化对 Loss L o s s 的影响,
- 左边的等高线是椭圆形,因为 Gradient Descent 并不是朝着最低点走,而是沿着等高线走,其路线就是图上箭头方向,这样子的方向要更新参数是比较困难的;
- 右边就是正圆形,不管在哪里初始化参数,都可以笔直朝着圆心方向走,更新参数就变得比较容易。
怎么做缩放?方法有很多,这里提供一种比较常用的方法。
4 Gradient Descent 的数学原理
- 这部分没听懂,现在先放着,以后有空再补坑。
5 Gradient Descent 的局限性
会陷入局部最优(Local Minimum);
有一些微分是 0 的点甚至连局部最优都不是,这种点我们叫做 saddle point。
我们实际在做的时候,并不会真的更新到微分值等于 0 的点,可能只是小于一个比较小的值(比如 10−6 10 − 6 )就不更新参数了,而我们无从得知这个点是不是一个比较优的值,可能只是处于一个平坦的高原地区。
最后
以上就是机灵楼房为你收集整理的李宏毅机器学习笔记-3 梯度下降(Gradient Descent)3 Gradient Descent - 梯度下降的全部内容,希望文章能够帮你解决李宏毅机器学习笔记-3 梯度下降(Gradient Descent)3 Gradient Descent - 梯度下降所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复