《大规模语言模型从理论到实践》第一轮学习笔记

devtools/2024/10/7 21:39:55/

第一章 绪论

本章主要介绍大规模语言模型基本概念、发展历程和构建流程。

大规模语言模型(Large Language Models,LLM),也称大语言模型 或大型语言模型

1.1 大规模语言模型基本概念

1.语言模型(Language Model,LM) 目标就是建模自然语言的概率分布。

2.统计语言模型--平滑

尽管n 元语言模型能缓解句子概率为 0 的问题,但语言是由人和时代创造的,具备无尽的可能性,再庞大的训练语料也无法覆盖所有的 n-gram,而训练语料中的零频率并不代表零概率。因此,需要使用平滑技术(Smoothing)来解决这一问题,对所有可能出现的字符串都分配一个非零的概率值,从而避免零概率问题。平滑处理的基本思想是提高低概率,降低高概率, 使整体的概率分布趋于均匀。这类方法通常称为统计语言模型(Statistical Language models,SLM) 。

3.神经语言模型

基于稀疏表示的n 元语言模型仍然有三个较为明显的缺点:(1)无法建模长度超过 n 的上下文;(2)依赖人工 设计规则的平滑技术;(3)当 n 增大时,数据的稀疏性随之增大,模型的参数量更是指数级增加,并且模型受到数据稀疏问题的影响,其参数难以被准确的学习。此外,n 元文法中单词的离散表示也忽略了单词之间的相似性。神经网络方法可以在一定程度上避免数据稀疏问题,有些模型还可以避免对历史长度的限制,从而更好的建模长距离依赖关系。这类方法通常称为神经语言模型(Neural Language Models,NLM)。

4.预训练语言模型(Pre-trained Language Models,PLM)

ImageNet、GPT 和 BERT 为代表的基于 Transformer 模型的大规模预训练语言模型的出现,使得自然语言处理全面进入了预训练微调范式新时代。

5.指令微调语言模型

由于大规模语言模型的参数量巨大,如果在不同任务上都进行微调需要消耗大量的计算资源,因此预训练微调范式不再适用于大规模语言模型。但是研究人员发现,通过语境学习(Incontext Learning,ICL)等方法,直接使用大规模语言模型就可以在很多任务的少样本场景下取得很好的效果。此后,研究人员们提出了面向大规模语言模型的提示词(Prompt)学习方法、模型即服务范式(Model as a Service,MaaS)、指令微调(Instruction Tuning)等方法,在不同任务上都取得了很好的效果。

1.2 大规模语言模型发展历程

1.3 大规模语言模型构建流程

主要包含四个阶段:预训练、有监督微调、奖励建 模、强化学习。这四个阶段都需要不同规模数据集合以及不同类型的算法,会产出不同类型的模 型,同时所需要的资源也有非常大的差别。

预训练(Pretraining)阶段需要利用海量的训练数据,完成深度神经网络参数训练,构建基础语言模型 (Base Model)。基础大模型构建了长文本的建模能力,使得模型具有语言生成能力,根据输入的 提示词(Prompt),模型可以生成文本补全句子。

有监督微调(Supervised Finetuning),也称为指令微调(Instruction Tuning),利用少量高质量数 据集合,包含用户输入的提示词(Prompt)和对应的理想输出结果。用户输入包括问题、闲聊对 话、任务指令等多种形式和任务。得到有监督微调模型(SFT 模型)

奖励建模(Reward Modeling)阶段目标是构建一个文本质量对比模型,对于同一个提示词,SFT模型给出的多个不同输出结果的质量进行排序。如果 RM 模型的目标是针对 所有提示词系统所生成输出都能够高质量的进行判断,该问题所面临的难度在某种程度上与文本 生成等价,因此如何限定 RM 模型应用的泛化边界也是本阶段难点问题。

强化学习(Reinforcement Learning)阶段根据数十万用户给出的提示词,利用在前一阶段训练的 RM 模型,给出 SFT 模型对用户提示词补全结果的质量评估,并与语言模型建模目标综合得到更好的效果。使用强化学习,在 SFT 模型基础上调整参数,使得最 终生成的文本可以获得更高的奖励(Reward)。由于强化学习方法稳定性不高,并且超参数众多,使得模型收敛难度大,再叠加 RM 模型的准确率问题,使得在大规模 语言模型如何能够有效应用强化学习非常困难。

第二章 大语言模型基础

2.1Transformer

细节拉满,全网最详细的Transformer介绍(含大量插图)! - 知乎 (zhihu.com)

1.transformer的输入输出是什么

输入:使用词嵌入算法(embedding algorithm),将每个词转换为一个词向量。那么整个输入的句子是一个向量列表 。

输出:Decoder 最终的输出是一个向量,其中每个元素是浮点数。由 Softmax 层后面的线性层来把这个向量转换为单词。

2.与RNN相比他的优点有哪些

Transformer使用自注意力机制(Self-Attention Mechanism)来建模序列中的依赖关系。在自注意力机制中,每个输入元素都会与序列中的其他元素进行交互,并根据交互结果来调整自身的表示。这种交互是并行的,因为每个元素在计算时都可以同时访问序列中的其他元素,而不需要按照顺序逐步处理。具体来说,自注意力的计算包括查询(Query)、键(Key)和值(Value)的线性变换,以及相似度计算和加权求和。这些步骤都可以通过矩阵运算来实现,而矩阵运算是高度并行化的,因此可以大大提高计算效率。相比之下,RNN则通过迭代地处理序列中的每个元素来建模序列。在RNN中,当前位置的输出和隐藏状态是由当前位置的输入和前一时刻的隐藏状态共同决定的。这意味着RNN在处理序列时必须按照顺序逐步进行,因为每个时刻的输出都依赖于前一个时刻的隐藏状态。这种顺序处理特性使得RNN无法进行有效的并行计算。

此外,Transformer还通过位置编码(Positional Encoding)来保留序列中的顺序信息。位置编码是一个可学习的向量,它会与输入序列的每个元素进行相加,从而在表示中包含位置信息。这种方式使得Transformer能够在并行计算的同时保持对序列顺序的敏感性。

3.self-attention的原理

Query 矩阵负责提出查询需求,Key 矩阵提供匹配的信息线索,而 Value 矩阵则包含了具体的信息内容。

Q矩阵与K矩阵的转置进行点积运算再除以K矩阵向量的维度并进行softmax归一化后得到了attention-score,这些分数决定了在编码当前位置的词时,对所有位置的词分别有多少的注意力。将attention-score与对应的值向量相乘,并将结果相加,以得到最终的输出向量。这个输出向量包含了当前单词在考虑所有其他单词影响后的综合表示。这个输出向量现在可以作为单词在当前上下文中的表示,并用于后续的神经网络层中进行进一步的处理。

4.为什么需要multi-attention

(1)增加模型的学习能力和表达力

通过多个注意力头,模型可以学习到更丰富的上下文信息。每个头可能关注输入的不同特征,这些特征综合起来可以更全面地理解和处理输入序列。

代码

(2)并行化计算提高效率

Multi-head Attention的计算是高度并行化的,因为每个注意力头都可以独立地进行计算,而不需要等待其他头的输出。这种并行化特性使得Multi-head Attention在处理长序列或大规模数据集时具有更高的效率。

5.位置编码的作用和实现

由于 Transfomer 模型不再使用基于循环的方式建模文本输入,序列中不再有任何信息能够提示模型单词之间的相对位置关系。在表示序列中单词顺序和距离。

位置编码的代码:构建一个矩阵存储位置编码,然后加入到单词嵌入向量中。

6.解码器部分的注意力

交叉注意力、掩码注意力

Encoder-Decoder Attention层是使用前一层的输出来构造 Query 矩阵,而 Key 矩阵和 Value 矩阵来自于解码器最终的输出。

7.残差连接和归一化的作用

使得信息流动更加高效,有利于模型的稳定优化。

2.2生成式预训练语言模型 GPT

生成式预训练:生成式预训练的核心想法是学习如何产生数据,此时模型的输入和输出都是数据本身,因此不需要任何的人工标注。然而,在不加约束的情况下,模型有可能学到一些平凡解(如恒等映射),这对于下游的任务显然是没有用的。因此,生成式预训练的目标是学到高维数据在低维空间的一个有效表示(representation)。这个过程通常会约束模型将数据映射到一个低维的特征空间,并会对模型的输入进行一定的扰动,以增加生成任务的难度,防止模型学到平凡解。

自回归模型:根据过去时刻的数据生成未来时刻的数据。这在自然语言处理(NLP)中也被称为语言模型(Language Modeling,LM)任务。给定文本序列x1:T=[x1,x2,...,xT],语言模型的学习目标是最大化序列的出现概率。

自编码模型:目标是学习输入数据的紧凑表示,也称为编码(encoding)。它试图通过编码器和解码器的组合,将输入数据映射到一个低维的潜在空间表示,然后再从这个表示中重建出输入数seq2Seq模型:核心思想是将一个输入序列转换成一个输出序列。它常用于机器翻译、文本摘要和对话系统等需要内容理解和生成的任务。

GPT模型是基于 Transformer 架构构造的仅由解码器组成的网络结构,采用自回归的方式构建语言模型。这主要是因为GPT模型的设计初衷是为了生成文本,而解码层在生成任务中起着关键作用,保证了输入文本每个位置只能依赖过去时刻的信息。

2.2.1 无监督预训练

给定文本序列,GPT首先将其映射为稠密的向量(词向量+位置向量)然后放入Transformer Block中进行编码,GPT模型的输出层基于最后一层的输出,预测每个位置上的条件概率。

 2.2.2 有监督下游任务微调

下游任务在微调过程中,针对任务目标进行优化,很容易使得模型遗忘预训练阶段所学习到 的通用语义知识表示,从而损失模型的通用性和泛化能力,造成灾难性遗忘(Catastrophic Forgetting) 问题。因此,通常会采用混合预训练任务损失和下游微调损失的方法来缓解上述问题。

2.2.3 基于 HuggingFace 的预训练语言模型实践

连不上HuggingFace

Huggingface 超详细介绍 - 知乎 (zhihu.com)

1.数据集加载

2.训练词元分析器(Tokenizer)

3.预处理语料集合

4.模型训练

5.可以用pipline实现不同的任务

2.3 大语言模型结构

2.3.1 LLaMA 的模型结构

LLaMa系列模型详解(原理介绍、代码解读):LLaMa_llama模型-CSDN博客

万字长文详解LlaMA 3的前世今生 - 知乎 (zhihu.com)

采用了前置层归一化(Pre-normalization)并使用 RMSNorm 归一化函数 (Normalizing Function)、激活函数更换为 SwiGLU,并使用了旋转位置嵌入(RoP),整体 Transformer

架构与 GPT-2 类似

1. RMSNorm 归一化函数  

Transformer使用的是layer norm(层归一化)

RMSNorm:通过计算输入向量的均方根(RMS)进行归一化,避免了计算均值和标准差的过程,从而简化了计算。

LayerNorm:需要计算输入向量的均值和标准差,相对RMSNorm来说计算过程更复杂。

2.SwiGLU 激活函数

Swish 激活函数在参数 β 不同取值下的形状,可以看到当 β 趋近于 0 时,Swish 函数趋近于线性函数 y = x,当 β 趋近于无穷大时,Swish 函数趋近于 ReLU 函数,β 取值为 1 时,Swish 函数是光滑且非单调。在 HuggingFace 的 Transformer 库中Swish函数使用 silu 函数代替。

3.旋转位置嵌入(RoPE)

通过绝对位置编码的形式实现相对位置编码,其目标是给q、k添加绝对位置信息。

绝对位置编码:在序列中每个位置上都固定地分配一个唯一的编码。这种编码通常是基于正弦和余弦函数的周期性函数生成的,也可以是可学习的参数。

相对位置编码:根据元素之间的相对位置关系来动态地生成位置信息。这种编码允许模型在处理序列时考虑元素之间的相对距离。

Rotary Position Embedding (RoPE, 旋转式位置编码) | 原理讲解+torch代码实现_旋转位置编码-CSDN博客

复数的矩阵表示 - Invo1 - 博客园 (cnblogs.com)

4.MQA多查询注意力

lama1是Meta在2023年2月发布的大语言模型,是当时性能非常出色的开源模型之一,参数量分别有7B(十亿)、13B、30B和65B四个版本。Llama的各个参数量版本都在超过1T(万亿) token的语料上进行了预训训练,其中,最大的65B参数的模型在2048张80G显存的A100上训练了近21天,甚至在大多数基准测试中都超越了具有175B参数的GPT-3。

在大数据和机器学习的语境下,数据量通常指的是用于训练或测试模型的数据的大小。数据量的单位可以是字节(Byte)、千字节(KB)、兆字节(MB)、吉字节(GB)等。

字节(Byte):是数据存储的基本单位。一个字节由8个比特(bit)组成。
千字节(KB):等于1024个字节。
兆字节(MB):等于1024个千字节,也常用于表示文件或数据的大小。
吉字节(GB):等于1024个兆字节,是较大的数据存储单位。
在大模型中,由于模型参数通常是以浮点数(如float32)存储的,因此可以通过模型参数量来计算模型所需的存储空间大小。例如,如果一个模型有1.1亿个参数,并且每个参数用float32表示(即每个参数占4个字节),那么该模型所需的存储空间大约为44MB(1.1亿×4字节/1024/1024)。

LLama2

MHA改成GQA:整体参数量会有减少
FFN模块矩阵维度有扩充:增强泛化能力,整体参数量增加
上下文长度是llama两倍(长度从2048->4096) 训练语料增加约 40%,体现在1.4T->2.0T的Tokens 

LLama3

2.3.2 注意力机制优化

1. 稀疏注意力机制

 通过限制 Query-Key 对的数量来减少计算复杂度。这类方法就称为稀疏注意力。可以将稀疏化方法进一步分成两类:基于位置信息和基于内容。

 基于内容的稀疏注意力是是根据输入数据来创建稀疏注意力,其中一种很简单的方法是选择 和给定查询(Query)有很高相似度的键(Key)。

2. FlashAttention  

FlashAttention图解(如何加速Attention) - 知乎 (zhihu.com)

Flash Attention原理详解(含代码讲解) - 知乎 (zhihu.com)

计算机原理课程复习:计算机组成原理、计算机网络、数据库、操作系统、数据结构与算法

计算机组成原理:最详细笔记-CSDN博客

【计算机网络】学计算机的正确顺序千万别弄反了,到时候后悔就来不及了_哔哩哔哩_bilibili

3.多查询注意力 (MQA)

在多查询注意力中不同的注意力头共享一个键和值的集合,每个头只单独保留了一份查询参数。因此 键和值的矩阵仅有一份,这大幅度减少了显存占用,使其更高效。

第三章 语言模型训练数据

3.1数据来源

分为通用数据和专业数据

3.2数据处理

词元分析(Tokenization)目标是将原始文本分割成由词元(Token)序列的过程。词元切分也是数据预处理中至关重要的一步。

字节对编码(Byte Pair Encoding,BPE)模型。BPE 尽量将词序列中的词切分成已知的词元。

在遍历词元词表后,对于切分得到的词元序列,为每个词元查询词元表示,构成词元表示序列。若出现未登录词元,即未出现在 BPE 词表中的词元,则采取和未登录词类似的方式,为其赋予相同的表示,最终获得输入的词元表示序列。
字节级( Byte-level BPE 通过将字节视为合并的基本符号,用来改善多语言语料库(例如包含非 ASCII 字符的文本)的分词质量。 GPT-2 BART LLaMA 等大语言模型都采用了这种分词方法。原始 LLaMA 的词表大小是 32K ,并且主要根据英文进行训练,因此,很多汉字都没有直接出现在词表中,需要字节来支持所有的中文字符,由 2 个或者 3 Byte Token 才能拼成一个完整的汉字。
WordPiece,该算法做为BERT 的分词器。WordPiece算法的基本思想与BPE类似,但它在合并字符对时采用了不同的策略。WordPiece算法在每次迭代中,不是简单地选择出现频率最高的字符对进行合并,而是选择能够使得语言模型损失最小的字符对进行合并。这种方法能够生成更加符合语言特性的子词单元。
Unigram 词元分析,从一个足够大的可能词元集合开始,然后迭代地从当前列表中删除词元,直到达到预期的词汇表大小为止。

3.3数据影响分析

数据规模影响

模型参数规模、训练数据量以及总计算量

模型参数规模是指模型中参数的数量,这些参数通常用于表示权重和偏差,决定了模型对输入数据的响应方式。参数规模的大小可以影响模型的性能、计算效率和内存需求。

训练数据量是指用于训练模型的数据集的大小。训练数据的特性和数量是决定一个模型性能好坏的最主要因素。

总计算量通常指的是模型在训练和推理过程中所需的计算资源总量,这包括CPU、GPU等处理器的使用时间以及内存和存储的访问次数等。总计算量的多少取决于多个因素,如模型的复杂度、输入数据的规模以及所使用的硬件设备等。

研究发现,如果模型训练要达到计算最优(Compute-optimal),模型大小和训练词元数量应该等比例缩放,即模型大小加倍则训练词元数量也应该加倍。

数据质量影响、数据多样性影响

3.4开源数据集合

Pile、ROOTS、RefinedWeb、SlimPajama


http://www.ppmy.cn/devtools/122599.html

相关文章

解决AWS Organizatiion邀请多个Linker账号数量限额问题

文章目录 情景再现什么是 AWS Organizations?操作步骤完整支持工单截图参考链接 情景再现 冷知识:默认情况下,一个组织中允许的原定设置最大账户数为10个。新创建的账户和组织的限额可能会低于默认的 10 个账户。 现在需要用一个AWS账号&…

程序环境和预处理

翻译环境,在这个环境中源代码被转换为可执行的机器指令。 执行环境,它用于实际执行代码。 翻译环境 翻译环境分为编译与链接,是将我们编译的代码转换成程序运行的二进制代码进行转换。下面是讲述翻译环境: 组成一个程序的每个源…

计算机网络:计算机网络体系结构 —— 专用术语总结

文章目录 专用术语实体协议服务服务访问点 SAP 服务原语 SP 协议数据单元 PDU服务数据单元 SDU 专用术语 实体 实体是指任何可以发送或接收信息的硬件或软件进程 对等实体是指通信双方处于相同层次中的实体,如通信双方应用层的浏览器进程和 Web 服务器进程。 协…

通信工程学习:什么是LAN局域网、MAN城域网、WAN广域网

LAN局域网、MAN城域网、WAN广域网 LAN(Local Area Network,局域网)、MAN(Metropolitan Area Network,城域网)和WAN(Wide Area Network,广域网)是计算机网络中根据覆盖范围…

前端DOM常用操作

前端DOM常用操作及代码案例 在前端开发中,DOM(文档对象模型)操作是不可或缺的一部分。通过DOM,开发者可以查找节点、增删节点、修改节点内容、操作CSS样式等。本文将介绍一些常用的DOM操作,并提供相应的代码案例。 一…

【C++】--类和对象(2)

👌个人主页: 起名字真南 👆个人专栏:【数据结构初阶】 【C语言】 【C】 目录 1 类的默认成员函数2 构造函数3 析构函数4 拷贝构造5 赋值运算符重载5.1 运算符重载5.2 赋值运算符的重载 1 类的默认成员函数 默认成员函数就是用户没有显示实现,…

rabbitMq------客户端模块

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言消费者模块信道管理模块管理的字段提供的接口 信道内存管理连接管理类 前言 在RabbitMQ中,提供服务的是信道,因此在客⼾端的实现中&…

力扣 中等 216组合总和III

文章目录 题目介绍解法 题目介绍 解法 是77.组合链接的扩展 class Solution {List<List<Integer>> result new ArrayList<>();List<Integer> path new ArrayList<>();public List<List<Integer>> combinationSum3(int n, int k) …