本文爲神經網絡綜合系列的第一篇,經過學習,你也將實現多個功能學習/深度學習算法,能看到它們爲你工做,並學習如何應用/適應這些想法到新問題上。文章內容是假定您有基本的機器學習基礎之上進行的(特別是熟悉的監督學習,邏輯迴歸,梯度降低的想法)算法
1. 關鍵詞網絡
neural networks 神經網絡機器學習
activation function 激活函數函數
hyperbolic tangent 雙曲正切函數學習
bias units 偏置項深度學習
activation 激活值it
forward propagation 前向傳播io
feedforward neural network 前饋神經網絡function
2. 概述基礎
以監督學習爲例,假設咱們有訓練樣本集(x[^i], y[^i]),那麼神經網絡算法可以提供一種複雜且非線性的假設模型h[W,b](x),他具備參數W和b,能夠以此參數來擬合咱們的數據。
爲了描述神經網絡,咱們先從最簡單的神經網絡講起,這個神經網絡僅由一個「神經元」構成,如下便是這個「神經元」的圖示:
這個「神經元」是一個以x[1], x[2], x[3]以及截距偏置項+1爲輸入值的運算單元,輸出爲:
其中函數:f:R----> R^稱之爲「激活函數」。本文中我選擇的是sigmoid做爲激活函數f(.),以下所示。
能夠看出,這個單一「神經元」的輸入- 輸出映射關係其實就是一個邏輯迴歸(logisticregression)。
雖然本文采用sigmoid函數,但你也能夠選擇雙曲正切函數(tanh),以下所示。
一下分別是sigmoid 和tanh函數的圖像。
注意,tanh函數是sigmoid函數的一種變體,取值範圍爲[-1, 1]。
有一個等式咱們之後會常常用到:
若f(z) = 1/(1 + exp(-z))
則f(z)導數爲:f(z) * (1- f(z))
若f(z) = tanh(z)
則f(z)導數爲1 - (f(z))^2
3. 神經網絡模型
所謂神經網絡就是將許多個單一「神經元」聯結在一塊兒,這樣,一個「神經元」的輸出就能夠是另外一個「神經元」的輸入。例如,下圖就是一個簡單的神經網絡:
咱們使用圓圈來表示神經網絡的輸入,標上「+1 」的圓圈被稱爲偏置節點,也就是截距項。神經網絡最左邊的一層叫作輸入層,最右的一層叫作輸出層(本例中,輸出層只有一個節點)。中間全部節點組成的一層叫作隱藏層,由於咱們不能在訓練樣本集中觀測到它們的值。同時能夠看到,以上神經網絡的例子中有3個輸入單元(偏置單元不計在內),3個隱藏單元及一個輸出單元。
使用nl表示網絡的層數,假設nl = 3,將第l層標記爲L[l], 因此L[1]是輸入層,L[2].....L[nl-1]是隱藏層,L[nl]是輸出層。參數爲(W, b) = {W[^1], b[^1], W[^2], b[^2]},其中W[^l][ij]是l層第j個單元與第l+1層單元之間的鏈接參數, b[^l][i]是第l+1層第i個單元的偏置項。所以在本例中,W[^1] <<R[^(3x3)],即3x3的矩陣,W[^2] << R[^(1x3)]。同時,使用s[l]表示第l層的節點數。
使用a[^l][i]表示第l層第i個單元的激活值,當l = 1 時, a[^1][i] = x[i],也就是第i個輸入值。對於給定採納數集合W,b,咱們的神經網絡就樂意按照函數h[W,b](x)來計算輸出結果。具體的推導過程以下所示:
咱們使用Z[^l][i]表示第l層第i個單元輸入加權和(包括偏置單元),好比。
這樣咱們就能夠獲得一種更簡潔的表示法。這裏咱們將激活函數f(.) 擴展爲用向量(份量的形式)來表示,即
那麼,上面的等式能夠更簡潔地表示爲:
咱們將上面的計算步驟叫做前向傳播。回想一下,以前咱們用a[^1] = x 表示輸入層的激活值,那麼給定第l層的激活值 後,第l+1 層的激活值a[^(l+1)] 就能夠按照下面步驟計算獲得:
將參數矩陣化,使用矩陣-向量運算方式,咱們就能夠利用線性代數的優點對神經網絡進行快速求解。
目前爲止,咱們討論了一種神經網絡,咱們也能夠構建另外一種結構的神經網絡(這裏結構指的是神經元之間的聯接模式),也就是包含多個隱藏層的神經網絡。最多見的一個例子是nl 層的神經網絡,第1 層是輸入層,第nl 層是輸出層,中間的每一個層l 與層l+1 緊密相聯。這種模式下,要計算神經網絡的輸出結果,咱們能夠按照以前描述的等式,循序漸進,進行前向傳播,逐一計算第L2 層的全部激活值,而後是第L3 層的激活值,以此類推,直到第L[nl] 層。這是一個前饋神經網絡的例子,由於這種聯接圖沒有閉環或迴路。
神經網絡也能夠有多個輸出單元。好比,下面的神經網絡有兩層隱藏層: L2及L3 ,輸出層L4有兩個輸出單元。
要求解這樣的神經網絡,須要樣本集 (x[^i], y[^i]),其中y[^i] << R[^2] 。若是你想預測的輸出是多個的,那這種神經網絡很適用。(好比,在醫療診斷應用中,患者的體徵指標就能夠做爲向量的輸入值,而不一樣的輸出值 y[i]能夠表示不一樣的疾病存在與否。)
以爲看完文章有所收穫的朋友能夠點贊+關注哦,觀看主頁有驚喜~