通过检索增强生成 (RAG) 应用程序的视角学习大型语言模型 (LLM)。
本系列博文
- 简介
- 数据准备
- 句子转换器
- 矢量数据库
- 搜索与检索
- 大语言模型(本帖)
- 开源 RAG
- 评估
- 服务LLM
- 高级 RAG
1.什么是大型语言模型?
大型语言模型 (LLM) 是一种非常大的深度学习模型,它们在大量数据上进行了预训练。底层 Transformer 是一组神经网络,由具有自注意力功能的编码器和解码器组成。编码器和解码器从文本序列中提取含义,并理解其中单词和短语之间的关系。
LLM大家庭
一些最具代表性的 LLM 框架的时间表(迄今为止)
Transformer 神经网络架构允许使用非常大的模型,通常具有数千亿个参数。这种大规模模型可以获取大量数据,通常来自互联网,但也来自诸如Common Crawl(包含超过 500 亿个网页)和维基百科(约有 5700 万个网页)等来源。
NLP 应用的关键工具之一是语言建模。
该图显示了 LLM 的不同组成部分。
2.语言建模(LM)
语言和交流的过程可以简化为计算吗?
语言模型通过从一个或多个文本语料库中学习来生成概率。文本语料库是一种语言资源,由一种或多种语言的大量结构化文本组成。文本语料库可以包含一种或多种语言的文本,并且通常带有注释。
语言模型可以根据在训练过程中学习到的统计模式,预测最有可能跟在这个短语后面的单词(或多个单词)。在图中,语言模型可以估计,单词“蓝色”跟在单词“天空的颜色”序列后面的概率为 91%。
构建语言模型的最早方法之一是基于n-gram。n -gram 是来自给定文本样本的 n 个项目的连续序列。在这里,该模型假设序列中下一个单词的概率仅取决于前面单词的固定大小窗口:
N元语法
然而,n-gram 语言模型已基本被神经语言模型所取代。它基于神经网络,这是一种受生物神经网络启发的计算系统。这些模型利用单词的连续表示或嵌入来进行预测:
神经网络
3. 基础模型和服务LLM
这与 NLP 应用中早期的方法大相径庭,早期的方法中,专门的语言模型被训练来执行特定任务。相反,研究人员在 LLM 中观察到了许多新兴能力,这些能力是他们从未接受过训练的。
例如,服务LLM已被证明可以执行多步算术、解读单词的字母,并识别口语中的冒犯性内容。最近,ChatGPT 是一款基于 OpenAPI 的 GPT 系列法学硕士构建的流行聊天机器人,它已通过美国医师执照考试等专业考试!
基础模型通常是指在广泛数据上训练的任何模型,可以适应广泛的下游任务。这些模型通常使用深度神经网络创建,并使用自监督学习在许多未标记的数据上进行训练。
在训练过程中,文本序列从语料库中提取出来并截断。语言模型计算缺失单词的概率,然后通过基于梯度下降的优化机制对其进行微调并反馈给模型以匹配基本事实。这个过程在整个文本语料库上重复进行。
尽管如此,LLM 通常是针对语言相关数据(如文本)进行训练的。但基础模型通常是针对多模态数据(文本、图像、音频等的混合)进行训练的。更重要的是,基础模型旨在作为更具体任务的基础:
基础模型通常会针对各种下游认知任务进行进一步的训练,从而进行微调。微调是指采用预先训练好的语言模型,并使用特定数据针对不同但相关的任务进行训练的过程。这个过程也称为迁移学习。
4. 服务LLM的架构
大多数早期的 LLM 都是使用带有 LSTM 和 GRU 的 RNN 模型创建的。然而,它们面临着挑战,主要是在执行大规模的 NLP 任务时。但这正是 LLM 所期望的。这导致了 Transformers 的诞生!
早期架构
刚开始时,LLM 主要是使用自监督学习算法创建的。自监督学习是指处理未标记的数据以获得有用的表示,以帮助完成下游学习任务。
自监督学习算法通常使用基于人工神经网络 (ANN)的模型。我们可以使用多种架构创建 ANN,但 LLM 最广泛使用的架构是循环神经网络 (RNN)。
循环神经网络(RNN)
现在,RNN 可以使用其内部状态来处理可变长度的输入序列。RNN既有长期记忆,也有短期记忆。RNN 有多种变体,如长短期记忆 (LSTM)和门控循环单元 (GRU)。
LSTM 和 GRU 的问题
使用 LSTM 单元的 RNN 训练起来非常慢。此外,对于此类架构,我们需要按顺序或串行方式输入数据。这不允许我们并行化并使用可用的处理器核心。
另外,带有 GRU 的 RNN 模型训练速度更快,但在较大的数据集上表现不佳。尽管如此,长期以来,LSTM 和 GRU 仍然是构建复杂 NLP 系统的首选。然而,此类模型也存在梯度消失的问题:
梯度消失
注意力机制
RNN 的部分问题通过在其架构中添加注意力机制得到部分解决。在 LSTM 等循环架构中,可传播的信息量有限,并且保留信息的窗口较短。
然而,有了注意力机制,这个信息窗口就可以显著增加。注意力是一种增强输入数据某些部分同时削弱其他部分的技术。其背后的动机是网络应该更多地关注数据的重要部分:
注意力机制和自我注意力机制之间存在细微的差别,但它们的动机是一样的。注意力机制指的是关注另一个序列的不同部分的能力,而自我注意力指的是关注当前序列的不同部分的能力。
自注意力机制允许模型访问来自任何输入序列元素的信息。在 NLP 应用中,这提供了有关远处标记的相关信息。因此,模型可以捕获整个序列中的依赖关系,而无需固定或滑动窗口。
具有注意力机制的 RNN 模型在性能上得到了显著提升。然而,循环模型本质上难以扩展。但自注意力机制很快就被证明非常强大,甚至不需要循环顺序处理。
2017 年,谷歌大脑团队引入了 transformers,这或许是 LLM 历史上最重要的转折点之一。Transformer是一种采用自注意力机制并一次性处理整个输入的深度学习模型:
作为对早期基于 RNN 模型的重大改变,Transformer 没有循环结构。在有足够的训练数据的情况下,仅 Transformer 架构中的注意力机制就能与带有注意力机制的 RNN 模型的性能相媲美。
使用 Transformer 模型的另一个显著优势是它们更加并行化,并且需要的训练时间明显更少。这正是我们在具有可用资源的大量基于文本的数据上构建 LLM 所需要的最佳点。
编码器-解码器架构
许多基于 ANN 的自然语言处理模型都是使用编码器-解码器架构构建的。例如,seq2seq是谷歌最初开发的一个算法系列。它使用带有 LSTM 或 GRU 的 RNN 将一个序列转换为另一个序列。
原始的Transformer 模型也采用了编码器-解码器架构。编码器由编码层组成,这些编码层一层接一层地迭代处理输入。解码器由解码层组成,这些解码层对编码器的输出执行相同的操作:
Transformer 的高层架构
每个编码器层的功能是生成包含有关输入的哪些部分彼此相关的信息的编码。输出编码随后被传递给下一个编码器作为其输入。每个编码器由一个自注意力机制和一个前馈神经网络组成。
此外,每个解码器层都会采用所有编码并使用其合并的上下文信息来生成输出序列。与编码器一样,每个解码器都由自注意力机制、编码注意力机制和前馈神经网络组成。
5. 预训练
在此阶段,模型以自监督的方式在大量非结构化文本数据集上进行预训练。预训练的主要挑战是计算成本。
存储 1B 参数模型所需的 GPU RAM
=> 1 个参数 –> 4 个字节(32 位浮点数)
=> 1B 参数 –> 4*10⁹ 字节 = 4GB
1B 参数模型所需的 GPU RAM = 4GB@32 位全精度
我们来计算一下训练1B参数模型所需要的内存:
Model Parameter --> 4 bytes per parameter Parameter --> 4 bytes per parameter
Gradients --> 4 bytes per parameter
ADAM Optimizer (2 states) --> 8 bytes per parameter
Activations and temp memory (variable size) --> 8 bytes per parameter (high-end estimate)
==> 4 bytes parameter + 20 extra bytes per paramter
因此,训练所需的内存约为存储模型所需内存的 20 倍。
存储 1B 参数模型所需的内存 = 4GB@32 位全精度
训练 1B 参数模型所需的内存 = 80GB@32 位全精度
6.数据并行训练技术
6.1. 分布式数据并行(DDP)
分布式数据并行 (DDP) 要求模型权重以及训练所需的所有其他附加参数、梯度和优化器状态都放在单个 GPU 中。如果模型太大,则应使用模型分片。
6.2. 完全分片数据并行 (FSDP)
完全分片数据并行 (FSDP) 通过在 GPU 之间分发(分片)模型参数、梯度和优化器状态来减少内存。
7. 微调
通过微调,我们可以调整模型权重以更好地适应特定任务或领域,从而帮助我们从预先训练的大型语言模型 (LLM) 中获得更多收益。这意味着您可以获得比普通快速工程更高质量的结果,而成本和延迟却只有普通快速工程的一小部分。
近年来微调方法的演进发展。同一分支上的模型具有一些共同特征。模型的垂直位置显示了其发布日期的时间线。
为什么要微调LLM?