神經(jīng)網(wǎng)路之導(dǎo)數(shù)
在神經(jīng)網(wǎng)絡(luò)中,有一個常用的激活函數(shù)sigmoid函數(shù),這個函數(shù)在高等數(shù)學(xué)中應(yīng)該是有的,只是當(dāng)時沒有理會。函數(shù)圖像如下,本文主要主要梳理下相應(yīng)的數(shù)學(xué)知識,具體的應(yīng)用在后續(xù)的文章中會涉及。

本文涉及到數(shù)學(xué)公式,基本都是大學(xué)課本或者高中課本里的,有興趣的一起來回憶下。
傳說一個公式能少一個粉絲,但是那也沒有辦法,神經(jīng)網(wǎng)絡(luò)離不開數(shù)學(xué),有興趣的請堅持看下去,雖然有點無聊,但是也許你能了解些新的知識。
導(dǎo)數(shù)
定義
導(dǎo)數(shù)(Derivative),也叫導(dǎo)函數(shù)值。又名微商,是微積分中的重要基礎(chǔ)概念。當(dāng)函數(shù)y=f(x)的自變量x在一點x0上產(chǎn)生一個增量Δx時,函數(shù)輸出值的增量Δy與自變量增量Δx的比值在Δx趨于0時的極限a如果存在,a即為在x0處的導(dǎo)數(shù),記作f'(x0)或df(x0)/dx。
手動求導(dǎo)數(shù)
導(dǎo)數(shù)公式

求下面的導(dǎo)數(shù):
$$ y = x^2 + 2x $$ 根據(jù)導(dǎo)數(shù)公式,很容易求的導(dǎo)數(shù)是: $$ \dot{y} = 2x+2 $$
順便說一下: 一個多變量的函數(shù)的偏導(dǎo)數(shù),就是它關(guān)于其中一個變量的導(dǎo)數(shù)而保持其他變量恒定(相對于全導(dǎo)數(shù),在其中所有變量都允許變化)
lnx的導(dǎo)數(shù)
lnx的導(dǎo)數(shù)是1/x,這個是眾所周知的,但是它是怎么證明的,這里就用到了導(dǎo)數(shù)的定義,下面是詳細的證明過程:

那么這個重要極限又是怎么證明的,

復(fù)合函數(shù)求導(dǎo)
復(fù)合函數(shù)求導(dǎo)公式:設(shè)u=g(x),對f(u)求導(dǎo)得:f'(x)=f'(u)*g'(x),設(shè)u=g(x),a=p(u),對f(a)求導(dǎo)得:f'(x)=f'(a)*p'(u)*g'(x)。

對sigmoid函數(shù)求導(dǎo)涉及到的重要公式:

下面通過計算求出公式2.1中的第二個式子,其他的同理。

計算機求導(dǎo)
計算機求導(dǎo)基于的是導(dǎo)數(shù)的定義。如果要計算x=3, y=4時關(guān)于x的f(x,y)的偏導(dǎo)數(shù), 則可以計算f(3+ε,4) - f(3, 4)并將結(jié)果除以ε(使用極限的ε值)。這種類型的導(dǎo)數(shù)值稱為極限差分近似。
def f(x, y):
? ?return x ** 2 * y + y + 2
def derivative(f, x, y, x_eps, y_eps):
? ?return (f(x + x_eps, y + y_eps) - f(x, y)) / (x_eps + y_eps)
df_dx = derivative(f, 3, 4, 0.000001, 0)
df_dy = derivative(f, 3, 4, 0, 0.000001)
print(df_dx)
print(df_dy)
最終的結(jié)果: 24.000004003710274 9.99999999606871
按照手動求偏導(dǎo)的結(jié)果很接近了。 公式求偏導(dǎo)的結(jié)果是24和10。這個可以用來做檢驗。
參考
https://www.cnblogs.com/peghoty/p/3857839.html https://www.jianshu.com/p/e74eb43960a1 https://baike.baidu.com/item/%E5%AF%BC%E6%95%B0/579188?fr=aladdin https://zhidao.baidu.com/question/524121644.html
寫在最后
導(dǎo)數(shù)還是很重要的,在優(yōu)化算法時候的梯度下降法中的梯度本質(zhì)上就是導(dǎo)數(shù)。
公眾號
更多內(nèi)容,歡迎關(guān)注我的微信公眾號: 無情劍客。
