zoukankan      html  css  js  c++  java
  • 高等数学——复杂函数的求导方法

    本文始发于个人公众号:TechFlow,原创不易,求个关注


    上一篇文章我们复习了函数求导的定义和一些常见函数的导数,今天这篇文章我们回顾一下复杂函数的求导方法。先强调一下,今天的文章很重要,想要看懂机器学习各种公式推导,想要能够自己推一推各种公式,函数求导是基础中的基础,在算法这个领域,它比积分要重要得多。

    我们先来看第一种情况:多个函数进行四则运算的导数。


    函数四则运算求导法则


    我们假设(u=u(x))(v=v(x))都在x点有导数,那么它们进行加减乘除四则运算之后的结果的导数有如下性质:

    [egin{aligned} left[u(x) pm v(x) ight]'&= u'(x) pm v'(x) \ left[u(x)v(x) ight]' &= u'(x)v(x) + u(x)v'(x) \ left[frac{u(x)}{v(x)} ight] &= frac{u'(x)v(x)-u(x)v'(x)}{v^2(x)} (v(x) eq 0) end{aligned} ]

    我们来看一下证明过程,熟悉证明过程并不是炫技,除了能加深对公式的理解之外,更重要的是防止遗忘。即使以后真的不记得公式的细节了,也可以临时推导一下,这是学算法和数学很重要的技巧。

    我们先来看第一个,第一个很容易证明,我们直接套一下导数的公式即可:

    [egin{aligned} left[u(x) pm v(x) ight]' &= lim_{Delta x o 0} frac{left[u(x+Delta x) pm v(x + Delta x) ight] - left[u(x) pm v(x) ight] }{Delta x} \ &= lim_{Delta x o 0}frac{u(x+Delta x)}{Delta x} pm lim_{Delta x o 0} frac{v(x+Delta x)}{Delta x} \ &= u'(x) pm v'(x) end{aligned} ]

    第二个式子同样套用公式:

    [egin{aligned} left[u(x)v(x) ight]' &= lim_{Delta x o 0} frac{u(x+Delta x) v(x + Delta x) - u(x) v(x)}{Delta x} \ &= lim_{Delta x o 0} frac{u(x+Delta x) v(x + Delta x) - u(x)v(x+ Delta x) + u(x)v(x+Delta x) - u(x) v(x)}{Delta x} \ &= lim_{Delta x o 0} frac{(u(x+Delta x) - u(x))v(x+Delta x) + u(x)(v(x+Delta x) - v(x))}{Delta x} \ &= lim_{Delta x o 0}v(x+Delta x) frac{u(x+Delta x) - u(x)}{Delta x} + lim_{Delta x o 0}u(x)frac{v(x+Delta x) - v(x)}{Delta x}\ &=v(x+Delta x)u'(x) + u(x)v'(x) \ &=u(x)v'(x) + u'(x)v(x) end{aligned} ]

    最后是第三个式子的推导,也并不复杂:

    [displaystyle egin{aligned} left[frac{u(x)}{v(x)} ight] &= lim_{Delta x o 0}frac{frac{u(x+Delta x)}{v(x+Delta x)} - frac{u(x)}{v(x)}}{Delta x} \ &= lim_{Delta x o 0}frac{v(x)u(x+Delta x)-v(x+Delta x)u(x)}{v(x+Delta x)v(x)Delta x} \ &=lim_{Delta x o 0} \ &= lim_{Delta x o 0}frac{v(x)u(x+Delta x)-v(x)u(x)+v(x)u(x)-v(x+Delta x)u(x)}{v(x+Delta x)v(x)Delta x} \ &=lim_{Delta x o 0} frac{frac{u(x+Delta x)-u(x)}{Delta x}v(x)-frac{v(x+Delta x)-v(x)}{Delta x}u(x)}{v(x+Delta x)v(x)}\ &=frac{u'(x)v(x)-u(x)v'(x)}{v^2(x)} end{aligned} ]


    反函数求导法则


    推导完了四则运算的求导法则,我们再来看一下反函数的求导法则。

    我们陷在了看结论,如果函数(x=f(y))在区间(I_y)内单调、可导并且(f'(x)!=0),那么它的反函数(y=f^{-1}(x))在区间(I_x={x|x=f(y), yin I_y})内也可导,那么:

    [left[f^{-1}(x) ight]'=frac{1}{f'(y)} ]

    关于这个结论的证明很简单,因为(x=f(y))在区间内单调、可导,所以它的反函数(y=f^{-1}(x))存在,并且也单调且连续。

    所以:

    [egin{aligned} Delta y=f^{-1}(x+Delta x)-f^{-1}x eq 0 \ frac{Delta y}{Delta x} = frac{1}{frac{Delta x}{Delta y}}=frac{1}{f'(y)} end{aligned} ]

    由于(y=f^{-1}(x))连续,(displaystylelim_{Delta x o 0}Delta y=0),所以上式成立。

    我们来看一个例子:(x=sin y, yin left[-frac{pi}{2}, frac{pi}{2} ight]),则(y=arcsin x)是它的反函数,根据上面的公式,我们可以得到:

    [(arcsin x)'=frac{1}{(sin y)'}=frac{1}{cos y} ]

    由于(cos y= sqrt{1-sin^2 y} = sqrt{1-x^2}),代入上式可以得到:

    [(arcsin x)'=frac{1}{sqrt{1-x^2}} ]

    利用同样的方法,我们还可以求出其他反三角函数的导数,由于这些并不太常用,所以我们就不多介绍了,感兴趣的同学可以自己利用导数的定义推导一下,我想应该也不难。


    复合函数求导


    这是最后一个法则,也是本篇文章的重点,因为经常用到。我们现在已经搞定了一些常见的函数,还搞定了常见函数加减乘除之后求导的结果,但是对于一些看起来比较复杂的函数,我们并不能一下写出它们的导数。

    比如说:(sin (x^2+3x)),比如(ln (3x -1))等等,这些函数基本上都可以确定是连续并且可导的,但是我们一下子并不能写出它们的导数,而且要通过导数的定义推导也非常麻烦,对于这些导数就需要用到今天的重头戏,也就是复合函数的求导法则了。

    对于复合函数而言,拥有如下法则:如果函数(u=g(x))在点x处可导,并且(y=f(u))在点(u=g(x))处也可导,那么复合函数(y=f[g(x)])在x处可导,它的导数为:

    [frac{dy}{dx}=f'(u)cdot g'(x)=frac{dy}{du}cdot frac{du}{dx} ]

    如果复合函数的数量更多也是一样的,我们按照顺序依次相乘即可。由于公式的形式像是一根链条一样依次所以,复合函数求导法则也叫链式求导法则。在举例之前,我们先来证明一下。

    由于(y=f(u))在点u处可导,因此

    [displaystylelim_{Delta u o 0}frac{Delta y}{Delta u} = f'(u) ]

    因为(f'(u))存在,所以我们将它变形为:

    [frac{Delta y}{Delta u} = f'(u) + a ]

    其中a是(Delta u o 0)时的无穷小,我们对两边同时乘上(Delta u),可以得到:

    [Delta y = f'(u)Delta u + acdot Delta u ]

    上式当中(Delta u)和a都是无穷小,所以当(Delta u o 0)时,(Delta y=0),我们对上式两边同时除以(Delta x),得:

    [displaystylefrac{Delta y}{Delta x}=f'(u)frac{Delta u}{Delta x} + acdotfrac{Delta u}{Delta x} ]

    于是:

    [displaystyle lim_{Delta x o 0}frac{Delta y}{Delta x}=lim_{Delta x o 0}[f'(u)frac{Delta u}{Delta x}+afrac{Delta u}{Delta x}] ]

    又根据(u=g(x))在点x处可导,所以有:

    [displaystyle lim_{Delta x o 0}frac{Delta u}{Delta x}=g'(x) ]

    我们代入,就可以得到:

    [displaystyle lim_{Delta x o 0}frac{Delta y}{Delta x}=f'(u)cdot frac{Delta u}{Delta x}=f'(u)cdot g'(x) ]

    其实我们都知道相比于公式的证明,公式的运用更加重要,下面我们就来看两个例子,来巩固一下这个链式求导法则:

    (y=ln sin 3x),求(frac{dy}{dx})

    我们令(u=3x, g=sin u)

    所以:

    [egin{aligned} frac{dy}{dx}&=frac{dy}{dg}cdot frac{dg}{du}cdotfrac{du}{dx}\ &=frac{1}{g}cdot cos ucdot 3\ &=3frac{cos 3x}{sin 3x} \ &=3 cot 3x end{aligned} ]

    还记得我们之前推导线性回归时候用到的均方差的公式吗:

    [f( heta) = frac{1}{m}( heta X-Y)^2 ]

    我们来试着学以致用,求一下(f( heta))的导数,在机器学习当中,X和Y都是样本都是已知的参数,要求的是( heta),所以我们对( heta)求导:

    [egin{aligned} f'( heta) &= frac{1}{m}cdot 2 cdot ( heta X - Y)cdot X \ &=frac{2}{m}X^T( heta X - Y) end{aligned} ]

    这个结果其实就是之前我们说的梯度,梯度本来就是由导数计算得到的,所以理解了链式求导的公式,可以再回过头看看之前线性回归和梯度推导的公式,相信会有更深刻的体会。

    今天的文章篇幅有些长,但是除去证明之后,剩下的内容并不多,重要的是它的应用范围很广,所以希望大家都能学会。

    如果觉得有所收获,请顺手扫码点个关注吧,你们的举手之劳对我来说很重要。

  • 相关阅读:
    微软开发中心的rss历史记录(22)
    asp.net dll 动态生成和调用(转)
    准备写博了
    来博客园报道啦
    web爬行器的准备工作
    跨浏览器设置标签样式
    感谢我身边的朋友们
    难过的一天:(
    12月:期待好运来
    11月 难过一整个世界都寂寞
  • 原文地址:https://www.cnblogs.com/techflow/p/12306205.html
Copyright © 2011-2022 走看看