一文讀懂LSTM和迴圈神經網路

七月線上實驗室發表於2018-04-18
640?wx_fmt=png&wxfrom=5&wx_lazy=1迴圈網路是一類人工神經網路,用於識別諸如文字、基因組、手寫字跡、語音等序列資料的模式,或用於識別感測器、股票市場、政府機構產生的數值型時間序列資料。迴圈網路可以說是最強大的神經網路,甚至可以將影象分解為一系列影象塊,作為序列加以處理。


由於迴圈網路擁有一種特定的記憶模式,而記憶也是人類的基本能力之一,所以下文會時常將迴圈網路與人腦的記憶活動進行類比。


前饋網路回顧

要理解迴圈網路,首先需要了解前饋網路的基礎知識。這兩種網路的名字都來自於它們通過一系列網路節點數學運算來傳遞資訊的方式。前饋網路將資訊徑直向前遞送(從不返回已經過的節點),而迴圈網路則將資訊迴圈傳遞。在前饋網路中,樣例輸入網路後被轉換為一項輸出;在進行有監督學習時,輸出為一個標籤。也就是說,前饋網路將原始資料對映到類別,識別出訊號的模式,例如一張輸入影象應當給予“貓”還是“大象”的標籤。

640?wx_fmt=jpeg&wxfrom=5&wx_lazy=1

用帶有標籤的影象定型一個前饋網路,直到網路在猜測影象類別時的錯誤達到最少。將引數,即權重定型後,網路就可以對從未見過的資料進行分類。已定型的前饋網路可以接受任何隨機的圖片組合,而輸入的第一張照片並不會影響網路對第二張照片的分類。看到一張貓的照片不會導致網路預期下一張照片是大象。這是因為網路並沒有時間順序的概念,它所考慮的唯一輸入是當前所接受的樣例。前饋網路彷彿患有短期失憶症;它們只有早先被定型時的記憶。


迴圈網路

迴圈網路與前饋網路不同,其輸入不僅包括當前所見的輸入樣例,還包括網路在上一個時刻所感知到資訊。以下是[由Elman提出的早期迴圈網路]的示意圖,圖中最下行的 BTSXPE 代表當前的輸入樣例,而 CONTEXT UNIT 則表示前一時刻的輸出。

640?wx_fmt=jpeg

迴圈網路在第 t-1 個時間步的判定會影響其在隨後第t個時間步的判定。所以迴圈網路有來自當下和不久之前的兩種輸入,此二者的結合決定了網路對於新資料如何反應,與人類日常生活中的情形頗為相似。


迴圈網路與前饋網路的區別便在於這種不斷將自身上一刻輸出當作輸入的反饋迴圈。人們常說迴圈網路是有記憶的。為神經網路新增記憶的目的在於:序列本身即帶有資訊,而迴圈網路能利用這種資訊完成前饋網路無法完成的任務。


這些順序資訊儲存在迴圈網路隱藏狀態中,不斷向前層層傳遞,跨越許多個時間步,影響每一個新樣例的處理。人類記憶會在體內不斷進行不可見的迴圈,對我們的行為產生影響而不顯現出完整樣貌,而資訊也同樣會在迴圈網路的隱藏狀態中迴圈。英語中有許多描述記憶反饋迴圈的說法。例如,我們會說“一個人被往日所為之事糾纏”,這其實就是在講過去的輸出對當前造成了影響。法國人稱之為“Le passé qui ne passe pas”,即 “過去之事不曾過去”。


讓我們用數學語言來描述將記憶向前傳遞的過程:

640?wx_fmt=jpeg

第 t 個時間步的隱藏狀態是 h_t。它是同一時間步的輸入 x_t 的函式,由一個權重矩陣W(和我們在前饋網路中使用的一樣)修正,加上前一時間步的隱藏狀態 h_t-1 乘以它自己的隱藏狀態-隱藏狀態矩陣的 U(或稱過渡矩陣,與馬爾可夫鏈近似)。權重矩陣是決定賦予當前輸入及過去隱藏狀態多少重要性的篩選器。它們所產生的誤差將會通過反向傳播返回,用於調整權重,直到誤差不能再降低為止。


權重輸入與隱藏狀態之和用函式 φ 進行擠壓-可能是邏輯S形函式(sigmoid函式)或雙曲正切函式,視具體情況而定-這是將很大或很小的值壓縮至一個邏輯空間內的標準工具,同時也用於產生反向傳播所能接受的梯度。


由於這一反饋迴圈會在系列的每一個時間步發生,每一個隱藏狀態不僅僅跟蹤前一個隱藏狀態,還包括了記憶能力範圍內所有在h_t-1之前的狀態。


若輸入一系列字母,則迴圈網路必定會根據第一個字元來決定對第二個字元的感知, 例如,第一個字母如果是 q,網路就可能推斷下一個字母是 u,而第一個字母如果是 t,則網路可能推斷下一個字母是 h。


由於迴圈網路具有時間維度,所以可能用動畫示意最為清楚(最先出現的節點垂直線可被視為一個前饋網路,隨時間展開後變為迴圈網路)。

640?wx_fmt=gif

在上圖中,每一個x都是一個輸入樣例,w 是用於篩選輸入的權重,a 是隱藏層的啟用狀態(附加權重後的輸入與上一個隱藏狀態之和),而b則是隱藏層用修正線性或sigmoid單元進行變換(或稱“擠壓”)後的輸出。


時間反向傳播BPTT

前文提到,迴圈網路的目的是準確地對序列輸入進行分類。我們依靠誤差反向傳播和梯度下降來達成這一目標。前饋網路的反向傳播從最後的誤差開始,經每個隱藏層的輸出、權重和輸入反向移動,將一定比例的誤差分配給每個權重,方法是計算權重與誤差的偏導數-∂E/∂w,即兩者變化速度的比例。隨後,梯度下降的學習演算法會用這些偏導數對權重進行上下調整以減少誤差。


迴圈網路則使用反向傳播的一種擴充套件方法,名為沿時間反向傳播,或稱BPTT。在這裡,時間其實就表示為一系列定義完備的有序計算,將時間步依次連線,而這些計算就是反向傳播的全部內容。


無論迴圈與否,神經網路其實都只是形如 f(g(h(x))) 的巢狀複合函式。增加時間要素僅僅是擴充套件了函式系列,我們用鏈式法則計算這些函式的導數。


截斷式BPTT

截斷式BPTT是完整BPTT的近似方法,也是處理較長序列時的優先選擇,因為時間步數量較多時,完整BPTT每次引數更新的正向/反向運算量會變的非常高。該方法的缺點是,由於截斷操作,梯度反向移動的距離有限,因此網路能夠學習的依賴長度要短於完整的BPTT。


梯度消失與梯度爆炸

像大多數神經網路一樣,迴圈網路並非新事物。在上世紀九十年代早期,梯度消失問題成為影響迴圈網路表現的重大障礙。正如直線表示x如何隨著y的變化而改變,梯度表示所有權重隨誤差變化而發生的改變。如果梯度未知,則無法朝減少誤差的方向調整權重,網路就會停止學習。


迴圈網路在尋找最終輸出與許多時間步以前的事件之間的聯絡時遇到了重大障礙,因為很難判斷應當為遠距離的輸入賦予多少重要性。(這些輸入就像曾曾…曾祖父母一樣,不斷向前追溯時會迅速增多,而留下的印象通常很模糊。)原因之一是, 神經網路中流動的資訊會經過許多級的乘法運算。


凡是學過複合利率的人都知道,任何數值,只要頻繁乘以略大於一的數,就會增大到無法衡量的地步(經濟學中的網路效應和難以避免的社會不平等背後正是這一簡單的數學真理)。反之亦然:將一個數反覆乘以小於一的數,也就會有相反的效果。賭徒要是每下一美元注都輸掉97美分,那片刻就會傾家蕩產。


由於深度神經網路的層和時間步通過乘法彼此聯絡,導數有可能消失或膨脹。梯度膨脹時,每個權重就彷彿是一隻諺語中提到的蝴蝶,所有的蝴蝶一齊扇動翅膀,就會在遙遠的地方引發一場颶風。這些權重的梯度增大至飽和,亦即它們的重要性被設得過高。但梯度膨脹的問題相對比較容易解決,因為可以將其截斷或擠壓。而消失的梯度則有可能變得過小,以至於計算機無法處理,網路無法學習-這個問題更難解決。


反覆應用sigmoid函式的結果如下圖所示。資料曲線越來越平緩,直至在較長的距離上無法檢測到斜度。梯度在經過許多個層後消失的情況與此相似。

640?wx_fmt=jpeg

長短時記憶單元LSTM

九十年代中期,德國學者Sepp Hochreiter和Juergen Schmidhuber提出了迴圈網路的一種變體,帶有所謂長短期記憶單元,或稱LSTM,可以解決梯度消失的問題。


LSTM可保留誤差,用於沿時間和層進行反向傳遞。LSTM將誤差保持在更為恆定的水平,讓迴圈網路能夠進行許多個時間步的學習(超過1000個時間步),從而開啟了建立遠距離因果聯絡的通道。


LSTM將資訊存放在迴圈網路正常資訊流之外的門控單元中。這些單元可以儲存、寫入或讀取資訊,就像計算機記憶體中的資料一樣。單元通過門的開關判定儲存哪些資訊,以及何時允許讀取、寫入或清除資訊。但與計算機中的數字式儲存器不同的是,這些門是模擬的,包含輸出範圍全部在0~1之間的sigmoid函式的逐元素相乘操作。相比數字式儲存,模擬值的優點是可微分,因此適合反向傳播。


這些門依據接收到的訊號而開關,而且與神經網路的節點類似,它們會用自有的權重集對資訊進行篩選,根據其強度和匯入內容決定是否允許資訊通過。這些權重就像調製輸入和隱藏狀態的權重一樣,會通過迴圈網路的學習過程進行調整。也就是說,記憶單元會通過猜測、誤差反向傳播、用梯度下降調整權重的迭代過程學習何時允許資料進入、離開或被刪除。下圖顯示了資料在記憶單元中如何流動,以及單元中的門如何控制資料流動。

640?wx_fmt=jpeg

上圖中的內容很多,如果讀者剛開始學習LSTM,別急著向下閱讀-請先花一些時間思考一下這張圖。只要幾分鐘,你就會明白其中的祕密。


首先,最底部的三個箭頭表示資訊從多個點流入記憶單元。當前輸入與過去的單元狀態不只被送入記憶單元本身,同時也進入單元的三個門,而這些門將決定如何處理輸入。圖中的黑點即是門,分別決定何時允許新輸入進入,何時清除當前的單元狀態,以及/或何時讓單元狀態對當前時間步的網路輸出產生影響。S_c 是記憶單元的當前狀態,而 g_y_in 是當前的輸入。記住,每個門都可開可關,而且門在每個時間步都會重新組合開關狀態。記憶單元在每個時間步都可以決定是否遺忘其狀態,是否允許寫入,是否允許讀取,相應的資訊流如圖所示。圖中較大的黑體字母即是每項操作的結果。


下面是另一張圖,將簡單迴圈網路(左)與LSTM單元(右)進行對比。藍線可忽略;圖例有助理解。

640?wx_fmt=jpeg

應當注意的是,LSTM的記憶單元在輸入轉換中給予加法和乘法不同的角色。兩張圖中央的加號其實就是LSTM的祕密。雖然看起來異常簡單,這一基本的改變能幫助LSTM在必須進行深度反向傳播時維持恆定的誤差。LSTM確定後續單元狀態的方式並非將當前狀態與新輸入相乘,而是將兩者相加,這正是LSTM的特別之處。(當然,遺忘門依舊使用乘法。)


不同的權重集對輸入資訊進行篩選,決定是否輸入、輸出或遺忘。遺忘門的形式是一個線性恆等函式,因為如果門開啟,則記憶單元的當前狀態就只會與1相乘,正向傳播一個時間步。


此外,講到簡單的竅門,將每個LSTM單元遺忘門的偏差設定為1,經證明可以提升網路表現。(但Sutskever建議將偏差設定5。)


你可能會問,如果LSTM的目的是將遠距離事件與最終的輸出聯絡起來,那為什麼需要有遺忘門?因為有時候遺忘是件好事。以分析一個文字語料庫為例,在到達文件的末尾時,你可能會認為下一個文件與這個文件肯定沒有任何聯絡,所以記憶單元在開始吸收下一個文件的第一項元素前應當先歸零。


在下圖中可以看到門的運作方式,其中橫線代表關閉的門,而空心小圓圈則代表開啟的門。在隱藏層下方水平一行的橫線和圓圈就是遺忘門。

640?wx_fmt=jpeg

應當注意的是,前饋網路只能將一個輸入對映至一個輸出,而迴圈網路則可以像上圖那樣將一個輸入對映至多個輸出(從一張影象到標題中的許多詞),也可以進行多對多(翻譯)或多對一(語音分類)的對映。


多時間尺度與遠距離依賴

你可能還會問,輸入門阻止新資料進入記憶單元,輸出門阻止記憶單元影響RNN特定輸出,此時這兩種門確切的值如何呢?可以認為LSTM相當於允許一個神經網路同時在不同時間尺度上執行。


以一個人的人生為例,想象一下我們如何以一個時間序列的形式接收有關的這一人生不同資料流。就地理位置而言,每個時間步的位置對下一個時間步都相當重要, 所以地理位置的時間尺度就是始終對最新的資訊保持開放。


假設這個人是位模範公民,每隔幾年就會投票。就民主生活的時間尺度而言,我們希望特別注意這個人在選舉前後所做的事,關注這個人在擱下重大議題、迴歸日常生活之前的所作所為。我們不希望我們的政治分析被持續更新的地理位置資訊所干擾。


如果這人還是個模範女兒,那我們或許可以增加家庭生活的時間尺度,瞭解到她打電話的模式是每週日一次,而每年過節期間電話量會大幅增加。這與政治活動週期和地理位置無關。


其他資料也是如此。音樂有複合節拍。文字包含按不同間隔反覆出現的主題。股票市場和經濟體在長期波動之餘還會經歷短期震盪。這些事件同時在不同的時間尺度上進行,而LSTM可以涵蓋所有這些時間尺度。


門控迴圈單元GRU

門控迴圈單元(GRU)本質上就是一個沒有輸出門的LSTM,因此它在每個時間步都會將記憶單元中的所有內容寫入整體網路。

640?wx_fmt=jpeg

LSTM超引數除錯

以下是手動優化RNN超引數時需要注意的一些事:

小心出現過擬合,這通常是因為神經網路在“死記”定型資料。過擬合意味著定型資料的表現會很好,但網路的模型對於樣例以外的預測則完全無用。

  • 正則化有好處:正則化的方法包括l1、l2和丟棄法等。

  • 保留一個神經網路不作定型的單獨測試集。

  • 網路越大,功能越強,但也更容易過擬合。不要嘗試用10,000個樣例來學習一百萬個引數 引數 > 樣例數 = 問題。

  • 資料基本上總是越多越好,因為有助於防止過擬合。

  • 定型應當包括多個epoch(使用整個資料集定型一次)。

  • 每個epoch之後,評估測試集表現,判斷何時停止(提前停止)。

  • 學習速率是最為重要的超引數。可用deeplearning4j-ui除錯;參見此圖

  • 總體而言,堆疊層是有好處的。

  • 對於LSTM,可使用softsign(而非softmax)啟用函式替代tanh(更快且更不容易出現飽和(約0梯度))。

  • 更新器:RMSProp、AdaGrad或momentum(Nesterovs)通常都是較好的選擇。AdaGrad還能衰減學習速率,有時會有幫助。

  • 最後,記住資料標準化、MSE損失函式 + 恆等啟用函式用於迴歸、Xavier權重初始化


原文連結: https://deeplearning4j.org/cn/lstm


如果在學習人工智慧方面,你還有任何的疑惑,比如基礎、學歷、就業前景等等,掃描下方二維碼加老師諮詢,除了針對這些問題答疑解惑之外,還有「深度學習集訓營」的完整課程大綱、深度學習禮包、優惠券等你來拿!名額有限,還等什麼,掃一掃諮詢吧!

640?wx_fmt=png

當然,你還可以直接點選閱讀原文」,獲取免費試聽資格!

相關文章