本人弱學校的CS 渣碩一枚,在找工做的時候,發現好多公司都對深度學習有要求,尤爲是CNN和RNN,好吧,啥也不說了,拿過來好好看看。之前看習西瓜書的時候神經網絡這塊就是一個看的很模糊的塊,包括臺大的視頻,上邊有AutoEncoder,感受很亂,因此總和了各類博客,各路大神的知識,總結若是,若有問題,歡迎指出。web
1 人工神經網絡算法
1.1 神經元網絡
神經網絡由大量的神經元相互鏈接而成。每一個神經元接受線性組合的輸入後,最開始只是簡單的線性加權,後來給每一個神經元加上了非線性的激活函數,從而進行非線性變換後輸出。每兩個神經元之間的鏈接表明加權值,稱之爲權重(weight)。不一樣的權重和激活函數,則會致使神經網絡不一樣的輸出。機器學習
舉個手寫識別的例子,給定一個未知數字,讓神經網絡識別是什麼數字。此時的神經網絡的輸入由一組被輸入圖像的像素所激活的輸入神經元所定義。在經過非線性激活函數進行非線性變換後,神經元被激活而後被傳遞到其餘神經元。重複這一過程,直到最後一個輸出神經元被激活。從而識別當前數字是什麼字。函數
神經網絡的每一個神經元以下學習
基本wx + b的形式,其中spa
、
表示輸入向量.net
、
爲權重,幾個輸入則意味着有幾個權重,即每一個輸入都被賦予一個權重設計
b爲偏置biascode
g(z) 爲激活函數
a 爲輸出
若是隻是上面這樣一說,估計之前沒接觸過的十有八九又一定迷糊了。事實上,上述簡單模型能夠追溯到20世紀50/60年代的感知器,能夠把感知器理解爲一個根據不一樣因素、以及各個因素的重要性程度而作決策的模型。
舉個例子,這週末北京有一草莓音樂節,那去不去呢?決定你是否去有二個因素,這二個因素能夠對應二個輸入,分別用x一、x2表示。此外,這二個因素對作決策的影響程度不同,各自的影響程度用權重w一、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個神經元a一、a二、a3皆各自接受來自多個不一樣權重的輸入(由於有x一、x二、x3這三個輸入,因此a1 a2 a3都會接受x1 x2 x3各自分別賦予的權重,即幾個輸入則幾個權重),接着,a一、a二、a3又在自身各自不一樣權重的影響下 成爲的輸出層的輸入,最終由輸出層輸出最終結果。
上圖(圖引自Stanford機器學習公開課)中
此外,輸入層和隱藏層都存在一個偏置(bias unit),因此上圖中也增長了偏置項:x0、a0。針對上圖,有以下公式
此外,上文中講的都是一層隱藏層,但實際中也有多層隱藏層的,即輸入層和輸出層中間夾着數層隱藏層,層和層之間是全鏈接的結構,同一層的神經元之間沒有鏈接。
由上面能夠得知:神經網絡的學習主要蘊含在權重和閾值中,多層網絡使用上面簡單感知機的權重調整規則顯然不夠用了,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