微軟重磅論文提出LightRNN:高效利用內存和計算的循環神經網絡

fryk5498 8年前發布 | 34K 次閱讀 自然語言處理 神經網絡 向量

摘要

循環神經網絡(RNN)已經在許多自然語言處理任務上取得了最出色的表現,比如語言建模和機器翻譯。然而當詞匯量很大時,RNN 模型會變得很大(可能超過 GPU 最大的內存能力),這樣訓練將變得很低效。在這項工作中,我們提出一種全新的方法來解決這一挑戰。其中的關鍵思想是使用二分量(2-Component(2C))共享的詞表征的嵌入(embedding for word representations)。

我們將詞匯表中的每一個詞都分配到一個表格中,其中每一行都關聯了一個向量,每一列則關聯了另一個向量。根據一個詞在表中的位置,該詞可由行向量和列向量兩個維度聯合表示。因為該表中同一行具有相同的行向量,同一列具有相同的列向量,所以我們僅僅需要 2p|V|個向量來表示帶有|V|個詞的詞匯表,這遠遠少于現有的方法所需要的向量數|V|。基于二分量(2-Component)共享嵌入的方法,我們設計了一種新的 RNN 算法,并且使用幾個基準數據集上的語言建模任務對其進行了評估。

結果表明,我們的算法可以顯著地減少模型的大小,并且能在不犧牲精度的情況下加快訓練速度(它實現了與當前最佳的語言模型相近或更好的困惑度(perplexity))。值得注意的是,在 One-Billion-Word 基準數據集上,我們的算法實現了和以前語言模型差不多的困惑度,同時卻將模型的大小減小了 40 到 100 倍、訓練過程也加快了 2 倍。我們將我們提出來的算法命名為 LightRNN, 這主要是反應它在模型大小上的精簡和很快的訓練速度。

訓練 ACLW-French 時的困惑度對比

引言

最近,循環神經網絡(RNN)已被用于處理多種自然語言處理(NLP)任務,例如語言建模、機器翻譯、情緒分析和問答。有一種流行的 RNN 架構是長短期記憶網絡(LSTM),其可以通過記憶單元(memory cell)和門函數(gating function)建模長期依賴性和解決梯度消失問題。因為這些元素,LSTM 循環神經網絡在當前許多自然語言處理任務中都實現了最佳的表現,盡管它的方式幾乎是從頭開始學習。

雖然 RNN 越來越受歡迎,但它也存在一個局限性:當應用于大詞匯的文本語料庫時,模型的體量將變得非常大。比如說,當使用 RNN 進行語言建模時,詞首先需要通過輸入嵌入矩陣(input-embedding matrix)從 one-hot 向量(其維度與詞匯尺寸相同)映射到嵌入向量。然后為了預測下一詞的概率,通過輸出嵌入矩陣(output-embedding matrix)將頂部隱藏層投射成詞匯表中所有詞的概率分布。當該詞匯庫包含數千萬個不同的詞時(這在 Web 語料庫中很常見),這兩個嵌入矩陣就會包含數百億個不同的元素,這會使得 RNN 模型變得過大,從而無法裝進 GPU 設備的內存。以 ClueWeb 數據集為例,其詞匯集包含超過 1000 萬詞。如果嵌入向量具有 1024 個維度并且每個維度由 32 位浮點表示,則輸入嵌入矩陣的大小將為大約 40GB。進一步考慮輸出嵌入矩陣和隱藏層之間的權重,RNN 模型將大于 80GB,這一數字遠遠超出了市面上最好的 GPU 的能力。

即使 GPU 的內存可以擴容,用于訓練這樣體量模型的計算復雜度也將高到難以承受。在 RNN 語言模型中,最耗時的運算是計算詞匯表中所有詞的概率分布,這需要疊乘序列每個位置處的輸出嵌入矩陣和隱藏狀態。簡單計算一下就可以知道,需要使用目前最好的單 GPU 設備計算數十年才能完成 ClueWeb 數據集語言模型的訓練。此外,除了訓練階段的難題,即使我們最終訓練出了這樣的模型,我們也幾乎不可能將其裝進移動設備讓它進入應用。

為了應對這些挑戰,在本研究中我們提出了將二分量(2-Component)共享的嵌入用于循環神經網絡中詞表征的方法。我們將詞匯表中的所有詞放入一個表中,每一行都與一個向量關聯,每一列都與另一個向量關聯。這樣我們就能夠通過兩個組件來表示一個詞:對應的行向量和列向量。因為該表中同一行具有相同的行向量,同一列具有相同的列向量,所以我們僅僅需要 2p|V|個向量來表示帶有|V|個詞的詞匯表,這樣可以大幅度減少模型體積(相比而言,vanilla 方法需要|V|個不同的向量)。同時,由于模型尺寸的減小,RNN 模型的訓練速度將會顯著加快。因此,我們將這一新算法稱為 LightRNN,以表示模型的小尺寸和極高的訓練速度。這種方法的最大技術難題是如何將詞合適地分配到表中。

LightRNN(左)對比常規 RNN(右)

為了這個目的,我們提出一個引導框架:(1)首先隨機初始化詞分配(word allocation),并訓練 LightRNN 模型。(2)解決訓練了的嵌入向量(對應為表格中的行和列向量),然后細化分配來最小化訓練損失(training loss),這是圖論(graph theory)最小權重完美匹配問題,我們能夠有效地解決。(3)重復第二步,直到滿足確切的終止標準。

我們使用在多個基準數據集進行語言建模任務來評價 LightRNN。實驗表明,在困惑度(perplexity)上面,LightRNN 實現了可與最先進的語言模型媲美或更好的準確度。同時還減少了模型大小高達百倍,加快了訓練過程兩倍。請注意,對于高度緊湊的模型來說這個可預見的(沒有準確性下降)。

首先,這使得將 RNN 模型運用到 GPU 甚至是移動設備成為了可能。其次,如果訓練數據很大,需要執行分布式數據平行訓練時,聚合本地工作器(worker)的模型所需要的交流成本會很低。通過這種方式,我們的方法使先前昂貴的 RNN 算法變得非常經濟且規模化了。因此,它將會對用于人工自然語言處理(NLP)任務的深度學習有深遠的影響。

結論和未來的方向

在本研究中,我們提出了一個全新的算法 LightRNN,該算法可用于自然語言處理任務。通過用于詞表征的二分量共享的嵌入(2-Component shared embedding for word representations),LightRNN 在模型尺寸和運行時間上都取得了高效的表現,特別是在具有大詞匯量的語料庫中。在未來,這種算法有很多方向可以進一步研究。首先,我們計劃將 LightRNN 應用于更大的語料庫中,如 ClueWeb 數據集——傳統的 RNN 模型還不能將其裝進一個現代的 GPU 中。第二,我們會將 LightRNN 應用于機器翻譯和問答等其它自然語言處理任務中。第三,我們會探索 k-分量分享嵌入(k>2)并研究 k 在權衡效率和有效性之間的作用。最后,我們將會整理我們的代碼,以便在近期通過 CNTK 將其發布出來。

 

來自:http://www.jiqizhixin.com/article/1739

 

 本文由用戶 fryk5498 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!