原力君在系列的第五篇《人工智慧系列(五) 深度學習簡介》中提到深度學習可以看作是一種更高級的函數擬合方法;人工神經網絡、激活函數、代價函數、梯度下降、反向傳播是深度學習的幾個關鍵點;常見的深度學習神經網絡結構有多層感知機、DNN、CNN、RNN等。從另一個角度看,不管是哪種網絡結構,其根本還是從傳統的神經網絡、多層感知機發展而來的。本篇聊聊神經網絡和多層感知機。
我們在上一篇中提到高中學過的線性擬合,線性回歸。神經網絡在深度學習中的作用,就類似於線性回歸方程y=ax+b的作用。從另一個角度看,線性回歸方程y=ax+b就是一個最簡單的神經網絡。在實際工程中,我們的研究對象可能比較複雜,很難用一個線性方程來表示其模型。值得高興的是,研究者已經證明了一個事實:人工神經網絡可以用來表徵任何形式的函數。
人工神經元是人工神經網絡的基礎
與人的大腦神經網絡類似,人工神經網絡的基礎是人工神經元。我們先介紹一種簡單的人工神經元:感知機。感知機,顧名思義就是用來感知輸入數據是否符合某一類特性或者是否屬於某一類物體的;它的輸出是0或1,其中0表示不屬於,1表示屬於);感知機的結構如圖所示。
感知機的輸出是輸入的分段線性函數,輸出的表達式如下:
可能有朋友會問:就這麼簡單一個東西,能用來搞深度學習嗎?哲學中有一句話說得好,那就是量變引起質變。我們看看,這麼一個簡單的感知器組合起來是什麼樣子:
所以說,不要小瞧一個簡單的東西。話不多說,我們繼續回到深度學習。我們希望的是能夠通過調整那些參數w1,w2,…,wn從而使得其output連續的變化,進而可以利用已知的輸入數據和輸出數據來優化這些參數,使得神經網絡可以更好地擬合輸入輸出數據的函數關係。但是感知器的output函數輸出只有兩個數,顯然是不連續的,參數的微調並不能帶來輸出的微量變化。
為了讓我們可以通過微調神經網絡的參數來擬合函數關係,實踐家們給出了一種更實用的人工神經元:sigmoid神經元。Sigmoid神經元與感知器的結構是一模一樣的,唯一不同的是output不再是一個分段函數,而變成了一個sigmoid連續函數。如下圖所示,它相當於把感知機的分段函數給用一個圓滑的曲線連續化了。
Sigmoid函數的表達式為
因此sigmoid神經元的輸出表達式為
上面的描述中,不管output是輸入的分段函數形式還是sigmoid函數形式,這些函數都稱為神經元的激活函數。
多層感知機、DNN、RNN與CNN
前面我們提到,無數個簡單的人工神經元可以組成一個複雜的神經網絡。在深度學習中,神經網絡的結構大概可以用上圖表示。圖中可以看到,神經網絡分為很多層。輸入端的網絡稱為輸入層,輸出端的網絡稱為輸出層,輸入層和輸出層中間的所有網絡都稱為隱藏層。隱藏層數目比較多的神經網絡,常常被稱為多層感知機;但是有時候隱藏層數非常多,而且為了應對層數增多帶來的梯度消失問題引入了新的激活函數(如ReLU、maxout等函數),人們常常用深度神經網絡(DNN)來表示這種網絡。
值得一提的是,我們提到的神經網絡的輸出都是只與輸入有關,相當於給定輸入和參數,就可以計算得到輸出,我們稱這樣的網絡為前饋神經網絡。有時候為了解決複雜的問題,神經網絡的輸出不僅僅與輸入有關,還與輸出有關。這樣相當於把輸出反饋到了神經網絡的輸入端,形成了一個反饋閉環,我們稱這樣的網絡為遞歸神經網絡(RNN)。
深度神經網絡DNN的網絡節點之間通常是全聯接的,隨著網絡層數的增加,需要優化的變量參數會出現深度爆炸。為了解決這個問題,深度學習中最著名的卷積神經網絡CNN,在原來多層神經網絡的基礎上,加入了特徵學習部分,這部分是模仿人腦對信號處理上的分級的。具體操作就是在原來的全連接的層前面加入了部分連接的卷積層與降維層,而且加入的是一個層級:輸入層 -卷積層 -降維層 -卷積層 - 降維層 -- .... -- 隱藏層 -輸出層。CNN大大減少了網絡參數的數量,CNN常見結構如下圖所示(不明覺厲,看看就好,還是啃啃專業資料才能懂):
一句話總結:人工神經網絡的基礎是人工神經元,常用的神經元激活函數為sigmoid,應對深度學習的激活函數為ReLU、maxout等函數;多層感知機與DNN結構一致,激活函數有區別;CNN可以用來解決DNN網絡參數太多的問題;RNN為帶有反饋的神經網絡。