天天看點

高等數學——複雜函數的求導方法

本文始發于個人公衆号:TechFlow,原創不易,求個關注

上一篇文章我們複習了函數求導的定義和一些常見函數的導數,今天這篇文章我們回顧一下複雜函數的求導方法。先強調一下,今天的文章很重要,想要看懂機器學習各種公式推導,想要能夠自己推一推各種公式,函數求導是基礎中的基礎,在算法這個領域,它比積分要重要得多。

我們先來看第一種情況:多個函數進行四則運算的導數。

函數四則運算求導法則

我們假設\(u=u(x)\)和\(v=v(x)\)都在x點有導數,那麼它們進行加減乘除四則運算之後的結果的導數有如下性質:

\[\begin{aligned}

\left[u(x) \pm v(x)\right]'&= u'(x) \pm v'(x) \\

\left[u(x)v(x)\right]' &= u'(x)v(x) + u(x)v'(x) \\

\left[\frac{u(x)}{v(x)}\right] &= \frac{u'(x)v(x)-u(x)v'(x)}{v^2(x)} (v(x) \neq 0)

\end{aligned}

\]

我們來看一下證明過程,熟悉證明過程并不是炫技,除了能加深對公式的了解之外,更重要的是防止遺忘。即使以後真的不記得公式的細節了,也可以臨時推導一下,這是學算法和數學很重要的技巧。

我們先來看第一個,第一個很容易證明,我們直接套一下導數的公式即可:

\left[u(x) \pm v(x) \right]'

&= \lim_{\Delta x \to 0} \frac{\left[u(x+\Delta x) \pm v(x + \Delta x) \right] - \left[u(x) \pm v(x) \right] }{\Delta x} \\

&= \lim_{\Delta x \to 0}\frac{u(x+\Delta x)}{\Delta x} \pm \lim_{\Delta x \to 0} \frac{v(x+\Delta x)}{\Delta x} \\

&= u'(x) \pm v'(x)

第二個式子同樣套用公式:

\left[u(x)v(x)\right]' &= \lim_{\Delta x \to 0} \frac{u(x+\Delta x) v(x + \Delta x) - u(x) v(x)}{\Delta x} \\

&= \lim_{\Delta x \to 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 \to 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 \to 0}v(x+\Delta x) \frac{u(x+\Delta x) - u(x)}{\Delta x} + \lim_{\Delta x \to 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)

最後是第三個式子的推導,也并不複雜:

\[\displaystyle

\begin{aligned}

\left[\frac{u(x)}{v(x)}\right] &= \lim_{\Delta x \to 0}\frac{\frac{u(x+\Delta x)}{v(x+\Delta x)} - \frac{u(x)}{v(x)}}{\Delta x} \\

&= \lim_{\Delta x \to 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 \to 0} \\

&= \lim_{\Delta x \to 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 \to 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)}

反函數求導法則

推導完了四則運算的求導法則,我們再來看一下反函數的求導法則。

我們陷在了看結論,如果函數\(x=f(y)\)在區間\(I_y\)内單調、可導并且\(f'(x)!=0\),那麼它的反函數\(y=f^{-1}(x)\)在區間\(I_x=\{x|x=f(y), y\in I_y\}\)内也可導,那麼:

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

關于這個結論的證明很簡單,因為\(x=f(y)\)在區間内單調、可導,是以它的反函數\(y=f^{-1}(x)\)存在,并且也單調且連續。

是以:

\Delta y=f^{-1}(x+\Delta x)-f^{-1}x \neq 0 \\

\frac{\Delta y}{\Delta x} = \frac{1}{\frac{\Delta x}{\Delta y}}=\frac{1}{f'(y)}

由于\(y=f^{-1}(x)\)連續,\(\displaystyle\lim_{\Delta x \to 0}\Delta y=0\),是以上式成立。

我們來看一個例子:\(x=\sin y, y\in \left[-\frac{\pi}{2}, \frac{\pi}{2} \right]\),則\(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處可導,是以

\[\displaystyle\lim_{\Delta u \to 0}\frac{\Delta y}{\Delta u} = f'(u)

因為\(f'(u)\)存在,是以我們将它變形為:

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

其中a是\(\Delta u \to 0\)時的無窮小,我們對兩邊同時乘上\(\Delta u\),可以得到:

\[\Delta y = f'(u)\Delta u + a\cdot \Delta u

上式當中\(\Delta u\)和a都是無窮小,是以當\(\Delta u \to 0\)時,\(\Delta y=0\),我們對上式兩邊同時除以\(\Delta x\),得:

\[\displaystyle\frac{\Delta y}{\Delta x}=f'(u)\frac{\Delta u}{\Delta x} + a\cdot\frac{\Delta u}{\Delta x}

于是:

\[\displaystyle \lim_{\Delta x \to 0}\frac{\Delta y}{\Delta x}=\lim_{\Delta x \to 0}[f'(u)\frac{\Delta u}{\Delta x}+a\frac{\Delta u}{\Delta x}]

又根據\(u=g(x)\)在點x處可導,是以有:

\[\displaystyle \lim_{\Delta x \to 0}\frac{\Delta u}{\Delta x}=g'(x)

我們代入,就可以得到:

\[\displaystyle \lim_{\Delta x \to 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\)

是以:

\frac{dy}{dx}&=\frac{dy}{dg}\cdot \frac{dg}{du}\cdot\frac{du}{dx}\\

&=\frac{1}{g}\cdot \cos u\cdot 3\\

&=3\frac{\cos 3x}{\sin 3x} \\

&=3 \cot 3x

還記得我們之前推導線性回歸時候用到的均方差的公式嗎:

\[f(\theta) = \frac{1}{m}(\theta X-Y)^2

我們來試着學以緻用,求一下\(f(\theta)\)的導數,在機器學習當中,X和Y都是樣本都是已知的參數,要求的是\(\theta\),是以我們對\(\theta\)求導:

f'(\theta) &= \frac{1}{m}\cdot 2 \cdot (\theta X - Y)\cdot X \\

&=\frac{2}{m}X^T(\theta X - Y)

這個結果其實就是之前我們說的梯度,梯度本來就是由導數計算得到的,是以了解了鍊式求導的公式,可以再回過頭看看之前線性回歸和梯度推導的公式,相信會有更深刻的體會。

今天的文章篇幅有些長,但是除去證明之後,剩下的内容并不多,重要的是它的應用範圍很廣,是以希望大家都能學會。

如果覺得有所收獲,請順手掃碼點個關注吧,你們的舉手之勞對我來說很重要。

繼續閱讀