001 LLM大模型之Transformer 模型

參考《大規模語言模型--從理論到實踐》

目錄

一、綜述

二、Transformer 模型

三、?嵌入表示層(位置編碼代碼)


一、綜述

語言模型目標是建模自然語言的概率分布,在自然語言處理研究中具有重要的作用,是自然 語言處理基礎任務之一。大量的研究從 n 元語言模型(n-gram Language Models)、神經語言模 型(Neural Language Models,NLM)以及預訓練語言模型(Pre-trained Language Models,PLM) 等不同角度開展了系列工作。這些研究在不同階段都對自然語言處理任務有著重要作用。隨著基 于 Transformer 各類語言模型的發展以及預訓練微調范式在自然語言處理各類任務中取得突破性 進展,從 2020 年 OpenAI 發布 GPT-3 開始,大語言模型研究也逐漸深入。雖然大語言模型的參數 量巨大,通過有監督微調和強化學習能夠完成非常多的任務,但是其基礎理論也仍然離不開對語 言的建模。
本章將首先介紹 Transformer 結構,并在此基礎上介紹生成式預訓練語言模型 GPT、大語言模
型網絡結構和注意力機制優化以及相關實踐。n 元語言模型、神經語言模型以及其它預訓練語言
模型可以參考《自然語言處理導論》第 6 章[8],這里就不再贅述。

二、Transformer 模型

Transformer 模型[48] 是由谷歌在 2017 年提出并首先應用于機器翻譯的神經網絡模型結構。機
器翻譯的目標是從源語言(Source Language)轉換到目標語言(Target Language)。Transformer 結 構完全通過注意力機制完成對源語言序列和目標語言序列全局依賴的建模。當前幾乎全部大語言 模型都是基于 Transformer 結構,本節以應用于機器翻譯的基于 Transformer 的編碼器和解碼器介 紹該模型。 基于 Transformer 結構的編碼器和解碼器結構如圖2.1所示,左側和右側分別對應著編碼器(Encoder)和解碼器(Decoder)結構。它們均由若干個基本的Transformer 塊(Block)組成(對應著圖 中的灰色框)。這里 表示進行了 N 次堆疊。每個 Transformer 塊都接收一個向量序列 {xi}作為輸入,并輸出一個等長的向量序列作為輸出 {yi}。這里的 xi yi 分別對應著文本序列 中的一個單詞的表示。而 yi 是當前 Transformer 塊對輸入 xi 進一步整合其上下文語義后對應的輸 出。在從輸入 {xi}t到輸出 {yi}t的語義抽象過程中,主要涉及到如下幾個模塊:
  • 注意力層:使用多頭注意力(Multi-Head Attention)機制整合上下文語義,它使得序列中任意兩個單詞之間的依賴關系可以直接被建模而不基于傳統的循環結構,從而更好地解決文本 的長程依賴。
  • 位置感知前饋層(Position-wise FFN):通過全連接層對輸入文本序列中的每個單詞表示進行 更復雜的變換。
  • 殘差連接:對應圖中的 Add 部分。它是一條分別作用在上述兩個子層當中的直連通路,被用 于連接它們的輸入與輸出。從而使得信息流動更加高效,有利于模型的優化。
  • 層歸一化:對應圖中的 Norm 部分。作用于上述兩個子層的輸出表示序列中,對表示序列進 行層歸一化操作,同樣起到穩定優化的作用。

三、?嵌入表示層(位置編碼)

對于輸入文本序列,首先通過輸入嵌入層(Input Embedding)將每個單詞轉換為其相對應的 向量表示。通常直接對每個單詞創建一個向量表示。由于 Transfomer 模型不再使用基于循環的方 式建模文本輸入,序列中不再有任何信息能夠提示模型單詞之間的相對位置關系。在送入編碼器 端建模其上下文語義之前,一個非常重要的操作是在詞嵌入中加入位置編碼(Positional Encoding) 這一特征。具體來說,序列中每一個單詞所在的位置都對應一個向量。這一向量會與單詞表示對 應相加并送入到后續模塊中做進一步處理。在訓練的過程當中,模型會自動地學習到如何利用這 部分位置信息。 為了得到不同位置對應的編碼,Transformer 模型使用不同頻率的正余弦函數如下所示:
PE(pos, 2i) = sin( pos 100002i/d )? ? ? ? ? ? ? ? ? ? ? ? ? ? (1)
PE(pos, 2i + 1) = cos( pos 100002i/d )? ? ? ? ? ? ? ? ? ? ?(2)
其中,pos 表示單詞所在的位置,2i 和 2i+ 1 表示位置編碼向量中的對應維度,d 則對應位置編碼的 總維度。通過上面這種方式計算位置編碼有這樣幾個好處: 首先,正余弦函數的范圍是在 [-1,+1], 導出的位置編碼與原詞嵌入相加不會使得結果偏離過遠而破壞原有單詞的語義信息。其次,依據 三角函數的基本性質,可以得知第 pos + k 個位置的編碼是第 pos 個位置的編碼的線性組合,這就 意味著位置編碼中蘊含著單詞之間的距離信息
使用 Pytorch 實現的位置編碼參考代碼如下:
import torch.nn as nn
import torch
import math
from torch.autograd import Variableclass PositionalEncoder(nn.Module):def __init__(self, d_model, max_seq_len = 80):super().__init__()self.d_model = d_model# 根據 pos 和 i 創建一個常量 PE 矩陣pe = torch.zeros(max_seq_len, d_model)for pos in range(max_seq_len):for i in range(0, d_model, 2):pe[pos, i] = math.sin(pos / (10000 ** ((2 * i)/d_model)))pe[pos, i + 1] = math.cos(pos / (10000 ** ((2 * (i + 1))/d_model)))pe = pe.unsqueeze(0)self.register_buffer('pe', pe)def forward(self, x):# 使得單詞嵌入表示相對大一些x = x * math.sqrt(self.d_model)# 增加位置常量到單詞嵌入表示中seq_len = x.size(1) x = x + Variable(self.pe[:,:seq_len], requires_grad=False).cuda()return xpos_en = PositionalEncoder(d_model=64)
x = torch.randn(100, 1, dtype=torch.float32).cuda() # 100 x 1
print(pos_en(x).shape) # 100 x 64
print('')

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

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

相關文章

第 119 場 LeetCode 雙周賽題解

A 找到兩個數組中的公共元素 模擬 class Solution { public:vector<int> findIntersectionValues(vector<int> &nums1, vector<int> &nums2) {unordered_set<int> s1(nums1.begin(), nums1.end()), s2(nums2.begin(), nums2.end());vector<…

【基于大數據的人肥胖程度預測分析與可控策略】

基于大數據的人肥胖程度預測分析與可控策略 前言數據獲取與清洗數據挖掘與分類建模1. K-means聚類2. 層次聚類3. DBSCAN4. 分類建模 數據可視化模型肥胖程度預測分析與可控策略結語 前言 隨著現代生活方式的改變&#xff0c;肥胖問題逐漸成為全球性的健康挑戰。為了更好地理解…

實用篇 | 3D建模中Blender軟件的下載及使用[圖文詳情]

本文基于數字人系列的3D建模工具Blender軟件的安裝及使用&#xff0c;還介紹了圖片生成3D模型的AI工具~ 目錄 1.Blender的下載 2.Blender的使用 3.安裝插件(通過壓縮包安裝) 4.實例 4.1.Blender使用MB-Lab插件快速人體模型建構 4.1.1.點擊官網&#xff0c;進行下載 4.1.…

批量將圖片分別翻轉90、180、270度,并將對應的框標注的json文件也進行相應調整,做到數據增強的效果

#------------------------------------矩形標注增強--------------------------------------- from PIL import Image import os import jsondef rotate_images_and_jsons(input_folder):output_folder os.path.join(input_folder, "rotated_images")os.makedirs(o…

在JavaScript中,可以使用Object.assign()方法或展開語法(...)來合并對象

在JavaScript中&#xff0c;你可以使用Object.assign()方法或者使用Spread Operator (…) 來合并對象。 Object.assign() Object.assign() 靜態方法將一個或者多個源對象中所有可枚舉的自有屬性復制到目標對象&#xff0c;并返回修改后的目標對象。 語法 Object.assign(tar…

Java TCP(一對一)聊天簡易版

客戶端 import java.io.*; import java.net.Socket; import java.util.Date; import javax.swing.*;public class MyClient {private JFrame jf;private JButton jBsend;private JTextArea jTAcontent;private JTextField jText;private JLabel JLcontent;private Date data;p…

C語言 題目

1.寫一個函數算一個數的二進制(補碼)表示中有幾個1 #include<stdio.h>//統計二進制數中有幾個1 //如13:1101 //需要考慮負數情況 如-1 結果應該是32// n 1101 //n-1 1100 //n 1100 //n-1 1011 //n 1000 //n-1 0111 //n 0000 //看n的變化 int funca(int c){int co…

css:flex布局中子元素高度height沒有達到100%

目錄 問題flex布局示例解決辦法方式一方式二 參考 問題 css中使用flex布局中子元素高度height沒有達到100% flex布局示例 希望實現兩個盒子左右分布&#xff0c;內容垂直居中對齊 <style>.box {display: flex;align-items: center;border: 1px solid #eeeeee;}.box-l…

【ceph】ceph生產常見操作之一---ceph擴容以及注意事項

本站以分享各種運維經驗和運維所需要的技能為主 《python零基礎入門》&#xff1a;python零基礎入門學習 《python運維腳本》&#xff1a; python運維腳本實踐 《shell》&#xff1a;shell學習 《terraform》持續更新中&#xff1a;terraform_Aws學習零基礎入門到最佳實戰 《k8…

react新舊生命周期鉤子

以下的內容根據尚硅谷整理。 舊生命鉤子 輔助理解&#xff1a; 紅色框&#xff1a;掛載時生命鉤子藍色框&#xff1a;更新時生命鉤子綠色框&#xff1a;卸載時生命鉤子 掛載時 如圖所示&#xff0c;我們可以看到&#xff0c;在組件第一次掛載時會經歷&#xff1a; 構造器&a…

stateflow——如何查看狀態機中參數變化及狀態機斷點調試

法一&#xff1a;使用Data Inspector 點擊“符號圖窗”和“屬性”&#xff0c;如圖&#xff1b;在選擇變量n并右鍵點擊inspector&#xff0c;最后在logging&#xff0c;如圖 法二&#xff1a;log active state 和法一類似使用data inspector查看&#xff0c;類似的查看方法和…

【每周一測】Java階段四第三周學習

目錄 1、關于分布式鎖的說法&#xff0c;錯誤的是&#xff08; &#xff09; 2、JDK動態代理產生的代理類和委托類的關系是 3、下列關于ElasticSearch中基本概念描述錯誤的是 4、Spring Cloud 中&#xff0c;Feign 是什么&#xff1f; 5、在JavaScript中&#xff0c;可以使…

玩轉大數據13: 數據倫理與合規性探討

1. 引言 隨著科技的飛速發展&#xff0c;數據已經成為了現代社會的寶貴資產。然而&#xff0c;數據的收集、處理和利用也帶來了一系列的倫理和合規性問題。數據倫理和合規性不僅關乎個人隱私和權益的保護&#xff0c;還涉及到企業的商業利益和社會責任。因此&#xff0c;數據…

韻達快遞單號查詢,以表格的形式導出單號的每一條物流信息

批量查詢韻達快遞單號的物流信息&#xff0c;并以表格的形式導出單號的每一條物流信息。 所需工具&#xff1a; 一個【快遞批量查詢高手】軟件 韻達快遞單號若干 操作步驟&#xff1a; 步驟1&#xff1a;運行【快遞批量查詢高手】軟件&#xff0c;第一次使用的伙伴記得先注冊…

SOP(標準作業程序)和WI(操作指導書)的聯系和區別

目錄 1.SOP&#xff08;標準作業程序&#xff09;&#xff1a;2.WI&#xff08;操作指導書&#xff09;&#xff1a;3.SOP和WI的區別&#xff1a; 1.SOP&#xff08;標準作業程序&#xff09;&#xff1a; SOP: 所謂SOP&#xff0c;是 Standard Operation Procedure三個單詞中…

【計算機網絡實驗】實驗三 IP網絡規劃與路由設計(頭歌)

目錄 一、知識點 二、實驗任務 三、頭歌測試 一、知識點 IP子網掩碼的兩種表示方法 32位IP子網掩碼&#xff0c;特點是從高位開始連續都是1&#xff0c;后面是連續的0&#xff0c;它有以下兩種表示方法&#xff1a; 傳統表示法&#xff0c;如&#xff1a;255.255.255.0IP前…

【WebSocket】使用ws搭建一個簡單的在線聊天室

前言 什么是WebSockets&#xff1f; WebSockets 是一種先進的技術。它可以在用戶的瀏覽器和服務器之間打開交互式通信會話。使用此 API&#xff0c;你可以向服務器發送消息并接收事件驅動的響應&#xff0c;而無需通過輪詢服務器的方式以獲得響應。 webscokets 包括webscoket…

中科院分區和JCR分區有什么區別

文章目錄 名詞解釋學科劃分不同參考的影響因子不同期刊分區不同期刊分區閾值不同 名詞解釋 中科院分區&#xff1a;又稱“中科院JCR分區”&#xff0c;是中國科學院文獻情報中心世界科學前沿分析中心的科學研究成果&#xff0c;期刊分區表數據每年底&#xff08;每年12月中下旬…

汽車繼電器

汽車繼電器 電子元器件百科 文章目錄 汽車繼電器前言一、汽車繼電器是什么二、汽車繼電器的類別三、汽車繼電器的應用實例四、汽車繼電器的作用原理總結前言 汽車繼電器作為一種電子設備,廣泛應用于汽車電路中的各種控制和保護任務,能夠可靠地控制和傳送電能,確保汽車系統的…

Python爬蟲-實現批量抓取王者榮耀皮膚圖片并保存到本地

前言 本文是該專欄的第12篇,后面會持續分享python爬蟲案例干貨,記得關注。 本文以王者榮耀的英雄皮膚為例,用python實現批量抓取“全部英雄”的皮膚圖片,并將圖片“批量保存”到本地。具體實現思路和詳細邏輯,筆者將在正文結合完整代碼進行詳細介紹。注意,這里抓取的圖片…