LLM 系列之 Transformer 组件总结
本系列为LLM 学习博客,会一一记录各个模块解读。
以下内容参考:大语言模型综述 https://github.com/RUCAIBox/LLMSurvey
主流架构
大语言模型,主要的核心组件是Transformer。不同的模型选择的架构不一样,目前主流架构有:
- 编码器-解码器架构: 传统Transformer模型是建立在编码器-解码器架构上的,由两个Transformer块分别作为编码器-解码器。目前只有少数LLM 是基于 该架构的 如:Flan-T5
- 因果解码器架构: 因果解码器架构采用单项注意力掩码,以确保每个输入标记只能关注过去的标记和它本身。输入和输出标记通过解码器以相同的方式进行处理。典型的model有 GPT1/23, OPT, BLOOM, Gopher.
- 前缀解码器架构:前缀解码器修正了因果解码器的掩码机制,以使其能够对前缀标记执行双向注意力,并仅对生成的标记执行单向注意力。这样与编码器-解码器架构类似,前缀解码器可以双向编码前缀序列并自回归地逐个预测输出标记,其中在编码和解码过程中共享相同的参数。实用的建议是不从头开始进行预训练,而是基于训练因果解码器,然后将其转换为前缀解码器以加上收敛。典型的model: U-PaLM (从PaLM 演化来的), GLM-130B.
总结:对于这三种类型的架构,也可以考虑通过专家混合MoE扩展他们,其中每个输入的一小部分神经网络权重被稀疏激活,如Switch Transformer 和 GLaM,已经证明 通过增加专家的数量或总参数大小,可以观察到显著的性能改进。
模型组件
Transformer的四个组件:标准化,位置编码,激活函数,注意力和偏置。
标准化
- 目的是使得训练稳定。
- 目前主要采用的有:
1)LayerNorm:后置LN, 前置LN(损失一定的性能 带来更稳定的训练),Sandwich-LN (基于前置LN,在残差连接之前添加额外的LN 避免数值爆炸,有时无法稳定LLM的训练,可能导致崩溃)
2)最近一些高级标准化技术被提出以作为LN的替代方案,由于RMS Norm 在训练速度和性能方面的优越性,在Gopher 和 Chinchilla中被采用。
3)DeepNorm 已经表现出更好的训练稳定性 和 后标准化一起被GLM-130B采用。
4)在嵌入层后添加额外的LN也可以稳定大语言模型的训练(然而这往往会导致显著的性能下降,在最近的一些LLM中已经被移除)。
激活函数
- 目的:获得更好的性能
- 现有的LLM中,广泛使用GeLU.
- 在最新的LLM中(PaLM和 LaMDA)也使用了GLU激活函数的变体 特别是SwiGLU 和 GeGLUb 变体 在实践中通常可以获得更好的性能。与GeLU相比,他们在前馈网络中需要额外的参数(约50%)。
位置编码
- 目的:由于Transformer中自注意模块是置换等变的,因此需要使用位置编码来注入绝对或相对位置信息以建模序列。
- 主要有:1)绝对位置编码:正弦函数,学习位置编码。 2)相对位置编码:ALiBi, RoPE。
1) 经典Transformer中有两种绝对位置编码的变体:正弦函数和学习的位置编码(后者经常在LLM中使用)。
2) 相对位置编码根据 键和查询之间的偏移量生成嵌入。因此它可以在训练中看到长度范围之外的更长序列上表现良好,即外推。
3)ALiBi 使用基于键和查询之间距离的惩罚来偏置注意力分数。它比其他位置编码具有更好的零样本泛化能力和更强的外推能力。
4)RoPE: 通过绝对位置设置特定的旋转矩阵,键和查询之间的分数可以使用相对位置信息计算,这对建模长序列是有用的,RoPE已经被广泛应用于一些最新的大语言模型。
注意力和偏差
- 目的: transform 就是通过注意力机制来实现上下文关系的捕获的。
1)全自注意力机制:原始Transformer
2) 分解注意力:GPT3 采用更低计算复杂度的稀疏注意力机制。
3)特殊注意力机制: Random feature attention, Big bird: Transformers for longer sequences, 考虑GPU 内存访问(FlashAttention)
4)与原始Transformer一样,大多数LLM 在每个线性层和层标准化中保留了偏置,然后PaLM 和 Galactica中 偏置被移除,研究表明,对于LLM来说,去除偏置可以增强训练的稳定性。(Training language models to
follow instructions with human feedback)
预训练任务
预训练在将大规模语料库中的通用知识编码到巨大的模型参数中起着关键作用。对于训练LLMs,有两个常用的预训练任务,即语言建模和去噪自编码。
语言模型
语言模型任务(LM)是预训练仅包含解码器的大语言模型(如GPT3和PaLM)最常用的目标。给定
一个标记序列x={x1,…,xn},LM任务旨在基于序列中前面的标记x<i,自回归地预测目标标记xi。通常的训练目标是最大化以下似然函数:LLM(x) = SUM(log P(xi|x<i))
由于大多数语言任务可以基于输入的预测问题来解决,这些仅包含解码器的大语言模型可能具有优势,可以隐式地学习如何以统一的LM方式完成这些任务。一些研究还表明,仅包含解码器的大语言模型可以通过自回归地预测下一个标记而自然地转移到某些任务中,而无需微调。LM的一个重要变体是前缀语言模型任务,它是为预训练具有前缀解码器架构的模型设计的。在计算前缀语言模型的损失时,不使用随机选择的前缀内的标记。由于模型预训练涉及的序列中涉及的标记较少,因此在使用相同数量的预训练标记时,前缀语言模型的性能往往略低于传统语言模型任务。
去噪编码
除了传统的LM之外,去噪自编码任务(DAE)也被广泛用于预训练语言模型[24,72]。DAE任务的输入x\˜x是一些有随机替换区间的损坏文本。然后,语言模型被训练以恢复被替换的标记˜x。形式上,DAE的训练目标如下:LDAE(x) = logP(˜x|x\˜x)
然而,DAE任务在实现上似乎比LM任务更为复杂。因此,它并没有被广泛用于预训练大型语言模型。采用 DAE作为预训练目标的现有大语言模型包括 T5 和 GLM130B 。这些模型主要通过自回归地恢复替换区间来进行训练.
TODO
每个模型组件中 各个算法的实现方式和对比。
相关文章:

LLM 系列之 Transformer 组件总结
本系列为LLM 学习博客,会一一记录各个模块解读。 以下内容参考:大语言模型综述 https://github.com/RUCAIBox/LLMSurvey 主流架构 大语言模型,主要的核心组件是Transformer。不同的模型选择的架构不一样,目前主流架构有: 编码器…...

计算机等级考试—信息安全三级真题十
目录 一、单选题 二、填空题 三、综合题 一、单选题...

面试总结(mysql定精度/oom排查/spring三级缓存/stream流)
Mysql数据类型上的一个把握 1、MySQL Decimal为什么不会丢失精度 DECIMAL的存储方式和其他数据类型都不同,它是以字符串形式存储的。假设一个字段为DECIMAL(3,0),当我们存入100时,实际上存入的1、0、0这三个字符拼接而成的字符串的二进制值&…...

uniapp四个元素点击那个哪个变色,其他的还变原来的颜色
在UniApp中,可以使用CSS伪类选择器和动态样式绑定来实现点击某个元素时改变其颜色的效果。假设有四个元素分别为A、B、C和D。 首先,为这四个元素添加一个共同的类名,例如"item"。 然后,在页面的样式中定义两种颜色&am…...

Springcloud笔记(2)-Eureka服务注册
Eureka服务注册 服务注册,发现。 在Spring Cloud框架中,Eureka的核心作用是服务的注册和发现,并实现服务治理。 Eureka包含两个组件:Eureka Server和Eureka Client。 Eureka Server提供服务注册服务,各个节点启动后…...

国庆 day 5
QT实现TCP服务器客户端搭建的代码,现象 服务器 #include "widget.h" #include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget) {ui->setupUi(this);server new QTcpServer(this);connect (server,&…...

计算机网络 | OSI 参考模型
计算机网络 | OSI 参考模型 计算机网络 | OSI 参考模型应用层表示层会话层传输层网络层数据链路层物理层 参考视频:王道计算机考研 计算机网络 参考书:《2022年计算机网络考研复习指导》 计算机网络 | OSI 参考模型 OSI 参考模型自下而上分为7层&…...

uniapp 实现地图头像上的水波纹效果
最近实现了uniapp 地图头像水波纹的效果,话不多说,先来看看视频效果吧:链接 在这里具体的代码就不放出来了,还是利用了uniapp的 uni.createAnimation 方法,因为cover-view 不支持一些css 的动画效果,所以这…...

Zabbix7.0 LTS新功能
一、简介 LTS是长期支持。LTS版本支持5年。如果更喜欢稳定性,未涉及到最新的功能,可以选次新的LTS或者更低解决方案。而Zabbix6.4是最新的主要版本不属于LTS版本。 二、新功能 从以下几个方面介绍部分新功能: 性能提升:内存储存…...

充电100%并非都是美事,有时少点更有溢出!如何正确为iPhone充电
iPhone是非凡的设备,但一旦电池耗尽,它们就会失去光泽。这就是为什么照看电池内部并确保始终正确充电很重要。 在这篇文章中,我们解释了如果你想让你的iPhone每天运行到深夜,并尽可能多地保持这种状态,你需要采取的步…...

【软件测试】JUnit详解
文章目录 一. Junit是什么?二.Junit中常见的注解1. Test2. BeforeAll & AfterAll3. BeforeEach & AfterEach4. ParameterizedTest参数化5. Disabled6. Order 三. 测试套件1. 通过class运行测试用例2. 通过包运行测试用例 四. 断言 一. Junit是什么? JUnit是一个用于…...

hive统计页面停留时间
1、背景:通过业务埋点数据,统计用户在页面的停留时间 样例数据,样例数据存入表tmp, 有如下字段用户uid、动作时间戳time、页面名称pn、动作名称action SELECT 12345 AS uid, 1695613731020 AS time, 搜索 AS pn, click AS acti…...

LeetCode 24.两两交换链表中的结点
题目链接 力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台 题目解析 首先可以特判一下,如果结点数目小于等于1,则直接返回即可,因为数目小于等于1就不需要交换了。 然后我们可以创建一个虚拟的头结点,然…...

【每日一记】OSPF区域划分详讲、划分区域的优点好处
个人名片: 🐼作者简介:一名大二在校生,喜欢编程🎋 🐻❄️个人主页🥇:小新爱学习. 🐼个人WeChat:hmmwx53 🕊️系列专栏:🖼…...

复旦管院启动科创战略,培养科技研发人才,引领未来发展!
今年夏天,600多位优秀的企业家成为复旦大学EMBA 2023级新生。在疫情结束后,他们选择百战归来再读书,重新回到久违的课堂,共同探索科创大时代下企业的商业本质,开启新的学习与人生旅程。复旦大学管理学院院长陆雄文教授…...

Infinity同步
...

C语言:转义字符
目录 话不多说,先上表 \n \? \ \" \\ \t \a \ddd 附一张ASCII表 \xdd 练习 话不多说,先上表 一一举例解释下哈 \n 读取到结尾标识符\0 printf("demo\n\0Zh"); // demo \? 在书写连续多个问号时使用,防止…...

为什么 0.1 + 0.1 !== 0.2
为什么 0.1 0.1 ! 0.2 总结了几个很有意思的基础题目,分享一下。 为什么 0.1 0.1 ! 0.2 看到这个问题,不得不想到计算机中的数据类型,其中浮点数表示有限的精度。那么它就无法精确的表示所有的十进制小数,所以在在某些情况下…...

超详细!主流大语言模型的技术原理细节汇总!
1.比较 LLaMA、ChatGLM、Falcon 等大语言模型的细节:tokenizer、位置编码、Layer Normalization、激活函数等。 2. 大语言模型的分布式训练技术:数据并行、张量模型并行、流水线并行、3D 并行、零冗余优化器 ZeRO、CPU 卸载技术 ZeRo-offload、混合精度训…...

本人4年测试经验,211 本科计算机专业,由于互联网裁员,然后谈谈我最近测试面试的总结
本人4年测试经验,211 本科计算机专业,由于互联网裁员,最近在 bosss 上投了些简历,测试开发岗,看看目前市场情况。 虽然都在说大环境不好,失业的人很多,我最近约面试的还是比较多的,…...

Android中级——Activity数据恢复过程
Activity数据恢复 onSaveInstanceState()onRestoreInstanceState()扩展 onSaveInstanceState() 在Activity调用onStop()之前调用会onSaveInstanceState(),如下 final void performStopActivity(IBinder token, boolean saveState, String reason) {ActivityClient…...

国内就能使用的chatgpt网页版,包含AIGC应用工具
Chatgpt的出现在多个领域带来了重要的影响。它能够显著提高我们的工作效率,无论是编写文案代码还是回答常见问题,都能在短时间内完成任务。通过Chatgpt,我们能够迅速获取所需答案。随着人工智能技术的不断发展,相信在未来AI能够带…...

Fast DDS之RTPS
目录 RTPS的使用 RTPS层实现了RTPS标准。DDS层概念映射关系如下: DDS LayerRTPS LayerDomainRTPSDomainDomainParticipantRTPSParticipantDataWriterRTPSWriterDataReaderRTPSReader RTPS的使用...

【算法|动态规划No.16】leetcode931. 下降路径最小和
个人主页:兜里有颗棉花糖 欢迎 点赞👍 收藏✨ 留言✉ 加关注💓本文由 兜里有颗棉花糖 原创 收录于专栏【手撕算法系列专栏】【LeetCode】 🍔本专栏旨在提高自己算法能力的同时,记录一下自己的学习过程,希望…...

Jenkins 构建时动态获取参数
文章目录 问题简介Groovy 脚本配置进阶 问题 在做jenkins项目时,有些参数不是固定写死的,而是动态变化的,这时我们可以用 Active Choices 插件来远程调用参数 问题解决方案:执行构建前使用Groovy Scrip调用本地脚本,…...

android app开机自启动
参考文章: Android APP开机启动,安卓APP开发自启动,安卓启动后APP自动启动 Android让程序开机自动运行APP_安卓应用开机启动并打开软件_weijia3624的博客-CSDN博客...

XSS CSRF
XSS & CSRF xss:跨站脚本攻击:注入一些非法的脚本 csrf:冒充身份 XSS 反射型 /welcome:res.send(req.query.type) 输入什么就输出什么(httpOnly:false,但不是解决方案) 比如:?&…...

新加坡星银行项目组笔试题面试题
Java/Fullstack___开发常见问题收集:(根据个人面试岗位进行参考) 项目介绍部分 介绍最近做过的项目,项目中遇到的印象深刻的问题,如何解决?就项目用到的技术,自己的技术以及如何使用࿱…...

基于SpringBoot的智能物流管理系统
目录 前言 一、技术栈 二、系统功能介绍 顾客信息管理 员工信息管理 员工信息管理 门店信息管理 门店信息管理 订单信息管理 三、核心代码 1、登录模块 2、文件上传模块 3、代码封装 前言 随着信息技术在管理上越来越深入而广泛的应用,管理信息系统的实施…...

【开源电商网站】(2),使用docker-compose和dockerfile进行配置,设置自定义的镜像,安装插件,增加汉化包,支持中文界面汉化。
项目相关代代码地址 相关内容: https://blog.csdn.net/freewebsys/category_12461196.html 原文地址: https://blog.csdn.net/freewebsys/article/details/133666433 包括以下运行的详细代码: https://gitee.com/study-demo-all/oscommerc…...