神經網絡模型的原理


深度學習最近火的不行,因為在某些領域應用的效果確實很好,深度學習本質上就是機器學習的一個topic,是深度人工神經網絡的另一種叫法,因此理解深度學習首先要理解人工神經網絡。

1、人工神經網絡

人工神經網絡又叫神經網絡,是借鑒了生物神經網絡的工作原理形成的一種數學模型。下面是一張生物神經元的圖示:

生物神經網絡就是由大量神經元構成的網絡結構如下圖:

生物的神經網絡是通過神經元、細胞、觸電等結構組成的一個大型網絡結構,用來幫助生物進行思考和行動等。那么人們就想到了電腦是不是也可以像人腦一樣具有這種結構,這樣是不是就可以思考了?

類似於神經元的結構,人工神經網絡也是基於這樣的神經元組成:

 

這里面的x1、x2、x3是輸入值,中間的圓就像是神經元,經過它的計算得出hw,b(x)的結果作為神經元的輸出值。

由這樣的神經元組成的網絡就是人工神經網絡:

其中橙色的圓都是用來計算hw,b(x)的,縱向我們叫做層(Layer),每一層都以前一層為輸入,輸出的結果傳遞給下一層

這樣的結構有什么特別的嗎?

如果我們把神經網絡看做一個黑盒,那么x1、x2、x3是這個黑盒的輸入X,最右面的hw,b(x)是這個黑盒的輸出Y,按照之前幾篇機器學習的文章可以知道:這可以通過一個數學模型來擬合,通過大量訓練數據來訓練這個模型,之后就可以預估新的樣本X應該得出什么樣的Y。

但是使用普通的機器學習算法訓練出的模型一般都比較膚淺,就像是生物的進化過程,如果告訴你很久以前地球上只有三葉蟲,現在地球上有各種各樣的生物,你能用簡單的模型來表示由三葉蟲到人類的進化過程嗎?不能。但是如果模擬出中間已知的多層隱藏的階段(低等原始生物、無脊椎動物、脊椎動物、魚類、兩棲類、爬行動物、哺乳動物、人類時代)就可以通過海量的訓練數據模擬出。

也可以類比成md5算法的實現,給你無數個輸入字符串和它的md5值,你能用膚淺的算法推出md5的算法嗎?不能。因為md5的計算是一階段一階段的,后一階段的輸入依賴前一階段的結果,無法逆推。但是如果已知中間幾個階段,只是不知道這幾個階段的參數,那么可以通過海量數據訓練出來。

以上說明了神經網絡結構的特別之處:通過較深的多個層次來模擬真實情況,從而構造出最能表達真實世界的模型,它的成本就是海量的訓練數據和巨大的計算量。

 2、神經網絡模型的數學原理

每一個神經元的數學模型是:

其中的矩陣向量乘法

表示的就是輸入多個數據的加權求和,這里的b(也就是上面圖中的+1)是截距值,用來約束參數值,就像是一個向量(1,2,3)可以寫成(2,4,6)也可以寫成(10,20,30),那么我們必須取定一個值,有了截距值就可以限定了

其中f叫做激活函數,激活函數的設計有如下要求:1)保證后期計算量盡量小;2)固定取值范圍;3)滿足某個合理的分布。常用的激活函數是sigmond函數和雙曲正切函數(tanh):

sigmond函數:

 

雙曲正切函數(tanh):

這兩個函數顯然滿足2)固定取值范圍;3)滿足某個合理的分布,那么對於1)保證后期計算量盡量小這個要求來說,他們的好處在於:

sigmond函數的導數是:

tanh函數的導數是:

這會減少非常多的計算量,后面就知道了。

當計算多層的神經網絡時,對於如下三層神經網絡來說

我們知道:

其中的

分別表示第2層神經元的輸出的第1、2、3個神經元產生的值

這三個值經過第3層最后一個神經元計算后得出最終的輸出是:

以上神經網絡如果有更多層,那么計算原理相同。

我們發現這些神經元的激活函數f是相同的,唯一不同的就是權重W,那么我們做學習訓練的目標就是求解這里的W,那么我們如何通過訓練獲得更精確的W呢

3、反向傳導算法

回想一下前面文章講過的回歸模型,我們也是知道大量訓練樣本(x,y),未知的是參數W和b,那么我們計算W的方法是:先初始化一個不靠譜的W和b,然后用輸入x和W和b預估y,然后根據預估的y和實際的y之間的差距來通過梯度下降法更新W和b,然后再繼續下一輪迭代,最終逼近正確的W和b

神經網絡算法也一樣的道理,使用梯度下降法需要設計一個代價函數:

以上是對於一個(x,y)的代價函數,那么當我們訓練很多個樣本時:

其中m是樣本數,左項是均方差,右項是正則化項,我們的目的就是經過多輪迭代讓代價函數最小。

單獨解釋一下對這個正則化項的理解:正則化項的目的是防止過擬合,過擬合的含義就是“太適合這些樣本了,導致不適合樣本之外的數據,泛化能力低”,正則化項首先增大了代價函數的值,因為我們訓練的目的是減小代價函數,所以我們自然就會經過多輪計算逐步減小規則化項,規則化項里面是各個W的平方和,因為∑W=1,所以要想平方和變小,只有讓各個W的值盡量相同,這就需要做一個折中,也就是W既要顯示出各項權重的不同,又要降低差別,因此這里的λ的值就比較關鍵了,λ大了權重就都一樣了,小了就過擬合了,所以需要根據經驗給一個合適的值。

 4、具體計算過程

首先我們為W和b初始化一個很小的隨機值,然后分別對每個樣本經過上面說過的神經網絡的計算方法,計算出y的預估值。

然后按照梯度下降法對W和b進行更新:

 參考教程:

http://ufldl.stanford.edu/wiki/index.php/%E7%A5%9E%E7%BB%8F%E7%BD%91%E7%BB%9C


免責聲明!

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



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