0.背景
RNN模型,特別是包含着門控制的如LSTM等模型,近年來成了深度學習解決序列任務的標准結構。RNN層不但可以解決變長輸入的問題,還能通過多層堆疊來增加網絡的深度,提升表征能力和提升准確度。然而,標准的RNN(包括LSTM)受限於無法處理那些具有非常長的序列問題,例如文檔分類或者字符級別的機器翻譯;同樣的,其也無法並行化的計算特征或者說,也無法同時針對文檔不同部分狀態進行計算。
CNN模型,特別適合處理圖片數據,可是近年來也用在處理序列編碼任務了(如文獻1)。通過應用時間不變性的過濾器函數來並行的計算輸入序列。CNN不同與循環模型的優點有:
- 增強並行化;
- 更好的處理更長的序列,如字符級別的語言數據。
而將CNN模型結合了RNN層生成的混合結構,能更好的處理序列數據(如文獻2)。因為傳統的最大池化和平均池化可以看成是:基於假設時間不變性前提下,在時間維度上結合卷積特征的一種方法。也就是說其本身是無法完全處理大規模序列有序信息的。
作者提出的Quasi RNN是結合了RNN和CNN的特性:
- 像CNN一樣,基於時間步維度和minibatch維度上進行並行計算,確保對序列數據有高吞吐量和良好的長度縮放性;
- 像RNN一樣,允許輸出是依賴於序列中之前的有序元素基礎上得到的,即RNN本身的過去時間依賴性
圖0.1 LSTM,CNN,Quasi RNN結構圖
如圖0.1所示,其中就是通過結合LSTM和CNN的特性而構成的Quasi RNN。
1.Quasi RNN
Quasi RNN如CNN一樣可以分解成2個子組件:
- 卷積組件:在序列數據上,基於序列維度並行計算(CNN是基於minibatch維度和空間維度),如圖1.1.
- 池化組件:如CNN一樣,該部分沒有需要訓練的參數,允許基於minibatch維度和特征維度上並行計算。
本人覺得圖0.1略有些難以理解,自己畫成如下圖:
圖1.1 基於序列數據的CNN卷積:假設\(t=3, k=2, x_i \in R^{n\times 1}, z_i \in R^{m\times 1}\)
- 假定輸入為\(X\in R^{T\times n}\),是一個長度為T的序列,其中每個向量維度為n。
- QRNN如圖1.1部分,假定卷積組件的通道是m(即濾波器個數是m),通過卷積操作得到\(Z\in R^{T\times m}\),是一個長度為T的序列,其中每個向量維度為m。
- 如果假定當前時間步為t,那么卷積的范圍為\(x_{t-k+1}\)到\(x_t\)。
1.1. 卷積
然后就是Quasi RNN模塊的內部結構了,其遵循如下公式:
$ Z = tanh(W_z * X) $ (1)
$ F = \sigma(W_f * X) $ (2)
$ O = \sigma(W_o * X) $ (3)
其中\(W_z,W_f,W_o\)都是\(R^{k\times n\times m}\)的張量,\(*\)表示是以k為寬度的序列維度上的窗口滑動,如圖1.1。假如\(k=2\),即卷積操作在序列維度上跨度為2,則上面式子如下所示:
$ z_t = tanh(W_z^1x_{t-1}+W_z^2x_t) $ (4)
$ f_t = \sigma(W_f^1x_{t-1}+W_f^2x_t) $ (5)
$ o_t = \sigma(W_o^1x_{t-1}+W_o^2x_t) $ (6)
如式子(4)(5)(6)所示,k的選取對於字符級別的任務還是很重要的。
1.2. 池化
在池化部分,作者建議了3種:
- f-pooling:動態平均池化,其中只用了一個遺忘門,\(\bigodot\)表示逐元素相乘
\(h_t=f_t\bigodot h_{t-1}+(1-f_t)\bigodot z_t\) (7)
圖1.2.1 f-pooling時候的QRNN結構圖- fo-pooling:基於動態平均池化,增加一個輸出門
\(c_t=f_t\bigodot c_{t-1}+(1-f_t)\bigodot z_t\) (8)
\(h_t = o_t\bigodot c_t\) (9)
圖1.2.2 fo-pooling時候的QRNN結構圖- ifo-pooling:具有一個獨立的輸入門和遺忘門
\(c_t=f_t\bigodot c_{t-1}+i_t\bigodot z_t\) (10)
\(h_t = o_t\bigodot c_t\) (11)
圖1.2.3 ifo-pooling時候的QRNN結構圖
上述中\(h,c\)的狀態都初始化為0,雖然對序列中每個時間步來說,這些函數的循環部分都需要計算,不過他們夠簡單,而且可以隨着特征維度進行並行化。也就是對於實際操作中,對於即使很長的序列來說,增加的時間都是可以忽略不計的。一個QRNN層就是執行一個輸入依賴的池化,后面跟着一個基於卷積特征和門控制的線性組合。正如CNN一樣,隨着QRNN層數增加,可以創建一個逼近更復雜函數的模型。
參考文獻:
- [CNN處理序列數據] - Xiang Zhang, Junbo Zhao, and Yann LeCun. Character-level convolutional networks for text classification.In NIPS, 2015.
- [CNN+RNN] - Jason Lee, Kyunghyun Cho, and Thomas Hofmann. Fully character-level neural machine translation without explicit segmentation. arXiv preprint arXiv:1610.03017, 2016.