大白话5分钟带你走进人工智能-第十二节梯度下降之背后的原理之泰勒公式(7)

                                  大白话5分钟带你走进人工智能-第十二节梯度下降之背后的原理之泰勒公式(7)

           我们接下来给大家深化一下,梯度下降背后到底是什么原理?谈到这个,我们要谈到一个叫泰勒展开的这么一个数学定理,泰勒发现任何一个函数不用管它有多复杂,不管它什么样,千奇百怪的任何一个函数,都可以写成关于N阶导数的一个多项式。即

                                                f(x)=\sum_{n=0}^{N} \frac{f^{(n)}(a)}{n !}(x-a)^{n}+R_{n}(x)

解释下,在A点附近,比如说A为1,那么在1附近,那么f(x)=f(1),你有个解析式,f(1)总能算出来,把1丢进去算出来,那么泰勒展开即:

                f(x)=\frac{f(1) (x-1)^{0}}{1}+\frac{f{}'(1) (x-1)^{1} }{1} +\frac{f{}''(x-1)^{2} }{2}+\frac{f^{\prime \prime\prime}(x-1)^{3} }{6}+...

f^{\prime \prime}是二阶导数,什么叫二阶导数?导函数再求一下导。这么一直这么往下加,加到余项为零的时候就加完了。假如余项始终不为零,它就一直无限这么加下去,加的项越多,这个函数越像原始的函数。

          泰勒公式实际上用多项式函数去逼近一个光滑函数,什么叫逼近?因为它是把一个原始的函数拆成好多项了,那么拆项越多,这个加出来的结果就越像原函数。那好好的一个普通的函数,你为什么非得要给它拆成好多项呢? 一个X2+1,就两项很简单的,你为什么要给它变成N项?实际上不是所有的函数都是能这么写,比如sin X,在计算机里,实际上计算sin X背后的本质是它他先进行完了泰勒展开,展开成200 多项,然后把这200多项算出来,得到sin X到底是多少。这个是交给计算机计算的这么一种方式。再比如f(x)=e^{x},此时我令a=0,就相当于在零点附近给它展开。如果按照刚才展开式来讲的话,零阶展开就是n等于0,F(x)=e^{0} * 1=1,X轴是x=1,你发现0阶展开,如果把余项抛弃了的话,就是一条直线,这条直线像原函数吗?看起来不像。但在x=0这一点上的这条直线跟这个原函数很像。假如阶数增高的话,如图:

 

 

        可以看到,随着阶数的升高,甚至仅仅到达十阶展开的时候,在我们肉眼可及的地方,它跟原函数已经非常接近了。零阶展开,如果就光说零附近的话,即使是零阶展开,在极小的区域里它也是比较像的,对吧?随着阶数越来越多,是不是离零越远的地方也越跟原函数很像了?这就是泰勒展开的本质。它实际上就是通过在某一点附近用一个多项式去逼近原来的原函数,你可以理解为它是一个原函数的近似取值。 

        回到我们梯度下降来说,我们梯度下降其实就是对原函数展开一个一阶泰勒近似。 假如对泰勒展开式在x0进行一阶泰勒展开,只得到两项。第一项就是f(x0),第二项就是(x-x0)f`(x0)。这个式子里谁是未知数?谁是已知数?可以发现只有x是未知数,剩下这些数虽然写的是字母,但实际上你带到真实的场景里,就能算出来是具体的数。假如此时的f是损失函数的话,在x0的值是可求的,x0点的导数也可求。这x0自然也是知道的,所以它的一阶泰勒的近似公式就是已经知道的了。

       我们看梯度下降是怎么来的? 回到函数最优化问题上,如果我初始出来一组W0了,你想让W0加上λd这个东西之后带回到损失函数里,希望损失函数越小越好。也就是我们想要找到一个 λd 使上一代的 w+λd后 损失函数下降得最多,即 min 𝐸 𝑤0 + 𝜆𝑑 。λ是学习率,d应该等于什么值?按照之前经验,d应该等于负的梯度才对。为什么d等于负梯度?我们来一步步推导。我们对E在w0附近进行一阶泰勒展开:

                                                                    \mathrm{E}(w) \approx E\left(w_{0}\right)+\left(w-w_{0}\right) f^{\prime}\left(w_{0}\right)

如果把𝑤0 + 𝜆𝘦入到上面的展开式里面也就是:

                                                                     \begin{aligned} E\left(w_{0}+\lambda d\right) & \approx E\left(w_{0}\right)+\left(w_{0}+\lambda d-w_{0}\right) \cdot g\left(w_{0}\right) \\ &=E\left(w_{0}\right)+\lambda d \cdot g\left(w_{0}\right) \end{aligned}

            我们进行完一阶泰勒展开之后,我想要让损失函数:

                                                                                E(w_{0}+\lambda d\right))==E\left(w_{0}\right)+\lambda d \cdot g\left(w_{0}\right)

越小越好。看第一项E(𝑤0)能改变大小吗?它已经是一个既成事实了,λ是你人为定的,所以只有让d.g(𝑤0)越小越好。我们先回顾下向量点乘的几何含义:

                                                                                      $a \bullet b=|a| b | \cos \theta$

也就是两个向量长度乘积再乘一个向量之间的夹角cosθ。所以d \cdot g\left(w_{0}\right)=|d| g\left(w_{0}\right) | \cos \theta$。怎么让这结果最小,我们假设d向量长度变小一点,这样能让d*g(𝑤0)这项更小,但是你仔细想,d如果太大小了的话,一阶泰勒展开的不等号还能成立吗?因为我们只展开了一阶,阶数越高,越接近原函数,当d太小的时候,展开的函数是不是就远离原来的W0点了?远离W0点的时候,不等号是不是就不成立了?相当于去求一个跟损失函数不一样的函数的最小值,这是没有意义的。假设向量长度不变的话,那么怎么让它们相乘的结果越小越好?自然而然想到,让cosθ=-1的时候,结果就最小。那什么时候cosθ=-1?也就是θ等于180度的时候,也就是d向量应该跟原来的梯度向量成180度夹角,即当d向量等于负的梯度向量的时候,此时的夹角θ能使cosθ=-1所以我们通常利用当d=-g(w0),此时的d向量和g(w0)之间的夹角为180度,这时d*g(𝑤0)就是最小的。这也就是为什么梯度下降每一步的迭代,加的那个东西就刚好是负梯度这么巧,是从一阶泰勒展开,一步步推导出来的。

         总结下,梯度下降的本质是什么?对损失函数进行了一阶泰勒展开的近似,然后对这个近似出来的函数求最小值,把最小值当作下一步用来迭代的值。 这就是梯度下降背后的数学原理。

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

L先生AI课堂

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值