第四章 前饋神經網絡
第四章 前饋神經網絡
人工神經網絡(Artificial Neural Network,ANN)是指一系列受生物學和 神經學啓發的數學模型。這些模型主要是通過對人腦的神經元網絡進行抽象,構 建人工神經元,並按照一定拓撲結構來建立人工神經元之間的連接,來模擬生 物神經網絡。在人工智能領域,人工神經網絡也常常簡稱爲神經網絡(Neural Network,NN)或神經模型(Neural Model)。
神經網絡最早是作爲一種主要的連接主義模型。20 世紀 80 年代中後期,最 流行的一種連接主義模型是分佈式並行處理(Parallel Distributed Processing, PDP)模型 [McClelland 等人,1986],其有 3 個主要特性:(1)信息表示是分佈式 的(非局部的)(;2)記憶和知識是存儲在單元之間的連接上(;3)通過逐漸改變單 元之間的連接強度來學習新的知識。
連接主義的神經網絡有着多種多樣的網絡結構以及學習方法,雖然早期模 型強調模型的生物可解釋性(Biological Plausibility),但後期更關注於對某種特 定認知能力的模擬,比如物體識別、語言理解等。尤其在引入誤差反向傳播來改 進其學習能力之後,神經網絡也越來越多地應用在各種機器學習任務上。隨着訓 練數據的增多以及(並行)計算能力的增強,神經網絡在很多機器學習任務上已 經取得了很大的突破,特別是在語音、圖像等感知信號的處理上,神經網絡表現 出了卓越的學習能力。
在本章中,我們主要關注採用誤差反向傳播來進行學習的神經網絡,即作爲 一種機器學習模型的神經網絡。從機器學習的角度來看,神經網絡一般可以看作 是一個非線性模型,其基本組成單元爲具有非線性激活函數的神經元,通過大量神經元之間的連接,使得神經網絡成爲一種高度非線性的模型。神經元之間的連 接權重就是需要學習的參數,可以在機器學習的框架下通過梯度下降方法來行學習。
神經元
人工神經元(Artificial Neuron),簡稱神經元(Neuron),是構成神經網絡 的基本單元,其主要是模擬生物神經元的結構和特性,接收一組輸入信號併產出 輸出。
生物學家在 20 世紀初就發現了生物神經元的結構。一個生物神經元通常具 有多個樹突和一條軸突。樹突用來接收信息,軸突用來發送信息。當神經元所獲 得的輸入信號的積累超過某個閾值時,它就處於興奮狀態,產生電脈衝。軸突尾 端有許多末梢可以給其他個神經元的樹突產生連接(突觸),並將電脈衝信號傳 遞給其它神經元。
1943 年,心理學家 McCulloch 和數學家 Pitts 根據生物神經元的結構,提出 了一種非常簡單的神經元模型,MP 神經元[McCulloch 等人,1943]。現代神經網 絡中的神經元和 MP 神經元的結構並無太多變化。不同的是,MP 神經元中的激 活函數 f 爲 0 或 1 的階躍函數,而現代神經元中的激活函數通常要求是連續可導 的函數。
Sigmoid 型函數
Sigmoid 型函數是指一類 S 型曲線函數,爲兩端飽和函數。常用的 Sigmoid 型
函數有 Logistic 函數和 Tanh 函數。
Logistic函數
Tanh函數
Hard-Logistic 函數和 Hard-Tanh 函數
ReLU 函數
帶泄露的 ReLU
帶參數的 ReLU
ELU 函數
Softplus 函數
Swish 函數
高斯誤差線性單元
Maxout 單元
網絡結構
一個生物神經細胞的功能比較簡單,而人工神經元只是生物神經細胞的理 想化和簡單實現,功能更加簡單。要想模擬人腦的能力,單一的神經元是遠遠不 夠的,需要通過很多神經元一起協作來完成複雜的功能。這樣通過一定的連接方 式或信息傳遞方式進行協作的神經元可以看作是一個網絡,就是神經網絡。
到目前爲止,研究者已經發明瞭各種各樣的神經網絡結構。目前常用的神經 網絡結構有以下三種:
前饋網絡
前饋網絡中各個神經元按接收信息的先後分爲不同的組。每一組可以看作 一個神經層。每一層中的神經元接收前一層神經元的輸出,並輸出到下一層神經 元。整個網絡中的信息是朝一個方向傳播,沒有反向的信息傳播,可以用一個有 向無環路圖表示。前饋網絡包括全連接前饋網絡 [本章中的第4.3節] 和卷積神經 網絡 [第5章] 等。
前饋網絡可以看作一個函數,通過簡單非線性函數的多次複合,實現輸入空 間到輸出空間的複雜映射。這種網絡結構簡單,易於實現。
記憶網絡
記憶網絡,也稱爲反饋網絡,網絡中的神經元不但可以接收其它神經元的信 息,也可以接收自己的歷史信息。和前饋網絡相比,記憶網絡中的神經元具有記 憶功能,在不同的時刻具有不同的狀態。記憶神經網絡中的信息傳播可以是單向 或雙向傳遞,因此可用一個有向循環圖或無向圖來表示。記憶網絡包括循環神經 網絡 [第6章]、Hopfield 網絡 [第8.3.4.1節]、玻爾茲曼機 [第12.1節]、受限玻爾茲曼 機 [第12.2節] 等。
記憶網絡可以看作一個程序,具有更強的計算和記憶能力。 爲了增強記憶網絡的記憶容量,可以引入外部記憶單元和讀寫機制,用來保
存一些網絡的中間狀態,稱爲記憶增強神經網絡(Memory Augmented NeuralNetwork,MANN)[第8.3.3節],比如神經圖靈機 [Graves 等人,2014] 和記憶網絡[Sukhbaatar 等人,2015] 等。
圖網絡
前饋網絡和記憶網絡的輸入都可以表示爲向量或向量序列。但實際應用中 很多數據是圖結構的數據,比如知識圖譜、社交網絡、分子(Molecular )網絡等。 前饋網絡和記憶網絡很難處理圖結構的數據。
圖網絡是定義在圖結構數據上的神經網絡 [第6.8.2節]。圖中每個節點都由 一個或一組神經元構成。節點之間的連接可以是有向的,也可以是無向的。每個 節點可以收到來自相鄰節點或自身的信息。
圖網絡是前饋網絡和記憶網絡的泛化,包含很多不同的實現方式,比如 圖 卷積網絡(Graph Convolutional Network,GCN)[Kipf等人,2016]、圖注意力 網絡(Graph Attention Network,GAT)[Veličković等人,2017]、消息傳遞網絡
(Message Passing Neural Network,MPNN)[Gilmer等人,2017]等。 圖4.6給出了前饋網絡、記憶網絡和圖網絡的網絡結構示例,其中圓形節點
表示一個神經元,方形節點表示一組神經元。
前饋神經網絡
給定一組神經元,我們可以以神經元爲節點來構建一個網絡。不同的神經網 絡模型有着不同網絡連接的拓撲結構。一種比較直接的拓撲結構是前饋網絡。前饋神經網絡(Feedforward Neural Network,FNN)是最早發明的簡單人工神經網絡。
在前饋神經網絡中,各神經元分別屬於不同的層。每一層的神經元可以接收 前一層神經元的信號,併產生信號輸出到下一層。第 0 層稱爲輸入層,最後一層稱爲輸出層,其它中間層稱爲隱藏層。整個網絡中無反饋,信號從輸入層向輸出層單向傳播,可用一個有向無環圖表示。
前饋神經網絡也經常稱爲多層感知器(Multi-Layer Perceptron,MLP)。但 多層感知器的叫法並不是十分合理,因爲前饋神經網絡其實是由多層的 Logistic 迴歸模型(連續的非線性函數)組成,而不是由多層的感知器(不連續的非線性 函數)組成 [Bishop,2007]。
通用近似定理
前饋神經網絡具有很強的擬合能力,常見的連續非線性函數都可以用前饋 神經網絡來近似。
通用近似定理在實數空間 Rd 中的有界閉集上依然成立。
根據通用近似定理,對於具有線性輸出層和至少一個使用“擠壓”性質的激 活函數的隱藏層組成的前饋神經網絡,只要其隱藏層神經元的數量足夠,它可 以以任意的精度來近似任何一個定義在實數空間 Rd 中的有界閉集函數 [Funa- hashi等人; Hornik等人,1993; 1989]。所謂“擠壓”性質的函數是指像Sigmoid函 數的有界函數,但神經網絡的通用近似性質也被證明對於其它類型的激活函數, 比如 ReLU,也都是適用的。
通用近似定理只是說明了神經網絡的計算能力可以去近似一個給定的連續
函數,但並沒有給出如何找到這樣一個網絡,以及是否是最優的。此外,當應用到 機器學習時,真實的映射函數並不知道,一般是通過經驗風險最小化和正則化來 進行參數學習。因爲神經網絡的強大能力,反而容易在訓練集上過擬合。
應用到機器學習
參數學習
反向傳播算法
使用誤差反向傳播算法的前饋神經網絡訓練過程可以分爲以下三步:
自動梯度計算
神經網絡的參數主要通過梯度下降來進行優化。當確定了風險函數以及網 絡結構後,我們就可以手動用鏈式法則來計算風險函數對每個參數的梯度,並用 代碼進行實現。但是手動求導並轉換爲計算機程序的過程非常瑣碎並容易出錯, 導致實現神經網絡變得十分低效。實際上,參數的梯度可以讓計算機來自動計 算。目前,主流的深度學習框架都包含了自動梯度計算的功能,即我們可以只考 慮網絡結構並用代碼實現,其梯度可以自動進行計算,無需人工干預,這樣可以 大幅提高開發效率。
自動計算梯度的方法可以分爲以下三類:數值微分、符號微分和自動微分。
數值微分
符號微分
符號微分(Symbolic Differentiation)是一種基於符號計算的自動求導方法。 符號計算也叫代數計算,是指用計算機來處理帶有變量的數學表達式。這裏的變 量看作是符號(Symbols),一般不需要代入具體的值。符號計算的輸入和輸出都 是數學表達式,一般包括對數學表達式的化簡、因式分解、微分、積分、解代數方 程、求解常微分方程等運算。
自動微分
自動微分(Automatic Differentiation,AD)是一種可以對一個(程序)函數 進行計算導數的方法。符號微分的處理對象是數學表達式,而自動微分的處理對 象是一個函數或一段程序。自動微分可以直接在原始程序代碼進行微分,因此自 動微分成爲目前大多數深度學習框架的首選。
優化問題
非凸優化問題
梯度消失問題
總結和深入閱讀
神經網絡是一種典型的分佈式並行處理模型,通過大量神經元之間的交 互來處理信息,每一個神經元都發送興奮和抑制的信息到其它神經元 [McClel- land 等人,1986]。和感知器不同,神經網絡中的激活函數一般爲連續可導函數。 表4.2給出了常見激活函數及其導數。在一個神經網絡中選擇合適的激活函數十 分重要。Ramachandran 等人[2017] 設計了不同形式的函數組合方式,並通過強 化學習來搜索合適的激活函數,在多個任務上發現 Swish 函數具有更好的性能。
本章介紹的前饋神經網絡是一種類型最簡單的網絡,相鄰兩層的神經元之 間爲全連接關係,也稱爲全連接神經網絡(Fully Connected Neural Network, FCNN)或多層感知器。前饋神經網絡作爲一種機器學習方法在很多模式識別和 機器學習的教材中都有介紹,比如《Pattern Recognition and Machine Learning》 [Bishop,2007],《Pattern Classification》[Duda等人,2001]等。
前饋神經網絡作爲一種能力很強的非線性模型,其能力可以由通用近似定 理來保證。關於通用近似定理的詳細介紹可以參考 [Haykin,2009]。
前饋神經網絡在 20 世紀 80 年代後期就已被廣泛使用,但是大部分都採用兩層網絡結構(即一個隱藏層和一個輸出層),神經元的激活函數基本上都是 Sigmoid 型函數,並且使用的損失函數也大多數是平方損失。雖然當時前饋神經 網絡的參數學習依然有很多難點,但其作爲一種連接主義的典型模型,標誌人工 智能從高度符號化的知識期向低符號化的學習期開始轉變。