神經網絡15分鐘快速入門!足夠通俗易懂了吧

網絡上已經有很多神經網絡入門的視頻和文章,不過很多都艱深且冗長,即使是所謂的小白教程也看得讓人腦仁疼。

      本篇文章試圖使用最簡潔易懂的文字對一個典型神經網絡做一個較爲完整的介紹。力求讀者在讀完本篇文章後對神經網絡能有一個清晰且全面的認識。

任務描述

      如下圖,我們已知四個數據點(1,1)(-1,1)(-1,-1)(1,-1),這四個點分別對應I~IV象限,如果這時候給我們一個新的座標點(比如(2,2)),那麼它應該屬於哪個象限呢?(沒錯,當然是第I象限,但我們的任務是要讓機器知道)

       “分類”是神經網絡的一大應用,我們使用神經網絡完成這個分類任務。

分類任務

兩層神經網絡

       這裏我們構建一個兩層神經網絡,理論上兩層神經網絡已經可以擬合任意函數。這個神經網絡的結構如下圖,所謂的“兩層”,指的是圖中的兩組連線(W1,W2)。

圖1.兩層神經網絡的一種典型結構

       是不是覺得有點複雜,沒關係,我們一步步看,其實很容易理解:

 

1.簡化的兩層神經網絡分析

       首先去掉圖1中一些難懂的東西,如下圖(請仔細看一下圖中的標註):

圖2.簡化過後的兩層神經網絡

 

1.1.輸入層

       在我們的例子中,輸入層是座標值,例如(1,1),這是一個包含兩個元素的數組,也可以看作是一個1*2的矩陣。輸入層的元素維度與輸入量的特徵息息相關,如果輸入的是一張32*32像素的灰度圖像,那麼輸入層的維度就是32*32。

1.2.從輸入層到隱藏層

       連接輸入層和隱藏層的是W1和b1。由X計算得到H十分簡單,就是矩陣運算:

       如果你學過線性代數,對這個式子一定不陌生。如上圖中所示,在設定隱藏層爲50維(也可以理解成50個神經元)之後,H是大小爲(1*50)的矩陣。

1.3.從隱藏層到輸出層

       連接隱藏層和輸出層的是W2和b2。同樣是通過矩陣運算進行的:

1.4.分析

       通過上述兩個線性方程的計算,我們就能得到最終的輸出Y了,但是如果你還對線性代數的計算有印象的話,應該會知道:一系列線性方程的運算最終都可以用一個線性方程表示。也就是說,上述兩個式子聯立後可以用一個線性方程表達。對於兩次神經網絡是這樣,就算網絡深度加到100層,也依然是這樣。這樣的話神經網絡就失去了意義。

       所以這裏要對網絡注入靈魂:激活層。

 

2.激活層

       簡而言之,激活層是爲矩陣運算的結果添加非線性的。常用的激活函數有三種,分別是階躍函數、Sigmoid和ReLU。不要被奇怪的函數名嚇到,其實它們的形式都很簡單,如下圖:

圖3.三種常用的激活函數

 

階躍函數:當輸入小於等於0時,輸出0;當輸入大於0時,輸出1。

Sigmoid:當輸入趨近於正無窮/負無窮時,輸出無限接近於1/-1。

ReLU:當輸入小於0時,輸出0;當輸入大於0時,輸出等於輸入。

       其中,階躍函數輸出值是跳變的,且只有二值,較少使用;Sigmoid函數在當x的絕對值較大時,曲線的斜率變化很小(梯度消失),並且計算較複雜,因而逐漸被拋棄;ReLU是當前較爲常用的激活函數。

       激活函數具體是怎麼計算的呢?

       假如經過公式H=X*W1+b1計算得到的H值爲:(1,-2,3,-4,7...),那麼經過階躍函數激活層後就會變爲(1,0,1,0,1...),經過ReLU激活層之後會變爲(1,0,3,0,7...)。

       需要注意的是,每個隱藏層計算(矩陣線性運算)之後,都需要加一層激活層,要不然該層線性計算是沒有意義的。

       此時的神經網絡變成了如下圖所示的形式:

圖4.加上激活層的兩層神經網絡

 

       我們都知道(?)神經網絡是分爲“訓練”和“使用”兩個步驟的。如果是在“使用”的步驟,圖4就已經可以完成整個過程了,在求得的Y(大小爲1*4)矩陣中,數值最大的就代表着當前分類。

       但是對於用於“訓練”的網絡,圖4還遠遠不夠。起碼當前的輸出Y,還不夠“漂亮”。

 

3.輸出的正規化

       在圖4中,輸出Y的值可能會是(3,1,0.1,0.5)這樣的矩陣,誠然我們可以找到裏邊的最大值“3”,從而找到對應的分類爲I,但是這並不直觀。我們想讓最終的輸出爲概率,也就是說可以生成像(90%,5%,2%,3%)這樣的結果,這樣做不僅可以找到最大概率的分類,而且可以知道各個分類分別對應的概率值。

       具體是怎麼計算的呢?

       計算公式如下:

       簡單來說分三步進行:(1)以e爲底對所有元素求指數冪;(2)將所有指數冪求和;(3)分別將這些指數冪與該和做商。

       這樣求出的結果中,所有元素的和一定爲1,而每個元素可以代表概率值。

我們將使用這個計算公式做輸出結果正規化處理的層叫做“Softmax”層。此時的神經網絡將變成如下圖所示:

圖5.輸出正規化之後的神經網絡

 

4.如何衡量輸出的好壞

       通過Softmax層之後,我們得到了I,II,III和IV這四個類別分別對應的概率,但是要注意,這是神經網絡計算得到的概率值結果,而非真實的情況。

比如,Softmax輸出的結果是(90%,5%,3%,2%),真實的結果是(100%,0,0,0)。雖然輸出的結果可以正確分類,但是與真實結果之間是有差距的,一個優秀的網絡對結果的預測要無限接近於100%,爲此,我們需要將Softmax輸出結果的好壞程度做一個“量化”。

       一種直觀的解決方法,是用1減去Softmax輸出的概率,比如1-90%=0.1。不過更爲常用且巧妙的方法是,求對數的負數。

還是用90%舉例,對數的負數就是:-log0.9=0.046

       可以想見,概率越接近100%,該計算結果值越接近於0,說明結果越準確,該輸出叫做“交叉熵損失(Cross Entropy Error)”。

       我們訓練神經網絡的目的,就是儘可能地減少這個“交叉熵損失”。

       此時的網絡如下圖:

圖6.計算交叉熵損失後的神經網絡

 

5.反向傳播與參數優化

       上邊的1~4節,講述了神經網絡的正向傳播過程。一句話複習一下:神經網絡的傳播都是形如Y=WX+b的矩陣運算;爲了給矩陣運算加入非線性,需要在隱藏層中加入激活層;輸出層結果需要經過Softmax層處理爲概率值,並通過交叉熵損失來量化當前網絡的優劣。

       算出交叉熵損失後,就要開始反向傳播了。其實反向傳播就是一個參數優化的過程,優化對象就是網絡中的所有W和b(因爲其他所有參數都是確定的)。

       神經網絡的神奇之處,就在於它可以自動做W和b的優化,在深度學習中,參數的數量有時會上億,不過其優化的原理和我們這個兩層神經網絡是一樣的。

       這裏舉一個形象的例子描述一下這個參數優化的原理和過程:

       假設我們操縱着一個球型機器行走在沙漠中

       我們在機器中操縱着四個旋鈕,分別叫做W1,b1,W2,b2。當我們旋轉其中的某個旋鈕時,球形機器會發生移動,但是旋轉旋鈕大小和機器運動方向之間的對應關係是不知道的。我們的目的就是走到沙漠的最低點

       此時我們該怎麼辦?只能挨個試嘍。

       如果增大W1後,球向上走了,那就減小W1。

       如果增大b1後,球向下走了,那就繼續增大b1。

       如果增大W2後,球向下走了一大截,那就多增大些W2。       

       。。。

       這就是進行參數優化的形象解釋(有沒有想到求導?),這個方法叫做梯度下降法。

       當我們的球形機器走到最低點時,也就代表着我們的交叉熵損失達到最小(接近於0)。

       關於反向傳播,還有許多可以講的,但是因爲內容較多,就放在下一篇文章中說吧。不過上述例子對於理解神經網絡參數優化的過程,還是很有幫助的。

6.迭代

       神經網絡需要反覆迭代。

       如上述例子中,第一次計算得到的概率是90%,交叉熵損失值是0.046;將該損失值反向傳播,使W1,b1,W2,b2做相應微調;再做第二次運算,此時的概率可能就會提高到92%,相應地,損失值也會下降,然後再反向傳播損失值,微調參數W1,b1,W2,b2。依次類推,損失值越來越小,直到我們滿意爲止。

       此時我們就得到了理想的W1,b1,W2,b2。

       此時如果將任意一組座標作爲輸入,利用圖4或圖5的流程,就能得到分類結果。

       好了,你已經瞭解了神經網絡的典型結構了,有沒有超過15分鐘捏?

 

 


       後續文章中將:

       1.對反向傳播算法進行詳細的講解;

       2.使用python將上述案例實現並詳細講解。

 

 


另外,公衆號本來的流程應該是先介紹信號時頻域分析方法以及信號特徵提取方法,以及介紹一些統計和隨機過程的知識,最後纔講到神經網絡和深度學習。這篇文章算是給神經網絡系列提前開了個頭。好在神經網絡與其他方法的介紹並不衝突,就作爲另一條主線一同爲大家講解和分享吧。

歡迎持續關注!

 

 

 

 

其實神經網絡和生物的神經元網絡還是不太一樣的

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章