【AI模型學習】GPT——從v1到v3

文章目錄

    • GPT-1
    • GPT vs BERT
    • GPT-2
    • GPT-3
    • Ai代碼

GPT-1

GPT-1(Generative Pretrained Transformer 1)是 OpenAI 在2018年發布的第一個大規模預訓練生成模型。它開創了基于 Transformer預訓練-微調 (pretraining-finetuning) 框架,在自然語言處理(NLP)領域產生了深遠影響。

1. GPT-1的架構:基于Transformer解碼器

GPT-1使用了 Transformer 架構的解碼器部分。與其他NLP模型(如BERT,使用編碼器)不同,GPT-1采用了自回歸模型,通過 逐步生成 下一個詞匯來學習語言的結構。

  • 自回歸模型:每次生成一個新詞時,模型依賴于前面已經生成的單詞,這樣保證了生成的連貫性。
  • 解碼器部分:GPT-1只使用了Transformer的解碼器,因此它在生成時只能依賴于之前的文本,而不能看到未來的文本。

2. GPT-1的預訓練任務:自回歸語言建模

GPT-1的預訓練任務自回歸語言建模。在這個任務中,模型通過給定前文來預測下一個詞

訓練過程

  • 給定一段文本,模型通過最大化每個詞的條件概率來進行訓練。即:
    P ( x t ∣ x 1 , x 2 , . . . , x t ? 1 ) P(x_t | x_1, x_2, ..., x_{t-1}) P(xt?x1?,x2?,...,xt?1?)
    其中, x t x_t xt? 是模型需要預測的下一個詞,而 x 1 , x 2 , . . . , x t ? 1 x_1, x_2, ..., x_{t-1} x1?,x2?,...,xt?1?是前面已經生成的詞。

3. 預訓練

GPT-1在BooksCorpus數據集上進行了預訓練。這個數據集包含大約 7000 本小說,總共約 1.2 億個單詞。通過這個海量數據,GPT-1學會了語法結構、語義聯系以及文本的各種潛在模式。

完成預訓練后,GPT-1進入了微調階段,這時候模型開始根據任務進行調整。微調是在特定的下游任務(如文本分類、命名實體識別、問答等)上進行的。

  • 在微調階段,GPT-1依靠少量的標注數據,對已經學到的通用語言表示進行調整,以適應特定任務。
  • 微調使得GPT-1能夠靈活適應多種任務,只需對參數進行少量調整即可。

4. GPT-1的模型規模與訓練

  • 參數量:GPT-1的模型包含 1.1 億個參數,相對于后來的GPT-2和GPT-3來說規模較小,但它仍然在當時的許多任務中展現出了強大的能力。
  • 訓練方法:GPT-1使用了Adam優化器交叉熵損失函數進行訓練,通過反向傳播優化模型參數,使得模型能夠準確預測下一個詞。

GPT vs BERT

  1. 預訓練目標:自回歸 vs 遮蔽語言建模
  • GPT(自回歸語言建模)

    • GPT采用的是自回歸語言建模(Autoregressive Language Modeling)。它的目標是通過上下文的前文(左側詞匯)來預測下一個詞,生成一個接一個的詞匯。因此,GPT是單向的,它只能利用已經生成的詞來預測下一個詞。
    • 特點:適合生成任務,如文本生成、對話生成等。
  • BERT(遮蔽語言建模)

    • BERT使用的則是遮蔽語言建模(Masked Language Modeling, MLM)。它在訓練時會隨機遮蔽輸入文本中的一些單詞,然后讓模型根據前后文的信息預測被遮蔽的詞。也就是說,BERT是雙向的,可以同時考慮前文和后文的信息。
    • 特點:適合理解任務,如問答、文本分類、命名實體識別(NER)等。

BERT的雙向上下文使得它能夠在訓練時考慮到整個文本的前后關系,這讓BERT能更好地理解文本的語義和句法結構。想象一下,BERT不僅能看到句子中的前文,還能同時理解后文的意義。而GPT,雖然也能理解前文的內容,但無法像BERT那樣同時利用后文的信息。這個差異讓BERT在處理理解類任務時表現得非常強大,而GPT則更偏向于生成任務。

2. 微調策略:

  • GPT的微調

    • GPT的微調比較簡單,因為它是基于解碼器的自回歸模型,因此微調時更多依賴于生成任務的調整。GPT通常在文本生成、對話生成等任務上進行微調。
    • GPT的微調需要依賴較多的上下文來生成連續的文本,適合那些需要逐字生成的任務。
  • BERT的微調

    • BERT的微調則更加多樣化,因為它的訓練本身是基于雙向上下文的,微調時只需要少量的標注數據,就能快速適應任務。例如,它可以被用來進行文本分類、問答、命名實體識別等任務,而不需要像GPT那樣逐步生成文本。
    • 這種基于雙向上下文建模的微調方式,使得BERT在各種理解任務中取得了很好的效果!

3. 在標準任務上的表現:

BERT發布時,它迅速在多個標準任務上大幅超越了GPT-1,尤其是在理解類任務(如GLUE基準測試)中:

  • GLUE基準測試:這是一個包含多個NLP理解任務的基準測試,包括文本分類、問答、情感分析等。BERT在這個測試中的表現超越了所有之前的模型(包括GPT-1),因為它能夠在任務中充分利用雙向上下文,從而理解文本中的深層含義。

  • GPT-1的表現:雖然GPT-1在一些生成任務上非常強大,但在理解任務(如文本分類、問答)上,GPT-1的表現并不突出,甚至在GLUE等任務上落后于BERT。

關于解碼器編碼器
解碼器編碼器使用的 mask 是不同的。這兩個組件使用 mask 的方式有非常重要的差異,直接影響了模型的能力和任務的適用性。

1. 解碼器的 Mask: 自回歸生成的 Mask

在 GPT 系列中,解碼器使用了一個特別的 mask —— 遮蔽自注意力(Masked Self-Attention)。這個 mask 的作用是確保模型在生成每個詞時 只能看到當前詞及其前面的詞,而 不能看到未來的詞。這正是自回歸生成模型的特性,確保了生成過程的順序性

假設我們有一個長度為 T T T的輸入序列,GPT 模型在生成每個詞時使用的 mask 是一個 下三角矩陣,如下所示:

( 1 0 0 … 0 1 1 0 … 0 1 1 1 … 0 ? ? ? ? ? 1 1 1 … 1 ) \begin{pmatrix} 1 & 0 & 0 & \dots & 0 \\ 1 & 1 & 0 & \dots & 0 \\ 1 & 1 & 1 & \dots & 0 \\ \vdots & \vdots & \vdots & \ddots & \vdots \\ 1 & 1 & 1 & \dots & 1 \end{pmatrix} ?111?1?011?1?001?1???000?1? ?

  • 1 表示這個位置是可以訪問的。
  • 0 表示這個位置被 遮蔽,不能被訪問。

這種方式確保了生成時每個位置只能依賴它之前的位置,避免了泄漏未來的信息。

2. 編碼器的 Mask: 雙向上下文的 Mask

與解碼器的情況不同,編碼器 使用的 mask 主要是為了實現 雙向上下文建模,而不需要像解碼器那樣遮蔽未來的信息。

BERT 和類似的編碼器模型(如Transformer編碼器)使用雙向的上下文來理解每個詞的含義。這意味著編碼器必須能夠同時查看前文和后文的所有信息,捕捉輸入序列中的全局依賴

同時,編碼器中有一個特殊的 mask(Masking),通常用于 遮蔽一些詞匯,目的是讓模型在訓練時學習到如何利用上下文來預測這些被遮蔽的詞匯。與解碼器的 mask 不同,編碼器的 mask 主要作用是在訓練時對輸入序列進行遮蔽,以進行語言建模或序列填充。


GPT-2

GPT-1取得一定的成功后,OpenAI的研究團隊看到了一個更大的目標:通過提升模型的規模與能力,GPT-2不僅要在生成任務上更強大,還要在理解任務上挑戰當時已經在理解任務中表現極為出色的 BERT

GPT-2的設計:自回歸生成模型

GPT-2繼承了GPT-1的架構,基于 Transformer解碼器自回歸模型意味著它通過上下文信息(主要是前文)逐步預測下一個詞,逐字逐句地生成文本。每次生成時,GPT-2都會基于前面生成的詞來預測下一個詞。

  • 訓練目標:和GPT-1一樣,GPT-2的預訓練任務是自回歸語言建模,即通過給定上下文來預測下一個詞。

  • 訓練數據:GPT-2使用了大規模的 WebText 數據集,它包含了大量來自互聯網上的文本,包括新聞文章、博客、維基百科等。這個數據集的規模比GPT-1使用的BooksCorpus大得多,達到了40GB的文本數據。

然而,事實并不如預期!

雖然GPT-2在生成任務上表現得非常強大,它能夠生成流暢、自然的文本,但在理解任務(如問答、情感分析、文本分類)上,GPT-2并沒有完全超越BERT

  • BERT的優勢:BERT使用的是雙向上下文建模,通過遮蔽語言模型(Masked Language Modeling,MLM)訓練,讓模型在訓練時同時看到前文和后文的上下文信息,這使得BERT能夠更好地理解每個詞的語義關系。BERT在問答、情感分析等理解任務上,憑借雙向上下文的優勢,表現得異常強大。

  • GPT-2的局限:盡管GPT-2的生成能力非常強大,但它仍然是自回歸的單向生成模型,每次生成一個詞時,它只能利用前文的上下文,無法像BERT那樣同時看到前后的信息。這使得GPT-2在理解任務中無法像BERT那樣精確捕捉句子中詞與詞之間的深層關系。

Zero-shot學習的突破!

Zero-shot學習是指在沒有專門為特定任務進行微調的情況下,模型能夠僅憑任務描述少量示例來理解并執行任務。GPT-2通過Zero-shot學習,不僅展現了生成任務的強大能力,還能在各種理解任務上取得令人驚嘆的效果。

  1. 任務無需微調: 在傳統的預訓練-微調框架中,模型需要針對每個特定任務進行微調(例如,情感分析、命名實體識別等),并且需要大量的標注數據。但在Zero-shot學習中,GPT-2無需在特定任務上進行微調,也不需要特定任務的標注數據。

  2. 模型的靈活性: 通過Zero-shot學習,GPT-2能夠靈活應對各種自然語言處理任務。這不僅大大減少了訓練成本,還能在多種任務之間輕松切換,使得GPT-2成為一個真正的“通用任務執行者”。

  3. 降低數據需求: Zero-shot學習的能力使得GPT-2在處理不同任務時不需要大量的標注數據,它依靠之前的無監督預訓練,已經學到了豐富的語言模式。無論是文本分類、情感分析,還是問答任務,只需給定任務描述,GPT-2便能勝任。

在Zero-shot學習中,GPT-2能夠通過任務描述來理解任務并生成答案。任務描述可以是自然語言的指令問題描述,這使得GPT-2能夠直接根據語言描述來執行任務,而不需要額外的標注數據。


GPT-3

GPT-3(Generative Pretrained Transformer 3)是 OpenAI 在 2020 年發布的一個超大規模預訓練語言模型。它繼承了 GPT-1GPT-2 的架構和預訓練方法,但在規模能力上都達到了前所未有的高度。

GPT-3的規模:1750億個參數!

GPT-3 的核心特點之一就是 超大規模!它的參數量達到了 1750億個,是 GPT-2(15億參數)的 100倍!這個巨大規模的模型能夠理解和生成更加復雜、更加連貫的語言。

  • GPT-3的規模: 1750億個參數
  • GPT-2的規模: 15億個參數

這一規模使得 GPT-3 不僅在 生成任務 上表現出色,在 理解任務 上的能力也得到了極大的提升。規模的增加意味著 GPT-3 在處理文本時能夠捕捉到更多的語言特征、上下文關系以及更復雜的推理能力。

GPT-3的訓練:大數據,強計算

GPT-3 是在 大量數據強大計算資源 上訓練出來的。與GPT-2使用的WebText數據集不同,GPT-3的訓練數據集規模更大,包含了各種公開的互聯網文本資源,如書籍、文章、網站等。這個龐大的數據集為GPT-3提供了豐富的語言模式和知識,讓它能夠應對更多樣化的任務。
GPT-3使用了一個超過45TB的文本數據,涵蓋了廣泛的主題和領域。這些數據的多樣性幫助它在多個領域中取得良好的表現,無論是文學創作、科學討論,還是編程代碼生成,它都能夠生成高質量的內容。

GPT-3的訓練需要極其龐大的計算資源,通過數千個GPU進行訓練,使用的計算能力堪比超大規模的超級計算機。正因為如此,GPT-3的計算能力和推理能力也遠超此前的版本。

GPT-3 不僅僅是 Zero-shot 任務的佼佼者,它在 Few-shot學習 上也非常強大。Few-shot學習 是指模型在給定少量示例的情況下執行任務,而 Zero-shot學習 則是指模型直接從任務描述進行推理并執行任務。

  • GPT-3 在理解和執行任務時,能夠僅通過任務描述來完成任務。例如,給定一段簡單的描述:“根據下面的文本判斷它是積極的還是消極的”,GPT-3可以直接根據文本生成情感分析的結果,完全不需要微調。

  • 它的能力遠遠超過了GPT-2,因為它不僅能在生成任務上發揮出色,還能在理解任務上(如推理、問答、文本分類等)直接根據描述執行任務。

Zero-shotFew-shot learning 上,GPT-3展示了它強大的推理能力。它能夠處理各種各樣的任務,如:

  • 文本分類
  • 情感分析
  • 翻譯
  • 代碼生成
  • 問題回答

由于GPT-3的強大能力,它已經在多個領域和應用中展現了巨大的潛力。以下是一些典型的應用場景:

(1)自然語言生成
(2)問答系統
(3)編程助手
(4)翻譯
(5)創意生成


Ai代碼

1. Codex

Codex 是由 OpenAI 開發的程序生成模型,基于 GPT-3 架構,專門用于將自然語言轉化為代碼。

Codex的關鍵特點:

  • 自然語言轉代碼:Codex能夠理解自然語言描述并生成相應的代碼。例如:“編寫一個計算數字平方的函數”,Codex會生成對應的Python代碼。
  • 多編程語言支持:Codex支持包括 PythonJavaScriptJavaGoRuby 等多種編程語言。
  • 代碼補全與自動化編程:Codex能夠根據部分輸入自動補全代碼,甚至可以根據需求生成整個程序,減少開發者的工作量。
  • 代碼翻譯:Codex能夠將一種語言的代碼翻譯成另一種編程語言,比如將Python代碼轉換為JavaScript。

Codex應用:

  • 編程助手:通過集成到 GitHub Copilot 等工具,Codex幫助開發者自動化編程任務,提高編程效率。
  • 低代碼開發:Codex能夠自動生成代碼,幫助非專業開發者通過自然語言描述快速創建應用。

2. AlphaCode

AlphaCode 是由 DeepMind 開發的專注于 編程競賽 的程序生成模型,旨在解決高難度編程問題,尤其是編程競賽中的算法挑戰。

AlphaCode的關鍵特點:

  • 多樣化生成方案:AlphaCode生成多個候選代碼解決方案,并從中篩選出最優解。這種方法幫助它應對復雜的編程題目。
  • 理解問題描述并推理:AlphaCode通過解析編程問題的自然語言描述,推理出問題的解決方案,并生成對應的代碼。
  • 解決高難度編程問題:專門針對像 ACM ICPC 這樣的編程競賽任務,AlphaCode能夠生成高質量的解法并與人類開發者競爭。

AlphaCode應用:

  • 編程競賽:AlphaCode能夠解決 編程競賽 中的高難度問題,生成符合要求的算法解決方案。
  • 自動化編程:對于復雜的編程任務,AlphaCode可以生成多個解法,提供最佳的編程解決方案。

Codex vs AlphaCode:對比總結

特征CodexAlphaCode
目標任務自動生成代碼、代碼補全、代碼翻譯等解決編程競賽中的復雜編程問題,模擬編程競賽中的解題過程
核心技術基于GPT-3,專注于自然語言生成代碼基于多樣化生成策略,專注于解決高難度編程問題
編程語言支持支持多種編程語言,如Python、JavaScript等主要專注于解決復雜編程問題,支持多種編程語言
應用場景編程助手、自動化開發、低代碼開發平臺編程競賽、自動化編程挑戰
生成方式生成高質量代碼并提供代碼補全生成多種候選代碼,選擇最佳解決方案

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/79044.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/79044.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/79044.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

數字智慧方案6178丨智慧醫院醫療信息化建設之以評促建(61頁PPT)(文末有下載方式)

資料解讀:智慧醫院醫療信息化建設之以評促建 詳細資料請看本解讀文章的最后內容。 在當今數字化時代,醫療行業正經歷著深刻變革,智慧醫院的建設成為提升醫療服務質量、優化醫療資源配置的關鍵所在。這份智慧醫院醫療信息化建設之以評促建的資…

淺談C# record關鍵字

環境:.net8控制臺 init關鍵字 通常我們會有一個常見的需求就是需要實現一個實例化后不可變的類型. 我通常會如下實現,將類的屬性的set設為私有,這樣只能使用構造函數來實例一個不可變對象. 但是如果內部再聲明一個public的方法還是有可能會將我這個對象改變. internal class…

實時數倉dim層設計的一些疑惑點

0.dim層組件的選擇 dim層存儲要求:需要滿足永久存儲(需要長期保存歷史數據)和支持根據主鍵查詢單條數據明細,所以排除Kafka(時效短); 候選框架:MySQL、Redis、Hive、Doris、HBase …

模型之FIM(Fill-In-the-Middle)補全

文章目錄 模型之FIM(Fill-In-the-Middle)補全什么是FIM(Fill-In-the-Middle)FIM 的工作原理FIM 示例:代碼補全場景常見模型fim 測試deepseek fim阿里completions 接口要判斷模型是否支持特定的特殊標記**1. 模型可以自動推斷生成區域****2. `suffix` 是可選的****3. 模型的…

使用CubeMX新建DMA工程——存儲器到外設模式

目錄 1、新建板級支持包 1、usart.c: 2、修改的地方:在usart.c中添加了這些 3、usart.h: 4、在usart.h中添加了這些: 5、dma.c: 6、dma.h: 2、修改main.c文件 1、在main.c文件中添加頭文件 2、添加外部變量聲明 3、添加簡單延時函數 4、添加…

el-transfer穿梭框數據量過大的解決方案

一:背景 我們這個穿梭框獲取的是項目的全量數據,在左邊大概有5000條,自己測試了一下5000條數據的效果,發現異常的卡頓,本來打算像el-select一樣去解決的(只顯示一部分,在搜索的時候去全量搜索&a…

2025年- H17-Lc125-73.矩陣置零(矩陣)---java版

1.題目描述 2.思路 (1)計算矩陣的行數 (2)計算矩陣的列數 (3)設計一個行列的bool數組 (4)遍歷矩陣(二維數組),如果遇到元素0,則把…

Qt二維碼demo

使用QZXing庫生成的二維碼demo 運行結果 實現代碼 c文件 #include "mainwindow.h" #include "ui_mainwindow.h" #include "src/myqrcodeheader.h"MainWindow::MainWindow(QWidget *parent) :QMainWindow(parent),ui(new Ui::MainWindow) {ui-&…

怪物獵人:世界-冰原10000+mod整合包5月最新更新!

700A大全套精美服裝 800M大全套精美服裝 3月31日更新 新增 新武器 新特效MOD 當前共計5800MOD整合包 好看的發型mod 實用的功能mod 炫酷的武器mod 新服裝新特效新武器實用模組美化,等。 1月14日更新 新增皮膚MOD 500 當前共計2000MOD 1月16日更新 新增超…

華納云:centos如何實現JSP頁面的動態加載

JSP(JavaServer Pages)作為Java生態中常用的服務器端網頁技術,具有動態內容生成、可擴展性強、與Java無縫結合等優勢。 而CentOS作為一款穩定、高效、安全的Linux服務器操作系統,非常適合部署JSP應用。 想要讓JSP頁面實現動態更新加載,避免…

gradle-tasks.register(‘classesJar‘, Jar)解析

在使用gradle作為構建工具的android或者java web項目中,我們經常能遇到以下格式 tasks.register(classesJar, Jar) {from "$buildDir/intermediates/javac/release/classes" // 假設使用 release 構建變體 }artifact sourcesJar使用偽代碼解釋 class Cu…

數據處理1

一、常用數據處理模塊Numpy Numpy常用于高性能計算,在機器學習常常作為傳遞數據的容器。提供了兩種基本對象:ndarray、ufunc。 ndarray具有矢量算術運算和復雜廣播能力的快速且節省空間的多維數組。 ufunc提供了對數組快速運算的標準數學函數。 ndar…

電力市場的交易品種

雙邊交易(Bilateral Trading) 定義:是電力市場中最基本的交易方式之一,指具備市場交易資格的買方和賣方,通過自主協商、雙邊協商的形式,確定交易電量、交易價格、交割曲線等交易要素,并簽訂中長…

uniapp 實現時分秒 分別倒計時

效果 <view class"issue-price-countdown"> <CountDown :endTimestamp"1745996085000"></CountDown> </view> 引入組件 import CountDown from /components/CountDown.vue; <template> <view class&qu…

從CRUD到復雜業務:AI自動生成電商優惠券疊加邏輯(新手救星指南)

在 Java 編程的廣闊天地中,據統計,高達 80% 的新手會在業務邏輯編寫環節陷入困境。業務邏輯作為軟件系統的核心靈魂,承載著從用戶需求到代碼實現的關鍵轉化過程,為何卻成為新手難以逾越的 “鴻溝”?飛算 JavaAI 的出現,又將如何打破這一僵局? 一、Java 新手卡在業務邏輯的根…

23頁PDF | 數據治理實施方案 :規劃、執行、評價、改進四步走的管控模式

在當今數字化時代&#xff0c;數據已經成為企業和組織的核心資產之一。然而&#xff0c;隨著數據量的不斷增長和數據來源的日益多樣化&#xff0c;數據治理變得愈發重要。有效的數據治理能夠確保數據的質量、安全和合規性&#xff0c;提升數據的價值和利用效率。那么&#xff0…

curl詳解

curl 是一個常用的命令行工具&#xff0c;用于發送 HTTP 請求&#xff0c;支持包括 GET、POST、PUT、DELETE 等在內的多種 HTTP 方法。它非常適合用來測試 API、下載文件、與后端服務進行交互等。接下來&#xff0c;我會詳細講解 curl 的基本用法以及常見的應用場景。 &#x…

Win11安裝Ubuntu20.04簡記

寫在前面 之前裝的22.04&#xff0c;不穩定&#xff0c;把22.04卸載了&#xff0c;重新安裝20.04系統。這里主要把卸載和安裝的過程中參考到的博客在這記錄一下。 卸載ubuntu系統參考的博文 卸載參考博文1 卸載參考博文2 Ubuntu20.04安裝參考博文 安裝參考博文1 安裝參考博…

云原生 | K8S中數據存儲之StorageClass

在一個大規模的Kubernetes集群里,可能有成千上萬個PVC,這就意味著運維人員必須實現創建出這個多個 PV,此外,隨著項目的需要,會有新的PVC不斷被提交,那么運維人員就需要不斷的添加新的,滿足要求的PV,否 則新的Pod就會因為PVC綁定不到PV而導致創建失敗。而且通過 PVC 請求到一定的…

基于Hadoop大數據技術音樂推薦系統數據分析與可視化(基于Spark和Hive的音樂推薦系統數據分析與可視化)基于Python的音樂推薦系統數據分析與可視化

基于Hadoop大數據技術音樂推薦系統數據分析與可視化&#xff08;基于Spark和Hive的音樂推薦系統數據分析與可視化&#xff09;基于Python的音樂推薦系統數據分析與可視化 1. 開發工具和實現技術 Pycharm, Python3.7&#xff0c;Django框架&#xff0c;Hadoop&#xff0c;Spar…