「像訓練CNN一樣快速訓練RNN」全新RNN實現,比優化後的LSTM快10倍
1新智元報道
項目已經開源:https://github.com/taolei87/sru
先看論文摘要,有個大概的了解:
標題非常直接,也是很多人都想實現的——《像訓練CNN一樣快速訓練RNN》:
摘要
RNN因其狀態計算固有的特性難以並行化因而很難擴展。例如,的前向計算要到的計算完成後才能開始,這構成了並行計算的主要瓶頸。在這項工作中,我們提出了一種RNN的替代實現,簡化了狀態計算過程,展現更多的並行性。我們所提出的循環單元,運行速度與卷積層一樣快,比cuDNN優化的LSTM快5-10倍。我們展示了這種循環單元在廣泛應用中的有效性,包括分類、問答、語言建模、翻譯和語音識別。我們開源了在PyTorch和CNTK中的實現。
簡單循環單元SRU,簡化狀態計算,速度與CNN一樣快
近來深度學習取得的許多進展都源於模型容量的增加和計算力的相應提升。模型容量增大,通常會涉及使用更大、更深的網路,而這些網路又需要複雜的超參數設置和調整。因此,不斷增大的模型和超參數數量也大大增加了訓練時間。
顯然,計算力已經成為深度學習研究的一大主要瓶頸。作為應對,研究人員開始深入挖掘並行計算的潛力,很多人使用GPU加速訓練來擴展深度學習。不過,雖然諸如卷積和注意力的運算非常適合於多線程/GPU計算,但是循環神經網路(RNN)仍然不太適合併行化。在典型的RNN實現中,輸出狀態的計算需要等到計算完成後才能開始。這阻礙了獨立計算,並大大減慢了序列處理的速度。
圖1展示了cuDNN優化後的LSTM和使用conv2d的字級卷積的處理時間。可以看出,兩者區別非常明顯,即使是優化後的LSTM,運行速度也可能慢10倍多。
圖1:cuDNN優化後的LSTM和使用conv2d的字級卷積的處理時間:即使是優化後的LSTM,運行速度也可能慢10倍多
於是,作者提出了「簡單循環單元」(Simple Recurrent Unit,SRU),並在論文中表示其計算速度明顯快於現有的循環實現。SRU簡化了狀態計算的過程,從而展現出了與CNN、注意力和前饋網路相同的並行性。
具體說,雖然SRU的內部狀態ct的更新仍然與前一個狀態ct-1有關,但是在循環步驟中不再依賴於。因此,SRU中的所有矩陣乘法(即gemm)和元素方面的操作可以在不同的維度和步驟中實現並行化。
SRU實現:增加highway連接和變分dropout
那麼,SRU是怎麼實現的呢?
作者指出,當前性能最佳的RNN,比如LSTM和GRU,都使用神經門(neural gate)控制信息流,緩解梯度消失(或爆炸)的問題。
因此,他們在此基礎上,對門控單元進行了調整。具體說,作者新增加了兩個特徵:首先,他們在循環層之間增加了highway連接,因為此前的研究已經證明,像highway連接這樣的skip connections,在訓練深度網路時非常有效;其次,在將RNN正則化時,他們在標準的dropout外,增加了變分dropout,變分dropout在時間步長t與dropout使用相同的mask。
然後,作者將和步驟t的神經門之間的連接全部丟棄,以這種方法來加速循環計算。相比之下,現有的RNN在實現時是要使用先前的輸出狀態的。
經過這樣的改善後,對於現有的深度學習庫,SRU已經可以實現超過5倍的加速。接下來,作者還進行了CUDA級的優化,並在一系列不同的基準上進行測試,評估SRU的效果。
實驗評估結果:圖像分類、語音識別、機器翻譯等任務,實現更好性能的同時,訓練速度更快
作者還在分類、問答、語言建模、翻譯和語音識別等一系列不同任務中評估了SRU。
實驗結果證實了SRU的有效性——與這些任務的循環(或卷積)基準模型相比,SRU在實現更好性能的同時,訓練速度也更快。
圖像分類
斯坦福SQuAD文本處理
語言建模
語音識別
機器翻譯
論文地址:https://arxiv.org/pdf/1709.02755.pdf
Github地址:https://github.com/taolei87/sru
說明:論文未經同行評議,這裡有更多討論:https://www.reddit.com/r/MachineLearning/comments/6zduh2/r_170902755_training_rnns_as_fast_as_cnns/
點擊閱讀原文可查看職位詳情,期待你的加入~
※「麥肯錫」人機結合:製造自動化新時代中印受影響最大,至少2.38億人會被淘汰
※Science:AI如何能在談判時比人類更好,何時代表我們談判?
※世界知名量子科學家加盟阿里:施堯耘出任阿里雲量子技術首席科學家
※專訪國家超級計算無錫中心主任楊廣文:神威·太湖之光將加大對深度學習的支持
※2017最受歡迎人工智慧編程語言:Python第一,R並未上榜
TAG:新智元 |