四兩撥千斤,如何做到自然語言預(yù)訓(xùn)練加速十倍
近年來,自然語言處理中的預(yù)訓(xùn)練成為了研究領(lǐng)域的熱點(diǎn),著名的 GPT-3 也掀起了一波新的浪潮。但是眾所周知,訓(xùn)練這樣大規(guī)模的模型非常消耗資源:即使在維基百科數(shù)據(jù)上訓(xùn)練一個(gè)簡單的 BERT-Base 模型,都需要用許多 GPU 訓(xùn)練1-2周,且不說購買 GPU 的開銷,光是電費(fèi)就需要數(shù)萬美金。這樣的消耗只有工業(yè)界的幾個(gè)大公司才可以實(shí)現(xiàn),極高的門檻限制了相關(guān)方向的探索以及整體發(fā)展。
為了降低預(yù)訓(xùn)練的準(zhǔn)入門檻,微軟亞洲研究院機(jī)器學(xué)習(xí)組的研究員們從機(jī)器學(xué)習(xí)中的不同角度出發(fā),針對(duì)預(yù)訓(xùn)練的不同側(cè)面分別提出了加速方法。具體而言,研究員們提出了基于 Transformer 的新結(jié)構(gòu) TUPE,針對(duì) BERT 設(shè)計(jì)了數(shù)據(jù)高效利用的策略,以及擴(kuò)展了類似人類學(xué)習(xí)的預(yù)訓(xùn)練任務(wù)。
其中前兩項(xiàng)工作已被新鮮出爐的 ICLR 2021 接收。這些方法既可以獨(dú)立使用,也可以結(jié)合起來使用,從而可以達(dá)到更大的加速比。原來需要10天的訓(xùn)練,現(xiàn)在只要一天就可以完成!
基于 Transformer 的新結(jié)構(gòu) TUPE(ICLR 2021)
位置表征(Positional Embedding)大家都知道,但這個(gè)設(shè)計(jì)真的高效、合理嗎?
由于 Transformer 在結(jié)構(gòu)上不能識(shí)別來自不同位置的詞語,所以模型一般需要用位置表征來輔助。其中最簡單的做法就是在輸入詞向量上直接加位置表征,但詞向量和位置向量相加是不是一個(gè)正確的選擇呢?
詞向量的加減操作可以保持語義,但位置向量本身是不具備語義的,兩者相加會(huì)不會(huì)讓模型更難學(xué)呢?在第一層對(duì) Transformer 的注意力分布(attention weight)進(jìn)行展開可以得到:

從上面展開的公式里,可以發(fā)現(xiàn)兩個(gè)問題:
第一,中間兩項(xiàng)引入了詞語和位置信息的交叉,但沒有理由說某個(gè)位置和某個(gè)詞一定有很強(qiáng)的關(guān)聯(lián)(論文中有詳細(xì)的實(shí)驗(yàn)分析也表明了中間兩項(xiàng)有一定的冗余) 。
第二,第一項(xiàng)和第四項(xiàng)分別計(jì)算詞與詞、位置與位置的關(guān)聯(lián),但他們采用了相同的參數(shù)化函數(shù) (W^Q 和 W^K),從而限制了注意力表達(dá)能力。
為了解決上述兩個(gè)問題,微軟亞洲研究院的研究員們做了一些簡單的改動(dòng):
簡單來說,就是去掉了位置 (position) 和文本( token) 之間的交叉,同時(shí)用了不同的變換矩陣。
需要注意的是,在多層的 Transformer 模型里,比如 BERT,上面公式的第二項(xiàng)在不同層之間是共享的。因此,這里僅需要計(jì)算一次,幾乎沒有引入額外的計(jì)算代價(jià)。

圖1:整體 TUPE (Transformer with Untied Positional Encoding) 結(jié)構(gòu)

圖2:實(shí)驗(yàn)結(jié)果
另外,研究員們還特殊處理了 [CLS] token 的位置,使其不會(huì)因太過關(guān)注局部而忽略了整個(gè)句子的信息,整體 TUPE (Transformer with Untied Positional Encoding)結(jié)構(gòu)如圖1所示。
實(shí)驗(yàn)結(jié)果如圖2,可以看到,該方法不僅最后比基線要好很多,并且可以在 30% (300k-step) 的時(shí)候,就達(dá)到基線在 1000k-step 時(shí)的效果。
TUPE 的完整工作請(qǐng)見:https://openreview.net/forum?id=09-528y2Fgf
高效數(shù)據(jù)利用:讓 BERT 像人類一樣記筆記(ICLR 2021)
眾所周知,在語言數(shù)據(jù)集中,單詞通常具有非常長尾的分布,即大量的單詞在整個(gè)數(shù)據(jù)集中都具有很低的出現(xiàn)頻率。而這些低頻詞的詞向量,往往訓(xùn)練質(zhì)量都不佳。
這些低質(zhì)量的詞向量,給模型理解整句訓(xùn)練語句造成了困難,進(jìn)而拖慢了整個(gè)模型預(yù)訓(xùn)練的速度。
舉例來說,如圖3所示,如果「COVID-19」是一個(gè)低頻詞,做完形填空的人如果對(duì)其含義一無所知的話,那么想要填對(duì)合適的詞是十分困難的,類似的問題也會(huì)發(fā)生在自然語言預(yù)訓(xùn)練的過程中。

圖3:低頻詞例
由此,微軟亞洲研究院的研究員們提出了為低頻詞詞動(dòng)態(tài)記筆記的方法 Taking Notes on the Fly(TNF),記錄歷史上出現(xiàn)過稀有詞的句子信息,從而使得當(dāng)模型再見到該低頻詞的時(shí)候,對(duì)其的理解能夠更加充分。
如圖3所示,研究員們希望模型能夠從筆記「The COVID-19 pandemic is an ongoing global crisis」(COVID-19 是一場(chǎng)持續(xù)發(fā)生的全球危機(jī))推測(cè)出「COVID-19」與生命有關(guān),從而更容易理解任務(wù)得出上述完形填空問題的答案「lives」(生命)。
具體說來,TNF 維護(hù)了一個(gè)筆記詞典。在這個(gè)筆記詞典中,每一個(gè)低頻詞都存有一個(gè)上下文表征向量(Contextual representation)來作為筆記。
當(dāng)該詞出現(xiàn)時(shí),TNF 從筆記詞典中取出其的上下文表征向量,與其詞向量一起構(gòu)成模型在該位置的輸入,同時(shí)也更新筆記上針對(duì)這個(gè)詞的內(nèi)容。如圖4所示:

圖4:TNF 的訓(xùn)練過程
研究員們將 TNF 應(yīng)用到了兩個(gè)著名且有效的語言預(yù)訓(xùn)練方法 BERT 和 ELECTRA 上進(jìn)行實(shí)驗(yàn),同時(shí)也在 GLUE 上對(duì)預(yù)訓(xùn)練的模型進(jìn)行了精調(diào),然后對(duì)比。
實(shí)驗(yàn)結(jié)果表明,在兩個(gè)預(yù)訓(xùn)練方法上,當(dāng) TNF 與基線達(dá)到相同的實(shí)驗(yàn)結(jié)果時(shí),TNF 的訓(xùn)練時(shí)間僅僅為基線的40%(見圖5)。

圖5:TNF 的訓(xùn)練曲線
當(dāng) TNF 與基線訓(xùn)練相同的迭代更新次數(shù)時(shí),TNF 在 GLUE 上的平均 GLUE Score 和大多數(shù)子任務(wù)上的表現(xiàn)均超過了基線。
TNF 的完整工作請(qǐng)見:https://openreview.net/forum?id=lU5Rs_wCweN
合理的預(yù)訓(xùn)練目標(biāo):BERT 更喜歡做 ABCD 單選題
目前許多預(yù)訓(xùn)練模型都會(huì)使用掩碼語言模型任務(wù),即遮擋住輸入句子的一部分,讓模型還原被遮擋的部分。該任務(wù)實(shí)際上相當(dāng)于一個(gè)「完形填空」問題,但與考試中常見的完形填空不同,自然語言預(yù)訓(xùn)練中的完形填空備選項(xiàng)是整個(gè)詞典。
顯然,即使對(duì)于人類來說,在沒有備選答案的開放環(huán)境下,想要準(zhǔn)確完成這個(gè)「完形填空」任務(wù)也是十分困難的。

圖6:單選題任務(wù)
實(shí)際上,人類更容易完成選擇題或判斷題。在給定有限選項(xiàng)的條件下,任務(wù)的難度會(huì)極大降低。著名的「ELECTRA」模型使用的就是判斷題任務(wù),在前期設(shè)計(jì)的判斷題容易,于是訓(xùn)練效率很高。
隨著模型的訓(xùn)練,判斷題設(shè)計(jì)越來越難,模型可以一直得到有效的反饋。與 ELECTRA 稍有區(qū)別,微軟亞洲研究院的研究員們給模型設(shè)計(jì)的預(yù)訓(xùn)練任務(wù)是 ABCD 單選題,并希望能夠動(dòng)態(tài)地調(diào)整單選題的難度。
在早期學(xué)習(xí)中,設(shè)計(jì)簡單的單選題,令模型完成相對(duì)簡單的任務(wù),從而加快學(xué)習(xí)進(jìn)程,在后期則逐漸加大任務(wù)難度,從而獲得更精細(xì)的結(jié)果。
在這里可以通過設(shè)計(jì)不同難度的任務(wù)以及選項(xiàng)的個(gè)數(shù)調(diào)節(jié)任務(wù)的難度(選項(xiàng)越多任務(wù)越困難)。

圖7:使用元控制器進(jìn)行預(yù)訓(xùn)練
為了達(dá)到訓(xùn)練任務(wù)從易到難的效果,一個(gè)能夠出題的「元控制器」被提出,它能夠自適應(yīng)地改變多選題的難度。
特別的是,這個(gè)元控制器是一個(gè)較小的 BERT,基于掩碼語言模型進(jìn)行預(yù)訓(xùn)練,并隨著主模型一起訓(xùn)練迭代。
對(duì)于每句話先對(duì)這句話進(jìn)行遮擋,然后元控制器以遮擋后的語句作為輸入,并輸出被遮擋目標(biāo)詞相關(guān)的詞例,這些詞例將被用于構(gòu)造備選答案。

圖 8:基于自適應(yīng)多選題任務(wù)的預(yù)訓(xùn)練實(shí)驗(yàn)結(jié)果
可以看到,在訓(xùn)練初期,元控制器的訓(xùn)練并不充分,于是生成備選答案的質(zhì)量不高,主模型可以在這些容易的任務(wù)上很快學(xué)習(xí)到正確的知識(shí)。
在訓(xùn)練后期,元控制器的訓(xùn)練接近完成,可以生成高質(zhì)量的備選答案,從而主模型可以在這些困難的任務(wù)上得到進(jìn)一步的進(jìn)化。
將這個(gè)元控制器應(yīng)用到 BERT上,可以發(fā)現(xiàn)與原始 BERT 相比,訓(xùn)練速度提升了80%,即在下游任務(wù) GLUE 上,用20%的計(jì)算開銷訓(xùn)練得到的模型,可以與訓(xùn)練時(shí)間長5倍的 BERT 模型相匹配。
完整工作請(qǐng)見:https://arxiv.org/abs/2006.05744


























