簡述BERT模型的訓練過程、BERT模型在推斷過程中做了哪些性能優化、BERT模型在訓練過程中做了哪些性能優化

日萌社

人工智能AI:Keras PyTorch MXNet TensorFlow PaddlePaddle 深度學習實戰(不定時更新)


fasttext模型在大量類別上能夠快速訓練的原因、爲了提升fasttext模型的評估指標做了哪些優化 

簡述BERT模型的訓練過程、BERT模型在推斷過程中做了哪些性能優化、BERT模型在訓練過程中做了哪些性能優化 

在某個模型訓練過程中遇到的難題及其解決辦法、對自動超參數調優方法的理解、模型部署時如何實現熱更新、說一說最近看過的一篇論文

Softmax反向傳播推導、Bert的模型架構


 


 

問題:簡述BERT模型的訓練過程

解題思路

第一步: 找出核心知識點並解析

  • BERT模型:
    • BERT也稱雙向Transformer編碼器,它是由Transformer爲基本單元構成的雙向網絡結構。BERT模型的創新點在於開啓了遷移學習的篇章,它能夠提供Masked LM,Next Sentence Prediction以及Question Answering任務的預訓練模型,以增強在有限數據集下fine-tuning這些任務的效果。

  • 一般模型的訓練過程:
    • 1,訓練數據預處理
    • 2,初始化模型參數
    • 3,批次化數據載入模型
    • 4,對損失函數進行優化計算損失與梯度
    • 5,梯度在反向傳播中更新模型參數
    • 6,按照以上過程迭代所有數據獲得模型參數

第二步: 整合核心知識點形成答案

答案

1,BERT模型訓練數據預處理,包括數值映射,截斷補齊,以及爲句子對添加標記等
2,初始化BERT模型參數,即初始化各個Transformer中的帶參數層,一般按照均勻分佈方式初始化
3,將數據使用迭代器批次化,以節約內存載入模型
4,對BERT的交叉熵損失函數進行優化獲得每個批次的平均損失與梯度
5,使用梯度在反向傳播算法中更新模型所有的層參數
6,按照以上過程迭代所有數據獲得模型參數


問題:BERT模型在推斷過程中做了哪些性能優化

解題思路

第一步: 找出核心知識點並解析

  • BERT模型:
    • BERT也稱雙向Transformer編碼器,它是由Transformer爲基本單元構成的雙向網絡結構。BERT模型的創新點在於開啓了遷移學習的篇章,它能夠提供Masked LM,Next Sentence Prediction以及Question Answering任務的預訓練模型,以增強在有限數據集下fine-tuning這些任務的效果。

  • 大型模型在推斷過程中的優化措施:
    • 1,對訓練完成的模型進行量化,包括動態量化和靜態量化
    • 2,對訓練完成的模型進行剪枝
    • 3,使用量化意識訓練
    • 4,拓展硬件資源,使用分佈式或GPU加速

第二步: 整合核心知識點形成答案

答案

在我們的項目中,對訓練後的BERT模型採用動態量化技術來優化推斷性能,將模型參數由FLOAT32量化爲INT8,理論上參數量大小減少4倍,實際工程中減小約3.5倍(由420M到120M),單條數據的平均推斷時間由原來的380ms減小到85ms,當然,模型在驗證集上的acc指標也下降了約兩個百分點,這是在可接受範圍之內的。(動態量化是最簡單方便的推斷性能優化方法)


問題:BERT模型在訓練過程中做了哪些性能優化

解題思路

第一步: 找出核心知識點並解析

  • BERT模型:
    • BERT也稱雙向Transformer編碼器,它是由Transformer爲基本單元構成的雙向網絡結構。BERT模型的創新點在於開啓了遷移學習的篇章,它能夠提供Masked LM,Next Sentence Prediction以及Question Answering任務的預訓練模型,以增強在有限數據集下fine-tuning這些任務的效果。

  • 大型模型在訓練過程中的優化措施:
    • 1,數據並行(分佈式)訓練
    • 2,模型並行(分佈式)訓練
    • 3,數據與模型混合並行(分佈式)訓練

第二步: 整合核心知識點形成答案

答案

在我們訓練BERT模型的過程中,爲了能夠迭代調優方法,我們使用了數據並行的方式來加快訓練。我們將模型copy到4臺服務器上,然後使用將每個批次的數據4等分feed給模型處理,之後將每個模型的梯度在主節點上進行求和平均得到最終的更新梯度。通過這種方式,我們將模型的訓練速度提升了約3.5倍,在10萬文本數據集上訓練的時間由原來的2h38min,減小到45min左右,爲我們的整個模型從實驗到上線節約了大量時間。


Bert的模型架構

2: 關於Bert訓練過程中的關鍵點.
2.1: 四⼤關鍵詞: Pre-trained, Deep, Bidirectional Transformer, Language
Understanding
a: Pre-trained: ⾸先明確這是⼀個預訓練的語⾔模型, 未來所有的開發者可以直接繼承!
整個Bert模型最⼤的兩個亮點都集中在Pre-trained的任務部分。
b: Deep:
Bert_BASE: Layer = 12, Hidden = 768, Head = 12, Total Parameters = 110M
Bert_LARGE: Layer = 24, Hidden = 1024, Head = 16, Total Parameters = 340M
對⽐於Transformer: Layer = 6, Hidden = 2048, Head = 8, 是⼀個淺⽽寬, 說明
Bert這樣深⽽窄的模型效果更好 (和CV領域的總體結論基本⼀致)。
c: Bidirectional Transformer: Bert的⼀個創新點, 它是⼀個雙向的Transformer⽹絡。
原始的Transformer其實是⼀個單向的⽹絡, 和GPT⼀致, ⻅上圖。
d: Language Understanding: 更加側重語⾔的理解, ⽽不僅僅是⽣成 (Language
Generation)
2.2: Bert的語⾔輸⼊表示包含了3個組成部分: (⻅上圖)
詞嵌⼊張量: word embeddings
語句分塊張量: segmentation embeddings
位置編碼張量: position embeddings
2.3: Bert的預訓練中引⼊兩⼤核⼼任務 (這兩個任務也是Bert原始論⽂的兩個最⼤的創新點)
a: 引⼊ Masked LM (帶mask的語⾔模型訓練)
a.1: 在原始訓練⽂本中, 隨機的抽取15%的token作爲即將參與mask的對象。
a.2: 在這些被選中的token中, 數據⽣成器並不是把他們全部變成[MASK], ⽽是有
下列3個選擇:
a.2.1: 在80%的概率下, ⽤[MASK]標記替換該token, ⽐如my dog is hairy ->
my dog is [MASK]
a.2.2: 在10%的概率下, ⽤⼀個隨機的單詞替換該token, ⽐如my dog is
hairy -> my dog is apple
a.2.3: 在10%的概率下, 保持該token 不變, ⽐如my dog is hairy -> my dog
is hairy
a.3: Transformer Encoder在訓練的過程中, 並不知道它將要預測哪些單詞? 哪些
單詞是原始的樣⼦? 哪些單詞被遮掩成了[MASK]? 哪些單詞被替換成了其他單詞?
正是在這樣⼀種⾼度不確定的情況下, 反倒逼着模型快速學習該token的分佈式上
下⽂的語義, 盡最⼤努⼒學習原始語⾔說話的樣⼦!!! 同時因爲原始⽂本中只有15%
的token參與了MASK操作, 並不會破壞原語⾔的表達能⼒和語⾔規則!!!
b: 引⼊Next Sentence Prediction (下⼀句話的預測任務)
b.1: ⽬的是爲了服務問答, 推理, 句⼦主題關係等NLP任務。
b.2: 所有的參與任務訓練的語句都被選中參加。
50%的B是原始⽂本中實際跟隨A的下⼀句話。(標記爲IsNext, 代表正樣本)
50%的B是原始⽂本中隨機抽取的⼀句話。(標記爲NotNext, 代表負樣本)
b.3: 在該任務中, Bert模型可以在測試集上取得97-98%的準確率。
2.4: 關於基於Bert的模型微調(fine-tuning)
只需要將特定任務的輸⼊, 輸出插⼊到Bert中, 利⽤Transformer強⼤的注意⼒機制就可
以模擬很多下游任務。(句⼦對關係判斷, 單⽂本主題分類, 問答任務(QA), 單句貼標籤
(命名實體識別))
微調的若⼲經驗:
batch size: 16, 32
epochs: 3, 4
learning rate: 2e-5, 5e-5
全連接層添加: layers: 1-3, hidden_size: 64, 128

 

3: Bert模型本身的優點和缺點。(沒有標準答案)
優點: Bert的基礎建⽴在transformer之上, 擁有強⼤的語⾔表徵能⼒和特徵提取能⼒。在11
項NLP基準測試任務中達到了state of the art。同時再⼀次證明了雙向語⾔模型的能⼒更加
強⼤。
缺點:
1: 可復現性差, 基本沒法做, 只能拿來主義直接⽤!
2: 訓練過程中因爲每個batch_size中的數據只有15%參與預測, 模型收斂較慢, 需要強
⼤的算⼒⽀撐!
引申:1:深度學習就是表徵學習 (Deep learning is representation learning)
整個Bert在11項語⾔模型⼤賽中, 基本思路就是雙向Transformer負責提取特徵,
然後整個⽹絡加⼀個全連接線性層作爲fine-tuning微調。但即便如此傻⽠式的組
裝, 在NLP中著名的難任務-NER(命名實體識別)中, 甚⾄直接去除掉了CRF層, 照樣
⼤⼤超越BiLSTM + CRF的組合效果, 這去哪⼉說理去???
2: 規模的極端重要性 (Scale matters)
不管是Masked LM, 還是下⼀句預測Next Sentence Prediction, 都不是⾸創的概
念, 之前在其他的模型中也提出過, 但是因爲數據規模 + 算⼒侷限沒能讓世⼈看到
這個模型的潛⼒, 那些Paper也就不值錢了。但是到了⾕歌⼿⾥, 不差錢的結果就
是Paper值錢了!!!!!!
3: 關於進⼀步的研究展示了Bert在不同的層學習到了什麼。
低的⽹絡層捕捉到了短語結構⽅⾯的信息。
單詞和字的特徵表現在3-4層, 句法信息的特徵表現在6-9層, 句⼦語義信息的特徵
表現在10-12層。
主謂⼀致的特徵表現在8-9層 (屬於句法信息的⼀種)。

1: 串講Bert的時候已經提到了很多細節。
2: 關於特徵提取器的差異
2.1: ELmo採⽤雙向LSTM提取
2.2: Bert採⽤雙向Transformer提取
2.3: GPT採⽤單向Transformer提取
3: 關於語⾔模型的差異
3.1: ELmo採⽤雙向語⾔模型, 可以同時採集前後語義的關係和含義
3.2: Bert採⽤雙向語⾔模型, 相當於只⽤了Transformer中的Encoder, 可以看⻅完整的句⼦,
是三者中提取特徵能⼒最強⼤的
3.3: GPT採⽤單向語⾔模型, 相當於只⽤了Transformer中的Decoder, 看不⻅完整的句⼦, 特
徵採集能⼒不如Bert
知識圖譜是NLP⼀個單獨的細分領域, 需要專⻔做, ⽐較窄, 除⾮特別有興趣專攻, 不然不建議押注
這個領域。Neo4j就是主要針對知識圖譜的。
詞義消歧, 語義消歧:
    雷軍對⼩⽶有特別的感情。
    那家店賣的⼩⽶特別棒。
    我昨天剛買了⼀個蘋果。
1: 基於詞典的語義消歧
2: 有監督的深度學習語義消歧 (類似於詞性標註, NER任務)
3: ⽆監督 (但是依賴於在⼀個⼤規模語料庫上的句法分析結果)
4: https://www.bbsmax.com/A/E35pl6QE5v/

句向量:
    1: 詞的疊加
    2: Bert (Transformer)
⽂檔向量:
    1: LDA (⽂檔主題模型)
    2: Bert

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章