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