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 上投了些简历,测试开发岗,看看目前市场情况。 虽然都在说大环境不好,失业的人很多,我最近约面试的还是比较多的,…...
谷歌浏览器插件
项目中有时候会用到插件 sync-cookie-extension1.0.0:开发环境同步测试 cookie 至 localhost,便于本地请求服务携带 cookie 参考地址:https://juejin.cn/post/7139354571712757767 里面有源码下载下来,加在到扩展即可使用FeHelp…...

【kafka】Golang实现分布式Masscan任务调度系统
要求: 输出两个程序,一个命令行程序(命令行参数用flag)和一个服务端程序。 命令行程序支持通过命令行参数配置下发IP或IP段、端口、扫描带宽,然后将消息推送到kafka里面。 服务端程序: 从kafka消费者接收…...

iOS 26 携众系统重磅更新,但“苹果智能”仍与国行无缘
美国西海岸的夏天,再次被苹果点燃。一年一度的全球开发者大会 WWDC25 如期而至,这不仅是开发者的盛宴,更是全球数亿苹果用户翘首以盼的科技春晚。今年,苹果依旧为我们带来了全家桶式的系统更新,包括 iOS 26、iPadOS 26…...

Qt/C++开发监控GB28181系统/取流协议/同时支持udp/tcp被动/tcp主动
一、前言说明 在2011版本的gb28181协议中,拉取视频流只要求udp方式,从2016开始要求新增支持tcp被动和tcp主动两种方式,udp理论上会丢包的,所以实际使用过程可能会出现画面花屏的情况,而tcp肯定不丢包,起码…...
Java 8 Stream API 入门到实践详解
一、告别 for 循环! 传统痛点: Java 8 之前,集合操作离不开冗长的 for 循环和匿名类。例如,过滤列表中的偶数: List<Integer> list Arrays.asList(1, 2, 3, 4, 5); List<Integer> evens new ArrayList…...
第25节 Node.js 断言测试
Node.js的assert模块主要用于编写程序的单元测试时使用,通过断言可以提早发现和排查出错误。 稳定性: 5 - 锁定 这个模块可用于应用的单元测试,通过 require(assert) 可以使用这个模块。 assert.fail(actual, expected, message, operator) 使用参数…...

Python爬虫(一):爬虫伪装
一、网站防爬机制概述 在当今互联网环境中,具有一定规模或盈利性质的网站几乎都实施了各种防爬措施。这些措施主要分为两大类: 身份验证机制:直接将未经授权的爬虫阻挡在外反爬技术体系:通过各种技术手段增加爬虫获取数据的难度…...

多种风格导航菜单 HTML 实现(附源码)
下面我将为您展示 6 种不同风格的导航菜单实现,每种都包含完整 HTML、CSS 和 JavaScript 代码。 1. 简约水平导航栏 <!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><meta name"viewport&qu…...

无人机侦测与反制技术的进展与应用
国家电网无人机侦测与反制技术的进展与应用 引言 随着无人机(无人驾驶飞行器,UAV)技术的快速发展,其在商业、娱乐和军事领域的广泛应用带来了新的安全挑战。特别是对于关键基础设施如电力系统,无人机的“黑飞”&…...
Go 并发编程基础:通道(Channel)的使用
在 Go 中,Channel 是 Goroutine 之间通信的核心机制。它提供了一个线程安全的通信方式,用于在多个 Goroutine 之间传递数据,从而实现高效的并发编程。 本章将介绍 Channel 的基本概念、用法、缓冲、关闭机制以及 select 的使用。 一、Channel…...