前文提到了神經(jīng)網(wǎng)絡(luò)中的Sigmoid函數(shù),實際上在反向傳播中還會用到Sigmoid的導數(shù),形式很簡單: s(x)*(1-s(x)),但是我想把這個過程自己推導一次,順便復習一下導數(shù)和微分。
Derivative(導數(shù))和Differential(微分)
首先我畫了一張圖來說明什么是導數(shù)和微分,本質(zhì)上就是在極限中以線性函數(shù)(直線)來表示非線性函數(shù)(曲線)。

紅色的線是第一條割線(從[x,f(x)]到[x+h, f(x+h)]),(f(x+h) - f(x))/h 就是割線的斜率,物理學上是一段時間內(nèi)的平均速度。
灰色的線是第二條割線,當割線圍繞著[x, f(x)]為原點繼續(xù)順時針轉(zhuǎn)動時,h會不斷變小,小到極限就變成了[x, f(x)]的切線。
藍色的線即這條切線,其斜率就是[x,f(x)]的導數(shù),物理意義是當前這一個點的瞬間速度。
當h小到極限的時候dy(導數(shù)除以h)就是[x,f(x)]的微分。
割線斜率減去切線斜率即為誤差函數(shù)E(h)
Reciprocal Rule(倒數(shù)法則)
根據(jù)微積分中的倒數(shù)法則,如果g(x) = 1/f(x), 則有

這個簡單公式也非常容易證明

再將極限表達式分拆一下

因為f在x點的連續(xù)性第二個極限表達式的分母等于f(x)的平方

現(xiàn)在利用倒數(shù)法則把Sigmoid函數(shù)的導數(shù)推導一下,這次我們記Sigmoid函數(shù)為s(x),它的倒置函數(shù)為f(x)

根據(jù)倒數(shù)法則從f(x)開始推導得出公式S1

Chain Rule(鏈式法則)
根據(jù)鏈式法則我們可以有關(guān)于冪指求導的推廣

即

于是可以得出f(x)導數(shù)的另一種表達式S2

最后我們把S2和S1放到一起來消元就可以得到Sigmoid的導數(shù)公式了

用Python來實現(xiàn)如下邏輯:
# activation function?
def sigmoid(z, derivative=False):
????sigmoid = 1.0/(1.0+np.exp(-z))
????if (derivative==True):
????????return sigmoid * (1-sigmoid)
? ? return sigmoid
References:
3.?Derivatives of logarithmic and exponential functions