為什么我們需要機器學(xué)習(xí)?
機器學(xué)習(xí)可以解決人類不能直接用編程來應(yīng)對的復(fù)雜難題,因此,我們喂給機器學(xué)習(xí)算法大量的數(shù)據(jù),以期得到想要的答案。
我們來看看這兩個例子:
編寫解決問題的程序是非常困難的,比如在雜亂的場景中,在新的照明條件下從新的角度來識別三維物體。我們不知道要如何通過代碼來解決這個問題,因為這個識別過程在大腦中完成情況對我們來說還是未解之謎。 即使我們知道該怎么做,要編寫的程序可能會非常復(fù)雜。
再比如,編寫一個程序來預(yù)測信用卡交易欺詐發(fā)生的概率也是很難的,這可能也不存在任何簡單而可靠的規(guī)則。因為欺詐是一個動態(tài)的目標,但程序需要不斷變化。我們需要做的是結(jié)合大量的弱項規(guī)則來進行欺詐預(yù)測。
再者是機器學(xué)習(xí)方法。我們并不需要為每個特定的任務(wù)手動編寫程序,而是收集大量的例子,為給定的輸入指定正確的輸出。然后,機器學(xué)習(xí)算法拿這些例子,并產(chǎn)生一個程序來完成這項工作。
學(xué)習(xí)算法產(chǎn)生的程序可能與典型的手寫程序看起來非常不同。它可能包含數(shù)百萬的數(shù)字。如果方法得當(dāng),該計劃將適用于新案例以及我們訓(xùn)練的案例。如果數(shù)據(jù)改變,程序也可以通過對新數(shù)據(jù)進行訓(xùn)練來改變。你應(yīng)該注意到,現(xiàn)在大量的計算比支付某人編寫任務(wù)特定的程序來的更廉價。
鑒于此,機器學(xué)習(xí)能夠很好地解決一些任務(wù),包括:
模式識別:真實場景中的對象,面部識別或面部表情,口語等;
異常情況識別:信用卡交易的異常順序,核電廠傳感器讀數(shù)的異常模式等;
預(yù)測:未來的股票價格或貨幣匯率,一個人會喜歡的電影等。
什么是神經(jīng)網(wǎng)絡(luò)?
神經(jīng)網(wǎng)絡(luò)是一般機器學(xué)習(xí)中的一類模型,它是一套特定的算法,受到生物神經(jīng)網(wǎng)絡(luò)的啟發(fā),徹底改變了機器學(xué)習(xí)的領(lǐng)域。目前所謂的深度神經(jīng)網(wǎng)絡(luò)的出現(xiàn)就已經(jīng)證明它能夠工作得非常好。
神經(jīng)網(wǎng)絡(luò)本身就是一般泛函數(shù)的逼近,這就是為什么它們幾乎可以應(yīng)用于任何機器學(xué)習(xí)問題,因為所有的機器學(xué)習(xí)都是學(xué)習(xí)從輸入到輸出空間的復(fù)雜映射。
以下是說服你學(xué)習(xí)神經(jīng)計算的三個理由:
能夠理解大腦是如何工作的:這是非常大且復(fù)雜的問題,并且是個令人絞盡腦汁去思考的問題,因此我們需要使用計算機來模擬。
能夠了解受神經(jīng)元和自適應(yīng)連接啟發(fā)的并行計算風(fēng)格:這是一種與順序計算非常不同的風(fēng)格。
通過使用受大腦啟發(fā)的新穎學(xué)習(xí)算法來解決實際問題:即使這不是大腦實際工作的方式,但這樣的學(xué)習(xí)算法也是非常有用的。
在這篇文章中,我想分享八種神經(jīng)網(wǎng)絡(luò)架構(gòu),這是每一位從事機器學(xué)習(xí)的研究人員都應(yīng)該熟悉的。
一般來說,這些體系結(jié)構(gòu)可以分為以下三類:
1 - 前饋神經(jīng)網(wǎng)絡(luò)
這是在實際應(yīng)用中最常見的一種神經(jīng)網(wǎng)絡(luò)類型。第一層是輸入,最后一層是輸出。如果有多個隱藏層,我們稱之為“深度”神經(jīng)網(wǎng)絡(luò)。它們計算出一系列改變案例之間相似性的轉(zhuǎn)換。各層后緊接著的非線性函數(shù)用于各層神經(jīng)元的激活。
2 - 循環(huán)神經(jīng)網(wǎng)絡(luò)
在神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)的連接圖中決定了循環(huán)的方向。這意味著你有時可以按照箭頭回到你開始的地方。循環(huán)神經(jīng)網(wǎng)絡(luò)的結(jié)構(gòu)更接近生物的實際情況,其結(jié)構(gòu)有很復(fù)雜的動態(tài)過程,這使得這種神經(jīng)網(wǎng)絡(luò)有時候難以訓(xùn)練。但是,目前已經(jīng)有大量有趣的研究已經(jīng)找到一些有效的方式來訓(xùn)練循環(huán)神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)。
循環(huán)神經(jīng)網(wǎng)絡(luò)是一種非常自然地模擬連續(xù)數(shù)據(jù)的方式,類似每個時間片都具有一個隱藏層的深層神經(jīng)網(wǎng)絡(luò)。除了能在每個時間片上獲得輸入并使用相同的權(quán)重進行訓(xùn)練外,循環(huán)神經(jīng)網(wǎng)絡(luò)還能長時間地記住隱藏狀態(tài)的信息。但目前還很難訓(xùn)練循環(huán)神經(jīng)網(wǎng)絡(luò)來使用這些隱藏的狀態(tài)信息。
3 - 對稱連接網(wǎng)絡(luò)
對稱連接網(wǎng)絡(luò)是一種類似循環(huán)神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)的神經(jīng)網(wǎng)絡(luò),但是其單元之間的連接是對稱的(它們在兩個方向上具有相同的權(quán)重)。對稱連接網(wǎng)絡(luò)的結(jié)構(gòu)比循環(huán)神經(jīng)網(wǎng)絡(luò)更容易分析,因為其遵循能量函數(shù)。
沒有隱藏單元的對稱連接網(wǎng)絡(luò)被稱為“Hopfield網(wǎng)絡(luò)”。有隱藏單元的對稱連接網(wǎng)絡(luò)被稱為“Boltzmann機”。
▌1. 感知器
感知器作為第一代神經(jīng)網(wǎng)絡(luò),還只是單個神經(jīng)元的計算模型。它們在二十世紀六十年代初被 Frank Rosenblatt 推廣。1969年,Minsky和Papert出版了一本名為“感知器”的書,分析了這種神經(jīng)網(wǎng)絡(luò)模型可以做什么,并提到了它的局限性。許多人認為這些局限性限制了所有的神經(jīng)網(wǎng)絡(luò)模型。然而,目前感知器的學(xué)習(xí)過程仍然被廣泛應(yīng)用于具有包含數(shù)百萬特征的巨大特征向量任務(wù)。
在統(tǒng)計與模式識別的標準樣例中,我們首先將原始輸入向量轉(zhuǎn)換為特征的激活向量。然后,基于常識的手寫程序,我們?yōu)槠涠x特征。接下來,我們學(xué)習(xí)如何對每個特征激活向量進行加權(quán)計算以獲得單個標量值。
如果這個數(shù)值高于某個閾值,我們認為輸入向量是屬于目標類的一個正樣本。標準的感知器體系結(jié)構(gòu)遵循前饋神經(jīng)網(wǎng)絡(luò)模型,這意味著輸入被饋送到神經(jīng)元,被處理,并產(chǎn)生輸出。
在下圖中,可以看到網(wǎng)絡(luò)自下而上讀取:輸入從底部輸入,輸出從頂部輸出:
然而,感知器確實有局限性。如果你遵循手動選擇特征的原則,并且使用了足夠多的特征,則幾乎可以做任何事情。對于二進制輸入向量,我們可以為每個指數(shù)級的二進制向量分別設(shè)置一個特征單元,因此我們可以對二進制輸入向量進行任何可能的區(qū)分。但是一旦確定了手工編碼的特征,感知器所能學(xué)習(xí)的東西將會受到很多的限制。
這個結(jié)論對于感知器是毀滅性的,因為整個模式識別的重點是識別模式。Minsky and Papert 研究組提出的“群體不變定理”說明,一部分感知器的學(xué)習(xí),如果轉(zhuǎn)換形成一個群體,那么感知器將無法學(xué)習(xí)。為了處理這種轉(zhuǎn)換,感知器需要使用多個特征單元來識別信息子模式的轉(zhuǎn)換。所以模式識別的棘手部分必須由手工編碼的特征檢測器來解決,而不是學(xué)習(xí)過程。
沒有隱藏單元的網(wǎng)絡(luò)是非常受限的,因為它們只能學(xué)習(xí)輸入到輸出的映射。由于網(wǎng)絡(luò)結(jié)構(gòu)仍然是線性的,更多的線性單位層不會幫助也無法改善這個問題。固定輸出的非線性也是不夠的。因此,我們需要多層自適應(yīng)非線性隱藏單元。
但是我們要如何訓(xùn)練這樣的網(wǎng)絡(luò)呢?
我們需要一種能夠適應(yīng)所有層權(quán)重的有效方式,而不僅僅是最后一層。這很難,因為學(xué)習(xí)隱藏單元的權(quán)重等同于學(xué)習(xí)特征,但沒有人能直接告訴我們隱藏單元應(yīng)該做什么。
▌2. 卷積神經(jīng)網(wǎng)絡(luò)
機器學(xué)習(xí)研究已經(jīng)廣泛地集中在目標檢測問題上。在很多情況下識別目標是很困難的,如下:
分割:真實的場景與其他對象混雜在一起。很難判斷哪些作品是同一個對象的一部分。對象的部分也可以隱藏在其他對象的后面。
光照:像素的強度由照明和目標物共同決定。
變形:目標物可以以各種非仿射方式變形。例如,手寫的形狀可以是一個大的循環(huán),也可以是一個尖頭。
可用性:對象類通常由它們的使用方式來定義。例如,椅子是為了能夠坐在上面而設(shè)計的,因此它們具有各種各樣的物理形狀。
角度:標準學(xué)習(xí)方法無法應(yīng)對由視角變化而導(dǎo)致的圖像變化,即輸入維度(像素)之間的信息跳躍。
設(shè)想有一個醫(yī)療數(shù)據(jù)庫,病人的年齡是輸入維度是權(quán)重的編碼。如果要用機器學(xué)習(xí)方法,我們首先要消除這個維度跳躍。?
復(fù)制特征的方法是目前神經(jīng)網(wǎng)絡(luò)解決目標檢測問題的主要方法。它使用具有不同位置的相同特征,來為檢測器提供許多不同副本。它也可以在規(guī)模和方向上進行復(fù)制,但這是棘手和昂貴的。復(fù)制時使用幾種不同的特征類型,每種都有自己的復(fù)制映射圖,但是會大大減少了學(xué)習(xí)時可用參數(shù)的數(shù)量。
復(fù)制也允許以各種方式來表示每個圖像塊。
那么復(fù)制這些特征檢測器是如何實現(xiàn)的呢?
等效激活:神經(jīng)網(wǎng)絡(luò)對復(fù)制的特征,具有翻譯平移不變形。神經(jīng)元的激活函數(shù)對特征復(fù)制的效果也是一樣的 。
不變的知識:如果一個特征訓(xùn)練期間在某些位置是有用的,那么在測試期間該特征的檢測器將在所有位置都可用。
1998年,Yann LeCun和他的同事開發(fā)了一種名為LeNet的手寫數(shù)字識別器。它在具有許多隱藏層的前饋網(wǎng)絡(luò)中使用反向傳播,在每層中復(fù)制許多單元的映射,并對附近復(fù)制單元的輸出進行池化操作,即使重疊也能夠同時處理幾個字符。這是一種用聰明的方式訓(xùn)練出得完整系統(tǒng),而不僅僅是一個識別器。后來人們正式地稱之為“卷積神經(jīng)網(wǎng)絡(luò)”。
有趣的是,這種神經(jīng)網(wǎng)絡(luò)模型被用來讀取北美地區(qū)約10%的支票。
卷積神經(jīng)網(wǎng)絡(luò)可用于從手寫數(shù)字到3D對象的所有與物體識別有關(guān)的工作。但是,從網(wǎng)絡(luò)下載的彩色照片中識別真實的物體通常要比識別手寫的數(shù)字復(fù)雜得多。對于三維場景的二維圖像,有1000多個類別(1000 vs 10個),百倍像素值(256×256彩色圖 vs 28×28灰度圖),場景聚類需要應(yīng)用圖像分割技術(shù),并得到每張圖像中的多個目標。相同類型的卷積神經(jīng)網(wǎng)絡(luò)會起作用嗎?
ILSVRC-2012 ImageNet競賽,這是一個包含大約120萬張高分辨率訓(xùn)練圖像的數(shù)據(jù)集。測試圖像將不會顯示初始的注釋 (沒有分割或標簽),算法將產(chǎn)生指定圖像中存在對象的標簽。一些最優(yōu)秀的計算機視覺方法是由來自牛津,INRIA,XRCE等研究團隊提出的。通常,計算機視覺系統(tǒng)使用復(fù)雜的多層次網(wǎng)絡(luò)系統(tǒng),在訓(xùn)練開始階段會通過優(yōu)化幾個參數(shù)來進行手動調(diào)整。?
2012年競賽的獲勝者Alex Krizhevsky(NIPS 2012) 繼承了Yann LeCun的模型結(jié)構(gòu),開創(chuàng)性地提出一種非常深的卷積神經(jīng)網(wǎng)絡(luò)類型。其架構(gòu)包括7個隱藏層,不包括一些最大池化層。網(wǎng)絡(luò)結(jié)構(gòu)由卷積層組成,而最后兩層是全連接層。
在每個隱藏層中,激活函數(shù)使用修正線性單位函數(shù)。模型的訓(xùn)練比logistic units更快,特征表征更具有表現(xiàn)力。
除此之外,當(dāng)附近的單位有更強的激活性時,模型還使用競爭性的正則化策略來抑制隱藏層激活。當(dāng)圖像強度變化時,這種策略將有助于模型對于特征的學(xué)習(xí)。還有一些訓(xùn)練技巧能夠顯著提高神經(jīng)網(wǎng)絡(luò)的泛化能力:
在 256 x 256 圖像上隨機截取 224 x 224 大小的圖像以獲取更多數(shù)據(jù)并使用圖像的左右反射進行訓(xùn)練。在測試階段,結(jié)合來自10個不同的圖像塊:四個 224 x 224 的圖像角塊加上中央的 224 x 224 圖像塊再加上這5個圖像的反射塊。
使用“Dropout”來調(diào)整全連接層(包含大部分模型參數(shù))的權(quán)重。Dropout意味著對于每個訓(xùn)練樣本來說,一層網(wǎng)絡(luò)中的一半隱藏單元會被隨機移除,這使得該層隱藏單位不再依賴其他層的隱藏單元。
就硬件要求而言,AlexNet卷積神經(jīng)網(wǎng)絡(luò)在2個 Nvidia GTX 580 GPU (超過1000個快速小內(nèi)核) 上得到了非常高效的實現(xiàn)。 GPU非常適合矩陣乘法,并且具有非常高的內(nèi)存帶寬。 這使得AlexNet模型可以在一周內(nèi)訓(xùn)練網(wǎng)絡(luò),并能夠在測試階段快速地結(jié)合10個圖像塊的結(jié)果。
如果我們可以足夠快地更新網(wǎng)絡(luò)狀態(tài),那么就可以在很多內(nèi)核上傳播一個網(wǎng)絡(luò)。隨著內(nèi)核越來越便宜,數(shù)據(jù)集越來越大,相比傳統(tǒng)計算機視覺系統(tǒng),大型神經(jīng)網(wǎng)絡(luò)模型的性能將提高得更快。
▌3. 循環(huán)神經(jīng)網(wǎng)絡(luò)
為了理解循環(huán)神經(jīng)網(wǎng)絡(luò)模型,我們需要對序列建模進行簡要概述。當(dāng)將機器學(xué)習(xí)應(yīng)用于序列時,我們經(jīng)常希望將輸入序列轉(zhuǎn)換為不同域中的輸出序列。例如,將一系列的聲壓轉(zhuǎn)換成一系列的單詞。
當(dāng)沒有單獨的目標序列時,我們可以通過嘗試預(yù)測輸入序列中的下一項來獲得學(xué)習(xí)的信號。目標的輸出序列是提前一步的輸入序列,這似乎比嘗試預(yù)測圖像中其他像素的一個像素或圖像其余部分的一個像素來的更自然。
預(yù)測序列中的下一個術(shù)語模糊了有監(jiān)督學(xué)習(xí)和無監(jiān)督學(xué)習(xí)之間的區(qū)別。它使用專為監(jiān)督學(xué)習(xí)而設(shè)計的方法,但它不需要單獨的學(xué)習(xí)信號。
無記憶模型是這個任務(wù)的標準方法。具體而言,自回歸模型可以從先前固定數(shù)量的術(shù)語中使用“延遲抽頭”來預(yù)測序列下一項;而前饋神經(jīng)網(wǎng)絡(luò)是使用一層或多層非線性隱藏單元的廣義自回歸模型。
但是,如果我們給生成模型一些隱藏的狀態(tài),而這個隱藏的狀態(tài)又有一個內(nèi)部的動態(tài),我們就會得到一個更有趣的模型:它可以長時間地將信息存儲在隱藏狀態(tài)。
如果動態(tài)是帶噪聲的,那么從隱藏狀態(tài)產(chǎn)生輸出的方式也是帶噪聲的,我們永遠無法知道它的確切的隱藏狀態(tài)。我們能夠做的是推斷隱藏狀態(tài)矢量空間的概率分布。這種推斷只適用于兩種隱藏狀態(tài)模型。
循環(huán)神經(jīng)網(wǎng)絡(luò)是非常強大的,因為它們結(jié)合了兩個屬性:
1) 分布式隱藏狀態(tài):允許網(wǎng)絡(luò)有效地存儲大量有關(guān)過去的信息;
2) 非線性動態(tài):允許模型能夠以復(fù)雜的方式更新隱藏狀態(tài)。
有了足夠的神經(jīng)元和時間,循環(huán)神經(jīng)網(wǎng)絡(luò)能夠計算任何通過計算機可以計算出來的東西。
那么循環(huán)神經(jīng)網(wǎng)絡(luò)可以展現(xiàn)出什么樣的行為呢?
它們可以擺動,可以定點吸引,還可以表現(xiàn)出混亂,而且它們還可以通過學(xué)習(xí)來實現(xiàn)大量的小程序,每個小程序能夠捕獲一小塊知識并且并行運行,相互作用來產(chǎn)生非常復(fù)雜的效果。
然而,循環(huán)神經(jīng)網(wǎng)絡(luò)的計算能力使得這種網(wǎng)絡(luò)結(jié)構(gòu)很難訓(xùn)練,因為會有梯度爆炸或消失的問題。當(dāng)我們通過多層次的反向傳播時,如果權(quán)重很小,梯度將呈指數(shù)縮小。如果權(quán)重很大,梯度會呈指數(shù)增長。
典型的前饋神經(jīng)網(wǎng)絡(luò)可以應(yīng)付這些梯度的指數(shù)效應(yīng),因為它們只有一些隱藏層。另一方面,在訓(xùn)練長序列的循環(huán)神經(jīng)網(wǎng)絡(luò)時,梯度很容易爆炸或消失。即使是具有良好的初始權(quán)重的網(wǎng)絡(luò)模型,也很難檢測到當(dāng)前目標輸出對來自多個時間步驟輸入的依賴,因此循環(huán)神經(jīng)網(wǎng)絡(luò)難以處理遠程依賴性。
基本上,有以下四種有效的方法來學(xué)習(xí)循環(huán)神經(jīng)網(wǎng)絡(luò):
長短期記憶塊:使循環(huán)神經(jīng)網(wǎng)絡(luò)脫離長時間記憶值依賴的小模塊。
Hessian Free Optimization:通過使用優(yōu)化器來處理消失梯度問題,該優(yōu)化器可以檢測具有微小梯度和更小曲率的方向。
回聲狀態(tài)網(wǎng)絡(luò):初始化輸入 ->隱藏層和隱藏層 ->隱藏層和輸出 ->隱藏連接,可以通過輸入選擇性地驅(qū)動該振蕩器,以便讓隱藏狀態(tài)具有巨大的弱耦合振蕩器。
良好的動態(tài)初始化:像回聲狀態(tài)網(wǎng)絡(luò)一樣初始化,然后使用動量來學(xué)習(xí)所有的連接。
▌4. 長短期記憶網(wǎng)絡(luò)
Hochreiter & Schmidhuber (1997) 通過構(gòu)建長短期記憶網(wǎng)絡(luò),解決了循環(huán)神經(jīng)網(wǎng)絡(luò)長時間記憶)(如數(shù)百步時間步驟內(nèi))的獲取問題。他們使用具有乘法相互作用的邏輯和線性單元來設(shè)計存儲器單元。
每當(dāng)“寫入”門打開時,信息就會進入單元。信息保持在單元中,只要其“保持”門打開。 信息可以通過打開“讀取”門來從單元中讀取。
閱讀草書手寫是循環(huán)神經(jīng)網(wǎng)絡(luò)處理一個常見任務(wù)。 輸入是筆尖的 (x,y,p) 坐標序列,其中p表示筆是向上還是向下。輸出是一個字符序列。 Graves & Schmidhuber (2009) 表明,帶有長短期記憶的循環(huán)神經(jīng)網(wǎng)絡(luò)是目前處理草書閱讀的最佳神經(jīng)網(wǎng)絡(luò)系統(tǒng)。 簡而言之,他們使用一系列小圖像作為輸入而不是筆坐標。?
▌5. Hopfield網(wǎng)絡(luò)
具有非線性單元的周期性神經(jīng)網(wǎng)絡(luò)通常難以分析。它們可以以許多不同的方式呈現(xiàn):由穩(wěn)定到穩(wěn)定的狀態(tài),中間有振蕩,或者遵循不可預(yù)測的混沌軌跡。一個Hopfield網(wǎng)絡(luò)由二元門限單元組成,它們之間有連續(xù)的連接。
1982年,Hopfield認識到,如果連接是對稱的,就是一種全能量函數(shù)。整個網(wǎng)絡(luò)的每個二進制“配置”都具有能量;而二進制閾值決策規(guī)則是導(dǎo)致網(wǎng)絡(luò)是根據(jù)這個能量函數(shù)的最小值而定的。
利用這種類型進行計算的一種便捷方式是,使用記憶作為神經(jīng)網(wǎng)絡(luò)的能量最小值,使用能量最小值來表示可訪問內(nèi)容的內(nèi)存。一個項目可以通過只知道其部分內(nèi)容信息來訪問。這對硬件的損損傷是巨大的。
每當(dāng)我們對配置進行一次記憶,我們就希望創(chuàng)造一個新的能量最小值。但是,如果在中間位置附近有兩個最小值呢?
這受限于Hopfield網(wǎng)絡(luò)的容量。那么我們?nèi)绾卧黾親opfield網(wǎng)絡(luò)的容量呢?物理學(xué)家喜歡用他們已經(jīng)知道的數(shù)學(xué)知識來解釋大腦是如何工作的。在物理學(xué)期刊上有許多對Hopfield網(wǎng)絡(luò)及其存儲容量方面進行研究的論文。
最終,Elizabeth Gardner發(fā)現(xiàn)存在一個更好的存儲規(guī)則,就是使用權(quán)重的全部容量。它是通過多次循環(huán)訓(xùn)練集,而非一次性存儲向量。并利用感知器的收斂過程來訓(xùn)練每個單元,使其具有正確的狀態(tài),并給定該向量中所有其他單元的狀態(tài)。統(tǒng)計學(xué)家稱這種技術(shù)為“偽可能性”。
Hopfield網(wǎng)絡(luò)還有另一個計算角色,我們用它來構(gòu)建感官的輸入解釋。“輸入”用可見的單元表示,“解釋”用隱藏單元的狀態(tài)表示,解釋的好壞情況用能量表示。
▌6. 玻爾茲曼機網(wǎng)絡(luò)
玻爾茲曼機是一種隨機性的循環(huán)神經(jīng)網(wǎng)絡(luò)。它可以被看作是Hopfield網(wǎng)絡(luò)的隨機生成產(chǎn)物。它是第一個能夠?qū)W習(xí)內(nèi)部表示的神經(jīng)網(wǎng)絡(luò)之一,能夠表示和解決困難的組合問題。
作為機器學(xué)習(xí)算法的一種,玻爾茲曼機的學(xué)習(xí)目標是通過玻爾茲曼機分配給訓(xùn)練集中的二進制向量來最大化概率的乘積。這相當(dāng)于最大化玻爾茲曼機分配給訓(xùn)練向量的對數(shù)概率之和。也就是說,如果我們做了如下的事情,我們可以得到N個訓(xùn)練樣本的最大化概率:
1) 讓網(wǎng)絡(luò)在沒有外部輸入的情況下,處于不同時間的穩(wěn)定分布狀態(tài);
2) 每次采用可見的向量。
2012年,Salakhutdinov 和 Hinton 提出了玻爾茲曼機高效的小批量學(xué)習(xí)程序。
正相階段,首先將隱藏概率初始化為0.5,將數(shù)據(jù)向量固定在可見單元上,然后將所有隱藏單元進行并行更新,使用平均場更新策略直到最終收斂。在網(wǎng)絡(luò)收斂之后,記錄每個連接單元對的PiPj值,并在最小批量中對所有數(shù)據(jù)進行平均化。
負相階段:首先保留一組“幻想粒子”。每個粒子的值都是全局配置,然后依次更新每個幻想粒子中的所有單位,重復(fù)數(shù)次。對于每一個連接單位對,平均化所有“幻想粒子”的SiSj值。
對于普通的玻爾茲曼機而言,單元的隨機更新是需要連續(xù)進行的。有一種特殊的體系結(jié)構(gòu)允許波爾茲曼機交替地并行更新 (層內(nèi)沒有連接,沒有跳層連接的結(jié)構(gòu))。這是高效的一種結(jié)構(gòu)。
這種小批量程序使玻爾茲曼機器的更新更加并行化,也就是所謂的深玻爾茲曼機,而一個普通的玻爾茲曼機會有很多缺失的連接。
2014年,Salakhutdinov 和 Hinton 為他們的模型提出了另一個更新形式,稱之為受限玻爾茲曼機。他們限制了玻爾茲曼機的連通性使得模型的推理和學(xué)習(xí)過程變得更容易 (隱藏單元只有一層,而隱藏單元之間沒有連接)。在玻爾茲曼機中,當(dāng)可見單元被固定時,只需要一步就能達到熱平衡。
另一種有效的小批量玻爾茲曼機的學(xué)習(xí)程序是這樣的:
對于正相階段,首先在可見單元上固定一個數(shù)據(jù)向量,然后計算所有可見和隱藏單元對的
對于負相階段,也要保留一組“幻想粒子”。然后通過交替式并行更新策略來更新每個幻想粒子,重復(fù)數(shù)次。對于每個連接的單位對,平均化所有幻想粒子的
▌7. 深度置信網(wǎng)絡(luò)
反向傳播被認為是人工神經(jīng)網(wǎng)絡(luò)中的一種標準方法,用于在處理完一批數(shù)據(jù)后,計算出每個神經(jīng)元對誤差的貢獻值。
但是,反向傳播存在一些問題。首先,它需要帶標記的訓(xùn)練數(shù)據(jù),但幾乎所有的數(shù)據(jù)都是沒有標簽的。其次,學(xué)習(xí)時間的范圍不夠理想,這意味著隱藏層數(shù)量多的網(wǎng)絡(luò)反向傳播過程將變得很慢。第三,它可能會陷入局部最優(yōu)值而無法達到全局最優(yōu)狀態(tài)。所以對于深度神經(jīng)網(wǎng)絡(luò)來說,這些是遠遠不夠的。
為了克服反向傳播的限制,研究人員已經(jīng)考慮使用無監(jiān)督的學(xué)習(xí)方法,它將有助于保證使用梯度方法來調(diào)整權(quán)重的效率和簡單性,還可以用它來對感知輸入的結(jié)構(gòu)進行建模。特別是,權(quán)重的調(diào)整可以使得生成模型產(chǎn)生的感知輸入的概率最大化。
問題在于,我們應(yīng)該學(xué)習(xí)什么樣的生成模型?可以建立像玻爾茲曼機器一樣的能量模型嗎?還是由理想化的神經(jīng)元組成的因果模型?或者兩者混合?
置信網(wǎng)絡(luò)是一種由隨機變量組成的有向無環(huán)圖網(wǎng)絡(luò)模型。使用置信網(wǎng)絡(luò),我們可以觀察到一些變量,我們想要解決2個問題:
1) 推理問題:推斷未觀測變量的狀態(tài);
2) 學(xué)習(xí)問題:調(diào)整變量之間的交互作用,使網(wǎng)絡(luò)更有可能產(chǎn)生訓(xùn)練數(shù)據(jù)。
早期的圖模型使用專家來定義圖模型的結(jié)構(gòu)和條件概率。那時,圖模型是稀疏連接的,所以研究人員最初的研究重點是做出正確的推論,而不是學(xué)習(xí)。
對于神經(jīng)網(wǎng)絡(luò)來說,學(xué)習(xí)是重心,手寫知識并不是最優(yōu)的做法,因為知識可以通過學(xué)習(xí)訓(xùn)練數(shù)據(jù)得到。神經(jīng)網(wǎng)絡(luò)的目的不在于那些便于推理的可解釋性或稀疏連接性。目前,深度置信網(wǎng)絡(luò)可以來解決這些問題。
由隨機的二元神經(jīng)元組成的生成神經(jīng)網(wǎng)絡(luò)有兩種類型:
1)基于能量的網(wǎng)絡(luò)模型,利用對稱連接形式來連接二元隨機神經(jīng)元,得到玻爾茲曼機;
2)基于因果關(guān)系的網(wǎng)絡(luò)模型,其中我們連接一個有向無環(huán)圖中的二進制隨機神經(jīng)元得到Sigmoid型的深度置信網(wǎng)絡(luò)。
不過,這兩種類型都超出了本文闡述的范圍。
▌8. 深度自動編碼器
最后,我們來討論深度自編碼器。對于非線性降維,深度自編碼器看起來是一種非常好的方式,主要是因為,它們提供了兩種靈活的映射方式。訓(xùn)練樣本的學(xué)習(xí)時間是線性的(或更好的形式)。最終的編碼模型也相當(dāng)緊湊和快速。
然而,使用反向傳播來優(yōu)化深度自編碼器是非常困難的。在初始權(quán)重較小的情況下,反向傳播過程中梯度將消失。優(yōu)化辦法就是,要么使用無監(jiān)督的逐層預(yù)訓(xùn)練,要么像回聲狀態(tài)網(wǎng)絡(luò)那樣小心地初始權(quán)重。
對于預(yù)訓(xùn)練任務(wù),實際上有三種不同類型的淺自動編碼器:
用玻爾茲曼機作為自編碼器:當(dāng)我們用對比發(fā)散來訓(xùn)練一個玻爾茲曼機時,它試圖進行數(shù)據(jù)重建。它就像個自編碼器一樣,但是它通過使用隱藏層中的二進制激活來強化正則化過程。當(dāng)運用最大可能性策略訓(xùn)練后,玻爾茲曼機則不像自編碼器。我們可以用一堆淺自編碼器來替換用于預(yù)訓(xùn)練的玻爾茲曼機堆棧;然而,如果淺自編碼器通過懲罰平方權(quán)重項而被正則化,那么預(yù)訓(xùn)練就不是有效的。
去噪自編碼器:通過將其許多分量設(shè)置為0 (如dropout,但是用于輸入),將噪聲添加到輸入向量。它們?nèi)匀恍枰亟ㄟ@些組分,因此它們必須提取到輸入之間相關(guān)性的特征。如果我們使用自編碼器堆棧的話,那么預(yù)訓(xùn)練將會與玻爾茲曼機預(yù)訓(xùn)練一樣好或者更好。評估預(yù)訓(xùn)練的過程也將更簡單,因為我們可以很容易地計算目標函數(shù)的值。但是它缺乏的是使用玻爾茲曼機所能獲得的好的變分邊界,但這只是理論上的興趣。
壓縮自動編碼器:另一種正則化自編碼器的方法是嘗試使隱藏單元的激活對輸入盡可能不敏感,但是自編碼器不能忽視這些投入,因為他們必須重建這些輸入。我們通過懲罰每個隱藏層的激活相對于輸入的平方梯度來達到這個目的。在訓(xùn)練開始前,壓縮自編碼器工作得很好,而這種性質(zhì)只傾向于那些對輸入變化敏感的小部分隱藏單元。
簡而言之,現(xiàn)在有很多不同的方法能夠?qū)μ卣鬟M行逐層預(yù)訓(xùn)練。對于沒有大量標記樣本的數(shù)據(jù)集而言,預(yù)訓(xùn)練模型將有助于模型后續(xù)的判別式學(xué)習(xí)。對于非常大的標記數(shù)據(jù)集,使用無監(jiān)督預(yù)訓(xùn)練對監(jiān)督學(xué)習(xí)中使用的權(quán)重進行初始化并不是必須的,即使對于深度網(wǎng)絡(luò)也是如此。預(yù)訓(xùn)練是初始化深網(wǎng)權(quán)重的第一個好方法,但是現(xiàn)在還有其他方法。但是,如果我們把網(wǎng)絡(luò)變得更大,我們將需要再次進行預(yù)訓(xùn)練!
▌最后的忠告
神經(jīng)網(wǎng)絡(luò)是有史以來最棒的編程范例之一。在傳統(tǒng)的編程方法中,我們告訴計算機做什么,將大問題分解成精確定義的小問題,這樣計算機可以輕松地執(zhí)行。相比之下,在神經(jīng)網(wǎng)絡(luò)中,我們不告訴計算機如何解決問題,而讓神經(jīng)網(wǎng)絡(luò)能夠從觀測數(shù)據(jù)中學(xué)習(xí),找出手頭問題的解決辦法。
今天,深度神經(jīng)網(wǎng)絡(luò)和深度學(xué)習(xí)技術(shù)在計算機視覺,語音識別和自然語言處理等許多重要問題上取得了出色的表現(xiàn),它們正在被Google,微軟和Facebook等公司大規(guī)模部署。