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

news2024/10/7 11:34:20

第一章 绪论

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

大规模语言模型(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.coloradmin.cn/o/2194066.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

重学SpringBoot3-集成Redis(五)之布隆过滤器

更多SpringBoot3内容请关注我的专栏:《SpringBoot3》 期待您的点赞👍收藏⭐评论✍ 重学SpringBoot3-集成Redis(五)之布隆过滤器 1. 什么是布隆过滤器?基本概念适用场景 2. 使用 Redis 实现布隆过滤器项目依赖Redis 配置…

Spring开发最佳实践之跨域处理

1. 跨域处理 1.1 异常现象 1.2 异常原因分析 跨源资源共享的官方定义如下: 跨源资源共享(CORS,Cross Origin Resource Sharing。或通俗地译为跨域资源共享)是一种基于 HTTP 头的机制,该机制通过允许服务器标示除了它自…

上海理工大学《2023年+2019年867自动控制原理真题》 (完整版)

本文内容,全部选自自动化考研联盟的:《上海理工大学867自控考研资料》的真题篇。后续会持续更新更多学校,更多年份的真题,记得关注哦~ 目录 2023年真题 2019年真题 Part1:2023年2019年完整版真题 2023年真题 2019年…

Java使用线程池创建线程

一、线程前言 首先我们知道,线程的概念如果不知道可以去看这一篇Java中的线程,我们这篇主要讲述的是Java怎么使用线程池创建线程,首先我们要对线程池有点概念,其实顾名思义,线程池就是有喝多线程的一个池子类似于&…

一书讲透LLM大语言模型,《掌握大型语言模型》,看完我都懵了!

《掌握大型语言模型》 (Mastering Large Language Models)由Sanket Subhash Khandare撰写,是一本关于大型语言模型(LLMs)的高级技术、应用、前沿方法和顶尖模型的指南。 这本大模型书已经上传CSDN,朋友们如…

《Windows PE》4.2 绑定导入表

绑定导入表(Bound Import Table)是文件中的一个数据结构,用于存储已经绑定(即完成绑定导入)的外部函数的信息。 本节必须掌握的知识点: 绑定导入表数据结构 实例分析 4.2.1 绑定导入表数据结构 绑定导入…

【AIGC】ChatGPT是如何思考的:探索CoT思维链技术的奥秘

博客主页: [小ᶻZ࿆] 本文专栏: AIGC | ChatGPT 文章目录 💯前言💯什么是CoT思维链CoT思维链的背景与技术发展需求 💯CoT思维链的工作原理💯CoT思维链的应用领域💯CoT思维链的优势💯CoT思维…

动态内存管理笔试题

目录 1.第一题1.1如何修改 2.第二题2.1题想2.2深刻理解 3.第三题4.第四题 1.第一题 void GetMemory(char* p) {p (char*)malloc(100); } void Test(void) {char* str NULL;GetMemory(str);strcpy(str, "hello world");printf(str); }请问运⾏Test 函数会有什么样的…

解锁数字化营销成功密码

在趋势部分,列举了移动优先、社交媒体主导、个性化营销、视频营销崛起和数据驱动决策等方面,让读者快速了解数字化营销的发展方向。策略部分强调了明确目标受众、制定整合营销策略、优化用户体验、重视内容营销和社交媒体营销以及利用搜索引擎优化和数据…

jQuery——平滑翻页

平滑翻页 param next true:下一页 false:下一页 本文分享到此结束,欢迎大家评论区相互讨论学习,下一篇继续分享jQuery中循环翻页的学习。

Docker 实践与应用举例

Docker 实践与应用举例 Docker 已经成为现代软件开发和部署中的重要工具,通过容器化技术,开发者可以轻松管理应用的依赖环境、简化部署流程,并实现跨平台兼容性。本篇博客将详细介绍 Docker 的基本概念、实践操作以及应用场景,帮…

工业缺陷检测深度学习方法

工业缺陷检测深度学习方法 基于深度学习的工业缺陷检测方法可以降低传统人工质检的成本, 提升检测的准确性与效率, 因而在智能制造中扮演重要角色, 并逐渐成为计算机视觉领域新兴的研究热点之一. 其被广泛地应用 于无人质检、智能巡检、质量控制等各种生产与运维场景中. 本综述…

跨设备剪贴板同步服务ClipCascade

什么是 ClipCascade ? ClipCascade 是一款开源的轻量级工具,可以自动同步您的剪贴板在多个设备之间,无需按键。它确保设备之间无缝的剪贴板共享,并以端对端加密优先保护隐私。无论您是在不同工作站之间切换,还是仅仅希…

检索增强思考 RAT(RAG+COT):提升 AI 推理能力的强大组合

在人工智能领域,大型语言模型(LLMs)已经取得了显著的进展,能够生成类似人类的文本并回答各种问题。然而,它们在推理过程中仍面临一些挑战,例如缺乏对事实的准确把握以及难以处理复杂的多步骤问题。为了解决…

Unity3D 单例模式

Unity3D 泛型单例 单例模式 单例模式是一种创建型设计模式,能够保证一个类只有一个实例,提供访问实例的全局节点。 通常会把一些管理类设置成单例,例如 GameManager、UIManager 等,可以很方便地使用这些管理类单例,…

用YOLO和LLM增强的OCR

虽然最近我花了很多时间在大型语言模型 (LLM) 上进行实验,但我对计算机视觉的热情始终未减。因此,当我有机会将两者融合在一起时,我迫不及待地想要立即开始。在 Goodreads 上扫描书籍封面并将其标记为已读一直感觉有点神奇,我很兴…

SSM外卖点餐软件APP-计算机毕业设计源码30768

目 录 摘要 1 绪论 1.1 研究背景 1.2研究目的 1.3论文结构与章节安排 2 外卖点餐软件APP系统分析 2.1 可行性分析 2.1.1 技术可行性分析 2.1.2 经济可行性分析 2.1.3 操作可行性分析 2.2 系统流程分析 2.2.1 数据流程 3.3.2 业务流程 2.3 系统功能…

这些编程工具竟然能让我效率翻倍?开发者必备神器盘点!

人不走空 🌈个人主页:人不走空 💖系列专栏:算法专题 ⏰诗词歌赋:斯是陋室,惟吾德馨 目录 🌈个人主页:人不走空 💖系列专栏:算法专题 ⏰诗词歌…

基于深度学习多层感知机进行手机价格预测

数据集介绍 数据集采用了Kaggle实战数据集,链接如下,如有需要可自行下载 https://www.kaggle.com/datasets/atefehmirnaseri/cell-phone-price/data 数据集简要介绍 • battery_power:电池的总能量存储(毫安时) • blue:设备…

人工智能对未来工作影响的四种可能性

随着人工智能(AI)技术的迅速发展,其对人类工作的影响已成为讨论的热点话题。我们经常听到有关AI威胁论的观点,担心它将取代人类工作,但也有专家认为AI将成为一种辅助工具,帮助人类提升工作效率。宾夕法尼亚…