2014 年 RNN/LSTM 起死回生。自此,RNN/LSTM 及其變種逐漸被廣大用戶接受和認(rèn)可。起初,LSTM 和 RNN 只是一種解決序列學(xué)習(xí)和序列翻譯問題的方法(seq2seq),隨后被用于語音識(shí)別并有很好的效果,比如 Siri,Cortana,Alexa 等;此外,這種技術(shù)在機(jī)器翻譯領(lǐng)域也有應(yīng)用,比如 Google Translate。
2015-2016 年,新的 ResNet 和 Attention 技術(shù)出現(xiàn)。實(shí)際上,我們可以將 LSTM 理解為一種巧妙地 bypass technique,而 attention 的成功表明了 MLP(多層感知器)網(wǎng)絡(luò)可以被上下文向量影響的平均網(wǎng)絡(luò)(averaging network)所替代。
兩年過去了,我們現(xiàn)在已經(jīng)可以給出結(jié)論:
放棄 RNN 和 LSTM 吧,它們真的不好用
基于 attention 的網(wǎng)絡(luò)逐漸被越來越多的企業(yè)采用,比如 Google,F(xiàn)acebook,Salesforce 等公司都已經(jīng)開始用基于attention的模型來替換RNN和其變種。RNN 在各種應(yīng)用場景下時(shí)日無多,因?yàn)橄啾然?attention 的模型,RNN 需要更多的資源來訓(xùn)練和運(yùn)行。
編者注:訓(xùn)練 RNN 和 LSTM 是非常困難的,因?yàn)橛?jì)算能力受到內(nèi)存和帶寬等的約束。這同時(shí)也是硬件設(shè)計(jì)者的噩夢,并最終限制了神經(jīng)網(wǎng)絡(luò)解決方案的適用性。簡而言之,每個(gè) LSTM 單元需要 4 個(gè)線性層(MLP 層),以便每個(gè)順序時(shí)間步運(yùn)行一次。線性層需要大量的內(nèi)存帶寬才能執(zhí)行計(jì)算;由于系統(tǒng)沒有足夠的內(nèi)存帶寬將數(shù)據(jù)饋送到計(jì)算單元,實(shí)際上它們無法使用許多計(jì)算單元。添加更多的計(jì)算單元很容易,但添加更多的內(nèi)存帶寬卻很難。因此,RNN/LSTM 及其變種并不和硬件加速非常匹配,一個(gè)可能的解決方案就是讓計(jì)算在存儲(chǔ)器設(shè)備中完成。
為什么 RNN/LSTM 真的不好用?
RNN,LSTM及其變種主要使用序列處理,如下圖所示:
圖1 RNN中的序列處理
圖中的箭頭表示長期信息在進(jìn)入當(dāng)前的處理單元前需要有序地進(jìn)入所有其他的處理單元。也就是說,這很容易通過多次乘小于 0 的數(shù)字來進(jìn)行破壞和攻擊,這就是梯度消失的原因。
梯度消失可以利用 LSTM 模塊來補(bǔ)救,目前的 LSTM 可是看作是多交換網(wǎng)關(guān),有點(diǎn)像 ResNet。因?yàn)?LSTM 可以繞過一些單元,對長時(shí)間的步驟進(jìn)行記憶,因此 LSTM 可以一定程度上解決梯度消失的問題。
圖2 LSTM中的序列處理
從圖2可以看出,從前面的單元傳遞來當(dāng)前單元的序列路徑依然存在。事實(shí)上,因?yàn)檫@條路徑會(huì)不斷添加并且會(huì)遺忘與之相關(guān)的路徑分支,它會(huì)變得越來越復(fù)雜。LSTM、GRU 及其變體能學(xué)習(xí)大量的長期信息,但它們最多只能記住約 100s 的長期信息,而不是 1000s,10000s 甚至更長時(shí)間的信息。
RNN 還有一個(gè)問題就是并不與所有硬件兼容。如果要快速訓(xùn)練 RNN,那么就需要大量的計(jì)算資源,而這正是我們?nèi)鄙俚?。如果在云上運(yùn)行 RNN 模型的話,也會(huì)消耗比其他模型更多的資源。隨著語音轉(zhuǎn)文本需求的快速增長,云端的擴(kuò)展也變得更加困難。
你需要做些什么?
因?yàn)榇蠖鄶?shù)時(shí)間我們處理的都是實(shí)時(shí)的因果數(shù)據(jù)(casual data),我們想利用這些已知的數(shù)據(jù)來為之后的決策做準(zhǔn)備。那如果可以避免進(jìn)行序列處理,我們就可以找出更好的 look-ahead 和 look-back 的單元,這樣的 look-ahead/back 就叫做 neural attention 模塊。
這種補(bǔ)救方法融合了多個(gè) neural attention 模塊,組成了一個(gè)分層的 neural attention 編碼器,如圖3所示:
圖3 分層 neural attention 編碼器
還有一種更好地分析過去的方法就是用 attention 模塊把過去所有的編碼向量總結(jié)為一個(gè)上下文向量 Ct。
這里還有一個(gè) attention 模塊的分層,與神經(jīng)網(wǎng)絡(luò)和時(shí)間卷積網(wǎng)絡(luò)(Temporal convolutional network)的分層非常像。分層神經(jīng) attention 編碼器的多層 attention 能查看過去信息的一小部分,比如說 100 個(gè)向量,而上面分層的attention模塊還能查看到 100 個(gè)下層的注意力模塊,也就是 100×100 個(gè)向量。這極大地?cái)U(kuò)展了分層神經(jīng) attention 編碼器的能力。
更重要的是將傳播向量傳輸?shù)骄W(wǎng)絡(luò)輸出所需要的路徑長度:在分層網(wǎng)絡(luò)中,路徑長度與 Log(N)成比例的,其中 N 是分層的層數(shù)。這與 RNN 需要執(zhí)行的T步驟形成了對照,其中 T 是需要記住的順序的最大長度,而 T >> N。
Neural Turing Machines(NTM,神經(jīng)圖靈機(jī))的架構(gòu)也與圖3類似,但是 NTM 是讓神經(jīng)網(wǎng)絡(luò)來決定通過 attention 從內(nèi)存中讀取什么的。也就是說,真實(shí)的神經(jīng)網(wǎng)絡(luò)將決定哪個(gè)過去的向量對未來的決策更重要。
在內(nèi)存存儲(chǔ)方面。與 NTM 不同,上面的架構(gòu)把所有之前的表示都儲(chǔ)存在內(nèi)存里,這就會(huì)造成效率比較低的問題。有一個(gè)解決的辦法就是增加另外一個(gè)單元來防止有相互關(guān)系的數(shù)據(jù)多次保存。當(dāng)前科學(xué)研究的重點(diǎn)是由應(yīng)用去決定保存哪些向量,哪些不保存。
目前許多的公司仍在使用 RNN/LSTM 來進(jìn)行語音轉(zhuǎn)文本的工作,都沒有意識(shí)到這種網(wǎng)絡(luò)結(jié)構(gòu)在效率和可擴(kuò)展性上的缺點(diǎn)。
-
編碼器
+關(guān)注
關(guān)注
45文章
3574瀏覽量
133983 -
rnn
+關(guān)注
關(guān)注
0文章
76瀏覽量
6868
原文標(biāo)題:放棄 RNN/LSTM 吧,因?yàn)檎娴牟缓糜茫⊥苤獈
文章出處:【微信號(hào):AI_Thinker,微信公眾號(hào):人工智能頭條】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論