1. 程式人生 > >長文 | LSTM和迴圈神經網路基礎教程(PDF下載)

長文 | LSTM和迴圈神經網路基礎教程(PDF下載)

來自公眾號 機器學習演算法與Python學習

目錄:

  1. 前言

  2. 前饋網路回顧

  3. 迴圈網路

  4. 時間反向傳播BPTT

  5. 梯度消失與梯度爆炸

  6. 長短期記憶單元(LSTM)

  7. 多時間尺度和遠距離依賴

  8. 門控迴圈單元GRU

  9. LSTM超引數除錯

文章較長,下載PDF閱讀更爽

公眾號回覆:LSTM

前言

本文旨在幫助神經網路學習者瞭解迴圈網路的運作方式,以及即LSTM的功能和結構。

迴圈網路是一類人工神經網路,用於識別諸如文字、基因組、手寫字跡、語音等序列資料的模式,或用於識別感測器、股票市場、政府機構產生的數值型時間序列資料。迴圈網路可以說是最強大的神經網路,甚至可以將影象分解為一系列影象塊,作為序列加以處理。

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

前饋網路回顧

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

640?wx_fmt=jpeg

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

迴圈網路

迴圈網路與前饋網路不同,其輸入不僅包括當前所見的輸入樣例,還包括網路在上一個時刻所感知到資訊。以下是[由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=jpeg

永遠都不要為了目的而忘了初中。就像給風命名的,不是它要去的方向,而是它要來時的方向。

640?wx_fmt=png

歡迎轉發到朋友圈或分享給好友

相關推薦

長文 | LSTM迴圈神經網路基礎教程PDF下載

來自公眾號 機器學習演算法與Python學習目錄:前言前饋網路回顧迴圈網路時間反向傳播BPTT梯

Neural Networks and Convolutional Neural Networks Essential Training 神經網路卷積神經網路基礎教程 Lynda課程中文字幕

Neural Networks and Convolutional Neural Networks Essential Training 中文字幕 神經網路和卷積神經網路基礎教程 中文字幕Neural Networks and Convolutional Neural Networks

雙向長短時記憶迴圈神經網路詳解Bi-directional LSTM RNN

1. Recurrent Neural Network (RNN) 儘管從多層感知器(MLP)到迴圈神經網路(RNN)的擴充套件看起來微不足道,但是這對於序列的學習具有深遠的意義。迴圈神經網路(RNN)的使用是用來處理序列資料的。在傳統的神經網路中模型中,層與

python基礎教程第二版---1.4數字表達式

pan com -1 一行 img 分享 cnblogs 第二版 輸出結果 一、除法 二、取余運算 對於整數: 對於浮點數: 2.75/0.5是為了說明除法結果是5.5 取余的時候(2.75-5*0.5)==0.25就得到了第一行的輸出結果0.25啦 這

迴圈神經網路的訓練2

權重梯度的計算 現在,我們終於來到了BPTT演算法的最後一步:計算每個權重的梯度。 首先,我們計算誤差函式E對權重矩陣W的梯度∂E∂W。 上圖展示了我們到目前為止,在前兩步中已經計算得到的量,包括每個時刻t 迴圈層的輸出值st,以及誤差項δt。 回憶一下我們在文章

神經網路 tensorflow教程 2.2 下載MNIST 資料集 自動版

文章參考:   https://zhuanlan.zhihu.com/p/25934529 環境: 語言 :python3.5(使用 Anaconda3-4.2.0-Windows-x86_64.exe) 作業系統: windos7 建立python 檔案並執行   自

python基礎教程十一

list repeat stop row lis flatten ror 教程 [1] 叠代器 本節進行叠代器的討論。只討論一個特殊方法---- __iter__ ,這個方法是叠代器規則的基礎。 叠代器規則 叠代的意思是重復做一些事很多次---就像在循環中做的

Angular 基礎教程7.0

課程亮點 按照初學者的學習路線規劃內容 所有程式碼均採用 Angular 7.0 版本 覆蓋日常開發中使用頻率最高的特性 To B、To C 型介面,移動端 PWA 全面覆蓋 附贈 3 個附錄,對比 5.0、6.0、7.0 版本 讀者反饋 《Angular 初學者快速

Odoo 自定義Widgets 基礎教程章節1

大家好, 此次,我們主要講解 Odoo 中的Widgets。 網上、論壇裡很多提及Widget的文章,但很少說Odoo自定義Widget 是如何實現的,這一直是大家所苦惱的地方。本章,將對Odoo中的Widget 進行基礎講解。 首先, Widget【掛件】產生的目的,是為了方便後端開發人員在不熟悉Ja

視覺化神經網路翻譯模型seq2seq+attention

翻譯自(https://jalammar.github.io/visualizing-neural-machine-translation-mechanics-of-seq2seq-models-with-attention/) Sequence-to-sequence(序列到序列)是一

《Python機器學習基礎教程PDF 下載

內容簡介 本書是機器學習入門書,以Python語言介紹。主要內容包括:機器學習的基本概念及其應用;實踐中常用的機器學習演算法以及這些演算法的優缺點;在機器學習中待處理資料的呈現方式的重要性,以及應重點關注資料的哪些方面;模型評估和調參的方法,重點講解交叉驗證和網

嵌入式linux基礎教程第二版第一章

       linux已經成為很多裝置的作業系統,手機、DVD播放器、電子遊戲機、數碼相機、網路交換機和無線網路裝置、機頂盒、高清電視、藍光DVD播放器、汽車的資訊娛樂中心和很多日常使用的電器等都在使用linux作業系統。linux已經成為很多裝置的嵌入式作業系統 一.為

深度學習筆記——深度學習框架TensorFlow之DNN深度神經網路的實現十四

DNN與CNN的本質差不多,只不過CNN加上了卷積層C以及池化層。做了卷積操作,引數共享減少了網路之間的連線引數。 DNN就是去掉C之後,使用全連線層+dropout下降+relu啟用,一層一層的WX+B的網路模式。

PhotoShop2018PhotoShop2019安裝與破解教程含資源

大家有興趣的可以加下我剛建立的一個PS學習交流的群825493164(PS攝影學習交流),裡面答疑大家的問題。共同學習交流。  下面提及ps2018的地方也包括ps2019(如果在AdobeCreativeCloud軟體裡面下載的話,現在官方預設推送ps2019的了)  

Tensorflow 入門學習12.卷積神經網路原理2.池化

本文學習內容來自《TensorFlow深度學習應用實踐》《深度學習》 池化的概念 卷積網路中一個典型層包含三級。在第一級中,這一層並行地計算多個卷積產生一組線性啟用響應。在第二級中,每一個線性啟用響應將會通過一個非線性的啟用函式,例如整流線性啟用函式。這一級有時

oracle基礎教程第二天

一、oracle表的管理 表名和列的命名規範 1.必須以字母開頭 2.長度不能超過30字元 3.不能使用oracle的保留字(關鍵字) 4.只能使用如下字元 A-Z,a-z,0-9,$,#等 oracle支援的資料型別 1.字元型     char    定長  最大2

神經網路演算法介紹Nerual NetWorks

神經網路是所謂深度學習的一個基礎,也是必備的知識點,他是以人腦中的神經網路作為啟發,最著名的演算法就是backpropagation演算法,這裡就簡單的整理一下神經網路相關引數,和計算方法。 一、多層向前神經網路(Multilayer Feed-Forward

python基礎教程第二版

第十章 自帶電池 匯入模組: import sys sys.path.append('c:/python27')//告訴程式到這裡找模組 1.1. 若模組是一個程式,則在匯入時只執行一次,後面匯入不在執行,修改後可以用reload函式重新匯入,這

oracle基礎教程第一天

一、做專案該用什麼資料庫要考慮哪些方面? 1.專案的規模 2.負載量多大,使用者多大 3.成本 4.安全性 小型資料庫(access、foxbase) 1.負載量小,使用者量在1000人以內,比如留言板,小型資訊系統 2.成本在千元左右 3.對安全性要求不高 中型資料庫

神經網路學習筆記十二:異或問題

       在Rosenblatt單層感知機中已經對異或問題做了介紹,並論證說明了只適用於線性分類問題的Rosenblatt感知機無法對異或問題進行分類。然而非線性問題是普遍存在的,下面就使用帶隱藏節點的神經網路來解決異或問題。 異或問題:         異或(X