2014 年 RNN/LSTM 起死回生。自此,RNN/LSTM 及其變種逐漸被廣大用戶接受和認(rèn)可。起初,LSTM 和 RNN 只是一種解決序列學(xué)習(xí)和序列翻譯問題的方法(seq2seq),隨后被用于語音識別并有很好的效果,比如 Siri,Cortana,Alexa 等;此外,這種技術(shù)在機(jī)器翻譯領(lǐng)域也有應(yīng)用,比如 Google Translate。
2015-2016 年,新的 ResNet 和 Attention 技術(shù)出現(xiàn)。實際上,我們可以將 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)用場景下時日無多,因為相比基于 attention 的模型,RNN 需要更多的資源來訓(xùn)練和運(yùn)行。
編者注:訓(xùn)練 RNN 和 LSTM 是非常困難的,因為計算能力受到內(nèi)存和帶寬等的約束。這同時也是硬件設(shè)計者的噩夢,并最終限制了神經(jīng)網(wǎng)絡(luò)解決方案的適用性。簡而言之,每個 LSTM 單元需要 4 個線性層(MLP 層),以便每個順序時間步運(yùn)行一次。線性層需要大量的內(nèi)存帶寬才能執(zhí)行計算;由于系統(tǒng)沒有足夠的內(nèi)存帶寬將數(shù)據(jù)饋送到計算單元,實際上它們無法使用許多計算單元。添加更多的計算單元很容易,但添加更多的內(nèi)存帶寬卻很難。因此,RNN/LSTM 及其變種并不和硬件加速非常匹配,一個可能的解決方案就是讓計算在存儲器設(shè)備中完成。
為什么 RNN/LSTM 真的不好用?
RNN,LSTM及其變種主要使用序列處理,如下圖所示:

圖1 RNN中的序列處理
圖中的箭頭表示長期信息在進(jìn)入當(dāng)前的處理單元前需要有序地進(jìn)入所有其他的處理單元。也就是說,這很容易通過多次乘小于 0 的數(shù)字來進(jìn)行破壞和攻擊,這就是梯度消失的原因。
梯度消失可以利用 LSTM 模塊來補(bǔ)救,目前的 LSTM 可是看作是多交換網(wǎng)關(guān),有點像 ResNet。因為 LSTM 可以繞過一些單元,對長時間的步驟進(jìn)行記憶,因此 LSTM 可以一定程度上解決梯度消失的問題。

圖2 LSTM中的序列處理
從圖2可以看出,從前面的單元傳遞來當(dāng)前單元的序列路徑依然存在。事實上,因為這條路徑會不斷添加并且會遺忘與之相關(guān)的路徑分支,它會變得越來越復(fù)雜。LSTM、GRU 及其變體能學(xué)習(xí)大量的長期信息,但它們最多只能記住約 100s 的長期信息,而不是 1000s,10000s 甚至更長時間的信息。
RNN 還有一個問題就是并不與所有硬件兼容。如果要快速訓(xùn)練 RNN,那么就需要大量的計算資源,而這正是我們?nèi)鄙俚摹H绻谠粕线\(yùn)行 RNN 模型的話,也會消耗比其他模型更多的資源。隨著語音轉(zhuǎn)文本需求的快速增長,云端的擴(kuò)展也變得更加困難。
你需要做些什么?
因為大多數(shù)時間我們處理的都是實時的因果數(shù)據(jù)(casual data),我們想利用這些已知的數(shù)據(jù)來為之后的決策做準(zhǔn)備。那如果可以避免進(jìn)行序列處理,我們就可以找出更好的 look-ahead 和 look-back 的單元,這樣的 look-ahead/back 就叫做 neural attention 模塊。
這種補(bǔ)救方法融合了多個 neural attention 模塊,組成了一個分層的 neural attention 編碼器,如圖3所示:

圖3 分層 neural attention 編碼器
還有一種更好地分析過去的方法就是用 attention 模塊把過去所有的編碼向量總結(jié)為一個上下文向量 Ct。
這里還有一個 attention 模塊的分層,與神經(jīng)網(wǎng)絡(luò)和時間卷積網(wǎng)絡(luò)(Temporal convolutional network)的分層非常像。分層神經(jīng) attention 編碼器的多層 attention 能查看過去信息的一小部分,比如說 100 個向量,而上面分層的attention模塊還能查看到 100 個下層的注意力模塊,也就是 100×100 個向量。這極大地擴(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)存中讀取什么的。也就是說,真實的神經(jīng)網(wǎng)絡(luò)將決定哪個過去的向量對未來的決策更重要。
在內(nèi)存存儲方面。與 NTM 不同,上面的架構(gòu)把所有之前的表示都儲存在內(nèi)存里,這就會造成效率比較低的問題。有一個解決的辦法就是增加另外一個單元來防止有相互關(guān)系的數(shù)據(jù)多次保存。當(dāng)前科學(xué)研究的重點是由應(yīng)用去決定保存哪些向量,哪些不保存。
目前許多的公司仍在使用 RNN/LSTM 來進(jìn)行語音轉(zhuǎn)文本的工作,都沒有意識到這種網(wǎng)絡(luò)結(jié)構(gòu)在效率和可擴(kuò)展性上的缺點。
-
編碼器
+關(guān)注
關(guān)注
45文章
3953瀏覽量
142617 -
rnn
+關(guān)注
關(guān)注
0文章
92瀏覽量
7345
原文標(biāo)題:放棄 RNN/LSTM 吧,因為真的不好用!望周知~
文章出處:【微信號:AI_Thinker,微信公眾號:人工智能頭條】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
一體成型電感:電源工程師的“小方塊”,卻決定著你的電源好不好用
一文讀懂LSTM與RNN:從原理到實戰(zhàn),掌握序列建模核心技術(shù)
儲能EMS控制器(4) — 控制策略適配很繁瑣不好用怎么辦?
FM430-EX固定式掃碼器好用嗎?解析實用功能與優(yōu)點
ST AEKD-AICAR1:基于邊緣AI的汽車狀態(tài)分類開發(fā)套件解析
電能質(zhì)量在線監(jiān)測裝置在實際應(yīng)用中如何選擇有線或無線通信技術(shù)?
干擾可以提高測量精度,是真的嗎?
茶吧機(jī)語音控制方案設(shè)計2025新版
阿童木雙張檢測器好不好用?用數(shù)據(jù)和場景說話
電子工廠ERP好不好用
Tektronix泰克MSO4054示波器按鈕失靈維修案例
樹莓派OS 的屏幕鍵盤不好用?這個方法可以解決問題!
放棄 RNN 和 LSTM 吧,它們真的不好用
評論