也就是從 201四、15 年起,咱們基於深度神經網絡的應用就已經在文本和語音識別領域達到 95% 的準確率,能夠用來開發新一代的聊天機器人、我的助理和即時翻譯系統等。微信
卷積神經網絡(Convolutional Neural Nets, CNNs)是圖像和視頻識別領域公認的主力軍,而循環神經網絡(Recurrent Neural Nets, RNNs)在天然語言處理領域的地位與其是類似的。網絡
但兩者的一個主要不一樣是,CNN 能夠識別靜態圖像(或以幀分割的視頻)中的特徵,而 RNN 在文本和語音方面表現出色,由於這類問題屬於序列或時間依賴問題。也就是說,待預測的後一個字符或單詞依賴於前面的(從左到右)字符或單詞,所以引入時間的概念,進而考慮到序列。架構
實際上,RNN 在全部的序列問題上都有良好表現,包括語音 / 文本識別、機器翻譯、手寫體識別、序列數據分析(預測),甚至不一樣配置下的自動編碼生成等等。函數
在很短的一段時期裏,RNN 的改進版本大行其道,其中包括 LSTM(long short term memory,長短時間記憶網絡)和 GRU(gated recurring units,門循環單元)。這兩者都改進了 RNN 的記憶範圍,令數據能夠將距離其很遠的文本信息利用起來。學習
當 RNN 從左到右按順序讀取字符時,上下文就成了一個重要問題。好比,對一條評論進行情感分析時,剛開始的幾句話多是正面的(例如,食物好,氣氛好)但以負面評論結束(如服務差,價格高),最後整條評論其實是負面的。這其實在邏輯上等同於「纔怪」的玩笑:「這個領帶看着不錯……纔怪!」編碼
這個問題的解決方案是使用兩個 LSTM 編碼器,同時從兩個方向讀取文本(即雙向編碼器)。這至關於在如今掌握了(文本的)將來信息。這很大程度上解決了問題。精度確實提升了。人工智能
早些年,當 Facebook 和 Google 發佈各自的自動語言翻譯系統時,他們意識到了一個問題——翻譯耗時太長了。lua
這其實是 RNN 在內部設計上存在的一個問題。因爲網絡一次只讀取、解析輸入文本中的一個單詞(或字符),深度神經網絡必須等前一個單詞處理完,才能進行下一個單詞的處理。翻譯
這意味着 RNN 不能像 CNN 那樣進行大規模並行處理(massive parallel processing,MPP),特別是在 RNN/LSTM 對文本進行雙向處理時。設計
這也意味着 RNN 極度地計算密集,由於在整個任務運行完成以前,必須保存全部的中間結果。
2017 年初,Google 和 Facebook 針對該問題提出了類似的解決方案——在機器翻譯系統中使用 CNN,以便將大規模並行處理的優點發揮出來。在 CNN 中,計算不依賴於以前時間的信息,所以每一個計算都是獨立的,能夠並行起來。
Google 的解決方案叫作 ByteNet,而 Facebook 的稱爲 FairSeq(這是用 Facebook 內部的人工智能研究團隊 FAIR 來命名的)。FairSeq 的代碼已發佈至 GitHub。
Facebook 稱他們的 FairSeq 網絡的運行速度比基本的 RNN 快 9 倍。
CNN 在處理圖像時,將圖像看做一個二維的「塊」(高度和寬度);遷移到文本處理上,就能夠將文本看做一個一維對象(高度 1 個單位,長度 n 個單位)。
但 RNN 不能直接預約義對象長度,而 CNN 須要長度信息。所以,要使用 CNN,咱們必須不斷增長層數,直到整個感覺野都被覆蓋爲止。這種作法會讓 CNN 很是深,可是得益於大規模並行處理的優點,不管網絡多深,均可以進行並行處理,節省大量時間。
固然,具體的解決方案不會像上面所說的那樣簡單。Google 和 Facebook 還向網絡中添加了一個特殊結構:「注意力(Attention)」函數。
最初的注意力函數是去年由 Google Brain 和多倫多大學的研究者們提出的,命名爲變換器(Transformer)。
原論文連接:
https://papers.nips.cc/paper/7181-attention-is-all-you-need.pdf。
當時,Facebook 和 Google 使用的函數幾乎如出一轍,所以該函數備受關注,被稱爲「注意力」函數。該函數有兩個獨特的特徵。
第一個特徵被 Facebook 稱爲「多跳躍」。和傳統 RNN 方法的每一個句子只「看」一次不一樣,多跳躍讓系統能夠「瞥」一個句子「好多眼」。這種行爲和人工翻譯更類似。
每「一瞥」可能會關注某個名詞或動詞,而這些詞並不必定是一個序列,所以在每一次迭代中能夠更深刻地理解其含義。每「瞥」之間多是獨立的,也可能依賴於前面的「瞥」,而後去關注相關的形容詞、副詞或助動詞等。
上圖是 Facebook 給出的一個法英翻譯的例子,展現了第一次迭代的過程。該次迭代編碼了每個法語單詞,而後用「多跳躍」的方法選擇最合適的英文翻譯。
第二個特徵是選通(即門控制),用來控制各隱藏層之間的信息流。在上下文理解過程當中,門經過對 CNN 的尺度控制,來判斷哪些信息能更好地預測下一個單詞。
至 2017 年中旬,Facebook 和 Google 已經經過使用 CNN 和注意力函數,徹底解決了機器翻譯的時間效率問題。而更重要的一個問題是,這種技術大有用武之地,不能將其埋沒在加速機器翻譯的小小任務中。咱們可否將其推廣到全部適用於 RNN 的問題?答案是,固然能夠。
2017 年,相關的研究發表了不少;其中有些幾乎是和 Facebook、Google 同時發表的。其中一個敘述比較全面的論文是 Shaojie Bai、J. Zico Kolter 和 Vladlen Koltun 發表的「An Empirical Evaluation of Generic Convolutional and Recurrent Networks for Sequence Modeling」。
原文連接:https://arxiv.org/pdf/1803.01271.pdf。
有些同仁將這種新架構命名爲時間卷積網絡。固然隨着工業上的應用,這個名稱有可能會被更改。
上述論文所作的工做是在 11 個不一樣的、非語言翻譯類的工業標準 RNN 問題上,將 TCN 與 RNN、LSTM、GRU 進行了直接比較。
研究的結論是:TCN 在其中的 9 個問題中,不只速度更快,且精度更高;在 1 個問題中與 GRU 打了平手(下表中的粗體文字表明精度最高項。圖片截取自原論文)。
Shaojie Bai、J. Zico Kolter 和 Vladlen Koltun 還給出了下面這一實用的列表,列舉了 TCN 的優缺點。
速度很重要。更快的網絡能使反饋環更短。因爲在 TCN 中能夠進行大規模並行處理,網絡訓練和驗證的時間都會變短。
TCN 爲改變感覺野大小提供了更多靈活性,主要是經過堆疊更多的卷積層、使用更大的膨脹係數及增大濾波器大小。這些操做能夠更好地控制模型的記憶長短。
TCN 的反向傳播路徑和序列的時間方向不一樣。這避免了 RNN 中常常出現的梯度爆炸或梯度消失問題。
訓練時須要的內存更少,尤爲是對於長輸入序列。
然而,做者指出,TCN 在遷移學習方面可能沒有 CNN 的適應能力那麼強。這是由於在不一樣的領域,模型預測所須要的歷史信息量多是不一樣的。所以,在將一個模型從一個對記憶信息需求量少的問題遷移到一個須要更長記憶的問題上時,TCN 可能會表現得不好,由於其感覺野不夠大。
進一步考慮TCN 已經被應用在不少重要領域,也得到了極大成功,甚至幾乎能夠解決一切序列問題。所以,咱們須要從新考慮咱們以前的見解。序列問題再也不是 RNN 的專屬領域,而 TCN 應該成爲咱們將來項目的優先選項。
關於做者:Bill Vorhies,數據科學中心主編,數據科學家,自 2001 年起就開始從事數據科學領域相關職業。郵箱:Bill@DataScienceCentral.com。
本文首發於 Data Science Central,原文連接:
https://www.datasciencecentral.com/profiles/blogs/temporal-convolutional-nets-tcns-take-over-from-rnns-for-nlp-pred