主流大語言模型中Token的生成過程本質是串行的

主流大語言模型中Token的生成過程本質是串行的

flyfish

1. 串行生成

  • 自回歸模型的核心邏輯
    大模型(如GPT-2)采用自回歸架構,每個Token的生成必須基于已生成的完整歷史序列。例如,生成“今天天氣很好”時:

    輸入:<start>
    輸出1"今" → 輸入更新:<start>今
    輸出2"天" → 輸入更新:<start>今天
    輸出3"天" → 輸入更新:<start>今天天
    ...(重復或亂碼可能因模型困惑導致)
    

    每個Token的生成必須依賴前一步的結果,形成嚴格的鏈式依賴。

  • 計算與生成的分離
    雖然模型內部的矩陣運算(如注意力計算)通過GPU并行加速,但生成順序必須嚴格串行。例如:

    • 第1步:計算第一個Token的概率分布(基于空輸入)。
    • 第2步:將第一個Token加入輸入,計算第二個Token的概率分布。
    • 依此類推,無法跳過或提前生成后續Token。

例如:

# 假設模型需生成 "ABC"
步驟1:生成A(依賴空輸入)
步驟2:生成B(依賴A)
步驟3:生成C(依賴A+B)

即使步驟1和步驟2的計算在硬件層面并行,生成順序仍必須是A→B→C。

2. 優化方法的局限性

Beam Search等算法通過維護多個候選序列提升效率,但本質仍是串行生成:

# Beam Search示例(Beam Size=2)
步驟1:生成2個候選("今", "天")
步驟2:基于每個候選生成下一個Token(如"今天""氣""天天""氣")
步驟3:依此類推,每次擴展候選序列的長度

每個候選序列的Token仍需按順序生成,無法并行生成整個序列。

import torch
from transformers import GPT2LMHeadModel, GPT2Tokenizer# 加載 GPT-2 模型和分詞器
model_path = r"gpt2"tokenizer = GPT2Tokenizer.from_pretrained(model_path)
model = GPT2LMHeadModel.from_pretrained(model_path)input_text = "Once upon a time"
input_ids = tokenizer.encode(input_text, return_tensors='pt')# 使用 top - k 采樣生成文本
output = model.generate(input_ids,max_length=20,top_k=50,temperature=0.7
)generated_text = tokenizer.decode(output[0], skip_special_tokens=True)
print("生成的文本:", generated_text)

生成的文本: Once upon a time, the world was a place of great beauty and great danger. The world was

import torch
from transformers import GPT2LMHeadModel, GPT2Tokenizer# 加載 GPT-2 模型和分詞器
model_path = r"gpt2"tokenizer = GPT2Tokenizer.from_pretrained(model_path)
model = GPT2LMHeadModel.from_pretrained(model_path)# 輸入文本
input_text = "Once upon a time"
# 對輸入文本進行分詞
input_ids = tokenizer.encode(input_text, return_tensors='pt')# 初始化生成的序列
generated_sequence = input_ids# 定義最大生成長度
max_length = 20print("順序生成的 token:")
for step in range(max_length):# 使用模型進行預測with torch.no_grad():outputs = model(generated_sequence)logits = outputs.logits[:, -1, :]  # 獲取最后一個 token 的預測結果# 選擇概率最大的 tokennext_token_id = torch.argmax(logits, dim=-1).unsqueeze(0)# 將生成的 token 添加到序列中generated_sequence = torch.cat([generated_sequence, next_token_id], dim=-1)# 解碼并打印生成的 token 及其位置next_token = tokenizer.decode(next_token_id[0].item())print(f"步驟 {step + 1}: 生成 token '{next_token}',當前序列長度: {generated_sequence.shape[1]}")# 解碼并打印完整的生成序列
generated_text = tokenizer.decode(generated_sequence[0], skip_special_tokens=True)
print("\n完整生成的文本:", generated_text)
順序生成的 token:
步驟 1: 生成 token ',',當前序列長度: 5
步驟 2: 生成 token ' the',當前序列長度: 6
步驟 3: 生成 token ' world',當前序列長度: 7
步驟 4: 生成 token ' was',當前序列長度: 8
步驟 5: 生成 token ' a',當前序列長度: 9
步驟 6: 生成 token ' place',當前序列長度: 10
步驟 7: 生成 token ' of',當前序列長度: 11
步驟 8: 生成 token ' great',當前序列長度: 12
步驟 9: 生成 token ' beauty',當前序列長度: 13
步驟 10: 生成 token ' and',當前序列長度: 14
步驟 11: 生成 token ' great',當前序列長度: 15
步驟 12: 生成 token ' danger',當前序列長度: 16
步驟 13: 生成 token '.',當前序列長度: 17
步驟 14: 生成 token ' The',當前序列長度: 18
步驟 15: 生成 token ' world',當前序列長度: 19
步驟 16: 生成 token ' was',當前序列長度: 20
步驟 17: 生成 token ' a',當前序列長度: 21
步驟 18: 生成 token ' place',當前序列長度: 22
步驟 19: 生成 token ' of',當前序列長度: 23

自回歸架構是許多大語言模型順序生成Token的根本原因,并且其鏈式依賴特性確實有助于確保生成過程的邏輯連貫性。

自回歸架構與Token生成

  1. 自回歸機制

    • 在自回歸模型中,比如GPT系列模型,生成下一個Token的過程依賴于前面已經生成的所有Token。具體來說,生成第 t t t個Token時,模型會基于前 t ? 1 t-1 t?1個Token來計算概率分布,然后從中采樣或選擇最有可能的下一個Token。
    • 這種鏈式依賴關系(即每個Token的生成依賴于之前的全部或部分Token)保證了文本生成的邏輯一致性和連貫性。
  2. 串行生成 vs 并行生成

    • 串行生成:傳統的大語言模型如GPT系列,在推理階段通常是逐個Token串行生成的。這是因為每個新Token的生成都需要利用到之前所有已生成的Token作為上下文輸入,這種依賴關系限制了并行處理的可能性。
    • 嘗試并行化:盡管存在一些研究和方法試圖提高生成效率,例如通過投機解碼(Speculative Decoding)或者使用多個模型同時預測不同位置的Token,但這些方法并沒有完全改變基本的自回歸生成機制。大多數情況下,核心的Token生成步驟仍然是串行進行的,因為當前Token的生成必須等待前面的Token確定下來才能開始。

3. 數學本質的"自相關性"

自回歸(Autoregressive)模型中的"自",自回歸的核心在于當前輸出僅依賴于自身歷史輸出。用數學公式表示為:
x t = ? 1 x t ? 1 + ? 2 x t ? 2 + ? + ? p x t ? p + ? t x_t = \phi_1 x_{t-1} + \phi_2 x_{t-2} + \dots + \phi_p x_{t-p} + \epsilon_t xt?=?1?xt?1?+?2?xt?2?+?+?p?xt?p?+?t?

  • 自相關性:模型通過自身序列的滯后項( x t ? 1 , x t ? 2 x_{t-1}, x_{t-2} xt?1?,xt?2?等)預測當前值
  • 內生性:所有變量均來自同一序列,區別于普通回歸模型中的外生變量

例如,股票價格預測模型中, x t x_t xt?(今日股價)僅依賴于過去5天的股價( x t ? 1 x_{t-1} xt?1? x t ? 5 x_{t-5} xt?5?),而非外部因素如新聞、財報等。

4. 生成過程的"自我迭代"

在自然語言處理中,這種"自"特性體現為:

  1. 鏈式生成:每個Token的生成必須基于已生成的Token序列
  2. 因果掩碼:Transformer架構中,每個位置i的注意力被限制在1到i-1的位置
  3. 動態更新:每生成一個Token,模型的內部狀態(隱藏層激活值)會被更新

以GPT-2生成句子為例:

輸入:"今天天氣"
生成過程:
1. 預測第一個Token:"很"(基于"今天天氣")
2. 預測第二個Token:"好"(基于"今天天氣很")
3. 預測第三個Token:"啊"(基于"今天天氣很好")

5. 與其他模型的對比

模型類型是否"自"依賴典型應用場景
自回歸模型僅依賴自身歷史文本生成、時間序列預測
非自回歸模型不依賴自身歷史圖像超分辨率、語音識別
混合模型部分依賴自身歷史對話系統(結合外部知識)

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

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

相關文章

基于PySide6的CATIA零件自動化著色工具開發實踐

引言 在汽車及航空制造領域&#xff0c;CATIA作為核心的CAD設計軟件&#xff0c;其二次開發能力對提升設計效率具有重要意義。本文介紹一種基于Python的CATIA零件著色工具開發方案&#xff0c;通過PySide6實現GUI交互&#xff0c;結合COM接口操作實現零件著色自動化。該方案成…

Python——計算機網絡

一.ip 1.ip的定義 IP是“Internet Protocol”的縮寫&#xff0c;即“互聯網協議”。它是用于計算機網絡通信的基礎協議之一&#xff0c;屬于TCP/IP協議族中的網絡層協議。IP協議的主要功能是負責將數據包從源主機傳輸到目標主機&#xff0c;并確保數據能夠在復雜的網絡環境中正…

Python實例:PyMuPDF實現PDF翻譯,英文翻譯為中文,并按段落創建中文PDF

基于PyMuPDF與百度翻譯的PDF翻譯處理系統開發:中文亂碼解決方案與自動化排版實踐 一 、功能預覽:將英文翻譯為中文后創建的PDF 二、完整代碼 from reportlab.lib.pagesizes import letter from reportlab.lib.styles import getSampleStyleSheet, ParagraphStyle

xunruicms失敗次數已達到5次,已被禁止登錄怎么處理?

針對遇到的“xunruicms失敗次數已達到5次&#xff0c;已被禁止登錄”的問題以下是幾種處理方法&#xff1a; 開啟開發者模式&#xff1a; 您可以開啟開發者模式來忽略賬號的禁止登錄限制。具體操作步驟如下&#xff1a; 訪問迅睿CMS的官方文檔&#xff0c;找到如何開啟開發者模…

復現 MODEST 機器人抓取透明物體 單目 ICRA 2025

MODEST 單目透明物體抓取算法&#xff0c;來自ICRA 2025&#xff0c;本文分享它的復現過程。 輸入單個視角的RGB圖像&#xff0c;模型需要同時處理深度和分割任務&#xff0c;輸出透明物體的分割結果和場景深度預測。 論文地址&#xff1a;Monocular Depth Estimation and Se…

新手學習爬蟲的案例

首先你的電腦上肯定已經安裝了python,沒安裝的去官網安裝,我使用的是Pycharm作為操作的IDE 環境準備 安裝必要的庫 爬蟲需要用到requests和beautifulsoup4 使用命令行或者終端運行下面的命令 pip install requests beautifulsoup4 -i https://mirrors.aliyun.com/pypi/sim…

Octave3D 關卡設計插件

課程參考鏈接 這位大佬有在視頻合集中有詳細的講解&#xff0c;個人體驗過&#xff0c;感覺功能很強大 https://www.bilibili.com/video/BV1Kq4y1C72P/?share_sourcecopy_web&vd_source0a41d8122353e3e841ae0a39908c2181 Prefab資源管理 第一步 在場景中創建一個空物體…

【Transformer優化】Transformer的局限在哪?

自2017年Transformer橫空出世以來&#xff0c;它幾乎重寫了自然語言處理的規則。但當我們在享受其驚人的并行計算能力和表征能力時&#xff0c;是否真正理解了它的局限性&#xff1f;本文將深入探討在復雜度之外被忽視的五大核心缺陷&#xff0c;并試圖在數學維度揭示其本質。 …

SpringBoot(一)--搭建架構5種方法

目錄 一、?Idea從spring官網下載打開 2021版本idea 1.打開創建項目 2.修改pom.xml文件里的版本號 2017版本idea 二、從spring官網下載再用idea打開 三、Idea從阿里云的官網下載打開 ?編輯 四、Maven項目改造成springboot項目 五、從阿里云官網下載再用idea打開 Spri…

Python爬蟲實戰:一鍵采集電商數據,掌握市場動態!

電商數據分析是個香餑餑&#xff0c;可市面上的數據采集工具要不貴得嚇人&#xff0c;要不就是各種廣告彈窗。干脆自己動手寫個爬蟲&#xff0c;想抓啥抓啥&#xff0c;還能學點技術。今天咱聊聊怎么用Python寫個簡單的電商數據爬蟲。 打好基礎&#xff1a;搞定請求頭 別看爬蟲…

樂鑫打造全球首款 PSA Certified Level 2 RISC-V 芯片

樂鑫科技 (688018.SH) 榮幸宣布 ESP32-C6 于 2025 年 2 月 20 日獲得 PSA Certified Level 2 認證。這一重要突破使 ESP32-C6 成為全球首款基于 RISC-V 架構獲此認證的芯片&#xff0c;體現了樂鑫致力于為全球客戶提供安全可靠、性能卓越的物聯網解決方案的堅定承諾。 PSA 安全…

圖像滑塊對比功能的開發記錄

背景介紹 最近&#xff0c;公司需要開發一款在線圖像壓縮工具&#xff0c;其中的一個關鍵功能是讓用戶直觀地比較壓縮前后的圖像效果。因此&#xff0c;我們設計了一個對比組件&#xff0c;它允許用戶通過拖動滑塊&#xff0c;動態調整兩張圖像的顯示區域&#xff0c;從而清晰…

tcc編譯器教程2 編譯lua解釋器

本文主要介紹了使用tcc編譯器編譯lua解釋器源碼。 1 介紹 lua是一門編程語言,開源且源碼很容易編譯,我平時用來測試C語言編程環境時經常使用。一般能編譯成功就說明編程環境設置正常。下面用之前設置好的tcc編程環境進行測試。 2 獲取源碼 我一般有保留多個版本的lua源碼進…

Unity DOTS從入門到精通之 自定義Authoring類

文章目錄 前言安裝 DOTS 包什么是Authoring1. 實體組件2. Authoring類 前言 DOTS&#xff08;面向數據的技術堆棧&#xff09;是一套由 Unity 提供支持的技術&#xff0c;用于提供高性能游戲開發解決方案&#xff0c;特別適合需要處理大量數據的游戲&#xff0c;例如大型開放世…

comctl32!ListView_OnSetItem函數分析LISTSUBITEM結構中的image表示圖標位置

第一部分&#xff1a; BOOL ListView_SetSubItem(LV* plv, const LV_ITEM* plvi) { LISTSUBITEM lsi; BOOL fChanged FALSE; int i; int idpa; HDPA hdpa; if (plvi->mask & ~(LVIF_DI_SETITEM | LVIF_TEXT | LVIF_IMAGE | LVIF_STATE)) { …

【算法】大數據查重

大數據查重 哈希表 找出第一個出現重復的數字 || 找所有重復出現的數字 #include <iostream> #include <vector> #include <unordered_map> #include <unordered_set> #include <stdlib.h> #include <time.h> #include <string> …

模型微調-基于LLaMA-Factory進行微調的一個簡單案例

模型微調-基于LLaMA-Factory進行微調的一個簡單案例 1. 租用云計算資源2. 拉取 LLaMa-Factory3. 安裝依賴環境4. 啟動 LLaMa-Factory 界面5. 從 Huggingface 下載模型6. 模型驗證7. 模型微調 1. 租用云計算資源 以下示例基于 AutoDL 云計算資源。 在云計算平臺選擇可用的云計…

【單片機】ARM 處理器簡介

ARM 公司簡介 ARM&#xff08;Advanced RISC Machine&#xff09; 是英國 ARM 公司&#xff08;原 Acorn RISC Machine&#xff09; 開發的一種精簡指令集&#xff08;RISC&#xff09; 處理器架構。ARM 處理器因其低功耗、高性能、廣泛適用性&#xff0c;成為嵌入式系統、移動…

springboot的實體類字段校驗的分組校驗

分組校驗&#xff08;Group Validation&#xff09;允許在不同的場景下對同一個實體類應用不同的校驗規則。例如&#xff0c;在新增數據和更新數據時&#xff0c;可能需要對某些字段的校驗規則進行調整。以下是分組校驗的具體實現步驟&#xff1a; 一、定義分組接口 創建空的標…

vue3,Element Plus中隱藏樹el-tree滾動條

el-tree&#xff0c;節點過多&#xff0c;默認會出現垂直滾動條&#xff0c;顯得不美觀 可以使用隱藏組件 el-scrollbar 將 el-tree 包裹&#xff0c;就可以隱藏垂直滾動條 <el-scrollbar> <el-tree> ... </el-tree> </el-scrollbar> /* 滾動條禁用鼠…