第四周筆記:神經網路是什麼

神經網路是什麼?

圖中可以看出,就是一個細胞元,由突觸,連接到另外幾個細胞元,組成的三維網狀結構。

細胞元之間傳遞信息的方式是興奮或者抑制,可以按照上節課的邏輯回歸演算法的0和1來看待。同一時間,突觸只能單向傳遞信號。

所以,把神經網路符號化,簡化一下就是這樣:

我們把每一次,函數接收的所有數據,叫做一個層。簡單地可以把數據接收作為層1,接受到層1的所有數據並處理的叫做層2,接收層2數據並處理後傳遞給下一次用的數據叫做層3……依此類推。

那麼這樣的話,多出來的那個+1是怎麼回事呢?任何一個參數的0次方就是1……表示一個常數也稱之為偏置項。

按照我們之前筆記里的,把x_0記作1,把a_0記作1,那麼,上面那個網路就變成了下面這樣了。

我們把從外接接受數據的層,稱之為輸入曾(input layer),產生最終結果的層,稱之為輸出層(Output layer),中間的所有層我們一般不直接看到,所以稱之為隱藏層(hiden layer)。

我們把隱藏層j里的第i個數據表示為a_i^{(j)},處理上一層的所有數據,得到這個數據的函數的參數	heta表示為(向量)	heta_i,(向量)	heta_i里的第k個數據為	heta_{ik},處理它們的函數為g_	heta(x)

例如,如果j等於2,也就是第2層,這個層里有3個數據,分別是a_1^{(2)},a_2^{(2)},a_3^{(2)},其中a_1^{(2)}=g(	heta_1^{(2)}.*X),也就是:a_1^{(2)}=g(	heta_{10}^{(2)}*x_0+	heta_{11}^{(2)}*x_1+	heta_{12}^{(2)}*x_2+	heta_{13}^{(2)}*x_3)。同理,

a_2^{(2)}=g(	heta_2^{(2)}.*X),也就是:a_2^{(2)}=g(	heta_{20}^{(2)}*x_0+	heta_{21}^{(2)}*x_1+	heta_{22}^{(2)}*x_2+	heta_{23}^{(2)}*x_3)

a_3^{(2)}=g(	heta_3^{(2)}.*X),也就是:a_3^{(2)}=g(	heta_{30}^{(2)}*x_0+	heta_{31}^{(2)}*x_1+	heta_{32}^{(2)}*x_2+	heta_{33}^{(2)}*x_3)

而如果j大於2,那麼裡面的X就是[a_0^{(j-1)},a_1^{(j-1)},a_2^{(j-1)},a_3^{(j-1)}]也就是x變成了a,也就是a_i^{(j)}=g(	heta_i^{(j-1)}.*A^{(j-1)})

同理,最後一個要得出的輸出曾,也是h_	heta(x)=g(	heta_i^{(3)}.*A^{(3)})(假設有3層。)

神經網路演算法,就是模仿細胞的傳遞方式,每個「層」相當於包含很多細胞(函數),來處理上一層細胞傳遞過來的數據。每一層的數據依賴於上一層的數據,以及每一層的	heta。常說的「我不知道是怎麼實現的」說的就是隱藏層。

然後是理解神經網路為什麼能分類……

還是拿邏輯回歸當作裡面的小函數舉例:就是那個g(	heta*x)

那個函數圖不是長這樣嗎?

那神經網路,就是興奮和抑制,我們把興奮當作1,抑制當作0。由於是以邏輯回歸舉例,所以特徵量1或者0對吧。邏輯回歸嘛。邏輯無非是,是,非,與,或,異或。其他的都是建立在這個之上的。

先說"是":g(	heta*x)中,	heta*x大於10,那麼g(	heta*x)就無限趨近於1了對吧。所以系統學習時擬合個數字出來	heta大於10的出來就可以了。例如g(20*x-10)就可以表示邏輯是。這時候如果x為0,那就是否。(而如果你選擇g(	heta*x)=g(10*x)的話,當x為0,就是0.5……成薛定諤的貓了。)

然後"非":同理,g(	heta*x)中,	heta*x小於10,就非常近似於0了。所以系統學習時擬合個數字出來	heta出來,讓	heta*x小於10即可。例如g(10-20*x)就可以表示邏輯非。

然後是與:同理,g(	heta_0+	heta_1*x_1+	heta_2*x_2)中,x1和x2同為1時(	heta_0+	heta_1*x_1+	heta_2*x_2)大於10,就非常近似於1了。也很簡單,比如:g(-30+20*x_1+20*x_2)就滿足條件。

然後是或:g(	heta_0+	heta_1*x_1+	heta_2*x_2)中,x1和x2有一個為1,(	heta_0+	heta_1*x_1+	heta_2*x_2)大於10即可。也很簡單,比如:g(-10+20*x_1+20*x_2)就滿足條件。

然後是異或,異或其實就是一個x1先是一下,另一個x1非一下的與組合……比如x1是,x2非時才成立,g(	heta_0+	heta_1*x_1+	heta_2*x_2)g(-10+20*x_1-20*x_2)就可以了。

所以你看,也就是說(在我們假設的結果和特徵量都只有0和1的情況下),每一層有	hetax就可以得到下一層了。神經網路就是把很多層拉到一起,看起來複雜了些。

而多元分類問題里的話,就是把裡面的參數變成向量(和矩陣)而已(和之前筆記里一樣)。實際演算法都差不多。

第四周筆記結束(這樣看神經網路就好入門多了……先理解是什麼,為什麼有效,下周再理解怎麼用。一上來就來讓你算	heta,搞不懂反向傳播演算法,是好多人神經網路演算法學蒙了的重要原因……)。


推薦閱讀:

卷積神經網路(CNN)的參數優化方法
[Matlab]BP神經網路預測[1]
淺談神經網路與數學之間的關係
神經網路中利用矩陣進行反向傳播運算的實質

TAG:神经网络 | 机器学习 | 分类 |