(P3-1笔记)Gradien Descent梯度下降——机器学习:李宏毅

Gradien Descent

回顾

Loss function是一个function的function,他的input来自一个function,但我们也可以写成关于这个function的参数形式作为Loss function的input。我们要找一组参数θ,让Loss function越小越好。这件事就可以用Gradien Descent来做。

假设有两个参数{θ1,θ2}

随机取一个起始点θ0,他是一个向量在这里插入图片描述

然后计算Loss function对θ上标0下标1和θ上标0下标2的偏导(反之是偏微分),再用θ上标0下标1和θ上标0下标2减去这个偏微分的值,得到一组新的参数:θ上标1下标1和2。

在这里插入图片描述

然后还是按照同样的步骤重复去计算得到新的参数

在这里插入图片描述

把式子写的简单一点就是如下图,意义是一样的,▽L(θ)是一个向量,他代表的就是Gradien计算梯度

在这里插入图片描述

在这里插入图片描述

图像化展示出来就是如下图,假设θ0,首先计算梯度Gradien,他的方向就是Loss的等高线的法线方向

然后我们更新参数就是我们用计算出的Gradien乘上leanring rate学习频率再取负号加上θ0(也就是θ0减去计算出的Gradien乘上leanring rate学习频率),就得到新参数θ1。

然后按照这个步骤再反复计算下去,就得到了其他新的参数θ2,θ3…。算一次Gradien再决定要走的方向。

在这里插入图片描述

这个就是梯度下降Gradien Descent。

Gradien Descent的Tip

  • 本段讲的是关于Gradien Descent的一些提示(技巧)。

Tip1:Tuning your learning rates(1.小心的调你的学习频率)

  • 有时候learning rates学习频率是会给我们带来许多问题的

    • 假设Loss function如下图,如果learning rates调的刚刚好的话,那么就如下图红线,到达最低点。如果learning rates调的太小的话,他可以到达最小点但是速度会非常非常慢,就如下图蓝色线。如果learning rates过大的话就如下图绿色线,太大的话就如下图黄色线。如果有很多维的参数,我们是无法进行可视化的(左图),但我们可以可视化参数的变化对Loss的影响,每次update参数的时候就可以看到Loss的变化如下图右边的二维坐标系。如果learning rates调的太小的话,Loss下降的非常慢,蓝色线。如果过调大的话就如绿色线,太大就如黄色线,红色线是刚刚好的。我们在做Gradien Descent的时候就要先把右图画出来,然后对learning rates进行调整。但是调learning rates很麻烦,有没有可以让他自动调呢?

      在这里插入图片描述

    • 每隔一段时间就把学习速度降低一些

      一开始,我们离目的地很远,所以我们使用更大的learning rates

      经过了一段时间,我们离目的地越来越近了,所以我们的learning rates要变小(就好像PID)

      根据这个公式来进行η^t=η∕√(t+1)

      但我们的learning rates不可能是永远相等的,所以我们可以让每一个不同的参数都给他不同的learning rates

      那这件事怎么做呢?最简单的就是Adagrad自适应梯度算法

Adagrad自适应梯度算法
  • 他的基本概念就是,在使用梯度下降进行求解Loss function时,每次求微分会得到一个新的越来越靠近最低点的,也就是最小的Loss function的值,而这个值所对应的在每次进行梯度下降时都会有一个新的参数对应,自适应梯度算法他的基本概念就是:用每次梯度下降求解的点所对应的的参数的learning rates除以之前算出来的偏微分值的均方根

    假设如下图,现在使用Gradien Descent求解的参数为w^ (t+1) = w^ t-η^t * g^ t,而自适应梯度算法之后在下一刻进行梯度下降时,结果就是w^(t+1) = w ^t-η ^ t/σ^t * g^t如下图所示。

    σ^t :参数w之前的偏微分的均方根

    g^t:是我们进行梯度下降时的偏微分的值

    在这里插入图片描述

  • 那怎么做到的?

    现在我们进行自适应梯度下降,假设初始值为w0要求下一时刻的值w1,所以我们计算在w0点的微分记作g0,那么σ^t就是过去的微分值的平方根,就是g0的平方再开均根号。

    那么继续进行自适应梯度下降的时候,也就是求w2,他就是计算在w1点的偏微分记作g1那么σ^t就是过去的微分值的平方根,就是g0的平方加上g1的平方,再乘以二分之一再开根。

    然后就反复如上过程。如下图所示

    在这里插入图片描述

    简化Adagrad的式子,用n^ t与σ^ t的根号t+1约掉就成了下图中的式子。

    在这里插入图片描述

Contradiction矛盾?

我们知道,在普通Gradien Descent梯度下降的时候的当g^t越大,也就是Gradien计算梯度值(微分后的值)越大,那么参数更新的越快

但用在自适应梯度下降算法时,他的公式分母和分子都存在g^t(Gradien)当Gradien越大时,参数更新会越大,但分母会使参数更新的越慢,这样就有点矛盾了。

在这里插入图片描述

Tip2:Stochastic Gradient Descent(随机梯度下降法)

  • 功能:加快训练速度

  • 实现:假设Loss function如下图式子,那么进行Gradient Descent梯度下降他的参数的式子如下图所示,那我们使用Stochastic Gradient Descent随机梯度下降法时,他是每次取一个xn出来然后估测Loss function误差函数。也就是他只考虑我现在的参数w对这个xn的y的估测值然后用实际值减去这个y值来进行估测Loss function的值他只算某一个example的Loss function的值那么接下来在update参数的时候,他只考虑这一个example的Loss function的值,记作L上标n,代表只考虑第n个example的Loss function的值。那在算Gradient梯度的时候,他不是算所有参数求梯度的和,而是只算某一个Data example他的Loss function的Gradient梯度在之前Gradient Descent的时候他是计算所有Data的Loss,然后再使用Update参数的这个函数更新参数而Stochastic Gradient Descent随机梯度下降,他就是看一个example,他就update一个参数。

    在这里插入图片描述

  • 好处:原来的 Gradient Descent是查看所有example后更新参数,如下图左图所示。Stochastic Gradient Descent随机梯度下降是每看到一个example就更新一次参数,如下图右图所示。如果有20个x值,也就是20个example,他就更新20次参数。他是肯定要比前者出来的快的,因为每看一次就更新一次,而前者是要看完20次再更新,是比较快的。如果每个示例有20个示例,则更新速度要快20倍。

    在这里插入图片描述

Tip3:Feature Scaling(特征缩放)

  • 解释意思:假设现在做回归,假设他的function中的input Feature 输入特征有两个:x1和x2,假设x1是宝可梦进化前的cp值记作xcp,x2是宝可梦的生命值记作xhp。

    如果x1和x2的分布是很分散的话那么建议就对其进行Feature Scaling(特征缩放)比如x2的分布是远比x1大,那么就对x2进行Feature Scaling(特征缩放)使得x2和x1的分布都是比较小的,我们希望不同的特征他们的分布是一样的。

    在这里插入图片描述

    为什么要这么做?举一个例子

    果x1可取的值是比较小的,x2可取的值是比较大的,那么根据这个function

    在这里插入图片描述

    我们就知道x1乘上w1,当w1有微小的变化时对y的值的变化影响是比较小的,但x2乘w2,当w2的值发生微小的变化对y值的变化时非常大的,因为x2input的值非常大。那么把他的Loss function图画出来就如下图左图所示。那么如果x1和x2的值很接近的话,那么就会使如下图右图所示。

    这个是对做Gradient Descent梯度下降是有影响的。

    在进行梯度下降对参数update的时候,会是如下图左图所示红色箭头进行求梯度。这样的椭圆形的做Gradient Descent梯度下降是比较难的,他需要斜着往最低点去,而且还可能出现错误。而如下图右图圆形求Gradient Descent梯度下降是比较简单的,无论从哪个方向进行Gradient Descent梯度下降,都会往圆心走。

    在这里插入图片描述

怎么做Feature Scaling

  • 实现

    假设有R个example,对于每个维度的i,都去求这个维度的所有example的平均值和标准偏差,然后对第r个example(xr)的第i个元素减去所有Data的第i个元素的平均值,再除以所有Data的第i个元素的标准偏差,然后就得到所有维度的均值都是0,方差都是1。

    在这里插入图片描述

Gradien Descent Theory(梯度下降的原理)

当我们进行梯度下降的时候,通过梯度下降的参数公式如下:

在这里插入图片描述

那我们每次更新参数时,得到的Loss function的值都会变小吗?

其实不一定,有时候不见的会下降,也不一定是程序的问题。

在这里插入图片描述

先不管Gradien Descent,先考虑现在的问题:假如我要解一个Loss function

他的原理就是:给定一个初始点θ0,给定一个点,画一个范围,然后找出他的最低点,我们可以很容易地找到它附近的最小值点,我们就更新点为θ1,再画一个以θ1为圆心再画一个圈,然后就找到这个圆圈的最小点。
那问题就是怎么在红色的圈圈里面找一个可以让Loss最小的参数呢?这就要从Taylor series泰勒级数开始说起。

Taylor series泰勒级数

  • 泰勒级数的定义:令h(x)是在点x=x0具有任意阶导数,那么就可以吧h(x)写成如下图的样子:

    在这里插入图片描述

    那么当x很接近x0的时候,那x-x0就会远大于(x-x0)²,也就会远大于(x-x0)³…

    所以我们就可以把后面的高次项给删掉,所以当x很接近x0的时候,h(x)就可以写成如下图所示的样子

    在这里插入图片描述

    • 举个例子:假设泰勒级数h (x) = sin(x),周围的x0 =π/ 4,那么sin(x)就可以写成如下图,画出来的话就可以参考如下图:

      在这里插入图片描述

      如上图可以看出如果x很接近四分之π的话,那后面的项就可以忽略他们。

      那么当h函数是个多变量的话,且x和y分别接近于x0和y0的话,同样也可以省略高次项

      在这里插入图片描述

      那如果我们现在考虑Gradien Descent的话,也就是回到之前的问题,如果给我一个点,在周围 画一个圆圈,点就是圆圈的圆心,那么在红色的圆圈内,当a接近于θ1和当b接近于θ2时,我们可以把Loss function用泰勒级数做简化。我们可以把L(θ)写成如下图所示

      在这里插入图片描述

      再分别用符号代替如下图
      u和v就是本节开始说的:▽L(θ)是一个向量,他代表的就是Gradien计算梯度。
      在这里插入图片描述在这里插入图片描述

      ​ 然后我们算出这个L(θ)就得出红色圈圈最小的Loss值了

      ​ 计算过程:直接利用圆的性质,最边缘点就是最小的Loss值,到圆心的距离就可以列出一个式子。

      ​ 现在我们设出△θ1和△θ2

      在这里插入图片描述

      ​ 然后L(θ)就列成了下面的式子

      在这里插入图片描述

      ​ 现在假设△θ1和△θ2是一个向量,u和v是一个向量(偏导)

      ​ 那我们要怎么样选择△θ1和△θ2让L(θ)最小呢?,只需要和向量u,v相反(与本节开始相对应,先进行计算Gradien,然后确定方向,这个方向就是与其相反的方向),然后把△θ1和△θ2长度增长,长到可以到达红圈的边缘就找到了△θ1和△θ2,下式中的n就是learning rate,表示可调整的长度。 在这里插入图片描述

      ​ 那怎么找到边缘的点θ1和θ2呢,就可以通过原点减去这个向量得到

      所以我们接下来要做的事就是把u和v代入即可

      ​ 我们发现这就是Gradien Descent的式子
      在这里插入图片描述

      ​ 但前提是上面的泰勒式子是成立的。也就是红色的圈圈要小,而learning rate是和红色圈的半径成正比 的。如果红圈(learning rate)不够小就不成立。

      ​ 所以说learning rate没设好,就会导致泰勒级数不成立

      ​ 我们发现这个泰勒级数我们考虑的是个一次式,那么可以考虑二次式吗?

      ​ 你可以考虑二阶项,例如牛顿法。

    • Gradien Descent的限制

      1.他会卡在local minma的地方(第二节就讲过),就停止更新参数了

      2.他也可能会卡在微分值为0的地方。

      3.他也会卡在一个微分值很小很小的地方,但他却不是最低值,所以就停下继续梯度下降了,停止参数更新了。

易忘知识点

  • Gradient Descent梯度下降的目的是求解最小的Loss function,那么要做的就是不断进行对参数求偏导(如果有多个参数也是这样),求到最小的偏导也就找到了最小的参数那个点,对应代入到Loss function中就得出来了。(而Loss function是通过Training Data训练数据中的出来的(误差函数嘛,就是通过训练数据的实际进化后的CP值是y,用y与function所预测的进化后的cp值做差——欧氏距离)),这就是Gradient Descent梯度下降的目的。
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值