初學者需要了解的8種神經網路結構!
機器學習已經在各個行業得到了大規模的廣泛應用,並為提升業務流程的效率、提高生產率做出了極大的貢獻。目前機器學習主要在以下方面應用:
模式識別:實際場景中的目標、包括人臉、表情、語音識別等等;
異常檢測:例如信用卡交易的異常檢測、感測器異常數據模式檢測和異常行為檢測等;
預測問題:預測股票或者匯率、或者預測消費者喜歡的電影、音樂等。
神經網路是一類機器學習演算法和模型的統稱,也是目前機器學習發展最快的一個領域。神經網路的架構主要分為三大類——前饋、循環和對稱鏈接網路。神經網路具有如下三個特徵使它成為了機器學習中的重要組成部分:
有助於理解大腦實際工作的流程,
有助於理解神經元和期間的自適應鏈接以及並行計算的概念,與順序處理的序列模型大不相同;
在大腦的啟發下利用新的演算法解決實際問題。
下面是8種核心神經網路架構
1. 感知機(Perceptrons)
感知機可以稱為第一代的神經網路,主要包括輸入的多個特徵單元(人工定義或程序尋找),中間由學習權重連接,最後由決策單元輸出。典型的感知機單元遵循前饋模型,輸入通過權重處理後直接連接到輸出單元上。
如果人們手動選取足夠的有效特徵,感知機幾乎可以做任何事。但一旦人工特徵固定下來將會極大的限制感知機的學習能力。同時如何選擇一個好的、有效的特徵也是困擾人們的難點。這對於感知機來說是毀滅性的,由於感知機將所有的注意力放在了模式識別上而忽視了變換過程。Minsky和Papert的"群體不變性理論"指出無法通過學習來識別出一組變化中的變換過程。為了處理這樣的變換,感知機需要利用多特徵單元來識別出變換。而這模式識別中最為複雜的一步則需要手工來完成特徵提取,而不是學習。
沒有隱藏層的神經網路在為輸入輸出映射建模的過程中具有很大的局限性。而更多層的線性單元似乎也沒有幫助,因為線性的疊加依舊是線性的。固定的非線性輸出也不足以建立複雜的映射關係。所以在感知機的基礎上我們需要建立多層具有適應性非線性的隱藏單元網路。但我們該如何訓練這樣的網路呢?我們需要有效的方法來調整所有層而不僅僅是最後一層的權重。這十分困難,因為學習隱藏層的權重就等同於學習特徵,但沒人會告訴你每個隱藏單元應該做什麼。這就需要更先進的結構來處理了!
2.卷積神經網路(Convolutional Neural Networks)
機器學習領域對於目標識別和檢測進行了多年的探索,問題始終懸而未決的原因在於以下問題始終困擾著物體的視覺識別:
分割、遮擋問題
光照變化問題
扭曲和形變問題
同一類物體在功能性區別下的外形變化
視角不同帶來的困難
維度尺度帶來的問題
這些問題一直困擾著傳統的模式識別。人們闡釋手工創造各種各樣的特徵來描述物體的特徵,但結果總不盡如人意。熱別是在物體識別領域,輕微的變化就會造成結果的巨大差別。
圖 卷積網路的可視化圖形
在感知機和多層感知機的基礎上,人們提出了一種新的網路結構——卷積神經網路。利用卷積神經網路可以對一些特徵的檢測進行共享,並在尺度和位置和方向上具有一定的不變性。較早的著名例子就是1998年Yann LeCun提出的一個稱為LeNet的網路進行手寫字元識別獲得了巨大的成功。下圖是LeNet的主要結構:一個包括卷積、池化和全連接的六層網路結構。
它利用反向傳播演算法來對隱藏層的單元權重進行訓練,並在每個卷積層中實現了卷積操作的(卷積核)權值共享,並引入池化層實現了特徵的縮聚(後面的網路層具有較大的感受野),最後通過全連接層來實現輸出。
而後時間來到了ILSVRC2012年的比賽,由ImageNet提供了120萬張的高清訓練數據,目的是訓練一個可以分類出圖像屬於一千類中每一類的概率的模型,並以此來進行圖像的識別。Hinton的學生Alex Krizhevsky最後奪魁。在LeNet的基礎上改進了神經網路,訓練出了一個具有7個隱藏層深度網路,更深更強大的AlexNet,並引入了GPU進行並行訓練,極大的提高了深度學習模型的訓練效率。自此GPU開始進入了廣大機器學習研究者的視野中。遠超過第二名的成績展示了深度學習的強大魅力,也使得深度學習開始走入了高速發展的快車道中。
3. 循環神經網路(Recurrent Neural Network)
循環神經網路主要用於處理序列數據。在機器學習領域,序列模型一般利用序列數據作為輸入,來訓練序列模型用於預測序列數據的下一項。在循環神經網路之前主要使用無記憶模型處理這類任務。
循環神經網路是一種十分有力的武器,它包含了兩個重要的特點。首先擁有一系列隱含狀態的分布可以高效的存儲過去的信息;其次它具有非線性動力學可以允許它以複雜的方式更新隱藏狀態。在足夠的時間和神經元數量下,RNN甚至可以計算出計算機能計算的任何東西。它們甚至會表現出振動、牽引和混沌的行為。
然而循環神經網路的訓練複雜,需要面對梯度消失或者爆炸的問題。由於訓練的RNN是一個很長的序列模型,訓練過程中的梯度十分容易出現問題。即使在很好的初值下,它也很難檢測到目前的目標和先前很多步前輸入間的聯繫,所以循環神經網路處理長程依賴性還十分困難。
目前主要有四種有效的方式實現循環神經網路,主要包括長短時記憶(Long Short Term Memory),海森自由優化方法(Hessian Free Optimization),回聲狀態網路(Echo State Networks)以及利用動量的初始化(Good initialization with momentum)
4?. 長短時記憶網路(Long/Short Term Memory Network)
Hochreiter和Schmidhuber(1997)通過構建長短時記憶網路(LSTM:Long Short Term Memory),解決了RNN長時間記憶(如數百個時間步)的問題。 他們使用相互作用的邏輯單元和線性單元來設計專門的存儲細胞(Memory Cell)。 當「寫入」門打開時,信息就可以進入存儲細胞。 只要「保持」門處於開啟狀態,信息就會一直保留在存儲細胞中。開啟「讀取」門就可以從細胞中讀取信息:RNN特別適合用於手寫草書識別這樣的任務。通常會以筆尖坐標x,y以及表示筆是向上還是向下的參數p作為輸入,輸出則是一段字元序列。Graves和Schmidhuber(2009)將LSTM結合到RNN中,得到了當前草書識別的最佳結果。 不過,他們使用小圖像序列而非筆尖坐標序列作為輸入。
5. Hopfield網路
帶有非線性單元的循環網路通常是很難分析的,它們會以許多不同的方式表現出來:穩定狀態,振蕩,或遵循不可預測的混沌軌跡。 Hopfield網路由二進位閾值單元反覆連接組成。1982年,約翰·霍普菲爾德認識到如果這種連接是對稱的,那就存在一個全局的能量函數。整個網路每個二進位單元的「配置」都對應了能量的多與少,二進位單元的閾值決策規則會讓網路的配置朝著能量函數最小化的方向進行。 使用這種類型的計算的一種簡潔方法是使用存儲器作為神經網路的能量最小值,使用能量極小值的記憶提供了一個內存關聯存儲器(CAM) 。項目只用知道其內容的一部分便可實現訪問,可以有效應對硬體損壞的情況。
每當我們記憶一次配置,我們希望得到一個新的能量最小值。 但是,一旦同時存在兩個最小值,怎麼辦? 這就限制了Hopfield網路的能力。 那麼我們如何增加Hopfield網路的能力呢? 物理學家們喜歡用已有的數學知識去解釋大腦的工作原理。 許多關於Hopfield網路及其存儲能力的論文在物理學期刊上發表。最終,伊麗莎白·加德納(Elizabeth Gardner)發現了一個更好的存儲規則,它使用權重的全部容量。 她並不一次存儲所有向量,而是多次循環訓練集,並利用感知器收斂過程來訓練每個單元,使其具有正確的狀態,給定該向量中所有其他單元的狀態。 統計學家稱這種技術為「擬似然估計」。
Hopfield網路還有另一種計算角色。 我們並不用網路來存儲記憶,而是用它來構建感官輸入的演繹,用可見單元表示輸入,用隱層節點的狀態表示演繹,用能量表示演繹的好壞。
6?. 玻爾茲曼機(Boltzmann Machine Network)
玻爾茲曼機是一種隨機遞歸神經網路, 它可以被看作是Hopfield網路隨機生成的, 它也是第一批能夠學習內部表示、能夠表示和解決困難的組合學問題的神經網路之一。
玻爾茲曼機學習演算法的學習目標是最大化玻爾茲曼機分配給訓練集中的二進位向量的概率乘積。這相當於最大化了玻爾茲曼機分配給訓練向量的對數概率之和。如果我們1)讓網路在沒有外部輸入的情況下穩定到N不同時間平穩分布; 2)每次採樣一次可見向量,那也可以理解為最大化我們得到N個樣本的概率。
2012年,Salakhutdinov和Hinton提出了玻爾茲曼機的高效小批量學習程序。 對於正向,首先將隱藏概率初始化為0.5,然後將可見單元上的數據向量進行固定,然後並行更新所有隱藏單元,直到使用平均場更新進行收斂。 在網路收斂之後,為每個連接的單元對記錄PiPj,並在最小批量中對所有數據進行平均。 對於反向:首先保留一組「幻想粒子」,每個粒子的值都是全局配置。 然後依次更新每個幻想粒子中的所有單元幾次。 對於每個連接的單元對,在所有的幻想粒子上平均SiSj。
在普通玻爾茲曼機中,單元的隨機更新是有序的。 有一個特殊的體系結構允許更有效的交替並行更新(層內無連接,無跨層連接)。 這個小批量程序使得玻爾茲曼機的更新更加並行化。 這就是所謂的深玻爾茲曼機器(DBM),一個帶有很多缺失連接的普通玻爾茲曼機。
2014年,Salakhutdinov和Hinton為他們的模型提出了更新,稱之為受限玻爾茲曼機(Restricted Boltzmann Machines)。 他們限制連通性使得推理和學習變得更簡單,隱藏單元只有一層,隱藏單元之間沒有連接。 在受限玻爾茲曼機中,當可見單元被固定時,只需要一步就能達到熱平衡。 另一個有效的小批量RBM學習程序是這樣的: 對於正向,首先將可見單元的數據向量固定。 然後計算所有可見和隱藏單元對的的確切值。 對於每個連接的單元對,在所有小批量中的數據上平均。 對於反向,也保留一組「幻想粒子」。然後使用交替並行更新更新每個幻想粒子幾次。 對於每個連接的單位對,在所有幻想粒子上平均ViHj。
7. 深度信念網路(Deep Belief Network)
反向傳播被認為是人工神經網路的標準方法,在處理數據後,計算每個神經元的誤差貢獻。但是,使用反向傳播也存在一些很明顯的問題。首先,它需要的數據是要標註訓練好的,但實際生活中幾乎所有的數據都是沒有標註過的。其次,其學習的延展性不好,這意味著在具有多個隱藏層的網路中,它的學習時間是非常慢的。第三,它很可能會被陷在一個局部最優的位置,這對於深度網路來說,遠不是最優解。
為了克服反向傳播的上述局限性,研究人員已經考慮使用無監督學習方法。這有助於保持使用梯度法調整權重的效率和簡單性,同時也可以用於對感覺輸入的結構進行建模。尤其是可以通過調整權重來使得生成模型的輸入概率最大化。那麼問題就來了,我們應該學習什麼樣的生成模型?它能像Boltzmann機器那樣以能量為基礎嗎?它是一個非常理想的由神經元組成的因果模型,還是兩者的混合?
信念網路(belief net)是由隨機變數構成的有向無環圖。用信念網路,我們要觀察的一些變數和想要解決二個問題是:推理的問題——推斷未觀測的狀態變數,以及學習的問題——調整變數之間的相互作用,使網路更容易生成訓練數據。
早期的圖形模型使用專家來定義圖形結構和條件概率。當時這些圖形是稀疏連接的;因此,研究人員最初專註於做正確的推斷,而不是學習。神經網路是以學習為中心的,自己死記硬背的知識並不酷,因為知識來自於學習訓練數據。神經網路的目的不是為了便於解釋,也不是為了讓推理變得簡單。但即便如此,還是有神經網路版本的信念網路。
由隨機二元神經元組成的生成神經網路有兩種。一個是基於能量的,在此基礎上,我們利用對稱連接將二元隨機神經元連接到一個波耳茲曼機器上。另一個是基於因果關係,我們在一個有向無環圖中連接二元隨機神經元,得到一個s型信念網路。這兩種類型的具體描述不再贅述。
8. 深度自動編碼器(Deep Auto-encoders)
最後,讓我們討論一下deep auto-encoders。由於一些原因,它們看起來總是很好地進行非線性降維,因為它們提供了兩種方式的靈活映射。在訓練目標的數量上,學習時間是線性的(或更好的)。最終的編碼模型是相當緊湊快速的。然而,利用反向傳播來優化深度自動編碼器是非常困難的。初始權值小,後傳播梯度消失。我們現在有了更好的方法來優化它們:要麼使用無監督的分層預訓練,要麼就像在回聲狀態網路中一樣小心地初始化權重。
對於預訓練任務,主要有三種不同類型的shallow auto-encoders:
RBM
去噪自動編碼器
壓縮自動編碼器
簡單地說,現在有許多不同的方法來對特性進行逐層預訓練。對於沒有大量標記案例的數據集,預訓練有助於後續的鑒別學習。對於非常大的、已標記的數據集,初始化在監督學習中使用無監督預訓練的權值是不必要的,即使對於深網也是如此。所以預訓練是初始化深網權重的最優先方法,當然現在還有其他方法。但是如果我們讓網路變得更大,我們還將需要再次訓練!
TAG:AI講堂 |