頭條資訊 - 為您提供最新最全的新聞資訊,每日實時更新

四兩撥千斤,如何做到自然語言預訓練加速十倍

科技數碼 新智元

四兩撥千斤,如何做到自然語言預訓練加速十倍

新智元推薦

來源:微軟研究院AI頭條

作者:柯國霖 賀笛

【新智元導讀】隨著自然語言處理中的預訓練成為研究領域的熱點,預訓練的成本與計算代價也成為了大家在研究過程中必須考慮的現實問題。本文將會介紹多種在訓練模型過程中提高效率,降低成本的方法,希望能對大家的研究有所幫助。

近年來,自然語言處理中的預訓練成為了研究領域的熱點,著名的 GPT-3 也掀起了一波新的浪潮。但是眾所周知,訓練這樣大規模的模型非常消耗資源:即使在維基百科數據上訓練一個簡單的 BERT-Base 模型,都需要用許多 GPU 訓練1-2周,且不說購買 GPU 的開銷,光是電費就需要數萬美金。這樣的消耗只有工業界的幾個大公司才可以實現,極高的門檻限制了相關方向的探索以及整體發展。

為了降低預訓練的準入門檻,微軟亞洲研究院機器學習組的研究員們從機器學習中的不同角度出發,針對預訓練的不同側面分別提出了加速方法。具體而言,研究員們提出了基於 Transformer 的新結構 TUPE,針對 BERT 設計了數據高效利用的策略,以及擴展了類似人類學習的預訓練任務。

其中前兩項工作已被新鮮出爐的 ICLR 2021 接收。這些方法既可以獨立使用,也可以結合起來使用,從而可以達到更大的加速比。原來需要10天的訓練,現在只要一天就可以完成!

基於 Transformer 的新結構 TUPE(ICLR 2021)

位置表徵(Positional Embedding)大家都知道,但這個設計真的高效、合理嗎?

由於 Transformer 在結構上不能識別來自不同位置的詞語,所以模型一般需要用位置表徵來輔助。其中最簡單的做法就是在輸入詞向量上直接加位置表徵,但詞向量和位置向量相加是不是一個正確的選擇呢?

詞向量的加減操作可以保持語義,但位置向量本身是不具備語義的,兩者相加會不會讓模型更難學呢?在第一層對 Transformer 的注意力分佈(attention weight)進行展開可以得到:

四兩撥千斤,如何做到自然語言預訓練加速十倍

從上面展開的公式裡,可以發現兩個問題

第一,中間兩項引入了詞語和位置信息的交叉,但沒有理由說某個位置和某個詞一定有很強的關聯(論文中有詳細的實驗分析也表明了中間兩項有一定的冗餘)

第二,第一項和第四項分別計算詞與詞、位置與位置的關聯,但他們採用了相同的參數化函數 (W^Q 和 W^K),從而限制了注意力表達能力。

為了解決上述兩個問題,微軟亞洲研究院的研究員們做了一些簡單的改動:

四兩撥千斤,如何做到自然語言預訓練加速十倍

簡單來說,就是去掉了位置 (position) 和文本( token) 之間的交叉,同時用了不同的變換矩陣。

需要注意的是,在多層的 Transformer 模型裡,比如 BERT,上面公式的第二項在不同層之間是共享的。因此,這裡僅需要計算一次,幾乎沒有引入額外的計算代價。

四兩撥千斤,如何做到自然語言預訓練加速十倍

圖1:整體 TUPE (Transformer with Untied Positional Encoding) 結構

四兩撥千斤,如何做到自然語言預訓練加速十倍

圖2:實驗結果

另外,研究員們還特殊處理了 [CLS] token 的位置,使其不會因太過關注局部而忽略了整個句子的信息,整體 TUPE (Transformer with Untied Positional Encoding)結構如圖1所示。

實驗結果如圖2,可以看到,該方法不僅最後比基線要好很多,並且可以在 30% (300k-step) 的時候,就達到基線在 1000k-step 時的效果。

TUPE 的完整工作請見:

https://openreview.net/forum?id=09-528y2Fgf

高效數據利用:讓 BERT 像人類一樣記筆記(ICLR 2021)

眾所周知,在語言數據集中,單詞通常具有非常長尾的分佈,即大量的單詞在整個數據集中都具有很低的出現頻率。而這些低頻詞的詞向量,往往訓練質量都不佳。

這些低質量的詞向量,給模型理解整句訓練語句造成了困難,進而拖慢了整個模型預訓練的速度。

舉例來說,如圖3所示,如果「COVID-19」是一個低頻詞,做完形填空的人如果對其含義一無所知的話,那麼想要填對合適的詞是十分困難的,類似的問題也會發生在自然語言預訓練的過程中。

四兩撥千斤,如何做到自然語言預訓練加速十倍

圖3:低頻詞例

由此,微軟亞洲研究院的研究員們提出了為低頻詞詞動態記筆記的方法 Taking Notes on the Fly(TNF),記錄歷史上出現過稀有詞的句子信息,從而使得當模型再見到該低頻詞的時候,對其的理解能夠更加充分。

如圖3所示,研究員們希望模型能夠從筆記「The COVID-19 pandemic is an ongoing global crisis」(COVID-19 是一場持續發生的全球危機)推測出「COVID-19」與生命有關,從而更容易理解任務得出上述完形填空問題的答案「lives」(生命)。

具體說來,TNF 維護了一個筆記詞典。在這個筆記詞典中,每一個低頻詞都存有一個上下文表徵向量(Contextual representation)來作為筆記。

當該詞出現時,TNF 從筆記詞典中取出其的上下文表徵向量,與其詞向量一起構成模型在該位置的輸入,同時也更新筆記上針對這個詞的內容。如圖4所示:

四兩撥千斤,如何做到自然語言預訓練加速十倍

圖4:TNF 的訓練過程

研究員們將 TNF 應用到了兩個著名且有效的語言預訓練方法 BERT 和 ELECTRA 上進行實驗,同時也在 GLUE 上對預訓練的模型進行了精調,然後對比。

實驗結果表明,在兩個預訓練方法上,當 TNF 與基線達到相同的實驗結果時,TNF 的訓練時間僅僅為基線的40%(見圖5)。

四兩撥千斤,如何做到自然語言預訓練加速十倍

圖5:TNF 的訓練曲線

當 TNF 與基線訓練相同的迭代更新次數時,TNF 在 GLUE 上的平均 GLUE Score 和大多數子任務上的表現均超過了基線。

TNF 的完整工作請見:

https://openreview.net/forum?id=lU5Rs_wCweN

合理的預訓練目標:BERT 更喜歡做 ABCD 單選題

目前許多預訓練模型都會使用掩碼語言模型任務,即遮擋住輸入句子的一部分,讓模型還原被遮擋的部分。該任務實際上相當於一個「完形填空」問題,但與考試中常見的完形填空不同,自然語言預訓練中的完形填空備選項是整個詞典。

顯然,即使對於人類來說,在沒有備選答案的開放環境下,想要準確完成這個「完形填空」任務也是十分困難的。

四兩撥千斤,如何做到自然語言預訓練加速十倍

圖6:單選題任務

實際上,人類更容易完成選擇題或判斷題。在給定有限選項的條件下,任務的難度會極大降低。著名的「ELECTRA」模型使用的就是判斷題任務,在前期設計的判斷題容易,於是訓練效率很高。

隨著模型的訓練,判斷題設計越來越難,模型可以一直得到有效的反饋。與 ELECTRA 稍有區別,微軟亞洲研究院的研究員們給模型設計的預訓練任務是 ABCD 單選題,並希望能夠動態地調整單選題的難度。

在早期學習中,設計簡單的單選題,令模型完成相對簡單的任務,從而加快學習進程,在後期則逐漸加大任務難度,從而獲得更精細的結果。

在這裡可以通過設計不同難度的任務以及選項的個數調節任務的難度(選項越多任務越困難)。

四兩撥千斤,如何做到自然語言預訓練加速十倍

圖7:使用元控制器進行預訓練

為了達到訓練任務從易到難的效果,一個能夠出題的「元控制器」被提出,它能夠自適應地改變多選題的難度。

特別的是,這個元控制器是一個較小的 BERT,基於掩碼語言模型進行預訓練,並隨著主模型一起訓練迭代。

對於每句話先對這句話進行遮擋,然後元控制器以遮擋後的語句作為輸入,並輸出被遮擋目標詞相關的詞例,這些詞例將被用於構造備選答案。

四兩撥千斤,如何做到自然語言預訓練加速十倍

圖 8:基於自適應多選題任務的預訓練實驗結果

可以看到,在訓練初期,元控制器的訓練並不充分,於是生成備選答案的質量不高,主模型可以在這些容易的任務上很快學習到正確的知識。

在訓練後期,元控制器的訓練接近完成,可以生成高質量的備選答案,從而主模型可以在這些困難的任務上得到進一步的進化。

將這個元控制器應用到 BERT上,可以發現與原始 BERT 相比,訓練速度提升了80%,即在下遊任務 GLUE 上,用20%的計算開銷訓練得到的模型,可以與訓練時間長5倍的 BERT 模型相匹配。

完整工作請見:

https://arxiv.org/abs/2006.05744

轉載請超鏈接註明:頭條資訊 » 四兩撥千斤,如何做到自然語言預訓練加速十倍
免責聲明
    :非本網註明原創的信息,皆為程序自動獲取互聯網,目的在於傳遞更多信息,並不代表本網贊同其觀點和對其真實性負責;如此頁面有侵犯到您的權益,請給站長發送郵件,並提供相關證明(版權證明、身份證正反面、侵權鏈接),站長將在收到郵件24小時內刪除。
加載中...