初學Transformer架構和注意力機制

文章目錄

  • 說明
  • 一 LLM 簡介
  • 二 Transformer 架構
    • 2.1 Transformer的架構組成
      • 2.1.1 輸入嵌入 (Input Embedding)
      • 2.1.2 編碼器 (Encoder) 的結構
      • 解碼器 (Decoder) 的結構
      • 2.1.3 輸出層 (Output Layer)結構
    • 2.2 編碼和解碼器的獨立輸入理解
  • 三 注意力機制

說明

  • 本文適合初學者,大佬請路過。

一 LLM 簡介

  • 大預言模型(Large Language Models、LLM)是一種由包含數百億以上參數的深度神經網絡構建的語言模型,使用自監督學習方法通過大量無標注文本進行訓練。
  • GPT(GenerativePre-trainedTransformer)是一種大語言模型,是生成式人工智能的重要框架。GPT模型是基于Transformer架構的人工神經網絡,在未標記文本的大型數據集上進行預訓練,能夠生成新穎的類人內容。
  • 大語言模型的應用領域非常廣泛,涵蓋機器翻譯、摘要生成、對話系統、文本自動生成等諸多領域。然而,大語言模型的使用也存在一些挑戰和問題。首先,雖然大語言模型能夠生成高度連貫和自然的文本,但沒有自我意識和理解能力。其次,大語言模型的大規模訓練數據集也使得其模型龐大而復雜,對計算資源要求較高,導致訓練和部署成本相對較高。

二 Transformer 架構

  • 自然語言處理(Natural Language Processing,NLP)技術的發展是一個逐步迭代和優化的過程。Transformer的出現標志著自然語言處理進入一個新時代,特別是隨著BERT和GPT等模型的推出,大幅提升了自然語言的理解和生成能力。
  • Transformer架構是一種基于注意力機制的深度學習模型,由谷歌的研究人員在2017年提出,被廣泛應用于自然語言處理任務,如機器翻譯、文本分類、情感分析等。
  • 目前的聊天模型都是基于Transformer架構開發的。ChatGPT的后端是基于GPT模型的,GPT模型通過在大規模文本數據上進行無監督預訓練來學習語言的統計特征和語義。它使用自回歸的方式,即基于前面已經生成的詞來預測下一個詞,來學習詞之間的語義和語法關系,以及句子和文本的整體上下文信息。

  • Transformer架構由編碼器(Encoder)和解碼器(Decoder)組成,其中編碼器用于學習輸入序列的表示,解碼器用于生成輸出序列。GPT主要采用了Transformer的解碼器部分,用于構建語言模型。

2.1 Transformer的架構組成

在這里插入圖片描述

2.1.1 輸入嵌入 (Input Embedding)

  • 在Transformer模型中,首先對輸入文本進行處理以得到合適的文本表示。因為計算機無法直接處理自然語言,它需要將我們的輸入轉換為它能理解的數學形式,換言之,他會把每個詞或字符編碼成一個特定的向量形式。
  • 輸入嵌入(input Embedding):文本中的每個單詞都被轉換為一個高維向量,這個轉換通常是通過預訓練的詞嵌入模型(如Word2Vec、GloVe等)完成的。
  • 位置嵌入(Positional Embedding):標準的Transformer模型沒有內置序列順序感知能力,因此需要添加位置信息。這是通過位置嵌入完成的,它與詞嵌入具有相同的維度,并且與詞嵌入相加。

  • 輸入序列:模型接收一個 token 序列作為輸入,例如 “I love NLP”。
  • 嵌入查找
    • 每個 token 通過查找嵌入矩陣被轉換為一個 d_model 維的向量。
    • 嵌入矩陣的維度為 (vocab_size, d_model),其中 vocab_size 是詞匯表大小。
  • 位置編碼添加
    • 生成與輸入序列長度相同的位置編碼矩陣,維度為 (seq_len, d_model)。
    • 位置編碼與 token 嵌入逐元素相加,得到最終的輸入表示。

數學表示 X = Embedding ( i n p u t ) + PositionalEncoding X = \text{Embedding}(input) + \text{PositionalEncoding} X=Embedding(input)+PositionalEncoding

2.1.2 編碼器 (Encoder) 的結構

  • 每個編碼器層包含以下子層:多頭自注意力機制 (Multi-Head Self-Attention)、前饋神經網絡 (Feed-Forward Network)

  1. 多頭自注意力機制 (Multi-Head Self-Attention)
  • 線性變換:輸入 X 通過三個不同的線性層生成 Q (查詢)、K (鍵)、V (值) 矩陣。每個頭的維度為 d k = d m o d e l / h d_k = d_model / h dk?=dm?odel/h,其中 h 是頭數。

  • 注意力計算:計算縮放點積注意力: Attention ( Q , K , V ) = softmax ( Q K T d k ) V \text{Attention}(Q, K, V) = \text{softmax}(\frac{QK^T}{\sqrt{d_k}})V Attention(Q,K,V)=softmax(dk? ?QKT?)V。并行計算 h 個注意力頭,將結果拼接后通過線性層投影。

  • 殘差連接和層歸一化 X attention = LayerNorm ( X + Attention ( X ) ) X_{\text{attention}} = \text{LayerNorm}(X + \text{Attention}(X)) Xattention?=LayerNorm(X+Attention(X))

  1. 前饋神經網絡 (Feed-Forward Network)
  • 兩層線性變換:第一層將維度從 d_model 擴展到 d_ff (通常 2048 或 4096)。第二層將維度壓縮回 d_model。之間使用 ReLU 激活函數。
  • 殘差連接和層歸一化 X out = LayerNorm ( X attention + FFN ( X attention ) ) X_{\text{out}} = \text{LayerNorm}(X_{\text{attention}} + \text{FFN}(X_{\text{attention}})) Xout?=LayerNorm(Xattention?+FFN(Xattention?))

解碼器 (Decoder) 的結構

  • 每個解碼器層包含三個子層:掩碼多頭自注意力 (Masked Multi-Head Self-Attention)、編碼器-解碼器注意力 (Encoder-Decoder Attention)

  1. 掩碼多頭自注意力 (Masked Multi-Head Self-Attention)的掩碼機制:防止解碼器在訓練時"偷看"未來的 token;通過將未來位置的注意力分數設置為 -∞ 實現。
  • 計算過程:與編碼器自注意力類似,但增加了掩碼。
  1. 編碼器-解碼器注意力 (Encoder-Decoder Attention):Q 來自解碼器,K 和 V 來自編碼器的最終輸出;允許解碼器關注輸入序列的相關部分。
  2. 前饋神經網絡:結構與編碼器中的前饋網絡相同。

2.1.3 輸出層 (Output Layer)結構

  • 線性投影:將解碼器輸出投影到詞匯表大小的維度。
  • Softmax 激活:生成每個 token 的概率分布。 P ( w ) = softmax ( W o X decoder + b o ) P(w) = \text{softmax}(W_o X_{\text{decoder}} + b_o) P(w)=softmax(Wo?Xdecoder?+bo?)

2.2 編碼和解碼器的獨立輸入理解

  • 對于Transformer的輸入處理部分,從架構圖上編碼器和解碼器部分都有輸入,因為在Transformer模型中,編碼器(Encoder)和解碼器(Decoder)各自有獨立的輸入。通常,在有監督學習的場景下,編碼器負責處理輸入樣本,而解碼器負責處理與之對應的標簽,這些標簽在進入解碼器之前同樣需要經過適當的預處理,這樣的設置允許模型在特定任務上進行有針對性的訓練。

三 注意力機制

  • 注意力機制就如字面含義一樣,就像我們生活中一樣,當開始做某一個事情時,通常會集中注意力在某些關鍵信息上,從而忽略其他不太相關的信息。對于計算機來說,transformer就是通過注意力機制解析上下文和理解不同語義之間的關系。
    在這里插入圖片描述
  • 原始句子:The Animal didn’t cross the street because it was too tired。
  • 譯為:因為動物太累了所以沒有過馬路。

  • it指代的是The Animal,然而,如果改變句子中的一個詞,將tired替換為narrow,得到的新句子是The Animal didn't cross the street because it was too narrow(由于街道太窄,動物沒有過馬路),在這個新的句子中,itthe street。因此,模型需要能夠理解當輸入的句子改變時,句子中的詞義也可能會隨之改變。這種靈活性和準確性在Transformer模型中得到了體現。

  • Attention機制的工作原理可以這樣形象化地描述:模型把每個詞編碼成一個向量,然后把這些向量送入模型中。在這里,每個詞都會像發送條“詢問”一樣,去問其他詞:“咱們之間的關系緊密嗎?”,如果關系緊密,模型就會采取一種行動,反之則會采取另一種行動。不僅每個詞都會發出這樣的“詢問”,而且也會回應其他詞的“詢問”。通過這樣的一問一答互動,模型能夠識別出每兩個詞之間的緊密關系。一旦這種關系被確定,模型就會把與該詞關系更緊密的詞的信息“吸收”進來,與其進行更多的信息融合。這樣,比如在翻譯任務中,模型就能準確地識別it應該翻譯為animal,因為它的向量已經融合了與animal這個詞緊密相關的信息。

  • 所以,注意力機制的核心就是要做重構詞向量這樣一件事。對于上面形象化的描述中,可以抽取出注意力機制的三要素:

    • Q:即Query,可以理解為某個單詞像其他單詞發出詢問。
    • K:即Key,可以理解為某個單詞回答其他單詞的提問。
    • V:即Value,可以理解為某個單詞的實際值,表示根據兩個詞之間的親密關系,決定提取出多少信息出來融入自身。

  • T r a n s f o r m e r Transformer Transformer模型中, Q 、 K Q、K QK V V V是通過輸入向量表示Transformer(x)與相應的權重矩陣 W q 、 W k 、 W v W_q、W_k、W_v Wq?Wk?Wv?進行矩陣運算得到的。這些權重矩陣最初是通過數學方法進行初始化的,然后在模型多輪訓練的過程中逐漸更新和優化。目標是使得傳入的數據與這些權重矩陣相乘后,能夠得到最優化的Q、K和V矩陣。以Q為例,其第一個元素是通過輸入向量x的第一行與權重矩陣W的第一列進行點乘和求和運算得到的。
  • 因此,在Q矩陣中的第一行實際上有這樣的意義:它包含第一個詞(與輸入x的第一行對應)在查詢其他詞時所需的關鍵信息。同樣地,K和V矩陣的計算邏輯與此相似。在K矩陣的第一行中存儲的是第一個詞在回應其他詞的查詢時所需的信息。而V矩陣的第一行所包含的是第一個詞自身攜帶的信息。在通過Q和K確定了與其他詞的關系后,這些存儲在V中的信息被用來重構該詞的詞向量。
  • 在獲取到Q、K、V之后,Attention執行如下操作: Attention ( Q , K , V ) = softmax ( Q K T d k ) V \text{Attention}(Q, K, V) = \text{softmax}(\frac{QK^T}{\sqrt{d_k}})V Attention(Q,K,V)=softmax(dk? ?QKT?)V。公式中除以 d k d_k dk?是為了避免在計算向量的內積時,因為向量矩陣過大,計算出來的數值比較大。
    而非單純的因為詞之間的緊密程度這一問題。
  • 計算詞的緊密程度
    在這里插入圖片描述
  • 為什么 Q K T QK^T QKT矩陣就能表達詞與詞之間關系的緊密程度?
  • 這種計算方式在數學上叫向量的內積。向量的內積在向量的幾何含義上表達的是:**內積越大,兩個向量就更趨向于平行的關系,也就表示兩個向量更加相似,當內積為0時,兩個向量就會呈現垂直的關系,表示兩個向量毫不相關。**對于Attention機制中這種Q和K一問一答的形式,問的就是兩個詞之間的緊密程度,所以可以通過內積的方式來衡量兩個詞之間的相似性。
  • 在這個過程中,可能都注意到了,它對自己也進行了提問,并且自己也給出了回答,為什么要這樣做呢?
  • 例如The Animal didn’t cross the street because it was too tired(因為動物太累了,所以沒有過馬路),it正常來說作為代詞,指代“它”,但在這個句子中,我們希望它指代是The Animal,所以它不把自己在這個句子中的重要性表現出來,不對自己的信息進行重構的話,它可能就沒有辦法改變自己原有的意思,也就無法從原本的意思“它”改為指代The Animal。也就是因為這種操作,所以在Transformer中的注意力機制被叫作Self-Attention(自注意力機制)。
  • 當衡量句子之間的緊密關系的結果出來之后,那么如何重構V?
  • 為解決如何量化決定哪些詞貢獻了多少信息。我們可以使用softmax函數對每一行進行歸一化處理,softmax操作實質上是在量化地均衡各個詞的信息貢獻度。
  • 當得到了每個詞之間的信息貢獻度概率之后,重構V的過程轉換成計算過程。從每個詞中都會拿出部分信息,最終得到Z,通過這種計算形式得到的Z矩陣,每個位置就包含所有與之有關系的信息。這就是Transformer中自注意力機制中的計算過程。
    在這里插入圖片描述

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

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

相關文章

基于PySide6與pycatia的CATIA幾何陣列生成器開發實踐

引言:參數化設計的工業價值 在航空航天、汽車制造等領域,復雜幾何圖案的批量生成是模具設計與機械加工的核心需求。傳統手動建模方式存在效率低下、參數調整困難等問題。本文基于PySide6+pycatia技術棧,實現了一套支持??動態參數配置??、??智能幾何陣列生成??的自動…

PDF 編輯批量拆分合并OCR 識別

各位辦公小能手們!你們有沒有過被PDF文件折磨得死去活來的經歷?反正我是有,每次要編輯PDF,那叫一個費勁啊!不過呢,今天我要給大家介紹一款神器——WPS PDF to Word,有了它,PDF編輯那…

棒球比賽暗號百科·棒球1號位

關于棒球比賽暗號百科介紹,涵蓋基本概念、歷史演變、常見類型及經典案例: 棒球比賽暗號百科 一、定義與作用 棒球暗號是球員、教練團隊通過手勢、動作、語言或道具傳遞戰術指令的密碼系統,旨在隱蔽溝通攻防策略,避免對手破解。其…

Python實現基于線性回歸的空氣質量預測系統并達到目標指標

為了實現基于線性回歸的空氣質量預測系統并達到目標指標,以下是完整的Python代碼實現: import pandas as pd import numpy as np from sklearn.model_selection import train_test_split, GridSearchCV from sklearn.preprocessing import StandardScal…

236.二叉樹的最近公共祖先

在樹結構中,祖先指的是一個節點的父節點或更高層級的父節點。公共祖先是指同時為節點p和q的祖先的節點。最近公共祖先(LCA)則是指在所有公共祖先中,距離p和q最近的那個節點。尋找LCA的方法可以按以下情況進行分析: 當…

面試題總結一

第一天 1. 快速排序 public class QuickSort {public static void quickSort(int[] arr, int low, int high) {if (low < high) {// 分區操作&#xff0c;獲取基準元素的最終位置int pivotIndex partition(arr, low, high);// 遞歸排序基準元素左邊的部分quickSort(arr, …

Stable Diffusion底模對應的VAE推薦

以下是主流Stable Diffusion底模對應的VAE推薦表格&#xff1a; 底模版本推薦VAE類型說明SD1.5SD1.5專用VAE通常使用vae-ft-mse-840000-ema-pruned.safetensorsSD2.0SD1.5兼容VAE或SD2專用VAE部分SD2模型需配套512-ema-only.vae.ptSD3內置VAESD3系列模型通常自帶集成VAE無需額…

北斗導航 | 基于matlab的多波束技術的衛星通信系統性能仿真

基于多波束技術的低軌(LEO)衛星通信系統 **1. 仿真場景建模**1.1 LEO衛星軌道參數設置1.2 地面終端分布**2. 多波束天線模型**2.1 波束方向圖生成2.2 頻率復用方案**3. 鏈路預算與干擾分析**3.1 自由空間路徑損耗3.2 信噪比(SNR)計算**4. 動態資源調度算法**4.1 基于流量需…

uni-app學習筆記十--vu3 computed的運用(一)

vue官方推薦使用計算屬性來描述依賴響應式狀態的復雜邏輯&#xff0c;computed具有緩存的作用&#xff0c;一個計算屬性僅會在其響應式依賴更新時才重新計算&#xff0c;這意味著只要 相關值 不改變&#xff0c;無論多少次訪問 都會立即返回先前的計算結果&#xff0c;從而在一…

多模態大模型詳解

首先&#xff0c;得明確多模態大模型的定義和核心能力&#xff0c;比如處理文本、圖像、音頻、視頻等多種數據模態。 其次是技術架構&#xff0c;可能需要分模塊描述&#xff0c;比如感知層、特征提取、融合策略等&#xff0c;還有技術趨勢如模型輕量化、開源生態。 應用場景…

如何通過UI設計提高用戶留存率?

在競爭激烈的移動應用市場中&#xff0c;提高用戶留存率是開發者的關鍵目標。UI 設計在實現這一目標中起著舉足輕重的作用。精心設計的 UI 不僅能夠吸引新用戶&#xff0c;還能促使現有用戶持續使用。以下是通過 UI 設計提升用戶留存率的幾種關鍵方法。 優化用戶體驗 用戶體驗…

Linux(6)——第一個小程序(進度條)

目錄 一、行緩沖區的概念 二、\r與\n 三、進度條代碼書寫與展示 1.如何表示進度條是在加載的 2.整體框架 3.書寫 3.1makefile: 3.2process.h: 3.3process.c: 3.4main.c&#xff1a; 3.5美化 一、行緩沖區的概念 首先&#xff0c;我們來見一見行緩沖區&#xff0c;…

51頁 @《人工智能生命體 新啟點》中國龍 原創連載

《 人工智能生命體 新啟點 》一書&#xff0c;以建立意識來建立起生命體&#xff0c;讓其成為獨立、自主的活動個體&#xff1b;也就可以理解為建立生命體的思想指導。 讓我們能夠賦予他靈魂&#xff01;

微軟全新開源命令行文本編輯器:Edit — 致敬經典,擁抱現代

名人說:博觀而約取,厚積而薄發。——蘇軾《稼說送張琥》 創作者:Code_流蘇(CSDN)(一個喜歡古詩詞和編程的Coder??) 目錄 一、引言:命令行的新利器二、Edit:致敬經典,擁抱現代1. 命令行的“新升級”2. 為什么要有 Edit?三、核心功能與特性一覽1. 完全開源、MIT 許可證…

使用MybatisPlus實現sql日志打印優化

背景&#xff1a; 在排查無憂行后臺服務日志時&#xff0c;一個請求可能會包含多個執行的sql&#xff0c;經常會遇到SQL語句與對應參數不連續顯示&#xff0c;或者參數較多需要逐個匹配的情況。這種情況下&#xff0c;如果需要還原完整SQL語句就會比較耗時。因此&#xff0c;我…

go多線程壓測監控

實現了 go多協程壓力測試實現了Monitor&#xff0c;異步統計qps、時延、cpu(client端)等指標&#xff0c;周期printStat。只需要把單條執行func傳給Monitor即可命令行傳參ctrlc之后正常退出(mock cpu 占用) 代碼見 https://gitee.com/bbjg001/golearning/tree/master/others/…

安卓無障礙腳本開發全教程

文章目錄 第一部分&#xff1a;無障礙服務基礎1.1 無障礙服務概述核心功能&#xff1a; 1.2 基本原理與架構1.3 開發環境配置所需工具&#xff1a;關鍵依賴&#xff1a; 第二部分&#xff1a;創建基礎無障礙服務2.1 服務聲明配置2.2 服務配置文件關鍵屬性說明&#xff1a; 2.3 …

閑時處理技術---CAD C#二次開發

在CAD C#二次開發中&#xff0c;使用閑時處理技術可以提高程序的響應性能和資源利用率。以下是一般的實現步驟&#xff1a; 1. 了解CAD的事件機制 CAD提供了一些事件&#xff0c;如 Idle 事件&#xff0c;當CAD應用程序處于空閑狀態時會觸發該事件。你可以訂閱這個事件來執行閑…

Git研究

以下命令在CentOS系統下執行 創建Git倉庫 git init git-example 監控.git目錄的變化情況&#xff1a; watch -n .5 tree .git 寫入文件內容&#xff0c;并把文件添加到Stage暫存區 echo 1 > t.txtgit add 1.txt 觀察結果如下&#xff1a;objects下多出了一個d00491fd…

野火魯班貓(arrch64架構debian)從零實現用MobileFaceNet算法進行實時人臉識別(四)安裝RKNN Toolkit Lite2

RKNN Toolkit Lite2 是瑞芯微專為RK系列芯片開發的NPU加速推理API。若不使用該工具&#xff0c;計算任務將僅依賴CPU處理&#xff0c;無法充分發揮芯片高達6TOPS的NPU算力優勢。 按照官方文檔先拉一下官方代碼庫&#xff0c;然后通過whl文件安裝&#xff0c;因為我是python3.1…