深度學習:Sigmoid函數與損失函數求導


1、sigmoid函數

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

 

 

​ 上面是我們常見的形式,雖然知道這樣的形式,也知道計算流程,不夠感覺並不太直觀,下面來分析一下。

1.1 從指數函數到sigmoid

​ 首先我們來畫出指數函數的基本圖形:

這里寫圖片描述

​ 從上圖,我們得到了這樣的幾個信息,指數函數過(0,1)點,單調遞增/遞減,定義域為(,+),值域為(0,+),再來我們看一下sigmoid函數的圖像:

這里寫圖片描述

​ 如果直接把ex放到分母上,就與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是常數,a3z3sigmoid函數變換,而z3則是a2與權重相乘得來的,現在我們找到了權重在哪里,就可以開始求偏導了,在這里,a3寫成s(z3),然后,我們就得到了下面的推導: 

 

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

 

​ 所以,還記得前面所說的,我盟從上往下求導,保存當前對多個子單元的偏導數,根據上面的式子,我們知道,對於第二個權重矩陣的偏導,可以由[a3y]乘以前一層網絡的激勵,然后除以樣本個數來得到,因此有時候我們會將這個差值稱為δ3,保存下來,使用矩陣的形式相乘,得到第二個權重矩陣的偏導數;

​ 現在我們已經得到了第二個權重矩陣的偏導數,如何求第一個權重矩陣中的偏導數呢?

​ 比如說,我們現在要對θ112求偏導: 

 

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

 

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM