【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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈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 核心功能 静止状态识别:基于加速…