本文由 ChatMoney團隊出品
前言
Generative Pre-trained Transformer(GPT)系列是由OpenAI開發的預訓練語言模型,它們在多種NLP任務中取得了令人矚目的成績,包括文章生成、代碼生成、機器翻譯和問答等。GPT系列模型的核心思想是通過無監督學習在大規模語料庫上進行預訓練,再通過少量數據進行微調以適應特定任務。隨著模型容量的增加和訓練數據的擴大,GPT系列模型的能力也在不斷提升。
模型 | 發布時間 | 參數量 | 預訓練數據量 |
GPT | 2018 年 6 月 | 1.17 億 | 約 5GB |
GPT | 2019 年 2 月 | 15 億 | 40GB |
GPT | 2020 年 5 月 | 1,750 億 | 45TB |
GPT-1:無監督學習與通用預訓練
在GPT-1問世之前,傳統的自然語言處理(NLP)模型主要依賴于有監督學習,這種方法要求大量帶有明確標簽的數據進行任務特定的模型訓練。然而,有監督學習存在兩大局限性:
-
數據標注的挑戰:高質量的標注數據往往難以獲取,特別是在一些復雜場景中,如圖像標注或情感分析,數據的標簽可能模糊或不清晰。
-
模型泛化能力的局限:通過某一特定任務訓練的模型往往難以直接應用于其他任務,這使得模型更像是“領域專家”而非真正理解NLP的“通才”。
GPT-1打破了這一局限,它采用了一種全新的思路:先通過無標簽數據學習一個通用的語言模型,再根據具體任務進行微調。GPT-1能夠處理的有監督任務包括:
-
自然語言推理:判斷兩個句子之間是否存在蘊含、矛盾或中立關系。
-
問答與常識推理:類似于多選題,給定文章、問題和多個候選答案,模型需要預測每個答案的概率。
-
語義相似度判斷:確定兩個句子在語義上是否相關。
-
文本分類:識別輸入文本的類別歸屬。
這種將無監督學習作為有監督模型預訓練目標的方法,被稱為通用預訓練(Generative Pre-training,GPT)。
GPT-1的訓練過程
GPT-1的訓練分為兩個階段:無監督的預訓練和有監督的微調。
1.1.1 無監督預訓練
GPT-1的無監督預訓練基于語言模型進行。給定一個無標簽的文本序列,模型的優化目標是最大化序列中每個詞的條件概率乘積,即最大化似然值。這一過程中,GPT-1使用了滑動窗口機制,并在每個窗口內計算條件概率。這些參數通過隨機梯度下降(SGD)等優化算法進行更新。
GPT-1的模型結構基于Transformer架構,特別是其中的解碼器部分。它采用了12個Transformer塊堆疊而成,每個塊都包含多頭自注意力機制和全連接層,用于生成輸出概率分布。
通過這種方式,GPT-1能夠在無標簽數據上學習語言的通用表示,為后續的有監督任務微調提供強有力的基礎
1.2 GPT-1的數據集
GPT-1的訓練主要基于BooksCorpus數據集,這是一個包含大量未發布書籍的集合。選擇這個數據集的原因主要有兩點:首先,書籍中的文本通常具有較長的上下文依賴關系,這有助于模型學習長期的依賴模式;其次,由于這些書籍未公開發布,因此在其他NLP數據集中出現的可能性較低,這進一步驗證了GPT-1模型的泛化能力。
1.3 網絡結構的細節
GPT-1采用了基于Transformer的架構,具體包含12層的Transformer解碼器。以下是一些關鍵的網絡結構細節:
-
掩碼自注意力機制:GPT-1使用了掩碼自注意力頭,確保模型在預測某個詞時不會看到該詞之后的任何信息,這有助于模型學習語言的自然順序。
-
字節對編碼(BPE):GPT-1使用BPE進行文本編碼,共有固定的字節對數量,這種編碼方式能有效處理罕見的和未見過的詞匯。
-
詞編碼長度:詞編碼的長度設定為固定的長度,以適應不同長度的詞匯。
-
位置編碼:GPT-1也學習位置編碼,以捕捉序列中詞的位置信息。
-
Transformer層數與頭數:GPT-1包含12層的Transformer,每個Transformer塊有多個自注意力頭,頭數設定為固定值。
-
正則化機制:GPT-1使用了包括Attention、殘差連接、Dropout等多種機制進行正則化,以防止過擬合。
-
激活函數:GPT-1的激活函數為GELU(Gaussian Error Linear Unit),這是一種平滑的ReLU變種,有助于模型更好地學習非線性關系。
-
訓練參數:GPT-1的訓練參數包括batch size、學習率、序列長度、訓練輪數(epoch)等,這些參數的選擇對模型的性能有重要影響。GPT-1的模型參數數量達到了數十億級別。
1.3.1 無監督訓練
在無監督訓練階段,GPT-1主要關注于最大化給定文本序列的似然值。這通過調整模型的參數,使模型能夠預測序列中每個詞的出現概率來實現。
1.3.2 有監督微調
在有監督微調階段,GPT-1使用無監督訓練得到的模型作為起點,針對特定NLP任務進行微調。這通常涉及調整模型的頂層結構,以適應不同任務的輸出要求。通過微調,GPT-1能夠在保持模型泛化能力的同時,提高在特定任務上的性能。
1.4 GPT-1的性能
GPT-1在多個NLP任務上展示了強大的性能。在有監督學習的12個基準任務中,GPT-1在9個任務上的表現超過了當時的最佳模型。在零次學習(zero-shot)任務中,GPT-1也顯示出較好的穩定性,并且隨著訓練次數的增加,性能逐漸提升。這表明GPT-1具有較強的泛化能力,可以應用于與訓練任務不直接相關的其他NLP任務中。
然而,值得注意的是,GPT-1在未經微調的任務上雖然也有一定的效果,但其性能通常低于經過微調的有監督任務。這說明GPT-1雖然在語言建模方面取得了顯著進展,但仍需要在特定任務上進行微調才能充分發揮其潛力。因此,GPT-1可以被視為一個強大的“領域專家”,但還不是一個通用的語言學家。
GPT-2:多任務學習與更大的模型
GPT-2旨在通過擴展模型容量和采用更大的數據集來訓練一個泛化能力更強的詞向量模型。與GPT-1相比,GPT-2在模型結構上并未進行大的創新,但它在網絡參數和數據集規模上有了顯著的增加。下面我們將對GPT-2進行詳細的介紹。
2.1 GPT-2的核心思想
GPT-2的核心思想是使用無監督的預訓練模型來執行有監督的任務。基于文本數據的時序性,GPT-2將語言建模任務轉化為根據已知上文預測未知下文的條件概率問題。具體來說,一個輸出序列可以表示為一系列條件概率的乘積,這實際上是一個序列生成任務。
GPT-2進一步擴展了這一思想,認為當模型的容量足夠大且數據量足夠豐富時,僅通過訓練語言模型就可以覆蓋大部分有監督學習任務。這是因為有監督學習任務可以看作是無監督語言模型的一個子集。例如,在訓練了包含“Micheal Jordan is the best basketball player in the history”的語料后,模型不僅學會了語言模型,還隱含地學會了回答類似“who is the best basketball player in the history?”的問題。
2.2 GPT-2的數據集
GPT-2采用了名為WebText的數據集,該數據集來源于Reddit上的高贊文章。WebText共包含約800萬篇文章,總數據量約為40GB。為了避免與測試集沖突,WebText移除了與Wikipedia相關的文章。
2.3 模型參數
GPT-2在多個方面對模型參數進行了調整和優化:
-
字典大小:使用字節對編碼(BPE)構建字典,字典的大小設定為特定值,以適應不同長度的詞匯。
-
滑動窗口大小:根據模型需要設定滑動窗口的大小,用于捕獲文本中的上下文信息。
-
Batch Size:為了加速訓練和提高模型性能,GPT-2增大了batch size的大小。
-
Layer Normalization:在Transformer塊的輸入部分添加了Layer Normalization,并在每個self-attention之后也添加了一個Layer Normalization,以增強模型的穩定性。
-
殘差層縮放:GPT-2對殘差層的初始化值進行了縮放,縮放因子與殘差層的個數相關,以改善深層模型的訓練效果。
GPT-2訓練了四組不同層數和詞向量長度的模型,這些模型在多個NLP任務上均取得了顯著的性能提升。實驗結果表明,隨著模型規模的增大,GPT-2的泛化能力和性能也在不斷提升。
參數量 | 層數 | 詞向量長度 |
117M(GPT-1) | 12 | 768 |
345M | 24 | 1024 |
762M | 36 | 1280 |
1542M | 48 | 1600 |
GPT-3:海量參數與In-context Learning
GPT-3是目前最強大的語言模型之一,它憑借其巨大的參數量、龐大的訓練數據集以及創新的訓練方式,在各種NLP任務上均展現出了出色的性能。無需大量有標簽的訓練數據,GPT-3僅需零次或少數幾次學習即可在下游任務中取得優異的表現。
3.1 In-context Learning
GPT-3的出色性能在很大程度上歸功于其采用的In-context Learning方法。為了理解In-context Learning,我們先來探討一下元學習(Meta-learning)的概念。元學習的核心思想是通過學習如何學習,來找到一種有效的學習策略或初始化參數,使得模型能夠在新的、未見過的任務上快速適應并取得良好的性能。
In-context Learning是元學習思想的一種具體實現,它允許模型在給定一些示例的情況下,直接通過這些示例來學習并完成任務,而無需顯式地更新模型參數。在GPT-3中,這種學習方式被應用于各種NLP任務中。具體來說,當給定一個新的任務時,我們可以向GPT-3提供少量的示例輸入和對應的輸出(即“上下文”),然后讓GPT-3根據這些示例來推斷并生成針對新輸入的輸出。通過這種方式,GPT-3能夠在不依賴大量有標簽訓練數據的情況下,快速適應并完成各種NLP任務。
GPT-3的In-context Learning能力得益于其巨大的參數量和訓練數據集。通過在大規模無監督文本數據上進行預訓練,GPT-3已經學習到了豐富的語言知識和模式。這使得它能夠在給定少量示例的情況下,快速理解并應用這些知識來完成新任務。同時,GPT-3的巨大參數量也使其具備了強大的表征能力,能夠捕捉并表達復雜的語言現象和語義關系。
除了In-context Learning外,GPT-3還采用了多種先進的技術和策略來提高其性能和泛化能力。例如,GPT-3采用了Transformer架構的變體,并引入了稀疏自注意力機制來降低計算復雜度。此外,GPT-3還使用了混合精度訓練、數據并行等技術來加速訓練過程并減少資源消耗。這些技術和策略共同使得GPT-3成為了一個強大而高效的語言模型。
總結
GPT系列模型的發展歷程展示了預訓練語言模型的強大潛力和廣闊前景。隨著模型容量的不斷增加和訓練數據的不斷擴大,我們可以期待未來會有更加強大和智能的NLP模型出現。
關于我們
本文由ChatMoney團隊出品,ChatMoney專注于AI應用落地與變現,我們提供全套、持續更新的AI源碼系統與可執行的變現方案,致力于幫助更多人利用AI來變現,歡迎進入ChatMoney獲取更多AI變現方案!