之前我們了解了神經網絡模型(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用來預測是否是行人,第二個值用來判斷是否是汽車等等。
下圖表示,該假設的神經網絡的一種可能結構:
神經網絡算法的輸出結果,為四種情況可能情形之一:
綜上,我們深入探讨了一下神經網絡模型的表達、二進制邏輯運算符等神經網絡的内容,下一次我們讨論神經網絡學習的問題。