1. CLS 向量和 DEC 向量的區別及訓練方式
(1) CLS 向量與 DEC 向量是否都是特殊 token?
CLS 向量([CLS] token)和 DEC 向量(Decoder Input token)都是特殊的 token,但它們出現在不同類型的 NLP 模型中,并承擔不同的功能。
-
CLS 向量([CLS] token)
- 主要出現在 BERT 類的雙向 Transformer 編碼器模型中,比如 BERT、RoBERTa、ALBERT 等。
- 用于表示整個輸入序列的全局信息,常用于分類任務(如情感分析、文本匹配)。
- 具體機制:
- 在 BERT 預訓練階段,[CLS] token 被加在輸入文本的最前面。
- 經過 Transformer 編碼層后,輸出的 CLS 向量聚合了整個文本的信息,最終送入分類頭進行任務訓練。
- 例如,在情感分類任務中,CLS 向量會經過全連接層和 softmax 變換,輸出正負類別概率。
-
DEC 向量(Decoder Input token)
- 主要出現在 Encoder-Decoder 結構的模型中,比如 Transformer(用于機器翻譯)、T5(用于文本生成)等。
- 充當解碼器的初始輸入,通常由
<bos>
(begin-of-sequence) 或者<s>
(start token)表示。 - 具體機制:
- 訓練時,Decoder 需要一個起始 token(例如
<bos>
),然后依賴 Encoder 的輸出和已生成的部分自回歸地預測下一個 token。 - 生成過程中,每個時間步的 DEC 向量都會影響下一個 token 的生成。
- 訓練時,Decoder 需要一個起始 token(例如
(2) CLS 向量和 DEC 向量如何初始化?
-
CLS 向量初始化:
在 BERT 預訓練時,[CLS] token 的初始向量與普通詞向量一樣,隨機初始化,并在訓練過程中通過梯度下降不斷優化。 -
DEC 向量初始化:
在 Transformer 類模型中,DEC token 也通常是隨機初始化的,但是不同的模型可能采用不同的方法:- 在 T5 這種預訓練模型中,Decoder 的輸入采用的是預訓練時學習到的
<s>
token 。 - 在機器翻譯任務中,Decoder 可能使用源語言的
<bos>
作為起點。
- 在 T5 這種預訓練模型中,Decoder 的輸入采用的是預訓練時學習到的
(3) CLS 向量和 DEC 向量如何參與訓練?
-
CLS 向量的訓練方式:
- 在 BERT 預訓練任務(如 Masked Language Model 和 Next Sentence Prediction)中,CLS 向量是計算句子級別任務損失的關鍵部分。
- 在下游任務中(如文本分類),CLS 向量會經過額外的線性層,用于預測類別標簽。
-
DEC 向量的訓練方式:
- 參與自回歸訓練,即在訓練時,Decoder 只能夠看到之前的詞,而預測當前時間步的目標詞(Teacher Forcing 機制)。
- 目標是最大化正確序列的似然,使得 DEC 向量能夠學習如何有效指導解碼器生成合理的輸出。
(4) CLS 向量和 DEC 向量本質上是否相同?
從數學本質上看,它們都是高維向量(embedding),但在模型設計上:
- CLS 向量用于編碼文本全局語義,屬于 Encoder 端的產物。
- DEC 向量用于自回歸地指導序列生成,屬于 Decoder 端的輸入。
- 區別主要體現在訓練方式、任務目標和語義作用上。
2. 分類損失(如交叉熵) vs. 語言模型損失(如負對數似然)
這兩種損失都用于 NLP 任務,但應用場景不同。
(1) 分類損失(Cross Entropy, CE)
-
適用任務: 用于文本分類、命名實體識別(NER)、情感分析等任務。
-
計算方式:
- 先計算模型輸出的類別概率分布:
p i = softmax ( z i ) p_i = \text{softmax}(z_i) pi?=softmax(zi?) - 再計算真實類別 ( y ) 與預測類別 ( p ) 之間的交叉熵:
L = ? ∑ i y i log ? p i L = -\sum_{i} y_i \log p_i L=?i∑?yi?logpi?
- 先計算模型輸出的類別概率分布:
-
特點:
- 僅在整個輸入上計算一個類別概率,而不涉及逐 token 預測。
(2) 語言模型損失(Negative Log Likelihood, NLL)
-
適用任務: 用于文本生成、機器翻譯、問答任務(如 GPT、T5)。
-
計算方式:
- 語言模型在訓練時,目標是最大化正確序列的似然概率,其損失形式為:
L = ? ∑ t log ? p ( y t ∣ y < t , x ) L = -\sum_{t} \log p(y_t | y_{<t}, x) L=?t∑?logp(yt?∣y<t?,x) - 這里,( y_t ) 是第 ( t ) 個時間步的目標詞,( y_{<t} ) 代表已生成的部分,( x ) 是輸入序列(如果是 Encoder-Decoder)。
- 語言模型在訓練時,目標是最大化正確序列的似然概率,其損失形式為:
-
特點:
- 逐 token 計算損失,關注序列的生成概率。
- 在自回歸(Auto-regressive)任務中,每個 token 預測結果依賴前面已生成的部分。
(3) 兩者的主要區別
分類損失(CE) | 語言模型損失(NLL) | |
---|---|---|
任務類型 | 句子級別任務(分類) | 逐 token 預測任務(生成) |
計算方式 | 計算整個文本的類別概率 | 計算每個 token 的預測概率 |
是否自回歸 | 否 | 是 |
3. 自回歸(Autoregressive, AR)
(1) 自回歸的定義
自回歸(Autoregressive)是一種序列建模方法,當前時間步的預測依賴于過去的輸出。
(2) 為什么叫“自回歸”?
- “回歸” 這個術語在統計學中表示根據歷史數據預測未來值。
- “自” 指的是模型的輸入來自于自己之前的預測。
- 因此,自回歸 = “使用自身過去的信息來預測未來”。
(3) NLP 中的自回歸模型
-
GPT(Generative Pre-trained Transformer)
-
在第 ( t ) 個時間步,只能看到 ( y_1, y_2, \ldots, y_{t-1} ) 這些前面的 token,不能看到未來的信息。
-
預測方式:
p ( y t ∣ y < t ) p(y_t | y_{<t}) p(yt?∣y<t?) -
依賴“過去的輸出”來預測下一個詞,典型的自回歸結構。
-
-
BERT 不是自回歸模型
- BERT 是 雙向 Transformer,訓練時可以看到整個輸入,因此它不是自回歸模型。
(4) 自回歸的應用
- 語言模型(GPT、XLNet)
- 機器翻譯(Transformer Decoder)
- 語音生成(WaveNet)
總結
-
CLS 向量和 DEC 向量本質上都是向量,但用途不同:
- CLS 向量用于文本分類、全局表征;
- DEC 向量用于解碼器輸入,引導文本生成。
-
分類損失 vs. 語言模型損失:
- 交叉熵用于整體分類;
- 負對數似然用于逐 token 預測。
-
自回歸(Auto-regressive)是指依賴自身過去輸出進行預測,GPT 等生成模型采用這一機制。
在 NLP 任務中,<s>
和 <bos>
都是 特殊 token,但它們的使用方式略有不同,取決于具體的模型和任務。
1. <s>
(Start-of-Sequence Token)
<s>
代表 序列的起始 token,在不同的模型中用途不同:
-
在 T5 模型(Text-to-Text Transfer Transformer)中:
T5
是一個 Encoder-Decoder 結構的 Transformer,所有任務都被轉換成文本生成任務。- 在 T5 的 Decoder 中,解碼輸入(Decoder Input)以
<s>
作為起始 token,然后逐步生成后續 token。 - 訓練時:
輸入 (Encoder Input) = "Translate English to French: I love NLP" 目標輸出 (Decoder Target) = "<s> J'aime le NLP </s>"
- 預測時:
<s>
提供解碼起點,模型基于 Encoder 的輸出和<s>
生成下一個 token。
-
在 BART(Bidirectional and Auto-Regressive Transformer)模型中:
BART
也是 Encoder-Decoder 結構,用于文本填充、摘要等任務。<s>
用于標識句子開始,在BART
預訓練階段,模型可能會恢復丟失的<s>
token。
-
在一些 NLP 任務中:
<s>
也可以作為整個句子或段落的起點,類似于[CLS]
(BERT 中用于分類任務的 token)。
2. <bos>
(Beginning-of-Sequence Token)
<bos>
代表 序列的開始,用于 自回歸(Auto-regressive)解碼:
-
在機器翻譯(MT)任務中:
Transformer
結構的 Decoder 需要一個起始 token,通常用<bos>
作為 Decoder 的輸入。- 例如:
源語言輸入 (Encoder Input): "I love NLP" 目標輸出 (Decoder Target): "<bos> J'aime le NLP <eos>"
- 在訓練時,Decoder 會在
<bos>
之后一個個預測目標語言的 token,直到遇到<eos>
(end-of-sequence)。
-
在 GPT 這樣的自回歸模型中:
GPT
主要用于文本生成任務,如對話、摘要。<bos>
告訴模型“文本從這里開始”,然后 GPT 依次預測下一個 token。
3. <s>
和 <bos>
的區別
Token | 常見用途 | 典型模型 |
---|---|---|
<s> (Start-of-Sequence) | 句子/段落的起點,用于 Encoder-Decoder 任務 | T5、BART |
<bos> (Beginning-of-Sequence) | 自回歸生成的起始 token,特別用于解碼 | GPT、Transformer Decoder |
- 如果是 Encoder-Decoder 結構(如 T5、BART),一般使用
<s>
作為起始 token。 - 如果是 僅 Decoder 結構(如 GPT),則使用
<bos>
作為文本生成的起始 token。