大语言模型:LLM结构与与训练教学课件_第1页
大语言模型:LLM结构与与训练教学课件_第2页
大语言模型:LLM结构与与训练教学课件_第3页
大语言模型:LLM结构与与训练教学课件_第4页
大语言模型:LLM结构与与训练教学课件_第5页
已阅读5页,还剩76页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第7章结构与训练本章主要内容:1.架构与框架2.LLM结构与优化3.词向量4.LLM训练

7.1架构与框架LLM用于处理大规模数据集,并在自然语言处理、计算机视觉、多模态任务等领域表现出了SOTA的性能。7.1.1LLM架构1.大语言模型的架构类型大型语言模型的架构主要分为三种类型,这些架构基于Transformer框架的不同模块设计,适用于不同的任务需求:(1)Encoder-only架构①核心组件:仅使用Transformer的编码器部分。②特点:通过多头自注意力机制捕捉输入序列的上下文信息。不涉及自回归生成,适合需要理解输入内容的任务。③典型模型:BERT(BidirectionalEncoderRepresentationsfromTransformers)模型。④应用场景:文本分类、问答、命名实体识别等。⑤工作流程:输入文本经过分词和嵌入后,通过多层编码器提取特征。最终输出每个词的上下文表示,用于下游任务(如分类或提取)。.(2)Decoder-only架构①核心组件:仅使用Transformer的解码器部分。②特点:使用遮蔽自注意力机制,确保模型只能关注当前及之前的词,避免未来信息泄露。适合自回归生成任务。使用遮蔽自注意力机制,确保模型只能关注当前及之前的词,避免未来信息泄露。适合自回归生成任务。③典型模型GPT(GenerativePre-trainedTransformer)系列模型。④应用场景:文本生成、对话系统、机器翻译等。⑤工作流程:输入文本经过分词和嵌入后,通过多层解码器逐步生成下一个词。每个词的生成依赖之前的上下文,确保生成连贯的序列。(3)Encoder-Decoder架构①核心组件:同时使用编码器和解码器。②特点:编码器负责提取输入序列的上下文表示,解码器根据编码器的输出生成目标序列。通过交叉注意力机制实现编码器和解码器之间的信息交互。③典型模型:T5(Text-to-TextTransferTransformer)模型、BART模型。④应用场景:机器翻译、文本摘要、复杂问答等。⑤工作流程:输入文本经过编码器处理后,生成上下文表示。解码器根据编码器的输出和自身生成的序列逐步生成目标文本。.2.LLM核心组件LLM通常包含以下核心组件。(1)嵌入层①功能:将离散的输入(如词或子词)映射为连续的向量表示。②类型·词嵌入:将词转换为固定维度的向量。·位置编码:为模型提供输入序列中词的位置信息,解决Transformer无法直接处理顺序的问题。③作用为模型提供语义和顺序信息,是后续处理的基础。(2)自注意力机制(Self-Attention)①功能计算输入序列中每个词与其他词的相关性,动态分配权重。②特点允许模型捕捉长距离依赖关系。通过多头注意力机制并行处理不同类型的依赖关系。③计算公式:Attention(Q,K,V)=Softmax(QKT/sqrt(dk))V其中,Q(Query)、K(Key)、V(Value)为线性变换后的向量,dk为缩放因子。.(3)前馈神经网络①功能:对每个词的表示进行非线性变换,增强模型的表达能力。②结构:通常由两层全连接网络和ReLU激活函数组成。(4)残差连接和层归一化①功能:残差连接:将输入直接加到输出,缓解梯度消失问题;层归一化:稳定训练过程,加速收敛。3.不同架构的对比与适用场景从几个关键维度对比三种架构如表7-1所示。表7-1关键维度三种架构对比·仅编码器(Encoder-only):适合需要理解输入内容的任务,如BERT在问答系统中的应用。·仅解码器(Decoder-only):适合需要生成文本的任务,如GPT在对话生成中的应用。·编码器-解码器(Encoder-Decoder):适合需要输入和输出不同结构的任务,如T5在机器翻译中的应用。大型语言模型的架构设计充分体现了Transformer框架的灵活性,不同架构的选择取决于任务需求、计算资源和效率要求。理解这些架构及其组件,有助于更好地应用和优化模型。维度Encoder-onlyDecoder-onlyEncoder-Decoder核心模块编码器解码器编码器

+解码器注意力机制多头自注意力遮蔽多头自注意力自注意力+交叉注意力适用任务文本理解(如分类、问答)文本生成(如对话、摘要)复杂任务(如翻译、摘要)计算效率较高较高较低(因需额外解码器)7.1.2LLM架构选择选择合适的大语言模型(LLM)架构需综合考虑任务需求、资源限制和性能目标。以下是具体的决策框架和关键因素。1.根据任务类型选择架构(1)文本理解任务(如分类、情感分析、命名实体识别):①推荐架构:Encoder-only(如BERT、RoBERTa)。②原因:编码器能双向捕捉上下文,适合静态输入分析。(2)文本生成任务(如对话、文本续写、摘要):①推荐架构:Decoder-only(如GPT系列)。②原因:解码器通过遮蔽注意力避免未来信息泄露,适合自回归生成。(3)复杂任务(如机器翻译、问答、多轮对话):①推荐架构:Encoder-Decoder(如T5、BART)。②原因:结合编码器理解输入和解码器生成输出,适应输入输出结构差异。.2.考虑计算资源与效率(1)硬件限制:①低资源环境:优先选择Encoder-only或轻量级Decoder-only模型(如DistilBERT、GPT-NeoX),因其参数量相对较小。②高资源环境:可选用大型Encoder-Decoder模型(如T5-11B),但需注意内存和显存消耗。(2)推理速度:①实时应用(如对话系统):Decoder-only通常更快,适合低延迟场景。④批量处理(如文档分类):Encoder-only并行计算效率更高。3.性能需求与精度权衡(1)高精度需求:①复杂任务(如翻译)需Encoder-Decoder架构,但可能牺牲速度。②文本生成任务中,大型Decoder-only模型(如GPT-4)通常表现更优。(2)平衡性能与效率:①中等规模Encoder-only模型(如RoBERTa-base)在多项任务中表现均衡。②使用量化或蒸馏技术(如GPT-J-6B)可降低大模型成本。4.数据规模与多样性(1)小数据集Encoder-only或小型Decoder-only模型更易训练,避免过拟合。.(2)大数据集:Encoder-Decoder架构能更好利用数据多样性,提升复杂任务表现。5.可扩展性与未来需求(1)多任务学习:Encoder-Decoder(如T5)支持统一文本到文本格式,适合多任务微调。(2)长期维护:选择社区支持活跃的架构(如BERT、GPT系列),便于获取更新和工具支持。6.实际案例参考(1)问答系统:BERT(Encoder-only)+微调,适合静态答案提取。(2)机器翻译:T5(Encoder-Decoder),需处理输入输出语言对。(3)创意写作:GPT-4(Decoder-only),擅长生成流畅文本。总结决策流程如下:①明确任务目标:理解是侧重输入分析还是输出生成。②评估资源限制:硬件、预算、推理延迟要求。③测试候选模型:在小规模数据上验证不同架构的性能。⑤迭代优化:根据结果调整架构或采用技术(如蒸馏、量化)。通过以上框架,可系统性地选择最适合的LLM架构,平衡性能与资源需求。7.1.3LLM构建LLM构建过程如下:

1.确定需求分析与目标:明确LLM的应用场景、性能要求和语言类型等。

2.数据收集与处理

·数据收集:从互联网、书籍、文章等多种数据源收集大量文本数据。

·数据清洗:删除错误数据,填补缺失数据和更改错误数据等。

·数据预处理:包括分词、编码、序列化等步骤。

3.模型设计与选择

·架构选择:选择合适的神经网络架构,例如Transformer等。

·参数设置:确定网络的层数、隐藏单元数、注意力机制等参数。

4.训练准备

·数据集划分:将数据分为训练集、验证集和测试集。

·优化器选择:选择合适的优化算法,如自适应矩估计梯度下降的优化算法和随机梯度下降等算法。

·损失函数定义:确定用于训练的损失函数,例如交叉熵损失。

5.模型训练

·预训练:在大规模文本上进行无监督预训练。

·微调:在特定任务上进行有监督微调。

.6.评估与调优

·性能评估:使用测试集评估模型性能。

·超参数调优:根据评估结果调整学习率、批次大小等超参数。7.模型部署

·模型压缩:通过剪枝、量化等手段减少模型大小。

·服务部署:将模型部署到云服务或边缘设备。8维护与更新

·持续学习:根据用户反馈和数据变化,不断更新模型。

·监控:监控模型性能,确保稳定运行。 简化的流程表示如图7-1所示。图7-1的流程图仅为简化示意图,实际的构建过程会更加复杂,将涉及到许多

细节和技术决策。

7.1.4LLM评估7.1.4大语言模型的评估评估模型性能是确保模型在特定任务中表现良好且满足实际需求的关键步骤。以下从评估方法、常用指标和实际应用中的注意事项三个方面进行详细说明:1.评估方法评估模型性能时,首先需要选择合适的评估方法,确保模型在未见过的数据上表现稳定且泛化能力强。几种常见的评估方法如下。(1)数据集划分①将数据集划分为训练集和测试集(通常比例为70%训练集和30%测试集,或80%训练集和20%测试集)。②训练集用于模型训练,测试集用于评估模型在未见过的数据上的表现。(2)交叉验证①K折交叉验证:将数据集分成K个子集,每次用K-1个子集训练模型,剩下的1个子集用于测试,重复K次并取平均结果。适用于数据量较小的情况,能够更全面地评估模型性能。②留一法:当数据集非常小时,留一法将每个样本单独作为测试集,其余样本作为训练集,确保每个样本都被测试到。③自助法:抽样生成多个训练集,未抽中的样本作为测试集,适用于数据量有限但需要更多评估样本的情况。.2.常用评估指标根据任务类型(如分类、回归、生成等),选择合适的评估指标是关键。以下是常用指标的分类及适用场景:(1)分类任务①准确率:正确预测的样本占总样本的比例,适用于类别均衡的数据集。但在类别不均衡时可能误导。②精确率:预测为正的样本中实际为正的比例,适用于关注假正例的任务。③召回率:实际为正的样本中被正确预测的比例,适用于关注假负例的任务。F1分数:精确率和召回率的调和平均数,适用于需要平衡精确率和召回率的任务。④混淆矩阵:展示模型预测结果与实际结果之间的关系,包含真阳性(TP)、真阴性(TN)、假阳性(FP)和假阴性(FN)。⑤ROC曲线和AUC值:ROC曲线展示不同阈值下模型的真正例率(TPR)与假正例率(FPR),AUC值衡量曲线下的面积,适用于二分类任务。(2)回归任务①均方误差(MSE):预测值与真实值之差的平方的平均值,适用于需要关注预测值与真实值差异的任务。②均方根误差(RMSE):MSE的平方根,用于更直观地衡量误差大小。③平均绝对误差(MAE):预测值与真实值之差的绝对值的平均值,适用于对异常值不敏感的任务。④R²分数:衡量模型对数据的拟合程度,值越接近1表示拟合越好2。.(3)生成任务①BLEU:用于评估机器翻译生成的文本质量,通过计算生成文本与参考文本的匹配程度。②ROUGE:用于评估文本摘要的质量,衡量生成文本与参考文本的重叠程度。③BERTScore:基于语义相似性,评估生成文本与参考文本在语义层面的接近程度。(4)多任务和复杂场景①流畅性、连贯性和相关性:评估生成文本的自然程度、逻辑一致性和与输入提示的契合度。②偏差与公平性:通过分析模型在敏感类别上的表现,确保生成结果无偏见。3.结合具体场景和需求进行综合考量在评估模型性能时,还需结合具体场景和需求进行综合考量。(1)数据集选择与预处理确保数据集的分布与实际任务一致,避免因数据偏差导致评估结果失真。(2)模型选择与参数调整·根据任务需求选择合适的模型架构(如分类任务选择Encoder-only模型,生成任务选择Decoder-only模型)。·通过交叉验证等方法优化超参数,避免过拟合或欠拟合。(3)综合评估与迭代优化·结合多种指标进行综合评估,如同时关注准确率、召回率和F1分数。·通过多次迭代优化模型,确保模型在性能和资源消耗之间取得平衡。.(4)使用评估工具利用工具如Scikit-learn、TensorBoard、HuggingFace的Evaluate库等,简化评估流程并可视化结果。通过选择合适的评估方法、指标和工具,结合实际需求对模型进行全面评估,可以确保模型在特定任务中表现优异。例如,分类任务可优先关注准确率、召回率和F1分数,而生成任务则需结合BLEU和BERTScore等指标。同时,注意数据集选择、模型优化和综合评估,以提升模型的泛化能力和实际应用价值。7.2LLM结构优化LLM结构设计与优化是NLP的关键技术之一,LLM结构设计与优化的关键点如下。7.2.1LLM优化目标LLM的优化策略是指提高模型的性能、降低成本、提高可解释性以及确保其安全性的策略。优化策略汇总如下。

1.模型压缩

·剪枝:为了减少模型大小,移除权重较小的连接。

·量化:将浮点数权重转换为低精度格式,如INT8或FLOAT16。

·蒸馏:将大型模型的知识传递给小型模型。

2.训练优化

·学习率调度:使用余弦退火、预热(Warm-up)等策略调整学习率。

·梯度累积:在显存有限的情况下,通过累积多个小批量梯度来模拟大批量训练。

·混合精度训练:结合使用16位和32位浮点数来减少计算量和内存占用。

3.数据效率

·数据增强:对训练数据进行变换,如回译(反向翻译,用于检查翻译是否忠实于原文)、词汇替换等,以增强模型泛化能力。

·动态数据筛选:根据模型在训练过程中的表现动态调整训练数据的分布。

.

4.注意力机制改进

·稀疏注意力:只计算部分注意力矩阵,减少计算量。

·低秩注意力:使用低秩近似来减少注意力矩阵的计算复杂度。

·内存高效注意力:通过重用计算结果来减少内存占用。

5.并行计算

·模型并行:将模型的不同部分分布放置在不同的设备上。

·数据并行:将数据分割到不同的设备上,每个设备计算一部分梯度。

6.优化器改进

·自适应优化器:能够根据参数的历史梯度自适应调整学习率,如AdamW

Adamax等。

·非单调优化器:允许学习率在一定条件下增加,以跳出局部最小值。

7.正则化技术

·正则化技术用于防止模型过拟合。正则化通过在损失函数中添加额外的项来惩罚模型的复杂度,从而鼓励模型学习更简单、更泛化的表示。

·Dropout:在训练过程中随机丢弃一些神经元,以防止过拟合。

.8.安全性和可解释性

·对抗性训练:通过在训练数据中加入对抗样本来提高模型的鲁棒性。

·可解释性工具:开发工具来解释模型的决策过程,确保模型的可解释性。

9.环境适应性

·自适应推理:根据设备性能动态调整模型大小或推理策略。

·节能模式:在能耗敏感的环境中降低模型的计算需求。

10.资源管理 云服务优化:在云环境中优化资源分配,以降低成本。 通过上述这些策略,可以在不牺牲太多性能的情况下,使LLM更加高效、经济,并易于部署。7.2.2LLM优化的部分介绍1.参数共享 在LLM中,参数共享是一种常用的技术,旨在通过参数共享来减少模型的大小和减少模型参数数量,可以加快训练速度,提高训练效率,并可以提升模型在多个任务上的泛化能力。 (1)多任务学习 多任务学习旨在用其他相关任务提升主要任务的泛化性能。简单地说,多任务学习是一种集成学习,通过对几个任务同时训练而使得多个任务之间相互影响,这种影响将反映到共享参数上。当所有任务都收敛的时,这个结构就相当于融合了所有任务。 将多任务学习视为对人类学习的一种模拟,为了学习一个新的任务,使用学习相关任务而获得知识,例如:婴儿先学会识别脸,然后将这种知识来识别其他物体。在机器学习中,将多任务学习视为一种感应转移,通过引入电感偏置来改进模型,使得模型更强于某些假设,例如:L1正则化就是一种常见的归纳偏置,它使得模型更偏向于那些稀疏的解,在多任务学习场景中,归纳偏置由辅助任务提供,这将导致模型更倾向于那些可以同时解释多个任务的解,从而保证模型具有更好的泛化性能。

.多任务学习其实在某种程度上属于迁移学习,即利用其他信息或者其他来源的信息来影响主任务,使得当前的主任务表现更好。而实现则是通过影响共享模块的参数。在编码器-解码器架构下,凡是编码器或者解码器有共享潜质的任务都可以用多任务学习。 多任务处理架构有硬参数共享和软参数共享之分,如图7-4所示。在硬共享参数中,参数被分为共享参数和特定任务参数。其实除了这两种还有分层共享和稀疏共享,还有一些比较新颖的共享机制,例如梯度共享,元共享等。目前硬共享是最为广泛应用的共享机制,它把多个任务的数据表示嵌入到同一个语义空间中,再为每个任务使用以任务特定层提取任务的特定表示,硬共享实现起来相对简单,适合处理有较强相关性的任务,但对于弱相关任务常常表现很差。硬共享参数软参数共享LLM中的常用参数共享方式如下。 (2)硬参数共享 硬参数共享是最常用的参数共享方法,特别是在多任务学习中。以下是硬参数共享的几个关键点:

.·共享底层:在多任务学习中,不同任务共享同一个底层网络,而仅在网络的顶层使用任务的特定参数。

·节省资源:由于底层网络参数被多个任务共享,因此可以显著减少模型的总参数量,节省计算资源和存储空间。 例如,在BERT模型中,预训练阶段的所有层都是共享的,而在微调阶段,针对特定任务,可能会添加一些任务特定的层。 (3)软参数共享 软参数共享不强制不同任务的模型参数完全相同,而是通过一些技术手段使参数在不同任务之间相似。例如:·蒸馏:将一个大模型的知识“蒸馏”到一个或多个小模型上,使小模型的参数与大模型相似。·正则化:通过在损失函数中添加正则化项,鼓励不同任务的模型参数趋于相似。.2.梯度累积利用梯度累积方法可以训练更大模型。 (1)梯度累积方法的基本思想 梯度累积是一种在训练期间虚拟增加批量大小(batchsize)的方法,当可用的GPU内存不足以容纳所需的批量大小时,梯度累积方法非常有用。在梯度累积中,梯度是针对较小的批次计算的,并在多次迭代中累积(通常是求和或平均),而不是在每一批次之后更新模型权重。一旦累积梯度达到目标虚拟批大小,模型权重就会使用累积梯度进行更新。 例7-1,如果使用256的批量大小,但只将64的批量大小放入GPU内存中,就可以对大小为64的四个批执行梯度累积,处理完所有四个批次后,将获得相当于单个批量大小为256的累积梯度,。这样能够有效地模拟更大的批量大小,而无需更大的GPU内存或跨不同设备的张量分片。 虽然梯度累积可以训练具有更大批量大小的模型,但它不会减少所需的总计算量。实际上,它有时会导致训练过程略慢,因为权重更新的执行频率较低。尽管如此,它却能帮解决限制问题,但是,当批量大小过小时,将导致的更新频繁且混乱。 利用梯度累积可以在有限内存的情况下训练LLM。梯度累积可以在有限的显存资源下训练更大的模型。梯度累积是将多个小批量的梯度累加起来,然后使用累积的梯度来更新模型参数。 (2)梯度累积的关键步骤①初始化梯度:在开始训练之前,将模型的梯度初始化为零。.②前向传播和反向传播:对于每个小批量数据,执行前向传播和反向传播,得到梯度。③累积梯度:将当前小批量的梯度与之前累积梯度相加。①批量大小:使用梯度累积可以使得实际用于计算梯度的小批量大小变小,从而减少显存占用。例如,如果原本的批量大小是256,可以通过将批量大小调整为64,并累积4个批量的梯度来达到相同的效果。②学习率调整:由于累积了多个批量的梯度,因此需要适当调整学习率。通常情况下,学习率需要乘以累积的批量数量,以保持每个参数更新的步长不变。 ③性能影响:梯度累积会稍微增加训练时间,因为它需要更多的前向传播和反向传播步骤来完成一次参数更新。.3.混合精度训练

混合精度训练可以提高训练速度。训练神经网络模型时,默认使用的数据类型为单精度FP32。为了加快训练速度、减少网络训练时所占用的内存,并且保存训练出来的模型精度相同的条件下,使用了混合精度训练的方法,混合精度训练是指在训练的过程中,同时使用单精度(FP32)和半精度(FP16)进行训练。 (1)使用FP16训练的问题分析 浮点数据类型主要分为双精度(FP64)、单精度(FP32)和半精度(FP16)。在神经网络模型的训练过程中,一般默认采用单精度(FP32)浮点数据类型来表示网络模型权重和其它参数。 根据IEEE二进制浮点数算术标准(IEEE754)的定义,浮点数据类型三种精度,其中每一种都有三个不同的位来表示。FP64表示采用8个字节共64位,来进行的编码存储的一种数据类型;同理,FP32表示采用4个字节共32位来表示;FP16则是采用2字节共16位来表示。FP32和FP16的浮点格式如图7-5所示。.从图7-5中可以看出,与FP32相比,FP16的存储空间是FP32的一半,FP32则是FP64的一半。其中,每一种类型的浮点数据类型都由三个部分组成:最高位表示符号位(SIGNBIT);中间表示指数位(EXPONENTBIT);低位表示分数位(FRACTIONBIT)。 例如,FP16的第一位符号位SIGN表示正负符号,接着5位表示指数,最后10位表示分数。

FP16可以表示的最大值为0111101111111111,

FP16可以表示的最小值为0000010000000000,因此FP16的最大取值范围是[-65504~66504],超过这个数值的数字被直接置0。

①使用FP16训练神经网络,相对比使用FP32带来的优点有:

·减少内存占用:FP16的位宽是FP32的一半,因此权重等参数所占用的内存也是原来的一半,节省下来的内存可以放更大的网络模型或者使用更多的数据进行训练。

·加快通讯效率:针对分布式训练,特别是在大模型训练的过程中,通讯的开销制约了网络模型训练的整体性能,通讯的位宽少了表明可以提升通讯性能,减少等待时间,加快数据的流通。

·计算效率更高:在特殊的AI加速芯片如华为Ascend910和310系列,或者NVIDIAVOTAL架构的TitanVandTeslaV100的GPU上,使用FP16的执行运算性能比FP32更加快。①使用FP16的一些问题

·数据溢出:FP16比FP32的有效数据范围要小,使用FP16替换FP32会出现上溢和下溢的情况。而在深度学习中,经常需要计算权重的梯度,由于梯度会.比权重值更小,往往容易出现下溢情况。

·舍入误差:舍入误差表示当网络模型的反向梯度大小,一般FP32能够表示,但是转换到FP16会小于当前区间内的最小间隔,会导致数据溢出。如0.00006666666在FP32中能正常表示,转换到FP16后会表示成为0.000067,不满足FP16最小间隔的数会强制舍入。 为了让深度学习训练可以使用FP16的优点,又要避免精度溢出和舍入误差。于是可以进行FP16和FP32的混合精度训练,混合精度训练过程中可以引入权重备份、损失放大和精度累加三种技术。 (2)权重备份 权重备份用于解决舍入误差的问题,其主要思想是:在神经网络训练中把训练过程中产生的激活、梯度和中间变量等数据,都利用FP16来存储,同时复制一份FP32的权重参数,用于训练时候的更新。具体过程如图7-6所示。

.在计算过程中所产生的权重、激活和梯度等均使用FP16来进行存储和计算,但是权重使用FP32额外备份。在深度模型中,逻辑回归,梯度则是优化算法中一个非常重要的概念,特别是在梯度下降算法中。梯度的参数值可能非常小,利用FP16来进行相加的话,则很可能出现舍入误差问题,导致更新无效。因此通过将权重weights拷贝成FP32格式,并且确保整个更新过程是在FP32格式下进行的。 虽然权重用FP32格式备份一次,使得内存占用反而更高,额外拷贝一份weight的确增加了训练时候内存的占用。但是实际上,在训练过程中内存中分为动态内存和静态内容,其中动态内存是静态内存的3-4倍,主要是中间变量值和激活的值。而这里备份的权重增加的主要是静态内存。只要动态内存的值基本都是使用FP16来进行存储,则最终模型与整网使用FP32进行训练相比起来,内存占用也基本能够减半。 (3)损失缩放 如果仅使用FP32训练,模型收敛得比较好,但是如果用了混合精度训练,存在网络模型无法收敛的情况。原因是梯度的值太小,使用FP16表示会造成了数据下溢出的问题,导致模型不收敛。于是需要引入损失缩放技术。 为了解决梯度过小数据下溢的问题,对前向计算出来的损失(Loss)值进行放大操作,也就是把FP32的参数乘以某一个因子系数后,把可能溢出的小数位数据往前移,平移到FP16能表示的数据范围内。根据链式求导法则,放大Loss后会作用在反向传播的每一层梯度,这样比在每一层梯度上进行放大更加高效。 损失放大是需要结合混合精度实现的,其主要的主要思路是:

·扩大规模阶段,网络模型前向计算后在反响传播前,将得到的损失变化值DLoss增大2K倍。

·按比例缩小阶段,反向传播后,将权重梯度缩2K倍,恢复FP32值进行存储。. 损失缩放都是使用一个默认值对损失值进行缩放,为了充分利用FP16的动态范围,可以更好地缓解舍入误差,尽量使用比较大的放大倍数。总结动态损失缩放算法,就是每当梯度溢出时候减少损失缩放规模,并且间歇性地尝试增加损失规模,从而实现在不引起溢出的情况下使用最高损失缩放因子,更好地恢复精度。 动态损失缩放的算法如下:①从比较高的缩放因子开始(如224),然后开始进行训练迭代中检查数是否会溢出;②如果没有梯度溢出,则不进行缩放,继续进行迭代;如果检测到梯度溢出,则缩放因子会减半,重新确认梯度更新情况,直到数不产生溢出的范围内;③在训练的后期,loss已经趋近收敛稳定,梯度更新的幅度往往小了,这时可以允许更高的损失缩放因子来再次防止数据下溢。④因此,动态损失缩放算法会尝试在每N(N=2000)次迭代将损失缩放增加F倍数,然后执行步骤2检查是否溢出。 (3)精度累加 在混合精度的模型训练过程中,使用FP16进行矩阵乘法运算,利用FP32来进行矩阵乘法中间的累加,然后再将FP32的值转化为FP16进行存储。简单而言,就是利用FP16进行矩阵相乘,利用FP32来进行加法计算弥补丢失的精度。这样可以有效减少计算过程中的舍入误差,尽量减缓精度损失的问题,如图7-7所示。.4.优化器选择 在NLP领域,优化器是指导模型训练过程的关键组件。对于LLM,优化器的作用尤为重要。 (1)优化器的概念 优化器可以优化损失函数,优化器的任务是以使损失函数最小化的方式更改可训练参数,损失函数指导优化器向所需的方向移动。优化器(即优化算法)是用来求取模型的最优解,通过比较神经网络自己预测的输出与真实标签的差距,找到最小的loss。通常采用梯度下降方法,而梯度下降方法是一种优化算法,主要内容归纳如下:①目标:优化器的目标是找到一组模型参数,使得预定义的损失函数(如交叉熵损失)最小化。②过程:优化器迭代地调整模型参数,以减少训练数据上的损失。③算法:优化器内部使用特定的算法来计算参数的更新,这些算法是基于梯度下降算法的变体。

.(2)优化器的作用 ①指导参数更新 通过计算损失函数相对于模型参数的梯度,优化器来决定如何调整参数以减少损失。使用梯度信息来更新参数,以使模型预测更接近真实标签。

②加速收敛优化器通过引入动量、自适应学习率等方法,加速训练过程,帮助模型更快地收敛。例如,Adam优化器结合了动量和自适应学习率,比标准的梯度下降收敛得更快。 ③避免局部最小值优化器通过使用不同的策略(如随机梯度下降的随机性)来避免模型陷入局部最小值。某些优化器(如Adamax)通过限制更新方向,帮助模型跳出局部最小值。④提高数值稳定性 优化器通过引入小常数(如ε)来防止在计算中出现除以零的情况。通常,ε的具体值取决于上下文,它可以是任意小的正数,用于证明或者算法设计中。在没有具体指定的情况下,ε只是一个符号,代表一个极小的量。在某些情况下,ε可能会被赋予一个具体的数值,比如在计算机程序中,可能会将ε设为一个很小的数字,如1e-6(科学记数法表示的1乘以10的负6次方)或者其他更小的数,这取决于所需的精度。例如,在计算自适应学习率时,添加一个小的ε值可以避免数值不稳定。.⑥处理大规模数据 对于LLM,优化器需要有效地处理大规模数据集和高维参数空间。某些优化器(如LAMB)专门为大规模模型设计,可以更高效地使用计算资源。⑦正则化一些优化器(如AdamW)结合了权重衰减(L2正则化)来防止过拟合。权重衰减通过惩罚大权重值,鼓励模型学习更简单、泛化能力更强的参数。(3)Adam优化器Adam的主要特点如下:

·自适应学习率:Adam优化器根据每个参数的梯度的一阶矩估计(即均值)和二阶矩估计(即未中心化的方差)来调整学习率。

·动量:Adam结合了动量方法,它考虑了历史梯度来加速学习过程。

·鲁棒性:由于它结合了多个优化器的优点,Adam比基本的梯度下降更鲁棒。Adam的算法步骤如下:①初始化参数 初始化参数θ(比如神经网络的权重和偏置):

·初始化一阶矩向量m0为0(对每个参数的梯度的一阶矩估计)。

·初始化二阶矩向量v0为0(对每个参数的梯度的二阶矩估计)。

·设置学习率α(比如0.001)。

·设置一阶矩估计的衰减率β1(通常设为0.9)。

·设置二阶矩估计的衰减率β2(通常设为0.999)。

.·设置用于数值稳定的小常数ϵ(通常设为10−8)。②对于每个时间步t(即每次迭代)执行以下步骤:

·计算梯度:计算在当前时间步损失函数关于参数θ的梯度gt。

·更新有偏一阶矩估计:mt=β1⋅mt−1+(1−β1)⋅gt

这里的mt是对gt的指数衰减平均。

·更新有偏二阶矩估计:

这里的vt是对gt2的指数衰减平均。·修正一阶矩的偏差:

由于mt是有偏的,尤其是在t较小时,所以通过上述公式进行偏差修正。·修正二阶矩的偏差:

同样,vt也是有偏的,需要进行偏差修正。·更新参数:

这里的更新规则结合了动量(Momentum)和RMSprop的思想①,通过对学习率进行自适应调整来更新参数。③重复步骤②,直到满足停止准则(比如达到一定的迭代次数或损失函数值低于某个阈值)。.Adam算法在实践中表现良好,因为它能够为不同的参数动态调整学习率,并且通常情况下收敛速度较快。不过,也有一些研究指出,在某些情况下,Adam可能不如SGD(随机梯度下降)配合学习率衰减的效果好。因此,选择优化算法时,应根据具体问题和数据集进行实验和调整。Adam的优势如下:·易于实现:Adam算法简单,易于理解和实现。·无需手动调整学习率:自适应学习率机制通常意味着不需要太多关于学习率的手动调整。·适用于非平稳目标:由于它的自适应性质,Adam适用于目标函数随时间变化的情况。·Adam是一种强大且常用的优化器,特别适合于训练具有大量参数的复杂模型。然而,针对特定问题,可能需要调整其参数或考虑其他优化器。 (4)AdamW优化器

AdamW是一种对Adam优化器进行了改进的变体,它主要引入了权重衰减(WeightDecay)技术。在深度学习中,权重衰减是一种常见的正则化技术,用于防止模型过拟合。①AdamW的主要特点

AdamW结合了权重衰减技术,将权重衰减直接应用到权重本身,而不是梯度上。这一点与L2正则化相似,但实现方式不同。

·权重衰减:权重衰减通过在损失函数中添加一个与权重大小成比例的项来惩罚大的权重值,从而鼓励模型学习更简单、泛化能力更强的参数。

·适用于大规模训练:AdamW特别适用于大规模的深度学习模型训练,因为它可以帮助模型更好地泛化。

.综上所述,优化器在LLM训练中扮演着至关重要的角色,它们不仅决定了模型参数的更新方式,而且对训练的速度、稳定性和最终性能有着直接影响。因此,选择和配置合适的优化器对于成功训练LLM至关重要。②RMSprop(RootMeanSquarePropagation)是一种用于深度学习中的优化算法,旨在加速梯度下降过程,特别是在处理非平稳目标和处理小批量数据时使用。从而提高优化过程的稳定性和效率。

.

5.学习率调度

学习率调度是深度学习训练过程中的一个关键环节,特别是在训练大型语言模型时。学习率决定了模型权重更新的幅度,一个合适的学习率调度策略可以帮助模型更快地收敛,同时避免过拟合和数值不稳定问题。 (1)常用的学习率调度策略 ①固定学习率 在整个训练过程中保持学习率不变。适用于简单的任务或当训练数据量较小时。②指数衰减 学习率以指数形式随时间衰减。③步进衰减

·策略:每隔一定的回合(epoch)数,学习率乘以一个衰减因子。epoch是指进行一次完整的训练数据集迭代的过程。在训练神经网络时,一个epoch表示整个数据集被前向传播和反向传播过程遍历了一次。

·适用情况:适用于训练数据量大,需要长时间训练的情况。 ④多阶段衰减

·策略:在预定义的多个epoch处减少学习率。

·适用情况:当模型在训练的不同阶段需要不同的学习率时。 ⑤逆时间衰减 学习率与epoch成反比。 ⑥余弦退火

·策略:学习率随时间按照余弦函数衰减。

·适用情况:适用于训练数据量大,需要长时间训练的情况。

.⑦循环学习率

·策略:学习率在两个边界值之间循环变化。

·适用情况:有助于模型逃离局部最小值。 ⑧学习率预热

·策略:在训练开始时逐渐增加学习率。

·适用情况:有助于在训练初期稳定模型。 (2)实现学习率调度的步骤 ①选择调度策略:根据模型的复杂度和训练数据的特点选择合适的学习率调度策略。 ②设置初始学习率:根据经验或通过实验确定一个合适的初始学习率。 ③应用调度:在训练过程中,根据选择的策略调整学习率。

·热身:在训练开始时逐步增加学习率。

·衰减策略:例如线性衰减、余弦退火等。.6.蒸馏

模型蒸馏是一种有效的模型压缩技术,它可以应用于各种类型的模型,包括深度神经网络、卷积神经网络、循环神经网络、Transformer模型等。通过蒸馏可以将这些模型的知识迁移到更小的模型中,同时尽量保持原始模型的性能。一般说来,只能用离线方式完成蒸馏。 (1)模型蒸馏基本过程 在离线环境下,同时训练两个模型:一个学生模型和一个教师模型。其中教师模型额外利用了优势特征,则准确率更高。将教师模型蒸馏出来的知识传递给学生模型,辅助其训练,提升学生模型的准确率。在线上服务时,只用学生模型进行部署,由于输入中不依赖优势特征,则保证了线上线下特征的一致性。其过程如图7-8所示。 ①训练教师模型:首先需要一个已经训练好的大模型,这个模型在目标任务上表现良好。 ②软标签生成:教师模型对训练数据集进行预测,生成软标签。软标签不仅包括最终的类别预测,还包括模型对每个类别的预测概率,这提供了更多的有助于学生模型学习的信息。.

③学生模型训练:使用这些软标签来训练学生模型。学生模型的损失函数是由真实标签和软标签组合而成的,这允许学生模型从教师模型中学到更细致的知识。 ④温度调节:在生成软标签时,通常入温度超参数来调节概率分布的尖锐程度。较高的温度会使分布更加平滑,有助于学生模型学习到更多的信息。关于温度参数见第15章提示工程的介绍。 ⑤知识迁移:除了类别预测之外,教师模型的其他知识,如中间层的激活值,也可以迁移用来指导学生模型的训练。⑥微调:学生模型在蒸馏过程中还会接受真实标签的训练,可以进一步微调其性能。模型蒸馏的目的是让学生模型保持较小规模的同时,尽可能地接近教师模型的性能。可以将一个在服务器上运行的大型模型转化为一个可以在手机或嵌入式设备上运行的小型模型,同时尽量减少性能损失。

。(2)模型蒸馏的优势 ①参数数量减少:通过蒸馏,可以将一个大型、复杂的教师模型的知识迁移到一个参数更少的学生模型中。学生模型因此可以更小,更容易部署在资源受限的环境中。②计算成本降低:学生模型通常具有更简单的架构,因此在前向传播和反向传播过程中需要更少的计算资源,从而降低了模型的计算成本。 ③内存占用减少:由于参数数量的减少,学生模型占用的内存也会相应减少,这对于嵌入式设备和移动设备来说非常重要。 ④能耗降低:减少了模型的参数和计算量,可以降低模型的能耗,这对于移动设备和需要长时间运行的系统来说非常有用。 ⑤推理速度提升:较小的模型通常可以更快地进行推理,这对于需要快速响应的应用场景(如在线服务、实时控制系统)非常重要。.7.剪枝技术

LLM的参数剪枝是指去除模型中不重要的参数,移除权重较小的连接,减少模型大小、提高模型推理速度和降低内存消耗的技术。通过剪枝,可以移除模型中不重要的参数,而保持模型的性能基本不变。以下是参数剪枝的一些常见方法。 (1)修剪方法 ①权重剪枝

·非结构化剪枝:单独删除权重矩阵中的参数,不保留任何结构。

·结构化剪枝:按照一定的结构(如权重矩阵中的行或列)删除参数。 ②单元剪枝针对神经元或滤波器进行剪枝,整个神经元或滤波器的所有参数都会被移除。 ③模型剪枝在模型层面上进行剪枝,移除整个层或子网络。 (2)剪枝准则

·幅度剪枝:删除绝对值较小的权重,认为这些权重对模型输出的贡献较小。.

·单元重要性剪枝:根据神经元或滤波器的重要性来决定是否剪枝,重要性强的不剪,重要性小的剪枝,可以通过多种方式评估,如梯度、激活值等。

·二次性剪枝:利用权重的二次性属性来评估其对模型性能的影响。 (3)剪枝流程①训练模型:首先训练一个LLM直到收敛。②评估重要性:根据剪枝准则评估模型中每个参数的重要性。③剪枝:根据评估结果,移除不重要的参数。④微调:对剪枝后的模型进行微调,以恢复模型性能。⑤迭代:重复上述步骤,直到达到期望的剪枝程度。 参数剪枝是一个复杂的过程,需要根据具体的模型和任务需求来定制剪枝策略。随着研究的深入,剪枝技术也在不断发展,以适应不同的应用场景和优化目标。.8.量化技术

量化是一种将模型参数从浮点数转换为低比特宽度的整数表示的技术,量化技术的主要目的是节省显存、加速计算和降低通讯量。不同的应用场景下,可以根据具体需求选择不同的量化策略。 在量化过程中,常用的数据类型包括FP32(单精度浮点数)和INT8(8位整数)等。量化可以进一步分为后量化、训练时量化(混合精度)和量化感知训练。后量化是一种针对预训练模型部署的高效加速方式,它不需要重新训练模型,但可能影响模型性能。 量化技术的挑战包括精度损失、零样本泛化能力的保持以及计算开销。为了解决这些挑战,开发了各种量化工具和技术,如AutoGPTQ、AutoAWQ和QLoRA等,它们支持多种模型和量化精度,旨在尽量保持模型的准确性,同时降低内存占用和推理时间,量化技术主要通过以下两个方面实现:

·参数压缩:将模型中的浮点数参数转换为低精度的整数参数,从而减少模型所需的存储空间和加载时间。

·计算加速:由于低精度整数运算通常比浮点数运算快,量化可以加速计算,提高模型的推理速度,同时加快推理速度并降低能耗。量化的关键方法如下。 (1)量化级别①权重量化 对模型的权重进行量化,通常是浮点数权重转换为整数。②激活量化 对模型的激活值进行量化,即对神经网络中间层的输出进行量化。

.③全量化 同时对权重和激活进行量化。 (2)量化方法①对称量化 使用相同的范围对正数和负数进行量化,中心点是0。②非对称量化 对正数和负数使用不同的范围进行量化。 ③线性量化 使用线性映射将浮点数映射到整数。 ④非线性量化 使用非线性映射(如对数或指数)进行量化。 (3)量化位宽 ①二值量化:使用1比特(+1,-1)表示权重和/或激活。 ②三值量化:使用2比特表示权重和/或激活。③四值量化:使用2比特表示权重和/或激活,但表示方式不同。④八位量化:使用8比特(通常是无符号字符)表示权重和/或激活,这是目前最常用的量化位宽。 (4)量化流程 ①选择量化方案:根据硬件和性能需求选择合适的量化级别和方法。训练后量化:在模型训练完成后进行量化,不需要额外的训练过程。

.

③感知训练:在训练过程中模拟量化效果,以减少量化带来的性能损失。④量化校准:确定量化参数,如缩放因子和零点。⑤量化实现:将模型转换为量化表示,并在目标硬件上实现。⑥性能评估:评估量化模型的性能,必要时进行微调。 量化是部署LLM到生产环境中的一个重要步骤,尤其是在资源受限的设备上。随着技术的发展,量化技术也在不断进步,以支持更高效的模型部署。.9.适应性模型

LLM的适应性模型它们能够根据新的数据或环境变化自动调整其参数或结构,能够捕捉到数据中的复杂关系和模式,适应性主要体现在以下几个方面。。 (1)持续学习:LLM能够从新数据中学习,不断更新其知识库和参数,以适应数据分布的变化。这种能力对于处理持续变化的数据流尤为重要。 (2)迁移学习:在目标数据稀缺的情况下,LLM能够将在一个任务上学到的知识迁移到另一个相关的任务上。例如,NLP中的大型预训练语言模型(如BERT、GPT)可以在多种语言任务中进行微调,而无需从头开始训练。 (3)元学习:LLM可以采用元学习策略,即学习如何学习,以便通过少量的样本快速适应新任务。这对于那些需要快速适应新情况的应用场景非常有用。 (4)环境适应性:LLM能够根据不同的应用环境(如硬件限制、数据可用性等)调整其结构和复杂度。例如,模型压缩和剪枝技术可以用于减少模型的规模,使其适应资源受限的环境。 (5)动态结构调整:LLM可以具有动态的结构,根据任务需求自动调整其网络架构,如通过添加或删除神经元、层或连接。

LLM的适应性对于处理复杂、动态变化的环境至关重要。它们在NLP、计算机视觉、推荐系统等多个领域都显示优秀出应用能力。随着深度学习和其他先进技术的发展,LLM的适应性将得到进一步的提升,它们在处理大规模、多样化数据方面的潜力将得到更充分的发掘。

.10.伦理与安全性

在设计LLM时,需要关注模型的伦理和安全性问题,确保模型在实际应用中的合规性。 (1)数据隐私:语言模型通常需要海量的数据来进行训练,这些数据可能包含个人隐私信息。确保这些数据得到妥善处理,不被非法利用。 (2)信息真实性:语言模型有可能会生成虚假或误导性信息。因此,如何确保输出的信息是真实、准确的,是一个需要解决的问题。 (3)偏见与歧视:由于训练数据可能存在偏差,这可能会导致模型生成带有偏见或歧视性的内容。减少这些偏见,保证内容的公平性是至关重要。 (4)滥用风险:语言模型可能被用于撰写网络欺诈信息、恶意软件、虚假新闻等。如何防止这些滥用行为,是一个需要深入考虑的问题。 (5)法律与合规:遵循相关的法律法规,确保语言模型的使用不违反任何法律条款。 (6)透明度:提高模型的决策过程和运作机制的透明度,让用户了解模型的局限性和可能的偏见。 (7)责任归属:当语言模型产生不良后果时,如何界定责任和进行相应的处理,是一个需要明确的问题。 在设计和使用语言模型时,需要综合考虑这些伦理和安全问题,并采取相应的措施来降低风险。同时,公众的监督和反馈也是保证语言模型伦理与安全性的重要途径。7.2.3LLM数据增强在NLP领域,数据增强有助于模型更好地学习数据的本质特征,减少对特定数据分布的依赖,从而数据增强是一种提高模型性能和泛化能力。LLM需要大量的数据训练来达到较高的性能,尤其是在数据量有限的情况下,LLM的数据增强方法如下。

1.文本复述

·使用预训练的语言模型生成给定句子的不同表达方式。

·应用句法变换,比如主动语态与被动语态的转换。

2.回译 将原始文本翻译成另一种语言,然后再翻译回原始语言,以产生语义相同但表达方式不同的句子。

3.同义词替换 在句子中随机替换一些单词为其同义词,可以使用数据库(WordNet)或预训练的词嵌入来找到同义词。

4.随机插入、删除和交换

·随机插入句子中的单词。

·随机删除句子中的单词。

·随机交换句子中的两个单词。

.

5.使用预训练的语言模型生成数据 利用GPT-3、BERT等大型预训练模型根据给定上下文生成新的句子或段落。

6.数据混合 将不同来源的数据混合,或者将数据集中的多个样本混合,生成新的样本。

7.对抗性训练 通过在输入数据上添加小的扰动来生成对抗样本,以增强模型的鲁棒性。

8.属性控制生成 利用属性(如情感、风格、主题等)控制文本生成模型,生成具有特定属性的数据。

9.使用外部知识库 结合外部知识库(如维基百科等)来扩充原始数据。

10.自动摘要和扩展 对长文本进行自动摘要,或对短文本进行内容扩展。 在进行数据增强时,需要注意以下几点:

·数据质量:增强后的数据需要保持高质量,避免引入错误或噪声。

·多样性:增强方法应增加数据的多样性,但不要偏离原始数据的分布。

·领域适应性:确保增强的数据与目标任务的领域和特点相匹配。

·平衡性:在分类任务中,要避免数据增强导致类别不平衡。 对于LLM,数据增强不仅可以提高模型的性能,还可以帮助模型更好地泛化到未见过的数据上,从而在实际应用中更加可靠和有效。7.2.4LLM分词器在NLP中,tokenizer(分词器)是一个非常重要的工具,它的主要作用是将文本字符串分割成一系列单词或词汇单元(tokens),这些tokens可以是单词、短语、标点符号或其他元素。Tokenizer既可以是软件工具,也可以是嵌入在软件库或框架中的一个功能模块。它是一个用于文本处理的工具,可以在不同的软件环境和编程语言中实现和使用。

1.tokenizer的关键点 (1)基本功能

·切分文本:将连续的文本分割成独立的token。

·标准化:例如,将所有文本转换为小写,去除标点符号等。

·词汇化:将变体的词汇形式(如复数形式、时态变化)映射回基本形式。 (2)类型

·基于空格的tokenizer:简单地基于空格来分割文本,这对于空格分隔的语言(如英语)比较有效。

·基于规则的tokenizer:使用预定义的规则来分割文本,适用于有明确分词规则的语言。

·基于统计的tokenizer:通过统计方法学习文本中的分词模式,对语言中的复杂分词情况更为有效。.

·子词tokenizer:如BytePairEncoding(BPE)、WordPiece等,它们可以将单词分解成更小的单元,以处理大量未知词汇或变形词。 (3)应用

·文本分析:为文本分析提供结构化的输入。

·机器学习:在构建机器学习模型时,tokenizer用于将文本数据转换为模型可以理解的格式。

·搜索引擎:在索引和查询处理中,tokenizer帮助理解查询意图和文档内容。 (4)处理中文的Tokenizer对于中文处理,传统的英文Tokenizer不适用,因为中文文本不是通过空格来分隔单词的。以下是一些能够处理中文的Tokeniz。er:在中文处理中的特殊性是中文没有明显的单词边界,因此分词比空格分隔的语言更为复杂。常用的中文分词工具有jieba、HanLP等,它们可以使用基于规则、统计或深度学习的方法来分词。·jieba:这是一个广泛使用的中文分词Python库,它支持多种分词模式,包括基于字典的最短路径分词、全模式分词和搜索引擎模式分词。·HanLP:这是一个面向自然语言处理的Java库,提供了中文分词、词性标注和命名实体识别等功能。·PKUSeg:这是基于北京大学开发的一个中文分词工具,它也提供了Python接口。·THULAC:由清华大学自然语言处理与社会人文计算实验室开发的一个高效的中文词法分析工具包,同样适用于中文分词。

.

(5)与模型的结合 在现代NLP框架中,如TensorFlow和PyTorch,tokenizer通常与特定的预训练模型结合使用,确保输入数据的格式与模型训练时使用的格式一致。正确选择和使用tokenizer对于后续的NLP任务(如文本分类、情感分析、机器翻译等)的性能有着决定性的影响。

2.tokenizer在LLM中的作用与位置 在LLM架构中,通常tokenizer不被视为模型的一部分,而是模型输入和输出处理流程中的一个关键组件。Tokenizer的作用是将原始文本数据转换成模型可以理解和处理的格式。tokenizer在LLM中的作用和位置如下。 ①输入处理:在模型的输入端,tokenizer负责将原始文本(如句子或段落)转换成模型能够处理的数字表示形式。这通常涉及以下步骤:

·分词:将文本拆分成基本的单元(如单词、子词或字符)。

·编码:将这些单元映射到一个预定义的词汇表中的索引。

·添加特殊标记:插入开始和结束标记,以及用于序列填充和标记化的特殊标记。 ②模型交互:Tokenizer生成的数字表示(通常是整数序列)随后被送入LLM进行进一步的处理和预测。 ③输出处理:在模型的输出端,tokenizer不直接参与,但生成的文本输出可能会再次通过tokenizer进行解码,以便于理解和分析。

tokenizer位于LLM的输入处理阶段,是文本数据与模型之间的桥梁。它不属于LLM的核心架构(如多层Transformer结构),但它是整个LLM系统中不可缺的一部分,对于模型的性能和功能有着重要影响。

.

tokenizer经常使用下述的三种算法字节对编码、词段算法和句子片算法。

3.字节对编码

GPT-2和GPT-3等大型语言模型就使用了BPE来处理输入文本。通过使用BPE,这些模型能够处理包含数百万个词汇的庞大词汇表,同时保持模型的大小和计算效率。字节对编码(BytePairEncoding,BPE)可以提高词汇表的效率。 (1)优点

·处理未登录词:BPE能够有效地处理新词和稀有词汇,这在处理大型文本语料库时特别有用。

·减少词汇表大小:通过合并常见字符序列,BPE可以显著减少词汇表的大小,从而降低模型的复杂性。

·支持多种语言:BPE不依赖于特定的语言,因此它可以用于处理多种语言的文本。 (2)缺点

·需要大量数据:为了构建一个有效的词汇表,BPE需要大量的训练数据。

·分词歧义:在某些情况下,BPE可能会产生歧义,因为它不是基于语言规则来分词。BPE在NLP领域的应用非常广泛,特别是在机器翻译、语言模型训练和文本生成等领域 (3)字节对编码的工作流程 字节对编码(BytePairEncoding,BPE)构建词表的基本工作流程如下。

.

①准备足够的训练预料以及期望的词表大小。②将单词拆分为字符粒度(字粒度),并在末尾添加后缀</w>,统计单词频率。③合并方式:统计每一个连续/相邻字节对的出现频率,将最高频的连续字节对合并为新的字词。④重复第③步,直到词表达到设定的词大小,或下一个最高频字节对出现频率为1。 字节对编码是一种简单的数据压缩算法,它通过合并常见字节对来构建一个动态的词汇表。在NLP领域,BPE作为一种高效的分词方法,能够将文本分割成子词单元,这些子词单元可以是单个字符、完整的单词或者更长的字符串。 为了理解,将通过一个简化的例子来展示BPE如何从一个简单的词汇表开始,通过合并最常见的字节对来逐步构建一个更复杂的词汇表。7.2.5LLM数据预处理在训练大型语言模型(LLMs)之前,数据预处理是一个至关重要的步骤。良好的数据预处理能够提高数据集的质量和性能。

1.LLM数据预处理的步骤 (1)数据收集

·从多个来源收集大量的文本数据,确保数据多样性。

·使用爬虫工具或公开可用的数据集。 (2)数据清洗

·去除无关内容:删除广告、HTML标签、非文本元素等。

·修正错误:修正拼写错误、语法错误等。

·过滤噪声:去除无关的符号、表情、多余的空格等。

·统一格式:统一文本的格式,如日期、数字的表示方式。 (3)文本标准化

·小写转换:将所有文本转换为小写,以减少词汇的多样性。

·分词:根据特定的语言规则进行分词,对于中文等没有明确空格分隔的语言尤其重要。

·词干提取:将词语还原为词干形式,减少词汇的多样性。

.·词性标注:对文本进行词性标注,有助于后续处理。 (4)去除停用词 删除高频但信息量低的词语,如“的”、“和”、“是”等。 (5)文本分割 将文本分割成更小的单元,如句子、段落或固定长度的片段。 (6)构建词汇表

·从文本中构建一个词汇表,并为每个词分配一个唯一的索引。

·确定词汇表的大小,处理稀有词汇,例如使用UNK(未知词)标记。 (7)序列化 将文本转换为模型可以理解的序列格式,通常是数字序列。 (8)填充和截断 对于不同长度的文本,进行填充(padding)或截断(truncation)以统一长度。 (9)批处理 将数据组织成批处理形式,以便于模型的并行处理。 (10)数据增强 应用前面提到的数据增强技术,如回译、同义词替换等,以增加数据的多样性和模型的泛化能力。 (11)去重 删除重复的文本,避免模型学习到重复的信息。

.

(12)平衡数据集 如果是分类任务,确保每个类别的样本数量大致相等。 (13)数据验证 在预处理完成后,验证数据的质量和格式是否正确。上述的数据预处理的具体步骤会根据不同的模型架构、训练目标和可用资源进行调整。良好的数据预处理可以显著提高模型训练的效率和最终性能。

2.数据清洗(1)数据清洗的过程与模型数据清洗的基本过程如图7-9所示,主要步骤如下:1.数据分析:在数据清洗之前,对数据进行分析,对数据的质量问题有更为详细的了解,从而更好地选择方法,设计清洗方案。2.定义清洗规则:通过数据分析,掌握了数据质量的信息后,针对各类问题制定清洗规则,如对缺失数据进行选择填补策略。3.规则验证:检验清洗规则的效率和准确性。在数据源中随机选取一定数量的样本进行验证。4.清洗验证:当不满足清洗要求时要对清洗规则进行调整和改进。真正的数据清洗过程中需要多次迭代进行分析,设计和验证,直到获得满意的清洗规则。清洗规则的质量决定了数据清洗的效率和质量。.5.清洗数据中存在的错误:执行清洗方案,对数据源中的各类问题进行清洗操作。6.干净数据的回流:执行清洗方案后,将清洗后符合要求的数据回流到数据源中。图7-9数据清洗过程.(2)不完整数据清洗不完整数据的清洗是指对缺失值的填补,准确填补缺失值与填补算法密切相关,在这里,介绍常用的不完整数据的清洗方法。①删除法删除法是指当缺失数据的观测比例非常低时(如5%以内),直接删除存在缺失的数据,或者当某些变量的缺失观测比例非常高时(如85%以上),直接删除这些缺失的变量。

②替换法替换法是指用某种常数直接替换那些缺失值,例如,对连续变量而言,可以使用均值或中位数替换,对于离散变量,可以使用众数替换。

③插补法插补法是指根据其他非缺失的变量来预测缺失值,常见的插补法有回归插补法、K近邻插补法、拉格朗日插补法等。(3)异常数据清洗

处理异常值常用的方法

①删除异常值:明显看出是异常且数量较少可以直接删除。 ②不处理:如果算法对异常值不敏感则可以不处理,但如果算法对异常值敏感,则不要用基于距离计算的一些算法。 ③平均值替代:损失信息小,简单高效。

④视为缺失值:可以按照处理缺失值的方法来处理。

.(4)重复数据清洗重复数据清洗又称为数据去重。通过数据去重可以减少重复数据,提高数据质量。重复的数据是冗余数据,对于这一类数据应删除其冗余部分。数据清洗是一个反复的过程,只有不断地发现问题,解决问题才能完成数据去重。去重是指在不同的时间维度内,重复一个行为产生的数据只计入一次。按时间维度去重主要分为按小时去重、按日去重、按周去重、按月去重或按自选时间段去重等。例如,来客访问次数的去重,同一个访客在所选时间段内产生多次访问,只记录该访客的一次访问行为,来客访问次数仅记录为1。如果选择的时间维度为按天,则同一个访客在当日内产生的多次访问,来客访问次数也仅记录为1。①使用字段相似度识别重复值算法。②面对以亿计出现的网页,去重处理页面方法采用了特征抽取、文档指纹生成和文档相似性计算,其中Shingling算法和SinHash算法是两个常用的页面查重算法。③文本去重Simhash算法。7.3词向量词向量是将单词映射到连续的向量空间中,使每个单词都可以用一个固定长度的向量来表示。词向量的目的是捕捉单词的语义和句法信息,使机器能够通过词向量的运算来理解和处理自然语言。7.3.1自然语言表示学习自然语言表示学习就是将人类的语言表示成更易于计算机理解的方式。尤其是在深度神经网络技术兴起之后,如何在网络的输入层使用更好的自然语言表示成了值得关注的问题。例如,每个人的名字就是作为自然人的一个表示,名字可以是若干个汉字,也可以是其他语言的单词。当然,也可以通过一些方法表示成由0和1组成的字符串,或者转换为一定长度的向量,使计算机更容易处理。自然语言表示学习的发展历程如图7-10所示。.

1.最早期的n-gram模型是基于统计的语言模型,通过前n个词来预测第n+1个词。在20世纪50年代提出的分布式理论是近10年,自然语言表示的基础思想。

2.早期的词袋模型,虽然能够方便计算机快速处理,却无法衡量单词间的语义相似度。

3.到了1986年,分布式表示被提出。分布式理论的核心思想是:上下文相似的词,其语义也相似,是一种统计意义上的分布;而在分布式表示中,并没有统计意义上的分布。分布式表示是指文本的一种表示方式。相比于独热编码表示,分布式表示是将文本在更低的维度进行表示。随着word2vec和GloVe等基于分布式表示的方法被提出,判断语义的相似度成为可能。

4.在2013

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论