標籤:

我所理解的神經網路

神經網路分為兩種,一種是生物神經網路,一種是人工神經網路。

生物神經網路:一般指生物的大腦神經元、細胞、觸點等組成的網路,用於產生生物的意識,幫助生物進行思考和行動。

人工神經網路:是一種應用類似於大腦神經突觸聯接的結構進行信息處理的數學模型。在工程與學術界也常直接簡稱為「神經網路」或類神經網路。

人類模仿能力是個很bug的技能,如果是模仿的話,我們先看看本模仿的主體有什麼樣的特徵吧。神經網路=神經元+網路,大量的神經元組成的網路,叫神經網路。所以主角是神經元:

一個神經元通常具有多個樹突,主要用來接受傳入信息;而軸突只有一條,軸突尾端有許多軸突末梢可以給其他多個神經元傳遞信息。軸突末梢跟其他神經元的樹突產生連接,從而傳遞信號。這個連接的位置在生物學上叫做「突觸」。

一個神經元一個神經元的連接起來就構成了複雜的網路結構:

以上是生物學上的神經元,我們現在來看看把生物神經元的生命特徵抽象出來後,我們構建了一個怎樣的數學模型----神經元模型。

神經元模型是一個包含輸入,輸出與計算功能的模型。輸入可以類比為神經元的樹突,而輸出可以類比為神經元的軸突,計算則可以類比為細胞核。那麼輸入輸出的方程就是:

z=g(a1*w1+a2*w2+a3w3)

其中函數g叫做激活函數。

一個一個的神經元模型連接起來就成了神經網路模型,對,連接是個非常重要的東西,每個連接上都有一個權重,一個神經網路的訓練演算法就是讓權重的值調整到最佳,以使得整個網路的預測效果最好。

接下來我們構建一個簡單的神經網路模型。

我們使用圓圈來表示神經網路的輸入,標上"+1"的圓圈被稱為偏置節點,也就是截距項。神經網路最左邊的一層叫做輸入層,最右的一層叫做輸出層(本例中,輸出層只有一個節點)。中間所有節點組成的一層叫做隱藏層,因為我們不能在訓練樣本集中觀測到它們的值。同時可以看到,以上神經網路的例子中有3個輸入單元(偏置單元不計在內),3個隱藏單元及一個輸出單元。

我們用 n_{l} 來表示網路的層數,我們將第 l 層記為L_{l} 。上面的神經網路有參數 :

(W,b)=({W}^{(1)},{b}^{(1)},{W}^{(2)},{b}^{(2)})

其中 W_{ij}^{(l)} 是第 l 層第j個單元與第l+1層第 i個單元之間的聯接參數(連線上的權重), b_{i}^{(l)} 是第l+1層第i個單元的偏置項,所以 W^{(1)} 是3X3的矩陣, W^{(2)} 是1X3的矩陣。注意,沒有其他單元連向偏置單元(即它沒有輸入),因為它們總是輸出+1。同時,我們用 s_{l} 表示 l 層的節點數(偏置單元不計在內)。

我們用 a^{(l)}_{i} 表示第 l層第i單元的激活值(輸出值),當l=1時, a^{(1)}_{i}=x^{i} 。對於給定參數集合W,b,我們的神經網路就可以按照 h_{W,b}(x) 來計算出結果。所以上面的三層神經網路的計算步驟為:

a^{(2)}_{1}=f(W_{11}^{(1)}x_{1}+W_{12}^{(1)}x_{1}+W_{13}^{(1)}x_{3}+b_{1}^{(1)})

a^{(2)}_{2}=f(W_{21}^{(1)}x_{1}+W_{22}^{(1)}x_{1}+W_{23}^{(1)}x_{3}+b_{2}^{(1)})

a^{(2)}_{3}=f(W_{31}^{(1)}x_{1}+W_{32}^{(1)}x_{1}+W_{33}^{(1)}x_{3}+b_{3}^{(1)})

h_{W,b}(x)=a^{(3)}_{1}=f(W_{11}^{(2)}a^{(2)}_{1}+W_{12}^{(2)}a^{(2)}_{2}+W_{13}^{(2)}a^{(2)}_{3}+b_{1}^{(2)})

我們用 z_{i}^{(l)} 表示第l 層第i個單元輸入加權和(包括偏置單元),例如:

z_{i}^{(2)}=sum_{j=1}^{n}{W_{ij}}^{(1)}x_{j}+b_{i}^{1}

並且我們將激活函數f(.)擴展為用向量(分量的形式)來表示,即:

f([z_{1},z_{2},z_{3}])=[f(z_{1}),f(z_{2}),f(z_{3})]

所以上面的公式我們可以簡化為:

z^{(2)}=W^{(1)}x+b^{(1)}

a^{(2)}=f(z^{(2)})

z^{(3)}=W^{(2)}a^{(2)}+b^{(2)}

h_{W,b}(x)=a^{(3)}=f(z^{(3)})

好,到此為止,我們算出了輸入值x和輸出值的關係函數 h_{W,b}(x) 。我們把這個計算步驟叫做前向傳播,給定第l層的激活值 a^{(l)} 後,第l+1層的激活值 a^{(l+1)} 就可以按照下面步驟計算得到:

z^{(l+1)}=W^{(l)}a^{(l)}+b^{l}

a^{(l+1)}=f(z^{(l+1)})

將參數矩陣化,使用矩陣-向量運算方式,我們就可以利用線性代數的優勢對神經網路進行快速求解。

你應該會有很多疑問,以上做的這些操作,沒有看出來哪裡是神經網路的表現呀,算到最後的結果也就是一個函數,反過來看,只是求這個函數的過程被形象化地用網路節點的形式表現出來了而已。對,你說的沒有錯,神經網路的結果其實就是求一個表達式而已,但是這個表達式可能會非常複雜,複雜到,你沒有辦法理順,通過網路,我們可以把這個複雜的函數,分解成一個一個簡單的激活函數,然後再通過簡單的規則把激活函數拼接起來:

複雜度為n的函數=複雜度為1的函數+。。。。。+複雜度為1的函數

以上是我自己的理解,你們看看就好,嘿嘿。

其實上面只是一種前饋神經網路,也就是說,信息只能從i層傳到i+1層,不能反過來傳遞,所以要作為機器學習模型,是不完整的,信息必須要能往回傳才行,還有一個非常重要的部分沒有提及到,那就是反向傳播,反向傳播 能讓信息從i+1層傳遞到i層。你真聰明,沒有錯,下篇文章的主題將是 反向傳播。

今天就先到這裡,晚安。

推薦閱讀:

Deep Residual Network 深度殘差網路
如何評價德國計算機神經網路科學家發表的這篇可以讓電腦模仿任何畫家的風格作畫的論文?
設計神經網路硬體架構時,我們在思考些什麼?(上)| 硬創公開課

TAG:神经网络 |