0
本文作者: 奕欣 | 2017-10-08 11:01 |
雷鋒網(wǎng)AI科技評(píng)論按:本文為東北大學(xué)自然語言處理實(shí)驗(yàn)室(小牛翻譯團(tuán)隊(duì))成員肖桐、李垠橋?yàn)槔卒h網(wǎng)AI科技評(píng)論撰寫的獨(dú)家稿件,得到了其指點(diǎn)和審核,雷鋒網(wǎng)在此表示感謝。
團(tuán)隊(duì)簡(jiǎn)介:東北大學(xué)自然語言處理實(shí)驗(yàn)室(小牛翻譯團(tuán)隊(duì))由姚天順教授于1980年創(chuàng)立,長(zhǎng)期從事機(jī)器翻譯及語言分析方面的研究。小牛翻譯團(tuán)隊(duì)所研發(fā)的NiuTrans系統(tǒng)開源版和小牛翻譯企業(yè)版已經(jīng)被來自 60 余個(gè)國(guó)家的2000多個(gè)機(jī)構(gòu)使用,并支持44種語言的翻譯。團(tuán)隊(duì)在CWMT、NTCIR等評(píng)測(cè)中取得多項(xiàng)第一、第二的成績(jī),發(fā)表AI、IJCAI、AAAI、ACL等期刊及會(huì)議論文40余篇,并于2016年獲得中文信息處理領(lǐng)域最高獎(jiǎng)錢偉長(zhǎng)中文信息科學(xué)技術(shù)獎(jiǎng)(一等獎(jiǎng))。
語言作為人類之間進(jìn)行溝通交流的橋梁,在歷史發(fā)展的長(zhǎng)河中扮演著極其重要的角色。而隨著人工智能時(shí)代的到來,人們更加希望語言不僅僅能夠在人和人之間進(jìn)行信息的傳遞,也能讓機(jī)器“理解”人所說的話。而在這個(gè)過程中十分重要的一個(gè)環(huán)節(jié)就是給人所說的語言建立一個(gè)科學(xué)有效的模型,具體來說就是讓機(jī)器有能力從眾多文字序列中找到合適的字符組合表達(dá)語義,與人類進(jìn)行正常的溝通。
上圖的例子中,我們將語言模型作為一個(gè)黑盒,它能夠?qū)θ齻€(gè)輸入的“句子”進(jìn)行一個(gè)評(píng)判,判斷其語言學(xué)上的合理性,這便是語言模型要做的工作。具體來說,它通過鏈?zhǔn)椒▌t對(duì)整個(gè)文字序列作為句子的可能性進(jìn)行量化,對(duì)每個(gè)詞語出現(xiàn)在當(dāng)前位置(指歷史單詞出現(xiàn)后該詞語出現(xiàn))的概率求乘積得到整句話的概率。
那要如何知道每個(gè)詞出現(xiàn)時(shí)的概率呢?在神經(jīng)語言模型中,其整體結(jié)構(gòu)如上圖所示(圖為循環(huán)神經(jīng)語言模型[1]),輸入層將離散表示的詞匯轉(zhuǎn)化成連續(xù)空間上的詞向量,不同詞匯之間的向量距離能夠反映詞語之間的相似性。隱藏層將輸入層傳遞來的詞向量進(jìn)行更深層次的表述。輸出層結(jié)合隱藏層所傳遞來的信息對(duì)可能出現(xiàn)在下一個(gè)位置的詞進(jìn)行預(yù)測(cè),獲得詞匯表中每個(gè)詞的預(yù)測(cè)概率,有了它我們就能夠按照鏈?zhǔn)椒▌t對(duì)句子的概率進(jìn)行預(yù)測(cè)了。
隨著在語音識(shí)別、機(jī)器翻譯等領(lǐng)域?qū)φZ言模型性能需求的日益增長(zhǎng),我們迫切地希望能夠進(jìn)一步改善神經(jīng)語言模型的性能。一般來說使用更大量的訓(xùn)練數(shù)據(jù)來訓(xùn)練更復(fù)雜的模型結(jié)構(gòu)將會(huì)獲得更優(yōu)的模型性能,但與此同時(shí)帶來的問題在于其訓(xùn)練所花費(fèi)的時(shí)間消耗也相應(yīng)地變長(zhǎng)了。面對(duì)這種情況,如何有效地減少訓(xùn)練神經(jīng)語言模型占用的時(shí)間成為了亟待解決的問題。
那么如何加快神經(jīng)語言模型的訓(xùn)練呢?在處理器的發(fā)展過程中,前期主要通過提升硬件主頻來提升設(shè)備的運(yùn)算速度,而后期由于受到物理環(huán)境等客觀因素的限制,逐漸將方向轉(zhuǎn)到多核并行上來提升計(jì)算速度。類似于該過程,在神經(jīng)網(wǎng)絡(luò)的訓(xùn)練加速中也主要有兩種方法,一種是通過提高硬件的性能來對(duì)訓(xùn)練進(jìn)行加速,另一種是通過增加參與運(yùn)算的設(shè)備數(shù)量來達(dá)到加速的目的。前者就是對(duì)目前來說的一種主流思想,這種方法通過逐漸將神經(jīng)網(wǎng)絡(luò)中矩陣運(yùn)算相關(guān)的操作由CPU向GPU遷移,達(dá)到加速的目的。后者是我們要研究的重點(diǎn),希望能在更多的設(shè)備上對(duì)神經(jīng)語言模型進(jìn)行訓(xùn)練。
面對(duì)著更多的訓(xùn)練數(shù)據(jù),我們要如何在多臺(tái)設(shè)備上進(jìn)行網(wǎng)絡(luò)的訓(xùn)練呢?一種常見的方法就是數(shù)據(jù)并行[2],該方法由Jeffrey Dean等人提出,其核心思想就是將訓(xùn)練數(shù)據(jù)分散到多臺(tái)設(shè)備上同時(shí)進(jìn)行訓(xùn)練,并維護(hù)同一套網(wǎng)絡(luò)參數(shù)。具體的過程為,在網(wǎng)絡(luò)中設(shè)置一個(gè)參數(shù)服務(wù)器,用來保存全局的網(wǎng)絡(luò)參數(shù),其余每臺(tái)設(shè)備在計(jì)算好自己的權(quán)重梯度后將其發(fā)送給參數(shù)服務(wù)器,由參數(shù)服務(wù)器將梯度更新到全局最新的權(quán)重中來,最后將最新的參數(shù)返回給設(shè)備服務(wù)器完成一個(gè)minibatch的更新。
上述方法中存在兩種參數(shù)同步的策略,一種是同步地進(jìn)行參數(shù)更新,另一種為異步。二者的區(qū)別在于參數(shù)服務(wù)器向每個(gè)設(shè)備返回更新后的參數(shù)的時(shí)機(jī)不同。前者需要等待收集到全部設(shè)備上發(fā)送來的梯度后再進(jìn)行權(quán)重的更新,而后者每當(dāng)參數(shù)服務(wù)器收到一個(gè)梯度后便將其更新到自身權(quán)重中,并把當(dāng)前權(quán)重值返回給設(shè)備,過程如上圖所示。由于異步的方式加速效果有限,同時(shí)會(huì)對(duì)模型收斂產(chǎn)生一定程度的負(fù)面影響,因此在實(shí)際情況中一般較少使用。
理想情況下,由于數(shù)據(jù)并行將數(shù)據(jù)分散到了多臺(tái)設(shè)備上進(jìn)行訓(xùn)練,因此系統(tǒng)訓(xùn)練速度應(yīng)該同設(shè)備數(shù)量的增長(zhǎng)而線性增大,但實(shí)際結(jié)果并不盡如人意。我們?cè)谝慌_(tái)機(jī)器上使用多臺(tái)GPU設(shè)備對(duì)神經(jīng)語言模型進(jìn)行訓(xùn)練,速度圖像如上圖所示,并沒有達(dá)到所期待的幾張卡速度就翻幾倍的現(xiàn)象。造成這個(gè)問題的原因是什么呢?
我們可以看到,在數(shù)據(jù)并行的過程中,權(quán)重矩陣以及梯度需要在設(shè)備之間進(jìn)行頻繁的數(shù)據(jù)傳輸,不論是機(jī)器內(nèi)部設(shè)備之間的傳遞還是機(jī)器之間的,這部分的傳輸速度相對(duì)設(shè)備的計(jì)算性能均相去甚遠(yuǎn)。也就是說,雖然我們使用了多臺(tái)設(shè)備進(jìn)行協(xié)同訓(xùn)練,成功地將運(yùn)算分散到多臺(tái)設(shè)備上并行執(zhí)行,但是在這個(gè)過程中為了維護(hù)同一套網(wǎng)絡(luò)參數(shù),反而在設(shè)備間的數(shù)據(jù)傳輸上投入了不小的精力,導(dǎo)致整體的速度提升受到制約。在之前提到的四卡實(shí)驗(yàn)中,數(shù)據(jù)傳輸所花費(fèi)的時(shí)間就占據(jù)了整個(gè)訓(xùn)練耗時(shí)的50%左右,給系統(tǒng)并行效率造成嚴(yán)重的負(fù)面影響。針對(duì)上述問題,眾多科研人員也紛紛提出各種策略,希望能降低多設(shè)備訓(xùn)練中數(shù)據(jù)傳輸耗時(shí)對(duì)并行效果造成的不良影響,這里主要介紹三種常見的優(yōu)化方法。
第一種加速策略叫做All-Reduce[3],它將原本中央化的傳輸結(jié)構(gòu)改為環(huán)形,取消了參數(shù)服務(wù)器的設(shè)置,讓設(shè)備和設(shè)備之間以一種有向環(huán)的結(jié)構(gòu)進(jìn)行數(shù)據(jù)的傳輸,使得系統(tǒng)內(nèi)帶寬的利用率更高,數(shù)據(jù)傳輸更加高效。
第二種方式叫做double-buffering,通過雙緩沖區(qū)協(xié)同工作的方法,將神經(jīng)網(wǎng)絡(luò)訓(xùn)練過程中梯度計(jì)算和數(shù)據(jù)傳遞兩部分進(jìn)行時(shí)間上的重疊,使得單位時(shí)間能夠執(zhí)行更多的minibatch。
此外還有一種更加簡(jiǎn)單粗暴的方式叫做模型平均[4],該方法在每一輪的訓(xùn)練過程中,不進(jìn)行設(shè)備間的參數(shù)同步,只有當(dāng)每一輪訓(xùn)練結(jié)束后才進(jìn)行參數(shù)的平均。這樣做有效降低了數(shù)據(jù)傳輸?shù)念l次從而達(dá)到了加速的效果,對(duì)于帶寬較低的物理環(huán)境(如設(shè)備處于多臺(tái)機(jī)器上,使用以太網(wǎng)進(jìn)行連接)常常使用它對(duì)系統(tǒng)進(jìn)行優(yōu)化。
面對(duì)數(shù)據(jù)傳輸在并行中的大量耗時(shí),我們希望能進(jìn)一步減小這部分所花費(fèi)的時(shí)間。我們知道傳輸時(shí)間等于所要傳輸?shù)臄?shù)據(jù)量除以系統(tǒng)中的帶寬,因此在不對(duì)數(shù)據(jù)并行模式進(jìn)行修改的前提下,我們只能通過兩種手段對(duì)其進(jìn)行加速,分別是提升傳輸速度以及減小數(shù)據(jù)傳輸?shù)臄?shù)量。All-Reduce的方法就屬于第一類,通過數(shù)據(jù)傳輸結(jié)構(gòu)的變化提升了傳輸性能。那么我們換一種思想,能否從第二個(gè)角度,也就是減少所要傳輸?shù)臄?shù)據(jù)量來對(duì)數(shù)據(jù)傳輸時(shí)間進(jìn)行優(yōu)化呢?
我們擁有有限的帶寬,希望能盡可能快地完成權(quán)重梯度的傳遞,那么一種方式就是對(duì)所要傳輸?shù)奶荻染仃囘M(jìn)行采樣,使得需要被傳輸?shù)臄?shù)據(jù)量更少,這樣花費(fèi)在這部分的時(shí)間也會(huì)相應(yīng)地降低。定下了整體的優(yōu)化方向之后,接下來的問題就是我們要按照哪種策略來進(jìn)行采樣呢?
簡(jiǎn)單一句話,“集中力量辦大事”。在向參數(shù)服務(wù)器發(fā)送梯度的時(shí)候,從完整的梯度矩陣中抽取出對(duì)提高神經(jīng)語言模型性能更有幫助的部分進(jìn)行傳輸,減少傳輸?shù)臄?shù)據(jù)量,從而達(dá)到降低時(shí)間消耗的目的,如上圖所示。
這種方法針對(duì)神經(jīng)語言模型的不同層提出了不同的采樣策略。以輸出層為例,權(quán)重矩陣為W,其大小為 v*h,v 為詞表大小,h為隱藏層節(jié)點(diǎn)數(shù)目。我們可以看到當(dāng)網(wǎng)絡(luò)在前向傳播的過程中,權(quán)重的每一行都將與隱藏層的輸出向量進(jìn)行點(diǎn)乘,得到詞匯表中某一詞的預(yù)測(cè)概率。也就是說,輸出層權(quán)重的每一行都和詞表中對(duì)應(yīng)位次的詞相對(duì)應(yīng),這就是我們要對(duì)該層權(quán)重進(jìn)行采樣的一大重要依據(jù)。為了能讓網(wǎng)絡(luò)更快地收斂,我們讓訓(xùn)練集中頻繁出現(xiàn)的詞所對(duì)應(yīng)的行向量具有更高的概率被抽取出來,傳遞給參數(shù)服務(wù)器進(jìn)行更新。具體的選取策略為:
其中,Vbase為在當(dāng)前minibatch中出現(xiàn)的詞,Vα為從詞匯表中選擇頻繁出現(xiàn)的若干詞,Vβ為從詞匯表中隨機(jī)抽取的詞以保證系統(tǒng)具有良好的魯棒性,在測(cè)試集上更穩(wěn)定。同樣,在輸入層和隱藏層也有各自不同的采樣策略。
舉個(gè)例子,如下圖所示在訓(xùn)練階段,GPU1根據(jù)自身權(quán)重矩陣計(jì)算好它的權(quán)重梯度,然后通過采樣的方法從中抽取第一行和第三行傳遞給參數(shù)服務(wù)器,同理GPU2也執(zhí)行了類似的操作,抽取第二和第三行進(jìn)行傳輸。參數(shù)服務(wù)器GPU3收到兩臺(tái)設(shè)備傳遞過來的權(quán)重梯度后對(duì)它們按行進(jìn)行累加,得到最終的梯度矩陣,將其更新到網(wǎng)絡(luò)參數(shù)中。在這個(gè)過程中由于兩臺(tái)設(shè)備均未采樣到第四行的梯度向量,因此在更新的時(shí)候并未對(duì)其進(jìn)行更新。
前述方法中我們使用采樣的方式對(duì)需要傳輸?shù)奶荻冗M(jìn)行抽取,盡可能頻繁地去更新那些對(duì)網(wǎng)絡(luò)性能幫助較大的部分。但其實(shí)既然我們已經(jīng)決定舍棄掉了這部分梯度,為了進(jìn)一步獲得速度上的提升,完完全全可以不去計(jì)算它們。我們都知道神經(jīng)網(wǎng)絡(luò)的訓(xùn)練需要經(jīng)過前向傳播和反向傳播兩個(gè)步驟以獲得權(quán)重的梯度,這里我們?yōu)樗鼈兘商撞煌牟蓸臃绞健?/p>
還是以輸出層為例,在前向傳播的過程中,我們依據(jù)采樣方式A舍棄掉一部分進(jìn)行計(jì)算,接下來在梯度的反向傳輸過程中按照采樣方式B再次舍棄掉部分梯度的傳遞。方式B采樣的方式同數(shù)據(jù)傳輸中的采樣策略相同,使用Vall對(duì)行向量進(jìn)行篩選,而方式A中我們從詞匯表中又隨機(jī)抽取出若干單詞加入到Vall中,這種方式在反向傳播過程中引入了一些噪聲詞匯,能夠有效提升模型的魯棒性。
針對(duì)上述兩種方法我們?cè)赑TB、FBIS以及Xinhua的數(shù)據(jù)集上進(jìn)行測(cè)試,結(jié)果如上圖所示,其中baseline為異步訓(xùn)練的結(jié)果,可以看出加速效果有限。在三個(gè)任務(wù)集上對(duì)網(wǎng)絡(luò)進(jìn)行分布式訓(xùn)練,我們可以看到將采樣的方法應(yīng)用到梯度計(jì)算中的加速效果最佳,在使用4張卡的情況下,相對(duì)異步的方法可提速2.1倍左右,相對(duì)單卡可提升4.2倍左右。
在三個(gè)數(shù)據(jù)集上訓(xùn)練LSTM語言模型[5]得到的性能如上圖所示(指標(biāo)為困惑度),我們可以看到在使用了采樣的方式后模型性能與基線相差不大。下圖給出了在Xinhua的數(shù)據(jù)集上,校驗(yàn)集困惑度隨訓(xùn)練時(shí)間變化的曲線圖,其中在4張卡的環(huán)境下使用了采樣的方式后,可以看到其收斂性明顯優(yōu)于基線,在第五輪訓(xùn)練中困惑度得到明顯下降,同時(shí)在8-10輪左右的時(shí)候收斂。
在本章的開始處我們提到,在不對(duì)數(shù)據(jù)并行模式進(jìn)行修改的前提下數(shù)據(jù)傳輸?shù)募铀俜绞街饕袃煞N,提升傳輸效率以及減少傳輸數(shù)量,二者分別對(duì)應(yīng)我們提到的All-Reduce和采樣的兩種方法。我們?cè)趯?shí)驗(yàn)中對(duì)比了兩種方式的加速效果,如下圖所示,All-Reduce的方式相對(duì)基線在四張卡上可提速約25%,在基于采樣的方式下提速比為41%左右。由于二者對(duì)于加速策略的出發(fā)點(diǎn)不同,因此理論上可以同時(shí)使用兩種方式對(duì)系統(tǒng)進(jìn)行加速。
通過以上幾個(gè)實(shí)驗(yàn)我們可以看到,基于采樣的方法在多設(shè)備上訓(xùn)練神經(jīng)語言模型可以有效減少在數(shù)據(jù)傳輸中的時(shí)間消耗,為在更多設(shè)備上訓(xùn)練提供了可能。該方法主要包括數(shù)據(jù)傳輸中的采樣以及梯度計(jì)算中采樣,在4張GPU設(shè)備上訓(xùn)練,相對(duì)異步的方式可提速約2.1倍,相對(duì)單卡訓(xùn)練可提速4.2倍左右。該方法已被成功應(yīng)用到小牛翻譯核心引擎中,對(duì)于其所支持的包括漢、英、日、韓等44種語言在內(nèi)的翻譯系統(tǒng),多設(shè)備系統(tǒng)的并行訓(xùn)練性能提升明顯。
注:本文主要內(nèi)容參考IJCAI 2017論文Fast Parallel Training of Neural Language Models,部分實(shí)驗(yàn)來自CWMT 2017論文基于數(shù)據(jù)并行的神經(jīng)語言模型多卡訓(xùn)練分析。
[1]Mikolov T, Karafiát M, Burget L, et al. Recurrent neural network based language model[C]// INTERSPEECH 2010, Conference of the International Speech Communication Association, Makuhari, Chiba, Japan, September. DBLP, 2010:1045-1048.
[2] Dean J, Corrado G S, Monga R, et al. Large scale distributed deep networks[C]. International Conference on Neural Information Processing Systems. Curran Associates Inc. 2012:1223-1231.
[3] Wang L, Wu W, Bosilca G, et al. Efficient Communications in Training Large Scale Neural Networks[J]. 2017.
[4] Hansen L K, Salamon P. Neural Network Ensembles[J]. IEEE Transactions on Pattern Analysis & Machine Intelligence, 1990, 12(10):993-1001.
[5] Surhone L M, Tennoe M T, Henssonow S F. Long Short Term Memory[J]. Betascript Publishing, 2010.
雷峰網(wǎng)特約稿件,未經(jīng)授權(quán)禁止轉(zhuǎn)載。詳情見轉(zhuǎn)載須知。