聊聊從腦神經到神經網路

超人汪小建發表於2018-11-29

前言

神經網路能解決非線性的複雜的模型問題,而且通過增加網路的層數將具備更加強大的學習能力,另外如果再改造改造層的結構則變成各類深度學習模型,例如CNN RNN之類的。

神經網路一般被用來捕捉複雜情況下的特徵,比如說視訊影象中的動物類別、一名作家的寫作風格等等。

大腦神經元

人腦可能有1000多億個神經元,每個神經元都可能在幾個方向上互相連線著,這麼大量的神經元及連線就形成了一個超級大型的網路。我們就是因為這些網路而存在各種各樣的思想和意識。

image

大腦神經元即是腦神經細胞,主要包括細胞體、樹突、軸突、突觸等。

  • 細胞體,由細胞核、細胞質和細胞膜組成。它是神經元新陳代謝的中心,是接收資訊並處理的部件。
  • 樹突,是細胞體向外延伸樹枝狀的纖維體,它是神經元的輸入通道,接收來自其他神經元的資訊。
  • 軸突,是細胞體向處延伸的最長最粗的一條樹枝纖維體,即神經纖維,它是神經元的輸出通道。軸突有髓鞘纖維和無髓鞘纖維兩種結構形式,兩者傳遞資訊的速度不同。軸突末端有許多向外延伸的樹枝狀纖維體,稱為神經末梢,它是神經元資訊的輸出端。
  • 突觸,神經元的神經末梢與另一神經元樹突或細胞體的接觸處即為突觸。每一個神經元都通過突觸與其他神經元聯絡,細胞之間通過突觸建立起連線,從而實現資訊傳遞,每個神經元約有103~104個突觸。

image

模擬大腦

神經網路就是人們試圖對大腦內部運作的模擬形式,在計算機領域,這種模型的起源相當早,可以追溯到20世紀40年代中期,當時計算機其實也剛出現不久。

1943年,麥卡洛克和皮茨發表了論文《神經活動內在概念的邏輯演算》,其中首次提出了表示人腦學習功能的一種數學方法。

image

如上圖中x類似軸突,其它神經元的輸出,經過突觸連線樹突,經過樹突後輸入到細胞體,細胞體執行一定運算後再經過啟用函式最後輸出到軸突。

這個簡單的模型就是機器學習中神經網路的基礎模型了,不經讓我們驚呼我們的大腦如此的簡單,但事實並不是這樣,人類對大腦的認識是在太少,可以說幾乎還沒有什麼實質性進展。而用這種模型模擬的大腦,實際上比大腦差太多太多了,如果人類是上帝造的,那上帝肯定不會讓你猜透他是怎麼造的。

這個階段雖然大腦的神經元已經被數學建模了,我們也並不知道這個模型是否正確,而且當時也沒有明確權重引數的調整方法。

感知機模型

進入到20世紀50年代,一種最簡單的人工神經元模型被提出來了。感知機?一聽感覺就像是一個實際存在的東西,就像計算機一樣,它應該是看得見摸得著的機器吧!的確,20世紀60年代第一個硬體實現出現,當時直接將整個硬體都叫感知機,但後來感知機被改成是演算法的名字了,所以它其實是一個演算法。

image

感知機以前輩的思想作為基礎,基於此提出了一種反饋迴圈的學習機制,通過計算樣本輸出結果與正確結果之間的誤差來進行權重調整。

大致的流程如下:

  • 通過隨機數初始化權重引數。
  • 將一個輸入向量傳入網路。
  • 根據指定的輸入向量和權重值計算網路的輸出y',感知機的函式如下所示:

image

  • 如果y'≠y,則通過Δw =yxi增量來調整所有連線權重wi。
  • 返回第2步。

引入梯度下降

與感知機的學習機制不同,ADALINE則是訓練神經網路模型的另外一種演算法,由於它引入了梯度下降,所以可以說它比感知機更加先進。

image

大概流程為:

  • 通過隨機數初始化權重。
  • 將一個輸入向量傳入網路。
  • 根據指定的輸入向量和權重計算神經網路的輸出y'。
  • 最後的輸出值使用公式求和,
    image
  • 計算誤差,將模型的輸出值與正確的標籤o進行比較,
    image
  • 使用以下梯度下降遞迴地調整權重,
    image
  • 返回到步驟2。

早期模型的侷限

我們可以看到感知機和ADALINE已經具備了神經網路模型的基本要素,兩者都是單層神經網路,主要用於二分類問題,通過學習能實現二分類功能。

對於早期的神經模型,它其實具有非常大的侷限性,甚至某種意義上來說,它一點用處都沒有。明斯基和帕佩特於1969年出版了《感知機》一書,其中闡明瞭感知機只能處理線性可分的問題,對於其他複雜問題完全無能為力。

image

比如對於XOR函式,不存在任何一條直線能將其正確分割,感知機就是存在這種尷尬的情況,這種線性不可分的情況,感知機沒法正確將兩個類別分開。至此,神經網路進入寒冬。

多層感知機

既然單個神經元的感知機無法解決非線性問題,那麼是不是可以推廣到多個神經元組成多個神經網路層?於是將多組神經元連線起來,某個神經元的輸出可輸入到其它神經元中。

多層網路的傳播,資料被輸入第一層後,將從每個神經元流入到下一層中對應的神經元中。然後在隱含層中進行求和並傳遞,最後到達輸出層進行處理。而學習多層網路則需要反向傳播演算法來支援,多層網路增加了學習的複雜程度,從輸入到最後的輸出組成了很長的函式巢狀,這就增加了學習的難度。不過,好在求到時有鏈式法則的幫忙,讓事情簡單了很多。

image

大概流程為:

  • 計算從輸入到輸出的前饋訊號。
  • 根據預測值和目標值計算輸出誤差E。
  • 通過前一層中的權重和相關啟用函式的梯度對它們進行加權反向傳播誤差訊號。
  • 基於反向傳播誤差訊號和輸入的前饋訊號計算引數的梯度
    image
  • 使用計算好的梯度來更新引數,公式為
    image

image

問題型別

神經網路可用於迴歸問題和分類問題。常見的結構差異在於輸出層,如果想要得到一個實數結果,我們就不應該使用標準化函式,比如sigmoid的函式。因為標準化函式會使我們的輸出結果限定在某個範圍內,而有時我們真正想要的是連續的數值結果。

  • 迴歸/函式逼近問題,此類問題可使用最小二乘誤差函式,輸出層使用線性啟用函式,隱含層使用S形啟用函式。
  • 二分類問題,通常使用交叉熵成本函式,輸出層及隱含層都使用S形啟用函式。
  • 多分類問題,通常使用交叉熵成本函式,輸出層使用softmax函式,隱含層使用sigmoid啟用函式。

深度神經網路

21世紀第二個十年,深度學習成為了人工智慧最閃耀的研究。2011年穀歌X實驗室從youtube抽取1000萬圖片,把它餵給採用了深度學習的谷歌大腦,三天後這個大腦在沒有人類的幫助下自己發現了貓。2012年微軟使用深度學習,完成演講者實時語音識別、翻譯,也就是完成同聲翻譯。

雖然深度學習在20世紀80年代就出現了,但受限於當時的硬體能力和資料資源缺乏,並沒有體現出效果。只有辛頓帶著學生在這個冷門領域堅持耕耘,直到2009年,辛頓他們才獲得了意外的成功,他們將深度學習用在語音識別領域,打破了世界紀錄,錯誤率比之前減少25%。深度學習開始火起來。

深度學習之所以有這麼大的效能提升,是因為它類似人腦一樣的深層神經網路,它更好地模擬了人腦的工作。

卷積神經網路

卷積神經網路的發展主要是為了解決人類視覺問題,不過現在其它方向也都會使用。發展歷程主要從Lenet5->Alexnet->VGG->GooLenet->ResNet等。

上世界80年代發明了卷積層,但由於硬體限制無法構建複雜網路,直到後面90年代才開始有實踐。

1998年LeCun提出卷積層、池化層和完全連線層組合,以此來解決手寫數字的識別問題。此時的效果已經很不錯了,能與其它經典的機器學習模型相比。架構如下,一個32 x 32的輸入,通過卷積提取特徵,然後進行下采樣,再一次卷積和下采樣,後面進行全連線和高斯連線。即Lenet5。

後來隨著可用的結構化資料和處理能力呈指數增長,使得模型能進一步增強,特別是Imagenet開源資料集的出現,數百萬張被標記分類的影象。

2012年的LSVRC挑戰賽,Hinton和他學生Alex Krizhevsky開發了Alexnet深度卷積網路,結構類似Lenet5,但是卷積層深度更深,引數總數達數千萬。多個卷積層且每個網路深度都達數百。即Alexnet。

2014年LSVRC挑戰賽強大的競爭者,由牛津大學視覺幾何組織提出的VGG模型。比起Alexnet,它主要是將卷積核縮小了,全部改用3x3。大體結構一致,但卷積配置可以不同。啟用函式使用ReLU,池化使用max pooling,最後使用softmax輸出各項概率。

2014年,GoogLenet網路模型贏得LSVRC挑戰賽,該系列賽首次由大型公司參賽並獲得成功,此後也一直由擁有鉅額預算的大公司贏得比賽。GoogLenet 主要由9個Inception模組組合而成。GoogLenet引數數量降到了一千多萬,並且準確性比Alexnet提高,誤差從16.4%降到6.7%。

2015年隨著《重新思考計算機視覺的Inception架構》文章發表,google研究人員釋出新的Inception架構,主要解決協方差移位問題,其中將規範化應用於原始輸入及每層的輸出值。除此之外卷積核大小也有所變化,且增加了網路總體深度及卷積的分解。

2015年ResNet被提出,由原來微軟研究院何愷明博士提出,現為Facebook AI研究科學家。ResNet戰績輝煌,當年一下取得5項第一。

迴圈神經網路

迴圈神經網路即recurrent neural network,它的提出主要是為了處理序列資料,序列資料是什麼?就是前面的輸入和後面的輸入是有關聯的,比如一句話,前後的詞都是有關係的,“我肚子餓了,準備去xx”,根據前面的輸入判斷“xx”很大可能就是“吃飯”。這個就是序列資料。

迴圈神經網路有很多變種,比如LSTM、GRU等。

對於傳統的神經網路,從輸入層到若干隱含層再到輸出層,層與層之間都是全連線的,而且層內之間的節點不相連。這種網路模型對於序列資料的預測就基本無能為力。

迴圈神經網路則擅長處理序列資料,它會對前面的資訊進行記憶並且參與當前輸出的計算,理論上迴圈神經網路能處理任意長度的序列資料。

image

image

比如可以做字元級別的預測,如下圖,假如這裡只有四種字元,樣本為”hello”單詞,則輸入h預測下個字元為e,e接著則輸出l,l則輸出l,最後輸入l則輸出o。

image

-------------推薦閱讀------------

我的開源專案彙總(機器&深度學習、NLP、網路IO、AIML、mysql協議、chatbot)

為什麼寫《Tomcat核心設計剖析》

我的2017文章彙總——機器學習篇

我的2017文章彙總——Java及中介軟體

我的2017文章彙總——深度學習篇

我的2017文章彙總——JDK原始碼篇

我的2017文章彙總——自然語言處理篇

我的2017文章彙總——Java併發篇


跟我交流,向我提問:

聊聊從腦神經到神經網路

歡迎關注:

聊聊從腦神經到神經網路

相關文章