1. 程式人生 > >RNN 迴圈 NN 神經網路 基本結構型別

RNN 迴圈 NN 神經網路 基本結構型別

基礎理解

不同於卷積網路專門處理網格化資料,迴圈神經網路主要處理序列資料。比如一個句子:‘I went to Nepal in 2009’。每個word可以為序列的一個x。由於序列的長短不同,如果對每個x都單獨設定一個引數,那麼當出現更長的序列時模型就無法處理,沒有對應的權重引數。而且對於序列‘I went to Nepal in 2009.’和’In 2009, I went to Nepal.'我們希望模型不管時間2009出現在序列的哪個位置都能處理,如果單獨設定引數由於序列時間2009處在序列的不同位置,權重引數也不好對不同位置進行處理。因此出現了共享引數的方法,使得模型可以處理不同長度序列並可泛化。一種簡單方法是在一維時間序列上使用卷積操作,但該方法比較淺層。
這裡寫圖片描述


這裡寫圖片描述
如上圖,這是迴圈神經網路的簡單形式。在不同時間段函式f的引數都相同,那我們不管在哪個時間t處將序列中的x時間2009輸入,都會在原有狀態h上新新增一個與x相關的相同輸入。可以這樣理解:
這裡寫圖片描述
上圖’a b c’和‘a c b’序列雖然排序不同,但最終產生的向量大小卻是相同,在一定程度上表示’a b c’和‘a c b’二者含義近似。
因此迴圈神經網路具有以下優點:
1、不管序列長短(指所有x個數總和),都能具有相同的輸入大小x(指單獨x輸入),只是在每輸入一個x後狀態就從上一個狀態轉移到下一個狀態(每個x的特徵向量組合)。而且將任意長度序列對映到固定長度特徵向量,其資訊是由一定損失的。
2、每個時間步使用相同轉移函式f,引數共享,且能處理序列的亂序。
個人理解,其實不管卷積網路還是神經網路,本質是都是對原始資料集分佈進行特徵對映,將原始比較亂的資料分佈,根據標記對映到另一個比較易於區分的分佈上。從而實現可分性。
類似模型公式如下:
這裡寫圖片描述

這裡寫圖片描述

標準型

這裡寫圖片描述
W V U為權重,o為輸出,y為標記,x為輸入,h為隱藏層狀態。L為輸入o與y的損失函式。上圖每步都有輸出o,且隱藏單元之間存在迴圈連結。
這裡寫圖片描述
上圖迴圈連結是從輸出o到隱藏層h。沒有上面的h到h模型強大。o作為輸出,除非維度很高,否則會損失一部分h的資訊。沒有直接的迴圈連結,而只是間接的將h資訊傳遞到下一層。但其易於訓練,可以並行化訓練。

這裡寫圖片描述
上模型只有一個固定長度的向量輸出。而不像前面輸出與輸入序列相同長度輸出序列。

輸出迴圈型

這裡寫圖片描述
就是將輸出作為迴圈連結。由於時間步的解耦,可以並行訓練,使用導師驅動過程進行訓練。
上圖訓練時標記y作為迴圈連結輸入,測試時使用輸出o作為迴圈連結輸入。

有向圖型

沒有x輸入,只有y序列
這裡寫圖片描述
這裡寫圖片描述

上下文型

依我理解,此處上下文指的是輸出序列的上下文資訊
這裡寫圖片描述
上圖主要用於圖注,也就是x為影象,y為詞序。通過輸入影象x產生輸出詞序列。
將x作為一個額外輸入方法:
1、作為初始狀態h0
2、每個時間步輸入一次
3、結合兩種方式
這裡寫圖片描述
在前面的基礎上,新增一個輸出y到h的連結。表明在給定x的序列後相同長度y序列上的分佈建模。

雙向型

這裡寫圖片描述
h狀態不僅依賴過去資訊,還依賴未來與之有關的敏感資訊。常用於手寫識別和語音識別。

編碼解碼型

將輸入序列x對映成不等長輸出序列y。常用於語音識別,機器翻譯,問答系統等。
這裡寫圖片描述
C為上下文變數,編碼器將輸入序列編碼成一個摘要C(其是就是將輸入序列對映到了向量C上),再由解碼器根據變數C輸出輸出序列。注意C的維度大小代表能夠包含的資訊量。
經典seq2seq模型:
在這裡插入圖片描述

深度型

這裡寫圖片描述
淺變換一般指MLP的單層(一個放射變換+一個非線性變化)。深度型增加模型深度,但增加深度有可能會因優化困難而影響模型效果。
圖中第一個方法是增加循化組數量。第二個中空白圓圈表示增加更深的MLP層。第三個引入跳躍連線來緩解深度路徑延長問題。

遞迴型

這裡寫圖片描述
不再構造成RNN的鏈狀結構,而是深的樹狀結構。一定程度避免長期依賴問題。對於固定長度L的序列,將深度由L低至logL。可用於學習推論。