QRNN A Potential Competitor to the Transformer

deephub發表於2020-10-12

Transformer的潛在競爭對手QRNN論文解讀,訓練更快的RNN

使用遞迴神經網路(RNN)序列建模業務已有很長時間了。 但是RNN很慢因為他們一次處理一個令牌無法並行化處理。 此外,迴圈體系結構增加了完整序列的固定長度編碼向量的限制。 為了克服這些問題,諸如CNN-LSTM,Transformer,QRNNs之類的架構蓬勃發展。

在本文中,我們將討論論文“擬遞迴神經網路”(https://arxiv.org/abs/1611.01576)中提出的QRNN模型。 從本質上講,這是一種將卷積新增到遞迴和將遞迴新增到卷積的方法。

LSTM

LSTM是RNN最著名的變體。 紅色塊是線性函式或矩陣乘法,藍色塊是無引數元素級塊。 LSTM單元應用門控功能(輸入,遺忘,輸出)以獲得輸出和稱為隱藏狀態的儲存元素。 此隱藏狀態包含整個序列的上下文資訊。 由於單個向量編碼完整序列,因此LSTM無法記住長期依賴性。 而且,每個時間步長的計算取決於前一個時間步長的隱藏狀態,即LSTM一次計算一個時間步長。 因此,計算不能並行進行。

CNN

CNN可以捕獲空間特徵(主要用於影像)。 紅色塊是卷積運算,藍色塊是無引數池化運算。 CNN使用核心(或過濾器)通過滑動視窗捕獲要素之間的對應關係。 這克服了固定長度的隱藏表示形式(以及由此帶來的長期依賴問題)以及RNN缺乏並行性限制的問題。 但是,CNN不顯示序列的時間性質,即時間不變性。 池化層只是在不考慮序列順序資訊的情況下降低了通道的維數。

Quasi-Recurrent Neural Networks (QRNN)

QRNN解決了兩種標準架構的缺點。 它允許並行處理並捕獲長期依賴性,例如CNN,還允許輸出依賴序列中令牌的順序,例如RNN。

因此,首先,QRNN體系結構具有2個元件,分別對應於CNN中的卷積(紅色)和池化(藍色)元件。

卷積分量

卷積元件的操作如下:

  • 形狀的輸入序列:(batch_size,sequence_length,embed_dim)
  • 每個“ bank”的形狀為“ hidden_dim”的核心:(batch_size,kernel_size,embed_dim)。
  • 輸出是一個形狀序列:(batch_size,sequence_length,hidden_dim)。 這些是序列的隱藏狀態。

卷積運算在序列以及小批量上並行應用。

為了保留模型的因果關係(即,只有過去的標記才可以預測未來),使用了一種稱為遮罩卷積(masked-convolutions)的概念。 也就是說,輸入序列的左邊是“ kernel_size-1”零。 因此,只有’sequence_length-kernel_size + 1’過去的標記可以預測給定的標記。 為了獲得更好的直覺,請參考下圖:

接下來,我們基於池化功能(將在下一節中討論)使用額外的核心庫,以獲取類似於LSTM的門控向量:

這裡,*是卷積運算; Z是上面討論的輸出(稱為“輸入門”輸出); F是使用額外的核心庫W_f獲得的“忘記門”輸出; O是使用額外的核心庫W_o獲得的“輸出門”輸出。

如上所述,這些卷積僅應用於過去的“ sequence_length-kernel_size + 1”令牌。 因此,如果我們使用kernel_size = 2,我們將得到類似LSTM的方程式:

池化元件

通常,合併是一種無引數的函式,可捕獲卷積特徵中的重要特徵。 對於影像,通常使用最大池化和平均池化。 但是,在序列的情況下,我們不能簡單地獲取特徵之間的平均值或最大值,它需要有一些迴圈。 因此,QRNN論文提出了受傳統LSTM單元中元素級門控體系結構啟發的池化功能。 本質上,它是一個無引數函式,它將跨時間步混合隱藏狀態。

最簡單的選項是“動態平均池化”,它僅使用了“忘記門”(因此稱為f-pooling):

⊙是逐元素矩陣乘法。它以忘記門為引數,幾乎等於輸出的“移動平均值”。

另一種選擇是使用忘記門以及輸出門(所以被稱作,fo-pooling):

除此以外,池化可能另外具有專用的輸入門(ifo-pooling):

正則化

在檢查了各種遞迴退出方案之後,QRNN使用了一種擴充套件方案,稱為“區域退出”(‘zone out),它本質上是在每個時間步選擇一個隨機子集來退出,對於這些通道,它只是將當前通道值複製到下一次 步驟,無需任何修改。

這等效於將QRNN的“忘記門”通道的子集隨機設定為1,或在1-F上進行dropout – QRNN Paper

來自DenseNet的想法

DenseNet體系結構建議在每一層與其前面的每一層之間都具有跳過連線,這與在後續層上具有跳過連線的慣例相反。 因此,對於具有L個層的網路,將存在L(L-1)個跳過連線。 這有助於梯度流動和收斂,但要考慮二次空間。

使用QRNN構建seq2seq

在基於RNN的常規seq2seq模型中,我們只需使用編碼器的最後一個隱藏狀態初始化解碼器,然後針對解碼器序列對其進行進一步修改。 我們無法對迴圈池層執行此操作,因為在這裡,編碼器狀態無法為解碼器的隱藏狀態做出很大貢獻。 因此,作者提出了一種改進的解碼器架構。

將編碼器的最後一個隱藏狀態(最後一個令牌的隱藏狀態)線性投影(線性層),並在應用任何啟用之前,將其新增到解碼器層每個時間步長的卷積輸出中(廣播,因為編碼器向量較小):

V是應用於最後一個編碼器隱藏狀態的線性權重。

注意力機制

注意力僅應用於解碼器的最後隱藏狀態。

其中s是編碼器的序列長度,t是解碼器的序列長度,L表示最後一層。

首先,將解碼器的未選通的最後一層隱藏狀態的點積與最後一層編碼器隱藏狀態相乘。 這將導致形狀矩陣(t,s)。 將Softmax替代s,並使用該分數獲得形狀(t,hidden_dim)的注意總和k_t。 然後,將k_t與c_t一起使用,以獲取解碼器的門控最後一層隱藏狀態。

效能測試

與LSTM架構相比,QRNN可以達到相當的準確度,在某些情況下甚至比LSTM架構略勝一籌,並且運算速度提高了17倍。

最近,基於QRNN的模型pQRNN在序列分類上僅用1.3M引數就取得了與BERT相當的結果(與440M引數的BERT相對):

結論

我們深入討論了新穎的QRNN架構。 我們看到了它如何在基於卷積的模型中增加遞迴,從而加快了序列建模的速度。 QRNN的速度和效能也許真的可以替代Transformer。

作者:Rohan Jagtap

deephub翻譯組

相關文章