文章目錄
- BERT的訓練過程與推理過程
- 一、預訓練過程:學習通用語言表示
- 1. 數據準備
- 2. MLM任務訓練(核心)
- 3. NSP任務訓練
- 4. 預訓練優化
- 二、微調過程:適配下游任務
- 1. 任務定義與數據
- 2. 輸入處理
- 3. 模型結構調整
- 4. 微調訓練
- 三、推理過程:對新數據預測
- 1. 推理輸入預處理
- 2. 模型前向傳播
- 3. 輸出預測結果
- 四、訓練與推理的核心區別
- 五、總結
BERT的訓練過程與推理過程
BERT的核心流程分為預訓練(無監督學習通用語言知識)和微調(監督學習適配下游任務),而推理則是基于微調后的模型對新數據進行預測。以下結合具體實例詳細說明。
一、預訓練過程:學習通用語言表示
預訓練是BERT的“筑基階段”,通過無標注文本學習語言規律,核心任務為Masked Language Model(MLM) 和Next Sentence Prediction(NSP)。
1. 數據準備
- 語料來源:大規模無標注文本(如BooksCorpus、Wikipedia),示例文本片段:
“自然語言處理是人工智能的重要分支。它研究計算機與人類語言的交互。” - 預處理步驟:
- 分詞:用WordPiece分詞工具拆分文本為子詞(Subword)。例如“人工智能”→“人工”+“智能”;“交互”→“交”+“互”。
- 構造輸入序列:對單句或句子對添加特殊符號,最長長度限制為512 Token。
- 單句格式:
[CLS] 自然 語言 處理 是 人工 智能 的 重要 分支 。 [SEP]
- 句子對格式:
[CLS] 自然 語言 處理 是 人工智能 的 重要 分支 。 [SEP] 它 研究 計算機 與 人類 語言 的 交互 。 [SEP]
- 單句格式:
2. MLM任務訓練(核心)
目標:隨機掩蓋部分Token,讓模型預測被掩蓋的Token,強制學習雙向上下文。
- 具體操作:
從輸入序列中隨機選擇15%的Token進行處理:- 80%概率替換為
[MASK]
:
原序列:[CLS] 自然 語言 處理 是 人工 智能 的 重要 分支 。 [SEP]
處理后:[CLS] 自然 [MASK] 處理 是 人工 智能 的 [MASK] 分支 。 [SEP]
(需預測被掩蓋的“語言”和“重要”) - 10%概率替換為隨機Token:
處理后:[CLS] 自然 圖像 處理 是 人工 智能 的 重要 分支 。 [SEP]
(“語言”被隨機替換為“圖像”,模型需識別錯誤并預測正確Token) - 10%概率不替換(保持原Token):
處理后:[CLS] 自然 語言 處理 是 人工 智能 的 重要 分支 。 [SEP]
(模型需“假裝”不知道哪些Token被掩蓋,避免依賴[MASK]
符號)
- 80%概率替換為
- 損失計算:對被掩蓋的Token,通過輸出層的Softmax計算預測概率,用交叉熵損失優化模型,讓預測值接近真實Token。
3. NSP任務訓練
目標:讓模型學習句子間的邏輯關系,判斷句子對是否連續。
- 具體操作:
構造句子對(A, B),50%為真實連續句(正例),50%為隨機拼接句(負例):- 正例:A=“自然語言處理是人工智能的重要分支。”,B=“它研究計算機與人類語言的交互。”(B是A的下一句)。
- 負例:A=“自然語言處理是人工智能的重要分支。”,B=“貓是一種常見的家養寵物。”(B與A無關)。
輸入序列格式:[CLS] A [SEP] B [SEP]
,并添加Segment Embedding(A部分為0,B部分為1)。
- 損失計算:通過
[CLS]
Token的輸出向量接二分類層,用交叉熵損失優化模型,區分正例(標簽1)和負例(標簽0)。
4. 預訓練優化
- 訓練配置:BERT-Base使用12層Transformer,批量大小256,訓練步數100萬,優化器為Adam(學習率5e-5,β1=0.9,β2=0.999)。
- 正則化:每層加入Dropout(概率0.1),防止過擬合;使用層歸一化穩定訓練。
- 硬件支持:需大規模GPU集群(如16塊TPU,訓練約4天),通過梯度累積處理大批次數據。
二、微調過程:適配下游任務
預訓練完成后,模型已具備通用語言理解能力,微調階段需針對具體任務(如情感分析、問答)調整輸出層并優化參數。以下以情感分析任務(判斷文本為“正面”或“負面”)為例說明。
1. 任務定義與數據
- 任務目標:輸入文本(如“這部電影劇情緊湊,演員演技出色!”),輸出情感標簽(正面/負面)。
- 微調數據:帶標簽的情感語料,示例:
文本 標簽 “這部電影劇情緊湊,演員演技出色!” 正面 “畫面模糊,音效刺耳,不推薦觀看。” 負面
2. 輸入處理
- 單句輸入格式:
[CLS] 這 部 電影 劇情 緊湊 , 演員 演技 出色 ! [SEP]
- 嵌入向量構造:同預訓練,包含Token Embedding(子詞向量)、Segment Embedding(全為0,因單句)、Position Embedding(位置編碼)。
3. 模型結構調整
- 復用預訓練的Transformer編碼器,僅在輸出層添加分類頭:
取[CLS]
Token經過12層Transformer后的輸出向量(768維),接入全連接層+Softmax,輸出“正面”“負面”的概率。
即:P(正面/負面)=Softmax(W?H[CLS]+b)P(正面/負面) = Softmax(W \cdot H_{[CLS]} + b)P(正面/負面)=Softmax(W?H[CLS]?+b),其中H[CLS]H_{[CLS]}H[CLS]?是[CLS]
的最終向量,WWW和bbb是微調階段待學習的參數。
4. 微調訓練
- 參數設置:凍結部分底層Transformer參數(或微調所有參數),學習率設為2e-5(低于預訓練,避免破壞預訓練知識),批量大小32,訓練輪次3-5輪。
- 損失計算:對每個樣本,用交叉熵損失計算預測概率與真實標簽的差異,通過反向傳播更新分類頭和少量Transformer參數。
- 早停策略:用驗證集監控性能,若連續多輪無提升則停止訓練,防止過擬合。
三、推理過程:對新數據預測
微調完成后,模型可對未標注的新文本進行情感預測,推理過程即模型的前向傳播計算。
1. 推理輸入預處理
- 輸入新文本:“這部電影的特效震撼,劇情感人至深。”
- 分詞與格式轉換:
分詞后:[CLS] 這 部 電影 的 特效 震撼 , 劇情 感人 至 深 。 [SEP]
轉換為嵌入向量:Token Embedding + Segment Embedding(全0) + Position Embedding。
2. 模型前向傳播
- 嵌入向量輸入12層Transformer編碼器:
每層通過多頭自注意力捕捉Token間關聯(如“特效”與“震撼”、“劇情”與“感人”的語義強化),前饋網絡進行非線性變換,最終輸出每個Token的上下文向量。 - 提取
[CLS]
向量:H_{[CLS]}
(768維)聚合了整個句子的情感語義。
3. 輸出預測結果
H_{[CLS]}
輸入分類頭,計算概率:
P(正面)=0.92P(正面) = 0.92P(正面)=0.92,P(負面)=0.08P(負面) = 0.08P(負面)=0.08。- 決策:取概率最高的標簽,輸出“正面”。
四、訓練與推理的核心區別
維度 | 預訓練過程 | 微調過程 | 推理過程 |
---|---|---|---|
數據類型 | 無標注文本(大規模) | 有標注任務數據(小規模) | 無標注新文本(單條/批量) |
目標 | 學習通用語言規律(MLM+NSP) | 適配具體任務(如情感分類) | 輸出新數據的預測結果 |
參數更新 | 全量參數優化(數百萬步) | 少量參數微調(數輪) | 無參數更新(僅前向傳播) |
計算復雜度 | 極高(需大規模算力) | 中等(單GPU可完成) | 低(實時響應) |
五、總結
BERT的訓練過程通過“預訓練筑基+微調適配”實現知識遷移:預訓練用無監督任務從海量文本中學習語言本質,微調則用少量標注數據將通用知識轉化為任務能力;而推理則是微調后模型對新數據的高效預測。這種模式大幅降低了NLP任務的落地門檻,成為現代自然語言處理的核心范式。