【Datawhale之Happy-LLM】3種常見的decoder-only模型——Github最火大模型原理與實踐教程task07

Task07:第三章 預訓練語言模型PLM

(這是筆者自己的學習記錄,僅供參考,原始學習鏈接,愿 LLM 越來越好?)


本篇介紹3種很典的decoder-only的PLM(GPT、LlaMA、GLM)。目前火🔥的LLM基本都是用解碼器的架構

什么是Decoder-Only的PLM?

就是Transformer的decoder層堆疊,或者在此基礎上改進而來的。
對NLG,生成任務比較牛,這也是為什么用來做LLM生成文本。


GPT

GPT-123如何一步步超越BERT

= Generative Pre-Training Language Model 生成式預訓練語言模型

1. 歷程:
  • 2018年OpenAI就已經發了GPT,但是那時候性能還不行,比BERT差。
  • –>通過增大數據集、參數,(認為的“體量即正義”)讓模型能力得到了突破【涌現能力:不知怎的當年的小黑變身了】
  • –> 2020年 GPT-3 就BOOM💣了
2. GPT-123的對比

主打一個越來越大,最終 GPT-3 達到了百億級別參數量和百GB級別的語料規模。(這里對數量級有個認知就差不多了)

模型Decoder LayerHidden Size注意力頭數注意力維度總參數量預訓練語料
GPT-1123072127680.12B5GB
GPT-24864002516001.5B40GB
GPT-396491529612288175B570GB

GPT-2比1的變化:
規模變大 + 嘗試 zero-shot(這種方式GPT-3都不太行,2的效果肯定一般)

GPT-3比2的變化:
規模瘋狂大 + few-shot(這個不是預訓練+微調 范式了)

注:GPT-3 要在1024張 A100(80GB顯存)顯卡上分布式 訓1個月(顯卡要千張,時間要幾十天)

chatGPT:
模型:GPT-3
方法:預訓練+指令微調+RLHF(人類反饋強化學習)

什么是zero-shot?什么是few-shot?
零樣本學習:就是預訓練訓完PLM就用來做任務了,不再進行微調;
少樣本學習:是零樣本學習和微調的偏0的折中,一般在prompt里面給3-5個例子(讓PLM稍微知道我說的任務是怎么個回事)。

如:
zero-shot:請你判斷‘這真是一個絕佳的機會’的情感是正向還是負向,如果是正向,輸出1;否則輸出0few-shot:請你判斷‘這真是一個絕佳的機會’的情感是正向還是負向,如果是正向,輸出1;否則輸出0。你可以參考以下示例來判斷:‘你的表現非常好’——1;‘太糟糕了’——0;‘真是一個好主意’——1

GPT的預訓練任務CLM

CLM = Casual Language Modeling 因果語言建模
(ps:這里原文寫的是模型model,但我覺得這是一個任務,所以我喜歡把它理解成是modeling建模)

什么是CLM?

可以看出是N-gram的拓展。
前面所有token 預測 下一個token,補全。
一直重復這個訓練過程,模型漸漸就能預判了。
(比之前其他PLM的預訓練任務MLM掩碼的、NLP下一句,更直接)

input: 今天天氣
output: 今天天氣很input: 今天天氣很
output:今天天氣很好

GPT模型架構

  • 位置編碼:
    GPT 沿用transformer典的Sinusoidal(三角函數絕對位置編碼)BERT用的可訓練的全連接層
  • 注意力:
    和tran的不一樣了,因為前面無encoder了,反而變得類encoder了。只有一次掩碼自注意。
  • 歸一化:
    采用pre-norm,很典的
  • FNN:
    用的2個一維卷積核而不是tran的線性矩陣

請添加圖片描述

卷積核咋用的?

卷積核就是一個滑動的窗口,可以和輸入點積計算,提取局部特征

x = [1, 2, 3, 4, 5, 6] #輸入序列
w = [0.2, 0.5, 0.3]  #一個大小為 3 的一維卷積核#就是每次取輸入的3個數一起看,如:
輸出第一個位置:0.2×1 + 0.5×2 + 0.3×3 = 2.6
輸出第二個位置:0.2×2 + 0.5×3 + 0.3×4 = 3.6y = [2.6, 3.6, 4.6, 5.6]

卷積核的數值很有講究的,可以看出這個核的偏好
這個也有些抽象

  • w = [0.2, 0.5, 0.3] 說明每次取輸入序列的3個數中更關注中間的=幫助模型理解一個詞與前后詞之間的平衡關系
  • w = [0.1, 0.8, 0.1] =強調中間詞(當前 token),但也考慮前后詞

在這里插入圖片描述
序列長度:詞的個數
10個詞128維詞向量,矩陣形狀:(10,128)
256個卷積核,nn.Conv1d(in_channels=128, out_channels=256, kernel_size=3)
in_channels=128 :填的是輸入一個詞向量的維度
out_channels=256:說明用了256個一維卷積核
kernel_size=3:說明卷積核大小是3,三個數字

ps:(這里還有一點問題)
NLP一行是一個token, DL中一行是一維詞向量


LLaMA

模型系列(開源但還要到它官網去申請)
參數:從幾億 7B 到幾十、幾百億
數據:從 1T → 15T
上下文長度:2K → 8K
架構的優化:tokenizer+大詞表、分組查詢注意力機制GQA

LLaMA-123 一路走來

Meta的(前臉書Facebook的)

版本發布時間參數規模訓練語料規模上下文長度核心改進
LLaMA-12023年2月7B / 13B / 30B / 65B>1T tokens20482048 張 "GPT-3" 訓21天
LLaMA-22023年7月7B / 13B / 34B / 70B>2T tokens4096引入 GQA(Grouped-Query Attention),推理更高效
LLaMA-32024年4月8B / 70B /400B>15T tokens8K優化tokenizer:詞表擴展至 128K,編碼效率更高

LLaMA的架構

下面是LlaMA3的結構,和GPT挺像,但是有些地方有差異,這里不展開了。
請添加圖片描述

GLM

智譜的,清華計算機的,2023年國內首個開源中文LLM。
GLM也是一個任務名稱

GLM系列

看下來發現:
數據直接用T級別的
對架構、訓練策略等有一些改變

模型時間上下文長度語料規模架構/特點關鍵能力
ChatGLM-6B2023年3月2k1T 中文語料參考 ChatGPT 思路,SFT + RLHF中文 LLM 起點
ChatGLM2-6B2023年6月32k-LLaMA 架構 + MQA 注意力機制-
ChatGLM3-6B2023年10月--架構無大改,多樣化訓練數據集 + 訓練策略
支持函數調用 & 代碼解釋器
語義、數學、推理、代碼、知識達到當時 SOTA;可用于 Agent開發
GLM-4 系列2024年1月128k--新一代基座
GLM-4-9B2024年1月8k1T 多語言語料與 GLM-4 方法一致在同規模上超越 LLaMA3-8B

GLM 系列模型在基準集上的表現演進

GLM用的預訓練任務

GLM既是模型名字,又是這個模型用的預訓練任務的名字
GLM=general language model 通用語言模型任務

GLM任務是怎么做的呢?
=CLM(因果)+MLM(掩碼)的結合,

ps:感覺也是為啥它是G,general,可能就是因為融合了兩種學習語言的任務。掩碼讓你會用詞,因果讓你會表達,這也是人可以用來學習語言的抽象任務吧。

一個序列進行隨機位置的幾個token掩碼,然后讓模型預測被遮蔽的部分+這個序列的下一token。

GLM任務的效果?
使用時間:GLM在預訓練模型時代比較火,只第一代用,后來GLM團隊自己也還是回到了傳統的CLM任務。
效果:對增強模型理解能力比較好

【模型性能與通體了BERT(encoder-only)的性能對比】
模型性能與通體了BERT(encoder-only)的性能對比

GLM的模型架構

和GPT架構很像(咱就是說,畢竟大佬,所以咱也得respect一下)

差異點一:用Post-Norm = 后歸一化

如下公式很直觀了

LayerOutput = LayerNorm(x + Sublayer(x))

post-norm和pre-norm的區別?
這兩個是有順序差別的歸一化方法。
計算差別: (在計算殘差鏈接的時候,)

  • post歸一化顧名思義,殘差計算之后再歸一化。
  • pre歸一化就是先進行歸一化,再殘差連接。

效果差別:

  • post歸一化對參數整體的正則化效果更好,模型的魯棒性更好(泛化能力更強,在面對不同場景的時候)。
  • pre自然的是有一部分參數加載參數正則化之后,所以可以防止模型梯度失控(消失或者爆炸)

二者如何選擇?

  • 對很大的模型,一般默認覺得pre會好一點(防梯度失控)
  • 但GLM里提出說post可以避免LLM數值錯誤,可能就是post就讓參數整體進到歸一化里,所以比較不割裂吧 。
差異點二:減少輸出參數量

做法:MLP --> 單個線性層
作用:輸出層參數量少了,參數都在模型本身

ps:

  • 輸出層參數量少了有什么用?
    輸出層參數并不是模型掌握的知識,他是最終生成文本的數字表示。所以量少了轉成文本就簡單了
  • 參數都在模型本身有什么用?
    模型的參數就是模型學到的能力的數字抽象,輸入進來的內容經過和這些參數的計算,就可以運用到模型能力
    (這里可能涉及到大模型參數的可解釋性問題,大家可以再去看看別的資料講解)
差異點三:激活函數換成GeLUs
  • 傳統的激活函數——ReLU,就是保留正的數(傳播),負的為0
  • GLM的激活函數——GeLUs,在0附近做軟過渡,非線性映射(更柔)

可能后期出一個激活函數的合集吧,大家想看也可以評論區催更

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

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

相關文章

【卷積神經網絡】卷積神經網絡的三大核心優勢:稀疏交互、參數共享與等變表示

1. 引言 卷積神經網絡(CNN)之所以在計算機視覺、語音識別等領域取得突破性進展,并非偶然。相比傳統的全連接神經網絡,CNN通過三個重要的思想來幫助改進機器學習系統:稀疏交互(sparse interactions)、參數共享(parameter sharing)、等變表示(equivariant representations)。…

網絡共享協議

網絡共享協議是用于在計算機網絡中實現資源共享和數據傳輸的規則或標準。常見的共享協議包括文件共享、打印機共享、互聯網連接共享等。SMB(Server Message Block 服務器消息塊)SMB是一種網絡共享協議,主要用于局域網中實現不同設備之間的文件…

MD5加密算法詳解與實現

MD5加密算法詳解與實現 什么是MD5加密? MD5(Message-Digest Algorithm 5)是一種廣泛使用的密碼散列函數,可以產生一個128位(16字節)的哈希值,通常用32位的十六進制數表示。MD5由Ronald Rivest在…

(nice!!!)(LeetCode 每日一題) 3025. 人員站位的方案數 I (排序)

題目:3025. 人員站位的方案數 I 思路:排序,時間復雜度0(n^2)。 將數組points里的元素先按橫坐標x升序排序,縱坐標y降序排序。第一層for循環枚舉左上角的點,第二層for循環枚舉右下角的點。細節看注釋。 C版本&#xff…

可可圖片編輯 HarmonyOS(4)圖片裁剪

可可圖片編輯 HarmonyOS(4)圖片裁剪-canvas 前言 可可圖片編輯 實現了圖片的裁剪功能,效果如圖所示。這里的核心技術是使用了canvas。 Canvas 入門 Canvas提供畫布組件,用于自定義繪制圖形,開發者使用CanvasRenderi…

怎么用PS制作1寸證件照(已解決)

方法/步驟一、按住鍵盤上的“Ctrl”“O”打開你要制作的照片二、點擊裁剪工具 (調整為寬:2.5cm,高:3.5cm,分辨率:300像素),設置之后直接框選出需要剪切保留的位置(使人物居正中), 然后按上面的“√”,以便確認剪裁三、…

Qt libcurl的下載、配置及簡單測試 (windows環境)

Qt libcurl的下載、配置及簡單測試引言一、libcurl下載二、在Qt Creator中配置三、簡單測試引言 curl(Client URL)是一個開源的命令行工具和庫,用于傳輸數據支持多種協議(如HTTP、HTTPS、FTP、SFTP等)。其核心庫libcur…

【Python語法基礎學習筆記】競賽常用標準庫

前言此系列筆記是撥珠自己的學習筆記,自用為主,學習建議移步其他大佬的專門教程。math庫Python 的 math 庫是標準庫之一,提供了大量數學運算相關的函數,適用于基礎數學計算、科學計算等場景。下面詳細介紹其使用方法及常用功能&am…

我的項目我做主:Focalboard+cpolar讓團隊協作擺脫平臺依賴

文章目錄前言1. 使用Docker本地部署Focalboard1.1 在Windows中安裝 Docker1.2 使用Docker部署Focalboard2. 安裝Cpolar內網穿透工具3. 實現公網訪問Focalboard4. 固定Focalboard公網地址前言 “項目管理軟件又漲價了!“小團隊負責人小林發愁——剛習慣操作邏輯&…

【3D 入門-4】trimesh 極速上手之 3D Mesh 數據結構解析(Vertices / Faces)

【3D入門-指標篇上】3D 網格重建評估指標詳解與通俗比喻【3D入門-指標篇下】 3D重建評估指標對比-附實現代碼【3D 入門-3】常見 3D 格式對比,.glb / .obj / .stl / .ply Mesh 數據結構解析 1. Vertices(頂點) original_vertices mesh_ful…

無需服務器,免費、快捷的一鍵部署前端 vue React代碼--PinMe

作為前端的開發,有時候想部署一個項目真的是很“受氣”,要不就是找運維,或者后端,看別人的時間,或者走流程。 現在,有這么一個神器PinMe, 以前部署項目:自己買服務器?域名、 SSL、N…

【LeetCode_26】刪除有序數組中的重復項

刷爆LeetCode系列LeetCode26題:github地址前言題目描述題目與思路分析代碼實現算法代碼優化LeetCode26題: github地址 有夢想的電信狗 前言 本文介紹用C實現leetCode第26題題目鏈接:https://leetcode-cn.com/problems/remove-duplicates-…

CMake構建學習筆記23-SQLite庫的構建

1. 構建思路 在前文中構建了大量的庫包程序(參看CMake構建學習筆記-目錄)之后,可以總結一下在Windows下使用腳本構建程序的辦法: 使用CMake構建。這是目前最通用最流行的構建方式,大部分C/C程序都在逐漸向這個方向轉…

Watt Toolkit下載安裝并加速GitHub

一、下載 官方地址:(Steam++官網) - Watt Toolkit Gitee下載地址:https://gitee.com/rmbgame/SteamTools/releases/tag/3.0.0-rc.16

DevOps運維與開發一體化及Kubernetes運維核心詳解

前言: 在云原生時代,技術的融合與流程的重構已成為驅動業務創新的核心引擎。Kubernetes作為容器編排的事實標準,其穩定的運維能力是業務應用的基石;而DevOps所倡導的開發與運維一體化文化,則是實現快速交付和價值流動的…

HQX SELinux 權限問題分析與解決

Google自Android 5.0起強制實施的SELinux安全子系統,通過最小權限原則顯著提升了系統安全性,但這也導致開發過程中頻繁出現權限拒絕問題。值得注意的是,即便設備已獲取root權限,SELinux的強制訪問控制機制仍會限制部分敏感操作。 …

SpringBoot集成Kafka實戰應用

目錄 使用Kafka-Client實現消息收發 引入依賴 發送端: 消費端: SpringBoot集成 引入maven依賴 消費端 在上一篇我們深度解析了Kafka的運行操作原理以及集群消息消費機制等,請點擊下方鏈接獲取 Kafka消息隊列深度解析與實戰指南 本篇我…

單元測試總結2

1、重載和重寫的區別01、定義不同:重載是在同一個類中定義多個方法名相同但參數列表不同的方法;重寫是子類對父類中同名同參數列表的方法進行重新實現02、范圍不同:重載發生在同一個類中,重寫發生在子類和父類中03、參數要求不同&…

Wi-Fi技術——MAC特性

有線和無線網絡在數據鏈路層的特性存在差異,具體為: CSMA/CD 用于有線網絡,通過檢測和處理沖突來維持網絡的穩定性。CSMA/CA 用于無線網絡,強調沖突的預防,以應對無線信道共享的挑戰 1 有線網 CSMA/CD 有線網 CSMA/…

OpenHarmony 分布式感知中樞深度拆解:MSDP 框架從 0 到 1 的實戰指南

MSDP設備狀態感知框架技術開發文檔 1. 系統概述 1.1 框架定位 MSDP (Multi-Sensor Data Processing) 設備狀態感知框架是OpenHarmony系統中負責設備狀態識別和分發的核心服務,基于多傳感器融合技術,為系統應用提供設備狀態感知能力。 1.2 核心功能 靜止狀態識別:基于加速…