一文讀懂深度學習:從神經元到BERT

阿里妹導讀:天然語言處理領域的殿堂標誌 BERT 並不是橫空出世,背後有它的發展原理。今天,螞蟻金服財富對話算法團隊整理對比了深度學習模型在天然語言處理領域的發展歷程。從簡易的神經元到當前最複雜的BERT模型,深刻淺出地介紹了深度學習在 NLP 領域進展,並結合工業界給出了將來的 NLP 的應用方向,相信讀完這篇文章,你對深度學習的總體脈絡會有更加深入認識。算法

一個神經網絡結構一般包含輸入層、隱藏層、輸出層。輸入層是咱們的 features (特徵),輸出層是咱們的預測 (prediction)。神經網絡的目的是擬合一個函數 f:features -> prediction。在訓練期間,經過減少 prediction 和實際 label 的差別的這種方式,來更改網絡參數,使當前的網絡能逼近於理想的函數 f網絡

神經元(Neural Cell)

神經網絡層的基本組成成員爲神經元,神經元包含兩部分,一部分是上一層網絡輸出和當前網絡層參數的一個線性乘積,另一部分是線性乘積的非線性轉換。(若是缺乏非線性轉換,則多層線性乘積能夠轉化爲一層的線性乘積)函數

淺層神經網絡( Neural Network )

只有一層隱藏層的,咱們稱爲淺層網絡。性能

深度學習網絡(Multilayer Perceptron)

相對於淺層網絡結構,有兩層、三層及以上隱藏層的咱們就能夠稱爲深度網絡。學習

在一般的理解中,一個足夠寬的網絡,是可以擬合任何函數的。而一個深層網絡,則可以用更少的參數來擬合該函數,由於深層的神經元能夠獲取比淺層神經元更復雜的特徵表示。測試

在圖二及三所示網絡,咱們稱爲全鏈接網絡,也就是隱藏層的神經元會和上一層全部的神經元輸出相關。和全鏈接網絡相對應的,是隻和上一層部分神經元輸出鏈接的網絡,以下文介紹的卷積網絡。編碼

卷積網絡(CNN)

卷積網絡神經元只和上一層的部分神經元輸出是鏈接的。(在直覺上,是由於人的視覺神經元觸突只對局部信息敏感,而不是全局全部信息都對同一個觸突產生等價做用)spa

同一個卷積核從左到右,從上到下和輸入作乘積,獲得了不一樣強度的輸出。從直覺上來理解,卷積覈對原始數據的不一樣數據分佈的敏感度是不同的。若是把卷積核理解爲是某種 pattern,那麼符合這種 pattern 的數據分佈會獲得比較強的輸出,而不符合這種 pattern 的輸出則獲得弱的,甚至是不輸出。翻譯

一個卷積核是一個 pattern 提取器, 多個卷積核就是多個 pattern 提取器。經過多個特徵提取器對原始數據作特徵提取轉換,就構成了一層卷積。設計

Alex Net, 由於 GPU 內存的緣由,Alex 使用了兩塊 GPU 對模型作了切割,本質上的卷積層是用於特徵提取, 最大池化層用於提取強特徵及減小參數,全鏈接層則是全部高級特徵參與到最後分類決策中去。

循環神經網絡(RNN)

CNN是對空間上特徵的提取, RNN則是對時序上特徵的提取。

在RNN中,x1 , x2, x3, xt 是在時序上不同的輸入,而 V, U, W 三個矩陣則是共享。同時 RNN 網絡中保存了本身的狀態 S。 S 隨着輸入而改變,不一樣的輸入/不一樣時刻的輸入或多或少影響 RNN 網絡的狀態 S。而 RNN 網絡的狀態 S 則決定最後的輸出。

在直覺上,咱們理解 RNN 網絡是一個可模擬任何函數的一個神經網絡( action ),加上同時有一份本身的歷史存儲( memory ),action+memory 二者讓 RNN 成爲了一個圖靈機器。

長短時間記憶網絡( LSTM )

RNN 的問題是非線性操做 σ 的存在且每一步間經過連乘操做傳遞,會致使長序列歷史信息不能很好的傳遞到最後,而有了 LSTM 網絡。

在 lstmcell 中, 包含了一般意義上的遺忘門(點乘,決定什麼要從狀態中去除),輸入更新門(按位相加,決定什麼要添加到狀態中去),輸出門(點乘,決定狀態的輸出是什麼?)雖然看起來很複雜,本質上是矩陣的運算。

爲了簡化運算,後面有 lstm 的變種 GRU, 以下圖:

文本卷積網絡 (TextCNN)

CNN 在計算機識別領域中應用普遍,其捕捉局部特徵的能力很是強,爲分析和利用圖像數據的研究者提供了極大的幫助。TextCNN 是2014年 Kim 在 EMNLP 上提出將 CNN 應用於 NLP 的文本分類任務中。

從直觀上理解,TextCNN 經過一維卷積來獲取句子中 n-gram 的特徵表示。TextCNN 對文本淺層特徵的抽取能力很強,在短文本領域如搜索、對話領域專一於意圖分類時效果很好,應用普遍,且速度快,通常是首選;對長文本領域,TextCNN 主要靠 filter 窗口抽取特徵,在長距離建模方面能力受限,且對語序不敏感。

卷積核( filter )→ n-gram 特徵

文本卷積與圖像卷積的不一樣之處在於只在文本序列的一個方向作卷積。對句子單詞每一個可能的窗口作卷積操做獲得特徵圖( feature map )。

 

image

其中,image。對 feature map 作最大池化( max-pooling )操做,取中最大值max{c} 做爲 filter 提取出的 feature。經過選擇每一個 feature map 的最大值,可捕獲其最重要的特徵。

每一個 filter 卷積核產生一個 feature ,一個 TextCNN 網絡包括不少不一樣窗口大小的卷積核,如經常使用的 filter size ∈{3,4,5} 每一個 filter 的 featuremaps=100。

加強序列推理模型(ESIM)

ESIM (Enhanced Sequential Inference Model) 爲短文本匹配任務中經常使用且有力的模型。它對於 LSTM 的增強主要在於:將輸入的兩個 LSTM 層( Encoding Layer) 經過序列推理交互模型輸出成新的表徵。

圖片來源:paper《Enhanced LSTM for Natural LanguageInference》

如圖所示,ESIM 爲圖的左邊部分。總體網絡結構其實比較明確,整條通路大體包括三個步驟。

步驟一:編碼層。該步驟每一個 token 將預訓練的編碼經過 Bi-LSTM 層,從而獲取了「新的編碼」,其目的是經過 LSTM 學習每一個 token 的上下文信息。

步驟二:局部推理層。步驟二本質是一個句間注意力( intra-sentence attention )的計算過程。經過將兩句在步驟一中獲取的結果作 intra-sentence attention 操做,咱們在這裏能夠獲取到一個新的向量表徵。接下來對向量的先後變化進行了計算,該作法的目的是進一步抽取局部推理信息在 attention 操做的先後變化,並捕捉其中的一些推理關係,如先後關係等。

步驟三:組合推理&預測層。再次將抽取後的結果經過 Bi-LSTM,並使用Avarage&Maxpooling 進行池化(其具體操做就是分別進行 average 和 max pooling 並進行 concat),最後加上全鏈接層進行 Softmax 預測其機率。

ELMo

直觀上來說,ELMo(Embedding from Language Model) 解決了一詞多義的問題,例如詢問「蘋果」的詞向量是什麼,ELMo 會考慮是什麼語境下的「蘋果」,咱們應該去詢問「蘋果股價」裏的「蘋果」詞向量是什麼。ELMo 經過提供詞級別、攜帶上下文信息的動態表示,能有效的捕捉語境信息。ELMo 的提出對後面的的 GPT 和 BRET有一個很好的引導和啓發的做用。一個好的詞向量,應知足兩個特色:

  1. 可以反映出語義和語法的複雜特徵。
  2. 可以準確對不一樣上下文產生合適語義。

傳統的 word2vec 對每一個 word 只有一個固定的 embedding 表達,不能產生攜帶上下文信息的 embedding,對多義詞沒法結合語境判斷。ELMo 中的每一個單詞都要先結合語境經過多層 LSTM 網絡才獲得最後的表達,LSTM 是爲捕獲上下文信息而生,於是 ELMo 能結合更多的上下文語境,在一詞多意上的效果比 word2vec 要好。

ELMo 預訓練時的網絡結構圖與傳統語言模型有點相似,直觀理解爲將中間的非線性層換成了 LSTM,利用 LSTM 網絡更好的提取每一個單詞在當前語境中的上下文信息,同時增長了前向和後向上下文信息。.

預訓練

給定包含 N 個詞的序列image,前向語言模型經過前 k-1個詞image預測第 k 個詞image。在第 k 個位置,每一個 LSTM 層輸出上下文依賴的向量表達image, j=1,2,…,L。頂層 LSTM 層的輸出image利用交叉熵損失預測下一個位置image

image

後向語言模型對序列作反序,利用下文的信息去預測上文的詞。與前向相似,給定image通過 L 層的後向深層 LSTM 網絡預測獲得第 j 層的隱層輸出image

image

雙向語言模型拼接前向語言模型和後向語言模型,構建前向和後向聯合最大對數似然。

image

其中,image爲序列詞向量層參數,image爲交叉熵層參數,在訓練過程當中這兩部分參數共享。

嵌入式語言模型組合利用多層 LSTM 層的內部信息,對中心詞,一個 L 層的雙向語言模型計算獲得 2L+1 個表達集合。

Fine-tune

在下游任務中,ELMo 將多層的輸出整合成一個向量,將全部 LSTM 層的輸出加上normalized 的 softmax 學習到的權重 s=Softmax(w),使用方法以下所示:

直觀上來說,biLMs 的較高層次的 LSTM 向量抓住的是詞彙的語義信息, biLMs 的較低層次的 LSTM 向量抓住的是詞彙的語法信息。這種深度模型所帶來的分層效果使得將一套詞向量應用於不一樣任務有了可能性,由於每一個任務所須要的信息量是不一樣的。另外 LSTM 的層數不宜過多,多層 LSTM 網絡不是很容易 train 好,存在過擬合問題。以下圖是一個多層 LSTM 用在文本分類問題的實驗結果,隨着 LSTM 層數增多,模型效果先增長後降低。

Transformer

曾經有人說,想要提高 LSTM 效果只要加一個 attention 就能夠。可是如今attention is all you need。Transformer 解決了 NLP 領域深層網絡的訓練問題。

Attention 此前就被用於衆多 NLP 的任務,用於定位關鍵 token 或者特徵,好比在文本分類的最後加一層 Attention 來提升性能。Transformer 起源自注意力機制(Attention),徹底拋棄了傳統的 RNN,整個網絡結構徹底是由 Attention 機制組成。Transformer 能夠經過堆疊 Transformer Layer 進行搭建,做者的實驗是經過搭建編碼器和解碼器各6層,總共12層的 Encoder-Decoder,並在機器翻譯中取得了 BLEU 值的新高。

整個流程的可視化如圖:以N=2示例,實際Transformer的N=6。

Encoder 階段:輸入「Thinking Machines」,對應詞向量,疊加位置向量 Positional Encoding,對每一個位置作 Self-Attention 獲得;Add&Norm 分兩步,residual connection即,layer Normalization 獲得新的,對每一個位置分別作 feed forward 全鏈接和 Add&Norm,獲得一個 Encoder Layer 的輸出,重複堆疊2次,最後將 Encoder Layer 輸出到 Decoder 的 Encoder-Decoder Layer 層。

Decoder 階段:先是對 Decoder 的輸入作 Masked Self-Attention Layer,而後將Encoder 階段的輸出與 Decoder 第一級的輸出作 Encoder-Decoder Attention,最後接 FFN 全鏈接,堆疊2個 Decoder,最後接全鏈接+Softmax 輸出當前位置機率最大的的詞。

Transformer 的結構上比較好理解,主要是裏邊的細節比較多,如 Mult-HeadAttention, Feed Forward, Layer Norm, Positional Encoding等。

Transformer的優勢:

  • 並行計算,提升訓練速度。這是相比 LSTM 很大的突破,LSTM 在訓練的時候 ,當前步的計算要依賴於上一步的隱狀態,這是一個連續過程,每次計算都須要等以前的計算完成才能展開,限制模型並行能力。而 Transformer 不用LSTM結構,Attention 機制的每一步計算只是依賴上一層的輸出,並不依賴上一詞的信息,於是詞與詞之間是能夠並行的,從而訓練時能夠並行計算, 提升訓練速度。
  • 一步到位的全局聯繫捕捉。順序計算的過程當中信息會丟失,儘管 LSTM 等門機制的結構必定程度上緩解了長期依賴的問題,可是對於特別長期的依賴現象,LSTM 依舊無能爲力。Transformer 使用了 Attention 機制,從而將序列中的任意兩個位置之間的距離是縮小爲1,這對解決 NLP 中棘手的長期依賴問題是很是有效的。

總結對比CNN、RNN和Self-Attention:

CNN:只能看到局部領域,適合圖像,由於在圖像上抽象更高層信息僅僅須要下一層特徵的局部區域,文本的話強在抽取局部特徵,於是更適合短文本。

RNN:理論上能看到全部歷史,適合文本,可是存在梯度消失問題。

Self-Attention:相比 RNN 不存在梯度消失問題。對比 CNN 更加適合長文本,由於可以看到更遠距離的信息,CNN 疊高多層以後能夠看到很遠的地方,可是 CNN原本須要不少層才能完成的抽象,Self-Attention 在很底層就能夠作到,這無疑是很是巨大的優點。

BERT

BERT (Bidirectional Encoder Representations from Transformers) 本質來說是NLP 領域最底層的語言模型,經過海量語料預訓練,獲得序列當前最全面的局部和全局特徵表示。

BERT 網絡結構以下所示,BERT 與 Transformer 的 Encoder 網絡結構徹底相同。假設 Embedding 向量的維度是,輸入序列包含 n 個token,則 BERT 模型一個layer 的輸入是一個的矩陣,而它的輸出也一樣是一個的矩陣,因此這樣 N 層 BERT layer 就能夠很方便的首尾串聯起來。BERT 的 large model 使用了 N=24 層這樣的Transformer block。

目標函數

  1. Masked Language Model, MLM

MLM 是爲了訓練深度雙向語言表示向量,BERT 用了一個很是直接的方式,遮住句子裏某些單詞,讓編碼器預測這個單詞是什麼。具體操做流程以下圖示例:先按一個較小几率 mask 掉一些字,再對這些字利用語言模型由上下文作預測。

BERT 具體訓練方法爲:隨機遮住15%的單詞做爲訓練樣本。

  • 其中80%用 masked token 來代替。
  • 10%用隨機的一個詞來替換。
  • 10%保持這個詞不變。

直觀上來講,只有15%的詞被遮蓋的緣由是性能開銷,雙向編碼器比單向編碼器訓練要慢;選80% mask,20%具體單詞的緣由是在 pretrain 的時候作了 mask,在特定任務微調如分類任務的時候,並不對輸入序列作 mask,會產生 gap,任務不一致;10%用隨機的一個詞來替換,10%保持這個詞不變的緣由是讓編碼器不知道哪些詞須要預測的,哪些詞是錯誤的,所以被迫須要學習每個 token 的表示向量,作了一個折中。

  1. Next Sentence Prediction

預訓練一個二分類的模型,來學習句子之間的關係。預測下一個句子的方法對學習句子之間關係頗有幫助。

訓練方法:正樣本和負樣本比例是1:1,50%的句子是正樣本,即給定句子A和B,B是A的實際語境下一句;負樣本:在語料庫中隨機選擇的句子做爲B。經過兩個特定的 token[CLS]和[SEP]來串接兩個句子,該任務在[CLS]位置輸出預測。

輸入表示

Input:每一個輸入序列的第一個 token [CLS]專門用來分類,直接利用此位置的最後輸出做爲分類任務的輸入 embedding。

從直觀上來講,在預訓練時,[CLS]不參與 mask,於是該位置面向整個序列的全部position 作 attention,[CLS]位置的輸出足夠表達整個句子的信息,相似於一個global feature;而單詞 token 對應的 embedding 更關注該 token 的語義語法及上下文信息表達,相似於一個 local feature。

Position Embeddings: transformer 的 PositionEncoding 是經過 sin,cos 直接構造出來的,PositionEmbeddings 是經過模型學習到的 embedding 向量,最高支持512維。

Segment Embeddings:在預訓練的句對預測任務及問答、類似匹配等任務中,須要對先後句子作區分,將句對輸入同一序列,以特殊標記 [SEP] 分割,同時對第一個句子的每一個 token 添加 Sentence A Embedding, 第二個句子添加 Sentence BEmbedding,實驗中讓EA =1, EB =0。

Fine-tune

針對不一樣任務,BERT 採用不一樣部分的輸出作預測,分類任務利用[CLS]位置的embedding,NER 任務利用每一個 token 的輸出 embedding。

BERT的主要貢獻有如下幾個方面:

預訓練的有效性:這方面來講 BERT 改變了遊戲規則,是由於相比設計複雜巧妙的網絡結構,在海量無監督數據上預訓練獲得的BERT語言表示+少許訓練數據微調的簡單網絡模型的實驗結果取得了很大的優點。

網絡深度:基於 DNN 語言模型 (NNLM,CBOW等) 獲取詞向量的表示已經在 NLP領域得到很大成功,而 BERT 預訓練網絡基於 Transformer 的 Encoder,能夠作的很深。

雙向語言模型:在 BERT 以前,ELMo 和 GPT 的主要侷限在於標準語言模型是單向的,GPT 使用 Transformer 的 Decoder 結構,只考慮了上文的信息。ELMo 從左往右的語言模型和從右往左的語言模型實際上是獨立開來訓練的,共享 embedding,將兩個方向的 LSTM 拼接並不能真正表示上下文,其本質還是單向的,且多層 LSTM難訓練。

目標函數:對比語言模型任務只作預測下一個位置的單詞,想要訓練包含更多信息的語言模型,就須要讓語言模型完成更復雜的任務,BERT 主要完成完形填空和句對預測的任務,即兩個 loss:一個是 Masked Language Model,另外一個是 Next Sentence Prediction。

總結

咱們在作 NLU 意圖分類任務中實踐了以上主流模型,包括 Xgboost、TextCNN、LSTM、BERT 及 ERNIE 等,下邊是在前期模型調研階段,在選型測試數據上的對比實驗,BERT 模型表現出極大的優點。

同時在咱們部署上線的過程當中,對 BERT 時耗作了測試,在壓測實驗數據上的測試結果供參考。針對咱們的問答query:

(1 ) BERT layer 的層數與時耗基本成線性關係,多頭數目增長對時耗增長不明顯;

(2) 針對短文本 query 的意圖理解,更多依賴淺層語法語義特徵,於是 BERT 層數對模型準召影響較小;

(3) attention 多頭決定了能夠從多少個角度理解 query,在咱們的實驗裏下降多頭數比下降層數對準召的影響略大,而時耗無明顯下降。

圖像領域,Alexnet 打開了深度學習的大門,Resnet是圖像領域深度學習的殿堂標誌。

隨着Transformer, Bert 興起,網絡也在往12層,24層發展,獲得了 SOTA. Bert 證實了在nlp領域,深層網絡的效果要優於淺層網絡。

天然語言領域,Transformer 打開了深層網絡的大門,BERT 也成爲了天然語言處理領域的殿堂標誌。


原文連接 本文爲雲棲社區原創內容,未經容許不得轉載。

相關文章
相關標籤/搜索