NVIDIA解決方案架構師深度解析大規模參數語言模型Megatron-BERT...

2021-02-08 智東西

出品 | 智東西公開課
講師 | NVIDIA 解決方案架構師王閃閃
提醒 | 關注智東西公開課公眾號,並回復關鍵詞「BERT「,即可獲取課件。

導讀:

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發展起到推動作用。

相關焦點

  • NVIDIA解決方案架構師深度解析大規模參數語言模型Megatron-BERT
    出品 | 智東西公開課講師 | NVIDIA 解決方案架構師王閃閃導讀:6月3日晚,NVIDIA解決方案架構師王閃閃與循環智能解決方案專家王雷在智東西公開課共同參與了會話式BERT模型深度解析2. 大規模參數的語言模型Megatron-BERT我們今天主要是溫故知新我先帶大家複習一下BERT模型的整體架構,內容不會特別偏數學,主要把BERT一些要點給大家說清楚,包括BERT的輸入/輸出以及具體它是怎麼工作的,然後介紹NVIDIA基於BERT開發出的一系列好的模型。
  • NVIDIA BERT 推理解決方案 Faster Transformer 開源了
    NVIDIA BERT推理解決方案Faster Transformer開源了這兩個參數是決定 Transformer 網絡結構的關鍵參數。這兩個參數的動態傳入,可以保證 Faster Transformer 既支持標準的 BERT-BASE(12 head x 64維),也支持裁剪過的模型(例如,4 head x 32 維),或者其他各式專門定製化的模型
  • BERT詳解:開創性自然語言處理框架的全面指南
    這是因為在一個大型文本語料庫上訓練一個模型時,模型開始獲得對語言工作原理的更深入的理解。這些知識是瑞士軍刀,幾乎對任何自然語言處理任務都有用。第三,BERT是一個「深度雙向」的模型。雙向意味著BERT在訓練階段從所選文本的左右上下文中汲取信息。模型的雙向性對於理解語言的真正意義很重要。
  • 從 one-hot 到 BERT,帶你一步步理解 BERT
    我們會從one-hot、word embedding、rnn、seq2seq、transformer一步步逼近bert,這些是我們理解bert的基礎。Word Embedding首先我們需要對文本進行編碼,使之成為計算機可以讀懂的語言,在編碼時,我們期望句子之間保持詞語間的相似行,詞的向量表示是進行機器學習和深度學習的基礎。
  • 谷歌開源 BERT 模型原始碼
    模型以來,BERT 模型以其雙向、深層等特點,成功在 11 項 NLP 任務中取得 state of the art 的結果,贏得自然語言處理學界的一片讚譽之聲。BERT 是一種對語言表徵進行預訓練的方法,換句話說,是經過大型文本語料庫(如維基百科)訓練後獲得的通用「語言理解」模型,該模型可用於我們最在乎的 NLP 下遊任務(如問答)。BERT 之所以表現得比過往的方法要好,是因為它是首個用於進行 NLP 預訓練的無監督、深度雙向系統。
  • 英偉達訓練出83億參數世界最大語言模型,53分鐘成功訓練Bert
    智東西(公眾號:zhidxcom)編 | 年年導語:Nvidia訓練出世界最大語言模型MegatronLM,模型使用了83億個參數,比Bert大24倍,比OpenAI的GPT-2大5倍。智東西8月14日消息,據外媒報導,Nvidia今天宣布,它已經訓練出了世界上最大的語言模型MegatronLM,該模型使用了83億個參數,比Bert大24倍,比OpenAI的GPT-2大5倍。
  • 500億參數,支持103種語言:谷歌推出「全球文字翻譯」模型
    那麼,數據較少甚至沒有數據的語言該怎麼辦呢?多語言 NMT 是一種有效的解決方法,它有一種歸納偏見,即「來自一種語言的學習信號應該有助於提高其他語言的翻譯質量」。多語言機器翻譯使用一種語言模型處理多種語言。數據匱乏語種多語言訓練的成功已經應用於自動語言識別、文本轉語音等系統。
  • [預訓練語言模型專題] BERT,開啟NLP新時代的王者
    feature-based策略的代表模型為ELMo,它把預訓練得到的「向量表示」作為訓練下遊任務的額外特徵。訓練下遊任務時使用新的任務相關模型,並基於得到的特徵來進行進一步的訓練。fine-tuning策略的代表模型為GPT,它則是在訓練語言模型後,只改變極少的任務相關的層與參數,直接對下遊任務訓練整個原來的語言模型。
  • 3分鐘看懂史上最強NLP模型BERT
    看完本文相信您會對BERT為什麼被認為是當前最好的NLP模型、實現原理以及適用場景有所了解。目前最好的自然語言預訓練方法無疑是BERT。它的工作流程分為兩步:首先,使用大量未標記的數據,以預訓練、也就是無人監督的方式學習語言表達。然後,使用少量經過標記的訓練數據對模型進行fine-tune,以監督學習的方式,執行多種監督任務。
  • 深度學習中的不可導操作(次梯度和重參數化)
    深度學習中的絕大多數模型都是靠求導梯度下降來進行參數更新.這時候如何優化我們的模型呢.本文盤點了深度學習中的不可導操作(次梯度和重參數化).主要包括兩大類[TOC]BP.自動作詩機&藏頭詩生成器:五言、七言、絕句、律詩全了模型壓縮實踐系列之——bert-of-theseus,一個非常親民的bert壓縮方法這門史丹福大學自然語言處理經典入門課,我放到B站了徵稿啟示 | 稿費+GPU算力+星球嘉賓一個都不少關於AINLPAINLP
  • 語義解析:人工神經網絡之外不容忽視的自然語言處理利器
    到了2018年,隨著一系列在大規模語料上訓練的深度語言模型的出現,以閱讀理解為代表的一大批NLP任務的榜單屢被刷新,人工智慧在語言上的理解能力超過人類的言論一度甚囂塵上。但當我們回過頭來仔細思考,在真實的「自然語言理解」業務場景中,這一輪「技術革新」帶來的利好似乎乏善可陳。      那麼,對大規模語料的暴力擬合是不是真的能讓模型理解語言的語義呢?
  • 大神教程乾貨:使用BERT的多類別情感分析!(附代碼)
    BERT概述BERT是用於通用「語言理解」 的深度雙向表示模型,可從左至右和從右至左學習信息。目的是預測英語句子在語言上是否「可以接受」MNLI:多體類自然語言推理是一項大規模的,眾包的蘊含分類任務。目的是檢查該對中的句子在語義上是否等效XNLI:跨語言自然語言推理使用15種語言的跨語言句子分類。2. do_train:將其設置為True進行培訓。這將使用train.tsv文件進行培訓3.
  • XLM —— 基於BERT的跨語言模型
    可以看這篇我們對BERT的總結:https://www.lyrn.ai/2018/11/07/explained-bert-state-of-the-art-language-model-for-nlp/2018年Lample et al.提出了將Transformer 和基於短語的統計機器翻譯技術(PBSMT)相結合的模型。後者給出了不同語言中短語的概率表。
  • NLP中的詞向量對比:word2vec/glove/fastText/elmo/GPT/bert
    四、深入解剖bert(與elmo和GPT比較)1、為什麼bert採取的是雙向Transformer Encoder,而不叫decoder?2、elmo、GPT和bert在單雙向語言模型處理上的不同之處?3、bert構建雙向語言模型不是很簡單嗎?不也可以直接像elmo拼接Transformer decoder嗎?
  • BERT模型:自然語言處理最新裡程碑完整詳解!
    Mask表示屏蔽某些值的掩碼,以便在更新參數時它們不起作用。變換器模型中有兩種掩碼—填充掩碼和序列掩碼。填充掩碼用於所有縮放的點積注意,序列掩碼僅用於解碼器的自注意。填充掩碼解決了輸入序列具有可變長度的問題。具體來說,在較短的序列後填0。但是如果輸入序列太長,則會截取左側的內容,並直接丟棄多餘的內容。
  • 圖解當前最強語言模型BERT:NLP是如何攻克遷移學習的?
    BERT 這種模型打破了多項模型處理基於語言的任務的紀錄。在描述該模型的論文發布之後不久,其研究團隊還開源了該模型的代碼,並發布了可供下載的模型版本——已經在大規模數據集上經過預訓練。這是一個重大的進展,因為它讓任何人都可以構建涉及語言處理的機器學習模型,並將這種強大工具用作其中的組件——這能節省從頭開始訓練語言處理模型所需的時間、精力、知識和資源。
  • 臺大這門深度學習自然語言處理課程,可能被低估了
    估計很多同學看到標題首先想到是李宏毅老師的「深度學習人類語言處理」課程,不過這次我們說的是臺灣大學陳蘊儂老師的「應用深度學習」課程,這門課程我們之前在公眾號上推薦過
  • 【BERT】如何訓練並使用Bert【持續更新】
    以上的兩個pretraining都用了同樣的objective function【語言模型】,且都用了unidirectional language models來學習general的語言表示。重點來了:提出了當前的瓶頸一是單向的語言模型作為學習。
  • CCKS 2020「基於標題的大規模商品實體檢索」競賽冠軍,DeepBlueAI...
    」任務中的冠軍解決方案,詳細描述了任務解決過程中的數據處理以及模型選擇和使用等細節問題。二、引言基於標題的大規模商品實體檢索與實體連結任務類似,都需要找到知識庫中對應實體,因為部分標題文本不能識別出實體指代詞,並且存在很多變異指代詞,所以沒有辦法使用實體連結那種實體識別 -> 候選實體生成 ->實體消歧的方案。
  • 深度學習模型推理優化加速技術
    Winograd、模型剪裁與稀疏化FFT/Winograd卷積算法(Op-level)模型剪枝(許多實驗證明:神經網絡都是過參數化的):稀疏連接、張量分解、channel剪枝;結構化剪枝(通常能提升運算速度,非結構剪枝過於隨機的話,效果不明顯)核的稀疏化模型參數共享低秩分解:使用矩陣對參數進行分解估計(屬於模型壓縮);SVD、tucker