1、sigmoid函數
sigmoid函數,也就是s型曲線函數,如下:


上面是我們常見的形式,雖然知道這樣的形式,也知道計算流程,不夠感覺並不太直觀,下面來分析一下。
1.1 從指數函數到sigmoid
首先我們來畫出指數函數的基本圖形:
從上圖,我們得到了這樣的幾個信息,指數函數過(0,1)點,單調遞增/遞減,定義域為(−∞,+∞),值域為(0,+∞),再來我們看一下sigmoid函數的圖像:
如果直接把e−x放到分母上,就與ex圖像一樣了,所以分母加上1,就得到了上面的圖像,定義域是(−∞,+∞),值域是(0,1),那么就有一個很好地特性了,就是不管x是什么,都可以得到(0,1)之間的值;
1.2 對數函數與sigmoid
首先來看一下對數函數的圖像:
對數函數的圖像如上,單調遞減,有一個比較好的特性就是在(0,1)之間,在接近0的時候,就近無窮大,接近1的時候為0,如果我們把前面的sigmoid函數放到自變量的位置上,就得到了(0,1)的圖像;
我們如何來衡量一個結果與實際計算值得差距呢?一種思路就是,如果結果越接近,差值就越小,反之越大,這個函數就提供了這樣一種思路,如果計算得到的值越接近1,那么那么表示與世界結果越接近,反之越遠,所以利用這個函數,可以作為邏輯回歸分類器的損失函數,如果所有的結果都能接近結果值,那么就越接近於0,如果所有的樣本計算完成以后,結果接近於0,就表示計算結果與實際結果非常相近。
2、sigmoid函數求導
sigmoid導數具體的推導過程如下:

3、神經網絡損失函數求導
神經網絡的損失函數可以理解為是一個多級的復合函數,求導使用鏈式法則。
先來說一下常規求導的過程:
e=(a+b)(b+1)
這是一個簡單的復合函數,如上圖所示,c是a的函數,e是c的函數,如果我們用鏈式求導法則,分別對a和b求導,那么就是求出e對c的導數,c對a的導數,乘起來,對b求導則是求出e分別對c和d的導數,分別求c和d對b的導數,然后加起來,這種方法使我們常規的做法,有一個問題就是,我們在求到的過程中,e對c求導計算了2次,如果方程特別復雜,那么這個計算量就變得很大,怎樣能夠讓每次求導只計算一次呢?
如上圖所示,我們從上往下開始計算,將每個單元的值計算出來,然后計算每個單元的偏導數,保存下來;
接下來繼續計算子單元的值,子單元的偏導數,保存下來;將最后的子單元到根節點所在的路徑的所有偏導乘起來,就是該函數對這個變量的偏導,計算的本質就是從上往下,計算的時候將值存起來,乘到后面的單元上去,這樣每個路徑的偏導計算只需要一次,從上到下計算一遍就得到了所有的偏導數。
實際上BP(Backpropagation,反向傳播算法),就是如此計算的,如果現在有一個三層的神經網絡,有輸入、一個隱藏層,輸出層,我們對損失函數求權重的偏導數,它是一個復雜的復合函數,如果先對第一層的權重求偏導,然后在對第二層的權重求偏導,會發現,其中有很多重復計算的步驟,就像上面的簡單函數的示例,所以,為了避免這種消耗,我們采用的就是從后往前求偏導,求出每個單元的函數值,求出對應單元的偏導數,保存下來,一直乘下去,輸入層。
下面用一個簡單的示例來演示一下反向傳播求偏導的過程:
那么我們會有兩個初始的權重矩陣:

我們得到了上面的矩陣,現在我們以sigmoid函數作為激活函數,分別來計算每一層網絡的激勵(假設我們只有一個樣本,輸入是x1,x2,輸出是y);
第一層是輸入,激勵就是樣本的特征值;記為:

x0是偏置項,為1.
第二層是隱藏層,激勵通過特征值與區中相乘得到,然后取sigmoid函數變換,得到,未變換之前的記為
:
在上面,我們最后加上了偏置項;
接下來第三層是輸出層:
因為是輸出層了,所以不需要再往下計算,所以不加偏置項;
上面的計算流程,從輸入到輸出,我們也稱為前向傳播(Forward propagation)。
然后,我們根據損失函數,寫出損失函數的公式,在這里,只有一個輸入,一個輸出,所以損失函數寫出來較為簡單:
在這里,m=1;

說明:實際上就是所有的權重的平方和,一般不會將和偏置項相乘的那個放進來;這個項很簡單,暫時先不管它,后面不暫時不寫這一項(這個是正則化)。
然后我們得到了上面的式子,這里我們知道,如果我們想要求θ212的偏導數的話,會發現,這個式子其實是一個復合函數,y是常數,a3是z3的sigmoid函數變換,而z3則是a2與權重相乘得來的,現在我們找到了權重在哪里,就可以開始求偏導了,在這里,a3寫成s(z3),然后,我們就得到了下面的推導:

根據上面的推導,可以得到下面的式子:

所以,還記得前面所說的,我盟從上往下求導,保存當前對多個子單元的偏導數,根據上面的式子,我們知道,對於第二個權重矩陣的偏導,可以由[a3−y]乘以前一層網絡的激勵,然后除以樣本個數來得到,因此有時候我們會將這個差值稱為δ3,保存下來,使用矩陣的形式相乘,得到第二個權重矩陣的偏導數;
現在我們已經得到了第二個權重矩陣的偏導數,如何求第一個權重矩陣中的偏導數呢?
比如說,我們現在要對θ112求偏導:

從上線的式子,我們就可以看出來,我們保存的導數可以直接乘,如果而不用再次計算一遍,如果有多層網絡,實際上后面的過程與這個是一樣的,所以就得到了這樣的式子:

因為這個網絡就是3層,所以這樣就可以得出全部的偏導數,如果是多層,原理是一樣的,不斷地乘下去,從第二個式子開始,后面的形式都是一樣的。