GPT(Generative Pre-trained Transformer)模型架構與損失函數介紹

目錄

一、核心架構:Transformer Decoder

1. 核心組件:僅解碼器(Decoder-Only)的堆疊

2. 輸入表示:Token + 位置

3. 輸出

二、訓練過程:兩階段范式

階段一:預訓練(Pre-training) - 海量數據“讀書”

階段二:微調(Fine-tuning) - 特定任務“輔導”

三、損失函數

1. 數學定義和公式

2. 一個具體的計算例子

3. 為什么這個損失函數如此有效?

4. 在訓練流程中的位置

四、總結與特點


GPT(Generative Pre-trained Transformer)的架構和訓練過程。是一個非常核心的現代人工智能主題,尤其在大語言模型(LLM)領域。

首先,要明確一點:“GPT”已經成為一個系列,從最初的GPT-1到現在的GPT-4,其核心架構思想一脈相承,但規模和能力天差地別。下面的介紹將以經典的GPT-3的架構和訓練為藍本,因為它奠定了當前范式的基礎。

與Deepseek的對比:

DeepSeek模型架構和損失函數介紹-CSDN博客https://blog.csdn.net/qq_54708219/article/details/151335530?sharetype=blogdetail&sharerId=151335530&sharerefer=PC&sharesource=qq_54708219&spm=1011.2480.3001.8118

一、核心架構:Transformer Decoder

GPT的架構基于Transformer模型,但它只使用了Transformer的Decoder部分,并進行了一些修改。這與使用整個Encoder-Decoder結構的模型(如T5)或使用Encoder的模型(如BERT)有顯著區別。以下是其架構的核心組成部分:

1. 核心組件:僅解碼器(Decoder-Only)的堆疊

GPT由N個(對于GPT-3,N=96)完全相同的Transformer Decoder塊堆疊而成。每個塊包含兩個核心子層:

  • 掩碼自注意力層(Masked Self-Attention):

    • 自注意力(Self-Attention): 允許序列中的每個位置(單詞)同時關注到序列中的所有其他位置,從而捕獲豐富的上下文信息。

    • 掩碼(Masking): 這是關鍵!為了確保模型在生成文本時只能“看到”當前位置之前的信息(即過去的詞),而不能“偷看”未來的詞,在計算注意力時會將未來位置的信息屏蔽掉(通常設置為負無窮,經Softmax后變為0)。這保證了模型的自回歸(Autoregressive)?特性,即一個一個地生成下一個詞。

  • 前饋神經網絡層(Feed-Forward Network, FFN):

    • 一個簡單的多層感知機(通常包含一個隱藏層和激活函數,如GELU),對每個位置的表示進行獨立處理和非線性變換。

  • 殘差連接(Residual Connection)和層歸一化(Layer Normalization):

    • 每個子層(注意力、FFN)都被一個殘差連接所包裹,并進行層歸一化。這有助于穩定深度網絡的訓練,防止梯度消失。

2. 輸入表示:Token + 位置

模型接收一串單詞(或子詞,即Token)作為輸入,例如 ["The", "robot", "ate", "the"]。這些Token被轉換為模型可以處理的數值形式:

  • Token嵌入(Token Embedding): 一個可學習的查找表,將每個Token映射為一個高維向量(例如,GPT-3是12288維)。

  • 位置嵌入(Positional Embedding): 由于自注意力機制本身沒有位置信息,需要額外添加可學習的位置編碼向量,告訴模型每個詞在序列中的位置。

Token嵌入向量 + 位置嵌入向量 = 模型的輸入表示。

3. 輸出

序列經過所有Decoder層后,會為序列中的每個位置輸出一個高維向量。最終,這個向量會通過一個線性投影層(Vocabulary Projection)?和一個Softmax層,轉換為整個詞表上的概率分布。

  • 例如,在輸入 ["The", "robot", "ate", "the"] 后,模型會輸出下一個詞的概率分布("apple"的概率可能是0.6,"banana"的概率是0.3,等等)。

  • 模型根據這個概率分布選擇下一個詞(通過采樣或選擇概率最高的詞),并將其追加到輸入中,繼續生成下一個詞,如此循環。


二、訓練過程:兩階段范式

GPT的訓練遵循一個非常成功的兩階段范式:1. 預訓練(Pre-training)?和?2. 微調(Fine-tuning)。這也被稱為“自監督學習”。

階段一:預訓練(Pre-training) - 海量數據“讀書”

目標: 讓模型學習語言的通用知識、語法、事實和推理能力。這是最耗時、最耗費計算資源的階段。

  • 數據: 使用極其龐大的、來自互聯網的文本數據集(如CommonCrawl, WebText, 書籍、期刊等)。GPT-3的訓練數據高達近5000億個Token。

  • 任務:?自回歸語言建模?或?下一個Token預測

  • 過程

    1. 從數據集中隨機抽取一段文本(例如:“人工智能是未來的趨勢。”)。

    2. 輸入模型的是這段文本的前N個詞(例如:“人工智能是未來的”)。

    3. 要求模型預測下一個詞(目標是“趨勢”)。

    4. 將模型的預測(一個概率分布)與真實的下一個詞(“趨勢”的one-hot編碼)進行對比,計算交叉熵損失(Cross-Entropy Loss)

    5. 通過反向傳播和優化器(如AdamW)更新模型的所有參數,讓模型在下一次預測時更準確。

  • 本質: 這是一個無監督學習過程,不需要人工標注。數據本身(下一個詞是什么)就是標簽。通過這個過程,模型學會了語言的統計規律、世界知識以及強大的上下文表示能力。

階段二:微調(Fine-tuning) - 特定任務“輔導”

目標: 讓預訓練好的通用模型適應特定的下游任務(如問答、翻譯、摘要、情感分析等)。

  • 數據: 相對小得多的、高質量人工標注的數據集。例如,對于“情感分析”任務,數據集可能是 {句子:情感標簽} 的配對,如 (“這部電影太精彩了”, “正面”)。

  • 過程

    1. 取預訓練好的GPT模型。

    2. 在其輸出層之上添加一個任務特定的頭(例如,對于分類任務,添加一個線性分類器)。

    3. 使用標注數據,以比預訓練小得多的學習率對整個模型(或部分層)進行繼續訓練。

    4. 此時的目標函數仍然是交叉熵損失,但標簽是任務特定的(如正面/負面)。

  • 創新(Instruction Tuning & RLHF):

    • 對于ChatGPT這樣的對話模型,微調過程更加精細。它采用了指令微調(Instruction Tuning)?和基于人類反饋的強化學習(RLHF)

    • 指令微調: 使用大量(指令,期望回復)的數據對來訓練模型,教會它如何理解和遵循人類的指令。

    • RLHF

      1. 收集人類標注者對于模型多個回復的偏好排序(哪個回復更好)。

      2. 訓練一個獎勵模型(Reward Model)?來學習人類的偏好。

      3. 使用強化學習(如PPO算法)以獎勵模型為指引,進一步優化語言模型的策略,使其生成更符合人類喜好的、更有幫助、更安全的回復。

三、損失函數

GPT訓練的損失函數是標準的交叉熵損失(Cross-Entropy Loss),更具體地說,是用于自回歸語言建模的交叉熵損失。它的核心思想非常簡單:懲罰模型在預測下一個詞時犯的錯誤。模型預測的分布與真實分布差異越大,損失值就越高。

1. 數學定義和公式

對于一個給定的序列(例如一句話)\mathbf{x} = (x_1, x_2, ..., x_T),其中 x_t?是序列中的第 t?個詞元(token)。

訓練目標: 基于之前的所有詞元 x_1, x_2, ..., x_{t-1},最大化真實下一個詞元 x_t?出現的概率。

損失函數?是這個目標的負數對數似然(Negative Log-Likelihood)。

對于單個時間步 t?的損失是:

L_t = -\log P(x_t | x_{1}, x_{2}, ..., x_{t-1}; \Theta)

其中:

  • P(x_t | ...)?是模型在時間步 t?根據上文計算出的、對于詞元?x_t預測概率

  • \Theta?代表模型的所有參數。

  • \log?是自然對數。取對數是數學上的標準做法,可以將連乘轉化為求和,并且懲罰模型對其預測的“不確定性”(即概率很低時,-\log?值會很大)。

整個序列的總損失是所有這些時間步損失的平均值:

L = \frac{1}{T} \sum_{t=1}^{T} L_t = -\frac{1}{T} \sum_{t=1}^{T} \log P(x_t | x_{<t}; \Theta)

這里 x_{<t}?是 x_1, x_{2}, ..., x_{t-1} 的簡寫。

重要提示: 在計算時,模型是并行地處理整個序列,并通過掩碼(Mask)確保在計算位置 t?的注意力時,只能看到 t?之前的位置。因此,雖然計算是并行的,但其數學原理與上述自回歸公式完全等價。

2. 一個具體的計算例子

假設我們有一個非常簡單的序列:["貓", "吃", "魚"],對應的 token ID 是?[231, 792, 583]

  1. 輸入 (Input): 模型接收整個序列?[231, 792, 583]

  2. 目標 (Target): 訓練時,我們希望模型能正確地將輸入序列“偏移一位”進行預測。即:

    • 當輸入是?[231]?時,應預測下一個詞是?792?(吃)。

    • 當輸入是?[231, 792]?時,應預測下一個詞是?583?(魚)。

    • 初始 token 沒有上一個 token,所以從 t=2?開始計算損失。

  3. 模型輸出:

    • 在經過最后的 Linear 層和 Softmax 后,模型會在整個詞表(例如 50,257 個詞)上為每個位置輸出一個概率分布。

    • 假設在位置 t=2(即需要預測“魚”的時刻),模型對正確 token?583?(“魚”) 預測的概率是 P(\text{fish}) = 0.85,而對某個錯誤 token(例如“肉”)的概率是 P(\text{meat}) = 0.05

  4. 計算該時間步的損失:

    L_3 = -\log(P(\text{fish})) = -\log(0.85) \approx 0.1625

    這個損失值很小,因為模型做出了一個高置信度的正確預測。

  5. 如果預測錯誤:如果模型在 t=2?時預測 P(\text{fish}) = 0.1,而 P(\text{meat}) = 0.7,那么損失會是:L_3 = -\log(0.1) \approx 2.3026。這個損失值很大,因為模型做出了一個高置信度的錯誤預測。

  6. 整個序列的損失:
    我們需要計算 t=2(預測“吃”)和 t=3(預測“魚”)兩個時間步的損失,然后求平均。

    • L_2 = -\log(P(\text{eat}))

    • L_3 = -\log(P(\text{fish}))

    • L = \frac{L_2 + L_3}{2}

3. 為什么這個損失函數如此有效?
  1. 直接的代理目標: 能夠準確預測下一個詞,需要模型掌握語法、句法、常識、邏輯推理甚至風格模仿等幾乎所有語言能力。因此,最小化這個損失函數間接地迫使模型學習到了這些豐富的知識。

  2. 可微性(Differentiability): 整個計算過程——從嵌入層到多個Transformer塊,再到最后的線性投影和Softmax——都是完全可微的。這意味著可以通過反向傳播(Backpropagation)?算法,精確地計算出損失函數對模型中每一個參數的梯度,從而通過梯度下降來有效地更新參數。

  3. 信息密集的梯度: 每一次預測錯誤都會產生一個較大的損失信號,這個信號會通過反向傳播有效地分配給了模型中那些導致預測錯誤的參數。這種“責任分配”機制非常高效。

4. 在訓練流程中的位置

這個損失函數是GPT?預訓練(Pre-training)?階段的核心驅動力。它的流程可以概括為:

  1. 從海量文本語料庫中采樣一個批次(batch)的序列。

  2. 將序列輸入模型,獲得模型對所有位置下一個詞的預測分布。

  3. 將模型的預測分布與真實的下一個詞(即目標序列)進行比較,計算整個批次的平均交叉熵損失

  4. 通過反向傳播計算損失相對于所有模型參數的梯度。

  5. 使用優化器(如AdamW)根據梯度更新模型參數。

  6. 重復這個過程數百萬乃至數十億次,直到模型收斂。

微調(Fine-tuning)?階段同樣使用交叉熵損失,但目標不同。例如,在指令微調中,輸入是指令,目標是期望的回復,損失函數計算的是模型生成“回復”部分每個詞時的交叉熵,而“指令”部分的損失通常會被掩碼掉,不參與計算。

特性描述
名稱交叉熵損失(Cross-Entropy Loss)
類型自回歸語言建模損失
核心思想最小化模型預測的下一個詞概率分布與真實分布(一個one-hot向量)之間的差異。
數學公式L = -\frac{1}{T} \sum_{t=1}^{T} \log P(x_t \mid x_{<t}; \Theta)
為何有效是學習語言知識的完美代理任務;完全可微,便于梯度下降優化。
階段主要驅動預訓練,也用于監督微調

總而言之,GPT的損失函數是一個簡潔、優雅而強大的目標,它通過“猜下一個詞”這個簡單游戲,驅動模型學習并掌握了人類語言的復雜規律。

四、總結與特點

特性描述
架構Transformer Decoder-Only,使用掩碼自注意力實現自回歸生成。
核心能力生成(Generative),根據上文預測下一個詞。
訓練范式兩階段:1.?預訓練(海量無標注數據,下一個詞預測);2.?微調(少量標注數據,適應特定任務/對齊人類偏好)。
規模定律模型性能強烈依賴于模型參數量數據量計算量的同步 scaling up。GPT系列的進化史就是一部規模擴大史。
上下文學習GPT-3展現出的強大能力:在不更新參數的情況下,僅通過向模型提供幾個示例(Few-shot)和任務描述,它就能完成新任務。

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

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

相關文章

GitHub 熱榜項目 - 日榜(2025-09-10)

GitHub 熱榜項目 - 日榜(2025-09-10) 生成于&#xff1a;2025-09-10 統計摘要 共發現熱門項目&#xff1a;15 個 榜單類型&#xff1a;日榜 本期熱點趨勢總結 本期GitHub熱榜呈現三大技術熱點&#xff1a;LLM智能體應用爆發&#xff08;如parlant、AutoAgent&#xff09;&a…

論文閱讀:arxiv 2023 Large Language Models are Not Stable Recommender Systems

總目錄 大模型相關研究&#xff1a;https://blog.csdn.net/WhiffeYF/article/details/142132328 https://arxiv.org/pdf/2312.15746 速覽 破解大語言模型在推薦系統中的不穩定性 該論文聚焦于大語言模型&#xff08;LLMs&#xff09;在推薦系統中的應用問題&#xff0c;指出…

Linux的使用——FinalShell下載使用及連接云服務器的教程

一、注冊免費阿里云服務器 1. 進入阿里云服務器官網 阿里云-計算&#xff0c;為了無法計算的價值https://www.aliyun.com/?spm5176.ecscore_server.console-base_top-nav.dlogo.39144df5uvPLOm 2. 點擊免費試用 這里我已經試用過了&#xff0c;大家選擇合適的云服務器點擊立…

如何清理 Docker 占用的巨大磁盤空間

我相信很多人在使用 Docker 一段時間后&#xff0c;都會遇到一個常見問題&#xff1a;磁盤空間被迅速吃光&#xff0c;尤其是在進行頻繁的鏡像構建、測試和運行容器時。以我自己為例&#xff0c;在 Ubuntu 24.04設備上&#xff0c;docker system df -v 一看&#xff0c;Docker …

【CMake】緩存變量

目錄 一. 緩存變量 二.創建緩存變量 2.1.使用set()來創建緩存變量 2.2.使用FORCE參數來覆蓋緩存變量 2.2.1.示例1——不帶force的set是不能覆蓋已經存在的緩存變量的 2.2.2.示例2——帶force的set才能覆蓋已經存在的緩存變量 2.2.3.對比示例 2.3.命令行 -D 創建/覆蓋緩…

vue2使用若依框架動態新增tab頁并存儲之前的tab頁的操作

1. 應用場景&#xff1a;點擊歷史記錄&#xff0c;要比較兩個tab頁的內容時&#xff0c;需要做到切換tab頁來回看左右對數據對比。2.開發難點若依項目正常是把路由配置到菜單管理里&#xff0c;都是設定好的。不過它也給我們寫好了動態新增tab頁的方&#xff0c;需要我們自己來…

論文閱讀-SelectiveStereo

文章目錄1 概述2 模塊2.1 SelectiveIGEV和IGEV的差異2.2 上下文空間注意力2.2.1 通道注意力2.2.2 空間注意力2.3 SRU3 效果參考資料1 概述 本文主要結合代碼對Selective的創新點進行針對性講解&#xff0c;相關的背景知識可以參考我寫的另兩篇文章論文閱讀-RaftStereo和論文閱…

深入分析神馬 M56S+ 202T 礦機參數與性能特點

引言在比特幣&#xff08;BTC&#xff09;和比特幣現金&#xff08;BCH&#xff09;等主流加密貨幣的挖掘過程中&#xff0c;礦機的選擇直接關系到挖礦的效率與收益。神馬 M56S 202T礦機是SHA-256算法的礦機&#xff0c;憑借其強大的算力和高效的能效比&#xff0c;成為了礦工們…

36.2Linux單總線驅動DS18B20實驗(詳細講解代碼)_csdn

想必看過我很多次博客的同學&#xff0c;都知道了編寫驅動的流程&#xff01; 這里我們還是按照以前的習慣來一步一步講解&#xff01; 單總線驅動&#xff0c;在F103和51單片機的裸機開發中是經常見的。 linux驅動代碼編寫實際上就是&#xff0c;端對端的編程&#xff01; 就是…

【雜類】應對 MySQL 處理短時間高并發的請求:緩存預熱

一、什么是緩存預熱&#xff1f;1. 核心概念??緩存預熱&#xff08;Cache Warm-up&#xff09;?? 是指在系統??正式對外提供服務之前??&#xff0c;或??某個高并發場景來臨之前??&#xff0c;??主動??將后續極有可能被訪問的熱點數據從數據庫&#xff08;MySQL…

點評項目(Redis中間件)第三部分短信登錄,查詢緩存

可以直接看后面Redis實現功能的部分基于session實現短信登錄發送短信驗證碼前端請求樣式業務層代碼Service public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements UserService {Overridepublic Result sendCode(String phone, HttpSession se…

線性方程求解器的矩陣分裂

大概思路是對的&#xff0c;但是查老師可能會出現幻覺&#xff0c;小心食用 &#x1f603;這段代碼是在初始化迭代法求解器&#xff0c;構建迭代矩陣和分裂矩陣。以下是詳細解釋&#xff1a; if init_from_func or init_from_input:# 1. 存儲剛度矩陣self.stiff_p stiff_p# 2.…

【Beetle RP2350】雷達模塊 CEM5861G-M11 開發使用指南

一、硬件介紹 1、產品特點 Beetle RP2350【RP2350A_QFN60】是一款基于RP2350微控制器的高性能迷你開發板&#xff0c;雙核雙架構設計&#xff08;支持 Arm Cortex-M33或Hazard3 RISC-V內核&#xff09;為開發者提供靈活的性能配置。 雙核雙架構&#xff0c;性能自由切換 采…

高通Android 13 開機黑屏問題深度剖析與解決方案

1. 問題概述 在 Android 13 系統定制化開發過程中&#xff0c;開機流程的調試與優化頗具挑戰性。一個典型問題是&#xff1a;當開機動畫播放完畢后&#xff0c;設備會先出現數秒黑屏&#xff0c;然后才進入鎖屏界面。本文基于開機日志分析&#xff0c;結合實際項目經驗&#x…

騰訊推出AI CLI工具CodeBuddy,國內首家同時支持插件、IDE和CLI三種形態的AI編程工具廠商

2025年9月9日&#xff0c;騰訊正式推出自研AI CLI工具CodeBuddy code&#xff0c;成為國內首家同時支持插件、IDE和CLI三種形態的AI編程工具廠商。這一創新不僅填補了國內市場在全形態AI編程工具領域的空白&#xff0c;更以編碼時間縮短40%、AI生成代碼占比超50%的硬核數據&…

零基礎學習QT的第二天-組件基礎知識

組件聲明以及設置屬性 所有的組件的基類為&#xff1a;QtObject&#xff0c;在c中名稱為&#xff1a;QObject。 在qml和c名稱有所區別&#xff0c;例如在Qml中QtObject&#xff0c;在C會省略一個t(QObject) 聲明組件的方式&#xff1a; 組件名 {屬性名:值}在實際應用中&#xf…

像素圖生成小程序開發全解析:從圖片上傳到Excel圖紙

像素圖生成小程序開發全解析&#xff1a;從圖片上傳到Excel圖紙 前言 在數字化創作和工藝設計領域&#xff0c;像素圖生成工具具有廣泛的應用價值&#xff0c;無論是十字繡設計、LED燈陣布置還是復古游戲美術創作。本文將詳細解析一個功能完整的像素圖生成小程序的開發過程&…

mac-intel操作系統go-stock項目(股票分析工具)安裝與配置指南

1. 項目基礎介紹 go-stock 是一個基于Wails和NaiveUI開發的AI賦能股票分析工具。旨在為用戶提供自選股行情獲取、成本盈虧展示、漲跌報警推送等功能。它支持A股、港股、美股等市場&#xff0c;能夠進行市場整體或個股的情緒分析、K線技術指標分析等功能。所有數據均保存在本地…

spring-單例bean是線程安全的嗎

其中可修改的成員變量有線程不安全問題&#xff0c;不可修改的無狀態的 userService是沒有線程安全問題的 spring框架中有一個 Scope注解&#xff0c;默認的值就是singleton&#xff0c;單例的。 不是線程安全的&#xff0c;一般來說&#xff0c;我們在bean中注入的對象都是無狀…

CM1033系列 3串鋰電池保護IC - 高精度±25mV 內置延時 多型號可選(含鐵鋰)

1. 核心亮點 高精度多重保護&#xff1a;專為3串電池組設計&#xff0c;提供過充、過放、三級過流&#xff08;含短路&#xff09;、充電過流及斷線檢測等全方位保護&#xff0c;電壓檢測精度高達25mV。超低功耗&#xff1a;工作電流典型值僅7μA&#xff0c;休眠電流低至4μA&…