1. 程式人生 > >放棄 RNN/LSTM 吧,因為真的不好用!望周知~

放棄 RNN/LSTM 吧,因為真的不好用!望周知~

640?wx_fmt=jpeg&wxfrom=5&wx_lazy=1

翻譯 | 張濤

出品 | 人工智慧頭條(公眾號ID:AI_Thinker

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及其變種主要使用序列處理,如下圖所示:

640?wx_fmt=png

圖1 RNN中的序列處理

圖中的箭頭表示長期資訊在進入當前的處理單元前需要有序地進入所有其他的處理單元。也就是說,這很容易通過多次乘小於 0 的數字來進行破壞和攻擊,這就是梯度消失的原因。

梯度消失可以利用 LSTM 模組來補救,目前的 LSTM 可是看作是多交換閘道器,有點像 ResNet。因為 LSTM 可以繞過一些單元,對長時間的步驟進行記憶,因此 LSTM 可以一定程度上解決梯度消失的問題。

640?wx_fmt=png

圖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所示:

640?wx_fmt=jpeg

圖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 來進行語音轉文字的工作,都沒有意識到這種網路結構在效率和可擴充套件性上的缺點。

所以,轉發這篇文章,告訴他們,RNN/LSTM 真的不好用,儘早放棄吧。

作者: Eugenio Culurciello

原文地址

https://towardsdatascience.com/the-fall-of-rnn-lstm-2d1594c74ce0

掃描二維碼,關注「人工智慧頭條」

回覆“技術路線圖”獲取 AI 技術人才成長路線圖

640?wx_fmt=jpeg

☟☟☟點選 | 閱讀原文| 閱讀更多幹貨內容