Recurrent Neural Network[Quasi RNN]
0.背景
RNN模型,特別是包含著門(mén)控制的如LSTM等模型,近年來(lái)成了深度學(xué)習(xí)解決序列任務(wù)的標(biāo)準(zhǔn)結(jié)構(gòu)。RNN層不但可以解決變長(zhǎng)輸入的問(wèn)題,還能通過(guò)多層堆疊來(lái)增加網(wǎng)絡(luò)的深度,提升表征能力和提升準(zhǔn)確度。然而,標(biāo)準(zhǔn)的RNN(包括LSTM)受限于無(wú)法處理那些具有非常長(zhǎng)的序列問(wèn)題,例如文檔分類(lèi)或者字符級(jí)別的機(jī)器翻譯;同樣的,其也無(wú)法并行化的計(jì)算特征或者說(shuō),也無(wú)法同時(shí)針對(duì)文檔不同部分狀態(tài)進(jìn)行計(jì)算。
CNN模型,特別適合處理圖片數(shù)據(jù),可是近年來(lái)也用在處理序列編碼任務(wù)了(如文獻(xiàn)1)。通過(guò)應(yīng)用時(shí)間不變性的過(guò)濾器函數(shù)來(lái)并行的計(jì)算輸入序列。CNN不同與循環(huán)模型的優(yōu)點(diǎn)有:
- 增強(qiáng)并行化;
- 更好的處理更長(zhǎng)的序列,如字符級(jí)別的語(yǔ)言數(shù)據(jù)。
而將CNN模型結(jié)合了RNN層生成的混合結(jié)構(gòu),能更好的處理序列數(shù)據(jù)(如文獻(xiàn)2)。因?yàn)閭鹘y(tǒng)的最大池化和平均池化可以看成是:基于假設(shè)時(shí)間不變性前提下,在時(shí)間維度上結(jié)合卷積特征的一種方法。也就是說(shuō)其本身是無(wú)法完全處理大規(guī)模序列有序信息的。
作者提出的Quasi RNN是結(jié)合了RNN和CNN的特性:
- 像CNN一樣,基于時(shí)間步維度和minibatch維度上進(jìn)行并行計(jì)算,確保對(duì)序列數(shù)據(jù)有高吞吐量和良好的長(zhǎng)度縮放性;
- 像RNN一樣,允許輸出是依賴(lài)于序列中之前的有序元素基礎(chǔ)上得到的,即RNN本身的過(guò)去時(shí)間依賴(lài)性
如圖0.1所示,其中就是通過(guò)結(jié)合LSTM和CNN的特性而構(gòu)成的Quasi RNN。
1.Quasi RNN
Quasi RNN如CNN一樣可以分解成2個(gè)子組件:
- 卷積組件:在序列數(shù)據(jù)上,基于序列維度并行計(jì)算(CNN是基于minibatch維度和空間維度),如圖1.1.
- 池化組件:如CNN一樣,該部分沒(méi)有需要訓(xùn)練的參數(shù),允許基于minibatch維度和特征維度上并行計(jì)算。
本人覺(jué)得圖0.1略有些難以理解,自己畫(huà)成如下圖:
圖1.1 基于序列數(shù)據(jù)的CNN卷積:假設(shè)\(t=3, k=2, x_i \in R^{n\times 1}, z_i \in R^{m\times 1}\)
1.1. 卷積
然后就是Quasi RNN模塊的內(nèi)部結(jié)構(gòu)了,其遵循如下公式:
$ 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為寬度的序列維度上的窗口滑動(dòng),如圖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的選取對(duì)于字符級(jí)別的任務(wù)還是很重要的。
1.2. 池化
在池化部分,作者建議了3種:
- f-pooling:動(dòng)態(tài)平均池化,其中只用了一個(gè)遺忘門(mén),\(\bigodot\)表示逐元素相乘
\(h_t=f_t\bigodot h_{t-1}+(1-f_t)\bigodot z_t\) (7)
圖1.2.1 f-pooling時(shí)候的QRNN結(jié)構(gòu)圖 - fo-pooling:基于動(dòng)態(tài)平均池化,增加一個(gè)輸出門(mén)
\(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時(shí)候的QRNN結(jié)構(gòu)圖 - ifo-pooling:具有一個(gè)獨(dú)立的輸入門(mén)和遺忘門(mén)
\(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時(shí)候的QRNN結(jié)構(gòu)圖
上述中\(h,c\)的狀態(tài)都初始化為0,雖然對(duì)序列中每個(gè)時(shí)間步來(lái)說(shuō),這些函數(shù)的循環(huán)部分都需要計(jì)算,不過(guò)他們夠簡(jiǎn)單,而且可以隨著特征維度進(jìn)行并行化。也就是對(duì)于實(shí)際操作中,對(duì)于即使很長(zhǎng)的序列來(lái)說(shuō),增加的時(shí)間都是可以忽略不計(jì)的。一個(gè)QRNN層就是執(zhí)行一個(gè)輸入依賴(lài)的池化,后面跟著一個(gè)基于卷積特征和門(mén)控制的線性組合。正如CNN一樣,隨著QRNN層數(shù)增加,可以創(chuàng)建一個(gè)逼近更復(fù)雜函數(shù)的模型。
參考文獻(xiàn):
轉(zhuǎn)載于:https://www.cnblogs.com/shouhuxianjian/p/7816323.html
總結(jié)
以上是生活随笔為你收集整理的Recurrent Neural Network[Quasi RNN]的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 关于Mac设置alias别名访问服务器
- 下一篇: msp430项目编程53