本人弱學校的CS 渣碩一枚,在找工作的時候,發現好多公司都對深度學習有要求,尤其是CNN和RNN,好吧,啥也不說了,拿過來好好看看。以前看習西瓜書的時候神經網絡這塊就是一個看的很模糊的塊,包括台大的視頻,上邊有AutoEncoder,感覺很亂,所以總和了各種博客,各路大神的知識,總結如果,如有問題,歡迎指出。
1 人工神經網絡
1.1 神經元
神經網絡由大量的神經元相互連接而成。每個神經元接受線性組合的輸入后,最開始只是簡單的線性加權,后來給每個神經元加上了非線性的激活函數,從而進行非線性變換后輸出。每兩個神經元之間的連接代表加權值,稱之為權重(weight)。不同的權重和激活函數,則會導致神經網絡不同的輸出。
舉個手寫識別的例子,給定一個未知數字,讓神經網絡識別是什么數字。此時的神經網絡的輸入由一組被輸入圖像的像素所激活的輸入神經元所定義。在通過非線性激活函數進行非線性變換后,神經元被激活然后被傳遞到其他神經元。重復這一過程,直到最后一個輸出神經元被激活。從而識別當前數字是什么字。
神經網絡的每個神經元如下
基本wx + b的形式,其中
-
、
表示輸入向量
-
、
為權重,幾個輸入則意味着有幾個權重,即每個輸入都被賦予一個權重
-
b為偏置bias
-
g(z) 為激活函數
-
a 為輸出
如果只是上面這樣一說,估計以前沒接觸過的十有八九又必定迷糊了。事實上,上述簡單模型可以追溯到20世紀50/60年代的感知器,可以把感知器理解為一個根據不同因素、以及各個因素的重要性程度而做決策的模型。
舉個例子,這周末北京有一草莓音樂節,那去不去呢?決定你是否去有二個因素,這二個因素可以對應二個輸入,分別用x1、x2表示。此外,這二個因素對做決策的影響程度不一樣,各自的影響程度用權重w1、w2表示。一般來說,音樂節的演唱嘉賓會非常影響你去不去,唱得好的前提下 即便沒人陪同都可忍受,但如果唱得不好還不如你上台唱呢。所以,我們可以如下表示:
-
:是否有喜歡的演唱嘉賓。
= 1 你喜歡這些嘉賓,
= 0 你不喜歡這些嘉賓。嘉賓因素的權重
= 7
-
:是否有人陪你同去。
= 1 有人陪你同去,
= 0 沒人陪你同去。是否有人陪同的權重
= 3。
這樣,咱們的決策模型便建立起來了:g(z) = g( *
+
*
+ b ),g表示激活函數,這里的b可以理解成 為更好達到目標而做調整的偏置項。
一開始為了簡單,人們把激活函數定義成一個線性函數,即對於結果做一個線性變化,比如一個簡單的線性激活函數是g(z) = z,輸出都是輸入的線性變換。后來實際應用中發現,線性激活函數太過局限,於是人們引入了非線性激活函數。
1.2 激活函數
常用的非線性激活函數有sigmoid、tanh、relu等等,前兩者sigmoid/tanh比較常見於全連接層,后者relu常見於卷積層。這里先簡要介紹下最基礎的sigmoid函數(btw,在本博客中SVM那篇文章開頭有提過)。
sigmoid的函數表達式如下
其中z是一個線性組合,比如z可以等於:b + *
+
*
。通過代入很大的正數或很小的負數到g(z)函數中可知,其結果趨近於0或1。
因此,sigmoid函數g(z)的圖形表示如下( 橫軸表示定義域z,縱軸表示值域g(z) ):
也就是說,sigmoid函數的功能是相當於把一個實數壓縮至0到1之間。當z是非常大的正數時,g(z)會趨近於1,而z是非常小的負數時,則g(z)會趨近於0。
壓縮至0到1有何用處呢?用處是這樣一來便可以把激活函數看作一種“分類的概率”,比如激活函數的輸出為0.9的話便可以解釋為90%的概率為正樣本。
舉個例子,如下圖(圖引自Stanford機器學習公開課)
z = b + *
+
*
,其中b為偏置項 假定取-30,
、
都取為20
-
如果
= 0
= 0,則z = -30,g(z) = 1/( 1 + e^-z )趨近於0。此外,從上圖sigmoid函數的圖形上也可以看出,當z=-30的時候,g(z)的值趨近於0
-
如果
= 0
= 1,或
=1
= 0,則z = b +
*
+
*
= -30 + 20 = -10,同樣,g(z)的值趨近於0
-
如果
= 1
= 1,則z = b +
*
+
*
= -30 + 20*1 + 20*1 = 10,此時,g(z)趨近於1。
換言之,只有和
都取1的時候,g(z)→1,判定為正樣本;
或
取0的時候,g(z)→0,判定為負樣本,如此達到分類的目的。
1.3 神經網絡
將下圖的這種單個神經元
組織在一起,便形成了神經網絡。下圖便是一個三層神經網絡結構
上圖中最左邊的原始輸入信息稱之為輸入層,最右邊的神經元稱之為輸出層(上圖中輸出層只有一個神經元),中間的叫隱藏層。
啥叫輸入層、輸出層、隱藏層呢?
-
輸入層(Input layer),眾多神經元(Neuron)接受大量非線形輸入訊息。輸入的訊息稱為輸入向量。
-
輸出層(Output layer),訊息在神經元鏈接中傳輸、分析、權衡,形成輸出結果。輸出的訊息稱為輸出向量。
-
隱藏層(Hidden layer),簡稱“隱層”,是輸入層和輸出層之間眾多神經元和鏈接組成的各個層面。如果有多個隱藏層,則意味着多個激活函數。
同時,每一層都可能由單個或多個神經元組成,每一層的輸出將會作為下一層的輸入數據。比如下圖中間隱藏層來說,隱藏層的3個神經元a1、a2、a3皆各自接受來自多個不同權重的輸入(因為有x1、x2、x3這三個輸入,所以a1 a2 a3都會接受x1 x2 x3各自分別賦予的權重,即幾個輸入則幾個權重),接着,a1、a2、a3又在自身各自不同權重的影響下 成為的輸出層的輸入,最終由輸出層輸出最終結果。
上圖(圖引自Stanford機器學習公開課)中
表示第j層第i個單元的激活函數/神經元
表示從第j層映射到第j+1層的控制函數的權重矩陣
此外,輸入層和隱藏層都存在一個偏置(bias unit),所以上圖中也增加了偏置項:x0、a0。針對上圖,有如下公式
此外,上文中講的都是一層隱藏層,但實際中也有多層隱藏層的,即輸入層和輸出層中間夾着數層隱藏層,層和層之間是全連接的結構,同一層的神經元之間沒有連接。
2 誤差逆傳播算法(BP)
由上面可以得知:神經網絡的學習主要蘊含在權重和閾值中,多層網絡使用上面簡單感知機的權重調整規則顯然不夠用了,BP神經網絡算法即誤差逆傳播算法(error BackPropagation)正是為學習多層前饋神經網絡而設計,BP神經網絡算法是迄今為止最成功的的神經網絡學習算法。
一般而言,只需包含一個足夠多神經元的隱層,就能以任意精度逼近任意復雜度的連續函數[Hornik et al.,1989],故下面以訓練單隱層的前饋神經網絡為例,介紹BP神經網絡的算法思想。
上圖為一個單隱層前饋神經網絡的拓撲結構,BP神經網絡算法也使用梯度下降法(gradient descent),以單個樣本的均方誤差的負梯度方向對權重進行調節。可以看出:BP算法首先將誤差反向傳播給隱層神經元,調節隱層到輸出層的連接權重與輸出層神經元的閾值;接着根據隱含層神經元的均方誤差,來調節輸入層到隱含層的連接權值與隱含層神經元的閾值。BP算法基本的推導過程與感知機的推導過程原理是相同的,下面給出調整隱含層到輸出層的權重調整規則的推導過程:
參考自:http://blog.csdn.net/zouxy09/article/details/8781543
http://m.blog.csdn.net/v_JULY_v/article/details/51812459