深度解析大規模參數語言模型Megatron-BERT
出品 | 智東西公開課講師 | NVIDIA 解決方案架構師王閃閃
導讀:
6月3日晚,NVIDIA解決方案架構師王閃閃與循環智能解決方案專家王雷在智東西公開課共同參與了會話式AI&金融公開課NVIDIA專場的直播講解。其中,王閃閃老師的主題為BERT模型詳解。
在本次講解中,王閃閃老師先為我們詳細講解了BERT模型原理及其成就,後為我們介紹了NVIDIA開發的Megatron-BERT。
本文為此次專場主講環節的圖文整理:
正文:
大家好,我是NVIDIA解決方案架構師王閃閃。今天主要和大家分享兩個部分的內容:
1. BERT模型深度解析2. 大規模參數的語言模型Megatron-BERT
我們今天主要是温故知新我先帶大家複習一下BERT模型的整體架構,內容不會特別偏數學,主要把BERT一些要點給大家説清楚,包括BERT的輸入/輸出以及具體它是怎麼工作的,然後介紹NVIDIA基於BERT開發出的一系列好的模型。
首先介紹一下自然語言處理常見的應用方向,第一類是序列標註,比如命名實體的識別、語義標註、詞性標註,循環智能也是用了序列標註。第二類是分類任務,如文本分類和情感分析,這個方向目前在量化金融領域,尤其是對沖基金上應用性很強,尤其是情感分析。我記得3、4年前,有一條新聞説斯坦福大學的一個碩士生,暑期在他的宿舍裏用幾塊GPU卡,自己搭建了一個小的超級計算機,他把Twitter上的信息全部錄下來,每天更新。他使用了BERT進行情感分析,把每天每個人的信息分成三類:positive積極、neutral中性、negative消極。他把三類情感的量化信息和當天納斯達克股票的升跌情況彙總,進行了統計分析,發現如果Twitter上的信息大部分都是積極的,那麼股票就有很大的概率會上漲。我們現在把這類數據叫做情感分析因子,它在股票分析上是一個特別重要的推進方向,能讓模型越發準確。第三類NLP應用方向就是對句子關係的判斷,如自然語言的推理、問答系統,還有文本語義相似性的判斷。最後一類,是生成式任務,如機器翻譯、文本摘要,還有創造型的任務比如機器寫詩、造句等。
一、BERT模型深度解析
現在我們進入正題:對BERT的講解。要了解BERT,首先我們要説一下Transformer,因為BERT最主要就是基於Transformer和注意力機制,這兩點也是BERT能從GPT、RNN、LSTM等一系列架構中能脱穎而出的很大原因。Attention,專業的叫法是Attention Mechanism,Attention 是一個Encoder Decoder的模型機制。Encoder-Decoder模型是在深度學習中比較常見的模型結構:在計算機視覺中這個模型的應用是CNN RNN的編輯碼框架;在神經網絡機器翻譯的應用是sequence to sequence模型,也就是seq2seq。而編碼(Encoder)就是將序列編碼成一個固定長度的向量,解碼(Decoder)就是將之前生成的向量再還原成序列。
那麼問題來了,為什麼要在Encoder-Decoder模型機制中引入Attention呢?因為 Encoder-Decoder模型有兩個比較顯著的弊端。1)是Encoder會把序列信息壓縮成一個固定長度的向量,那麼在Encoder的輸出中,我們暫且把它叫做語義編碼c,c就有可能無法完全地表示出全部序列的信息,尤其是當信息特別長時。2)先輸入到網絡中的信息會被後輸入的信息覆蓋掉,輸入的信息越長,對先前輸入信息的遺忘程度就越大。因為這兩個弊端,Decoder在解碼的一開始就沒有獲得一個相對完整的信息,也就是語義編碼c沒有一個相對完整的信息輸入,那麼它解碼的效果自然就不好。有的同學可能會説想要解決RNN記憶力差的問題,可以考慮用LSTM。我們的確可以考慮LSTM,但LSTM對超長距離的信息記憶,效果也不是很好。
我們再來看看Attention為什麼能夠解決這個問題。Attention,顧名思義是注意力。它是模仿人類的注意力,人類在處理一個問題時會把注意力放到那個特別重要的地方,比如我們在短時間內去看一張照片,第一眼落到照片上的位置可能是某個建築物或者是某個人,這取決於我們不同的目的和興趣等。我們不會在短時間之內記清楚甚至是看清楚照片上的全部細節,但是我們會將注意力聚焦在某個特定的細節上並記住它。Attention模型最終輸出結果也是能夠達到這麼一個效果。
Attention的機制最早也是應用在計算機視覺上面,然後是在自然語言處理上面發揚光大。由於2018年在GPT模型上的效果非常顯著,所以Attention和 Transformer才會成為大家比較關注的焦點。之所以Attention的能力在NLP領域得到了徹底釋放,是因為它解決了RNN不能並行計算的弊端,Attention使其每一步的計算不依賴於上一步的計算,達到和CNN一樣的並行處理效果。並且由於Attention只關注部分的信息,所以它的參數較少,速度就會快。其次RNN記憶能力較差,所以大家一開始想到的解決方式都是用LSTM和GRU(Gated Recurrent Unit)來解決長距離信息記憶的問題,但是都沒有起到很好的效果。Attention由於只關注長文本中的一個小部分,可以準確地識別出關鍵信息,所以取得了特別不錯的效果。
下面我們來説一下Attention是怎麼實現的聚焦。主要是因為它是採用了雙向的RNN,能夠同時處理每個單詞前後的信息。在Decoder中,它首先計算每一個Encoder在編碼隱藏層的狀態,然後會和Decoder隱藏層狀態比較,做出相關程度的評定。得到的權值會通過softmax歸一化得到使用的權重,也就是我們前面所説的編碼向量c。然後對Encoder中對應的不同狀態的權重進行加權求和,有了編碼c之後,我們就可以先計算Decoder隱藏層的狀態,然後再計算Decoder的輸出。這就是一個比較完整的在BERT當中運用Attention以及Encoder-Decoder模型的使用案例。Attention根據計算區域、權值的計算方式等會有很多不同變種。
不止是在NLP領域,在其他很多領域中,Transformer的模型由於很好用都是大家首選的,主要的一個運用機制就是Attention。我們之後會説到的Transformer模型會用到 Multi-head Attention和Self-Attention。首先説一下Self-Attention,Self-Attention是將原文中每個詞和該句子中所有單詞之間進行注意力的計算,主要是為了尋找原文內部的關係。對應到閲讀理解任務,這個模型就可以判定一篇文章中的兩段話是不是同一個意思。Multi-head Attention,則是對一段原文使用多次的注意力,每次會關注到原文的不同部分,相當於多次地在單層中使用Attention,然後把結果給拼接起來。
現在我們來講一下Transformer,如PPT右側圖所示:
1)圖左側的是Encoder, Nx這裏N=6,表示其是由6個layer組成的,每個layer裏面的操作過程是一樣的。而每個layer又是由兩個sub-layer組成的,分別是Multi-head Attention和Fully Connected Feedforward Network。 每一個sub-layer都增加了Residual Connection和Normalization。
2)圖右側的是Decoder,與Encoder結構相似,但Decoder新加了Masked Multi-Head Attention,訓練時output都是ground truth,為了確保預測的第n個位置不會接觸到未來的信息,因此我們要把它mask掉,這也是為什麼它叫做Masked Multi-Head Attention.
3)Positional Encoding也是一個非常重要的組成部分,主要是有兩個思路方向:一是用不同頻率的sin/cos三角函數來計算,二是做 Positional Embedding。大牛的研究論文表明用三角函數能帶來兩個較大的好處:一是無論序列有多長,由於sin/cos函數的使用,值域都會固定在-1~1上,於是就免除了Extrapolation(外推)的問題;二是它不受超長序列的限制。所以目前Positional Encoding都是選用sin(α β)的公式。
再來講一下Transformer的優勢。首先在複雜度方面,它可以進行分層的計算。其次,由於Attention機制的使用,它可以進行並行化計算,Self-Attention可以直接計算序列中任意兩點的點乘,而RNN只能按照詞的位置逐一計算。
下面我們來看BERT都在哪些方面取得驕人成績。2018年10月9日,谷歌提交了GLUE的benchmark,GLUE指的是通用語言理解評估基準,主要用來測試模型在廣泛的自然語言理解任務中的魯棒性。Sentence Pair Classification就是比較兩句話是不是同一個意思。Single Sentence Classification是把句子進行歸類,按照情緒或其他特徵分類。Question Answering是問答系統。Single Sentence Tagging相當於命名實體的識別。主要用到的BERT有兩類:一是BERT 12-layers(BERT-Base) ,二是BERT 24-layers(BERT-Large),比前者更深,有1024個hidden layer,16個Multi-Head Attention Mechanism。
這張表格顯示Transformer在Hidden Unit、Attention Heads、Feedforward Filter方面的尺寸與BERT-Large都是一樣的。Max Sequence Length方面,BERT-Large能做到更長。Transformer大概有2.1億個參數,BERT-Large有3.3億個,BERT-Base大概有1.1億個參數。
下面我們通過對比來看一下為什麼BERT成為了最好用的NLP模型。首先來看ELMo(Embedding from Language Models),是對word embedding的動態調整,是雙向神經網絡語言模型。然後是GPT(Generative Pre-Training),是Open AI提出來的基於生成式預訓練的單向模型,只能從左到右,而BERT和ELMo都是雙向模型。有人評價BERT是用Word2Vec加上ELMo再加上GPT得到的,同時吸取了GPT跟ELMo的優點。比如在完形填空學習模型,需要迫使模型更多地依賴上下文信息來預測單詞的情景中,BERT有非常強的糾錯能力。
相比ELMo的LSTM模型, Transformer沒有了長度限制的問題,由於Attention機制使得它能更好地捕獲上下文信息的特徵,它相比GPT的單向訓練模式能對上下文信息理解得更加全面。這也是為什麼BERT模型能夠在很多方面達到SOTA(state-of-the-art)的水平。BERT的訓練過程主要是用的Wikipedia(25億詞彙),文本信息很規整,除此還使用了8億詞彙的BooksCorpus,也是非常大的文本集。然後使用了無監督來做的分析,主要分為兩種:Intra-sentence和Inter-sentence。Intra-sentence就相當於我把某個詞mask掉,然後讓BERT分析mask掉的詞。Inter-sentence就是對於下一句話的預測(prediction)。
BERT的整個模型訓練主要採用的就是剛才説的 Masked Language Model(MLM)來作為預訓練模型。 BERT訓練主要分為兩步就是Pre-train和Fine-tuning:1)Pre-train主要是為了訓練token-level的語義理解,NSP(Next-Sentence Prediction)就是旨在分析出被蓋掉的詞以及在sentence-level分析出下一句話。2)Fine-tuning是用訓練好的參數進行模型初始化,使用Task-Specific Label的數據對整個模型進行訓練,也就是説根據不同領域如金融醫療等,重新進行有針對性的訓練。這也是為什麼我們説BERT是Task-Specific的模型。
下面我們來看一下結果。在判定兩個句子含義是否一樣的任務中,human performance(人類水平)達到了86.3分,GPT可以實現到87.7,而BERT-Large達到了89.3分,超過了人類。在使用Quora數據集來判斷兩句話相關性的任務中,BERT-Large超過了人類的預測水平。在對於段落中尋找問題回答的任務中,BERT-Large和人類水平基本持平。在分類任務方面,BERT-Large的表現遠超之前的SOTA所能達到的水平;在斯坦福問答集(SQuAD v1.1)任務中,BERT-Large破了記錄,且在命名實體識別方面也效果卓越。SWAG是指給定一個句子,讓模型在四個選項中選出這句話後最有可能出現的下文,這是一個很難的任務,ESIM ELMo只達到了59.1分,BERT取得了86.6分。
二、大規模參數的語言模型— Megatron-BERT
Megatron-BERT是英偉達的工程師做的,有兩個較大的方向:1)在NLP模型中,隨着模型參數越來越大、模型體積越來越大,性能會越好但是就不可能只用一塊GPU就可以進行數據並行化的訓練過程,比如GPT3.0就是這樣一個很大的模型。並行計算有兩種,一是數據並行,二是模型並行。從BERT-Base到BERT-Large的過程中,模型性能得到了很大提升,但是我們發現當模型參數一旦超過了3.36億個,收斂的效果就會變得非常差。一個有效的解決辦法就是,如在GPT2中,我們將Layer Normalization和Residual Connections交換位置,這樣當我們將參數從3.3億個擴充到7.5億個的時候,系統的收斂效果是越來越好的。(如下圖所示)
英偉達的工程師也由此產生了一個好奇:BERT模型到底可以做到多大?以3.3億個參數為基準,我們做了一個非常瘋狂的試驗,也就是Megatron-BERT,將參數分別上升到了13億和39億,多卡訓練,模型並行是很難攻破的,目前也是學術界在積極推進的研究方向,好的模型並行方式有兩種:GPipe和Mesh-Tensorflow。而Megatron-BERT採用的是Mesh-Tensorflow的方式,關注每個layer裏面進行融合的GEMM來減少同步,其次代碼語言是Python並採用了PyTorch,PyTorch的並行效果會比Tensorflow好很多。除此還採用了最新的混合精度,就是用Tensor Core,是在Volta和圖靈架構的GPU上可實現的,用FP16數據,在卡與卡之間採用CUDA通訊庫,卡與卡之間通訊速度非常快,可以把它想象成一塊大的GPU卡來進行訓練。最後我們在39億參數量上,採用4個GPU進行模型並行,再加上數據並行共計使用512塊GPU。
我們來看一下這頁展示的結果,MNLI和QQP都採用了GLUE的標準並在development set上進行的測試,整個測試過程是與RoBERTa一樣的,通過調整尋找最佳的batch size和learning rate。鑑於每一次跑都希望有randomness,所以我們選擇了5個seed來做初始化。最後我們是選擇5個訓練結果的中位數來做對比。在此,Megatron-3.9B在MNLI、QQP、斯坦福問答集、閲讀理解幾個任務上都刷新了記錄。
兩個星期之前英偉達的CEO黃仁勳介紹了NVIDIA最新的顯卡:安培架構的A100,基於此我們也發佈了會話式AI服務的應用框架-Jarvis,是開源的,方便大家進行嘗試,可以建立ASR 、NLU、TTS等語音識別、自然語言理解推論模型。NLU就是基於我們的BERT模型,ASR用的是英偉達自己的Jasper和QuartzNet,TTS用的是WaveGlow模型。我們還在Megatron-BERT中採用了GPT2,使用了83億的參數量,在8x A100上做了測試,用FP16加模型優化,結果顯示Megatron-GPT2比V100在速度方面提升了2.5倍。所以,我們可以看到BERT模型現在的性能提升主要有兩個方向:一是算力,在強大算力基礎上,摩爾定律逐漸消亡,CPU完全沒有辦法在人工智能領域再起到主導作用,GPU由於有並行加速的作用要承擔起主導地位。在NLP領域,V100和A100由於其強大的算力,相信在未來也會為BERT發展起到推動作用。