之前我們瞭解了神經網絡模型(Nerual Network),這一次,我們來具體討論一下神經網絡模型的表達。
我們知道,神經網絡模型是許多邏輯單元(Logistics Unit)按照不同的層級組織起來的網絡,每一層的輸出變量作爲下一層的輸入變量。如下圖,是一個三層的神經網絡,第一層爲輸入層(Input Layer),最後一層爲輸出層(Output Layer),中間的一層爲隱藏層(Hidden Layer)。我們爲每一層都增加一個偏倚單位(Bias Unit):
下面呢,我們引入一些標記法來幫助我們描述模型:
對於上面的圖示的模型,激活單元和輸出分別表達爲:
到目前,我們討論的只是將特徵矩陣中的一行(也就是一個訓練實例)餵給了神經網絡,事實上我們需要將整個訓練集都餵給我們的神經網絡算法來學習模型。
正向傳播(Forward Propagation)
相對於使用循環來進行編碼,利用向量化的方法會使得計算更爲簡單快捷。
我們就使用上面的神經網絡爲例,試着計算第二層的值:
我們令:
則:
計算之後添加:
則計算輸出的值爲:
我們令:
則:
這只是針對訓練集中一個訓練實例所進行的計算。如果我們要對整個訓練集進行計算,我們需要將訓練集特徵矩陣進行轉置,使得同一個實例的特徵都在同一列裏,即:
對神經網絡的一些理解
從本質上講,神經網絡能夠通過學習得出其自身的一系列特徵。在之前我們討論過的普通的邏輯迴歸(Logistic Regression)中,我們被限制爲使用數據中的原始特徵x1,x2,...,xn,我們雖然可以使用一些二項式項來組合這些特徵,但是我們仍然受到這些原始特徵的限制。在神經網絡中,原始特徵只是輸入層,像我們上面的那個三層神經網絡的例子中,第三層,也就是輸出層,做出的預測利用的是第二層的特徵,而非輸入層中的原始特徵,我們可以認爲第二層中的特徵是神經網絡通過學習之後,自己得出的一系列用於預測輸出變量的新特徵。
神經網絡的一些示例:二元邏輯運算符(Binary Logical Operators)
當輸入的特徵爲布爾值(0或1)時,我們可以使用一個單一的激活層可以作爲二元邏輯運算符,爲了表示不同的運算符,我們只需要選擇不同的權重即可。
如下圖,神經元(三個權重分別爲-30,20,20)可以被視爲作用同邏輯與(AND):
下面的神經元(三個權重分別爲-10,20,20)可以被視爲作用同邏輯或(OR):
下圖的神經元(兩個權重分別爲10,-20)可以被視爲作用同邏輯非(NOT):
我們可以利用神經元來組合成更爲複雜的神經網絡以實現更加複雜的運算。例如,我們要實現XNOR功能(輸入的值必須一樣,都爲1或都爲0),即 XNOR = (X1 AND X2) OR ((NOT X1)AND(NOT X2))。
首先,構造一個能夠表達(NOT X1)AND(NOT X2)部分的神經元:
然後將表示AND的神經元和表示(NOT X1)AND(NOT X2)的神經元,以及表示OR的神經元進行組合:
這樣,我們就得到了一個能夠實現XNOR運算符功能的神經網絡了。
多類分類
假設,我們要訓練一個神經網絡算法來識別路人、汽車、摩托車和卡車,在輸出層,我們應該有4個不同的值。例如,第一個值爲1或0用來預測是否是行人,第二個值用來判斷是否是汽車等等。
下圖表示,該假設的神經網絡的一種可能結構:
神經網絡算法的輸出結果,爲四種情況可能情形之一:
綜上,我們深入探討了一下神經網絡模型的表達、二元邏輯運算符等神經網絡的內容,下一次我們討論神經網絡學習的問題。