從數字識別開始學習神經網路(二)
Multilayer perceptron 多層感知機
下面我們來學習下經典的原版的神經網路.
除了輸入層和輸出層,它中間有多個隱藏層.回顧下我們的問題,我們要識別一個28*28=784像素的圖片中的數字.
所以784個像素是作為輸入,作為網路的第一層,也就是輸入層.輸出層這裡有10個神經元,分別代表0到9一共10個數字.其取值範圍和輸入一樣為0-1;神經元具體的值可以認為是輸入的圖像被識別為對應數字的可能性網路中有2層"隱藏層",這裡有2個隱藏層,每一層具有16個神經元.
為什麼2層?為什麼16個?這些都比較"玄學"了.這些設置都是隨意設置的.問題:為什麼不可以輸出層只有1個神經元,然後這個值就是識別出的數字?
因為這樣的一個轉換就不用神經網路了.你都知道最後10個神經元與最後輸出神經元的一個明確的映射關係了.
我們只要專註前面10個神經元的激活值怎麼通過神經網路得到就好了.最後一層10個神經元的激活值,是當網路運作時,上一層的激活值決定下一層的激活值.
神經網路的核心就是要找出這個決定關係.784個像素值決定了第二層16個神經元的值;第二層的16個神經元的值決定了第三層16個神經元的值;第三層的16個神經元的值決定了最後輸出層10個神經元的值;10個神經元裡面最亮(大)的一個就是這個網路的選擇其識別的數字;
為什麼分層
個人感覺目前神經網路模型以及其各種變型都是設計者的一些樸素思考.
上面的模型,之所以有2層隱藏層.可能設計者希望第一層能夠從784像素中找到類似"短橫線","短豎線"的模型,然後第二層能夠通過第一層識別出來的模型識別出"圓圈""長豎線",最後識別出數字.但是生物學裡面,人腦怎麼識別出數字的原理還無法解釋.而神經網路最後能否真的按照找個規律識別出數字就更不好說了.根據上述的想法,
我們將第一層784個神經元和第二層的某一個神經元連接.
將784條連接線都賦上一個權重值(Weight),我們將所有激活值和對應權重放在一起,算出其加權和正的權重, 就是將對應像素的格子變亮;負的權重, 就是將對應像素的格子變黑;
但是最後算出來的值是任意大小,對於這個網路,我們希望激活值處於0~1之間.
很自然我們就要進行函數轉換,將這個值壓縮到0~1之間. 這裡採用了sigmod函數同時,設計者又想到了,第一層到第二層的變化中,可能要多考慮些.除了各個權重和激活值的加權和外,還能有一個開關(控制)來影響第二層的激活值.
我們現在統計下,整個網路有多少個權重和偏置,才能最後使得網路可運作.
第二層有16個神經元,和前面784個神經元連接,784*16個Weights和 16個Bias;第三層有16個神經元,和前面16個神經元連接, 16*16個Weights 和 16個Bias;輸出層有10個神經元,和前面16個神經元鏈接, 16*10個Weights 和 10個Bias;
總用13,002個權重和偏置.
當我們說機器學習的時候,就是要通過某種方法去學習到這13002個參數,使得我們最後能解決問題.只要我們有了這13002個參數,輸入任意784個像素的值,那麼肯定能算出最後10個神經元的值,從中找出最大的一個值所代表的數字, 得到識別的數字.只是這個函數有13002個參數(w1,w2….wn,b1...bm),同時變數是x1,x2,x3…x784共784個輸入,得到y0,y1…y9一共10個輸出值.同時,這個函數內部進行大量的矩陣乘法運算以及sigmody映射運算.但它歸根到底還是一個函數罷了.也正因為它複雜,我們才安心地認為只要我們找到正確的w1,w2,w3…,我們就能夠用這麼一個函數來識別圖像,而不是用各種複雜地自己認為的代碼規則去識別圖像了.推薦閱讀:
※Deep Metric Learning via Lifted Structured Feature Embedding(CVPR,2016)
※PMF:概率矩陣分解
※製作假新聞?AI送你去喝茶!
※10分鐘機器學會打牌——21點
※【翻譯】Brian2高級指導_狀態更新
TAG:深度學習DeepLearning | 機器學習 | 神經網路 |