1 目录
本文是学习https://github.com/le-wei/LLMSurvey/blob/main/assets/LLM_Survey_Chinese.pdf的总结,仅供学习,侵权联系就删
目录如下图
本次只总结一部分,刚学习有错请指出,VX关注晓理紫,关注后续。
2、概述
2.1 大语言模型的扩展法则
- KM扩展法则:
- Chinchilla 扩展法则
2.2 大语言模型的涌现能力
- 上下文学习能力(ICL):假设为大语言模型提供了一个自然语言指令、或几个任务的演示,它可以通过完成输入文本的单词序列的方式为测试实例生成预期的输出而无需而外的训练或者梯度更新(通过提高的实例就可以学会对应的任务不需要进行而外的训练)
- 指令遵循:通过使用自然语言描述的混合任务数据集进行微调(指令微调),LLM可以在未见过的指令形式描述的任务表现出色。(泛华能力强)
- 逐步推理:通过使用思维链提示策略完成类似数学的推理任务
2.3 大语言模型的关键技术
- 扩展:Transformer语言模型存在明显的扩展效应;更大的模型、数据规模和更多的训练计算通常导致模型的提升。
- 训练:分布式训练算法是学习LLM网络参数必需的
- 能力引导:在大语料库中训练的大语言模型具备了作为通用任务求解器的潜在能力,但是在特定的任务中需要使用如ICL、COT进行引导大模型进行求解
- 对齐微调:使大模型生成更加符合人类的无害的的内容
- 工具操作:使用LLM可以借助外部工具完成其不擅长的任务操作
2.4 GPT系列大模型的演变
3、大语言模型资源
3.1 公开可用的模型检点点
-
百亿级
-
千亿级
3.2 常用语料
- Books:书籍训练集
- CommonCrawl:最大的开源网络爬虫数据集
- Reddit Links:一个通过社交平台创建的高质量数据集
- Wikipedia:在线的百科全书,包含大量高质量文章,涵盖各种主题
- Code:爬取有开源许可的代码库
- Others:其他类型的数据
3.4 代码资源
可用于开发LLM的代码库
- Transformers:是使用Transformer架构构建模型的开源Python库
- DeepSpeed:是用于深度学习优化库(与pytorch兼容),已用于训练多个LLM,如MTNLG和BLOOM。提供各种分布式训练优化技术的支持,如内存优化(ZeRO技术,梯度检查点)和管道并行
- Megatron-LM:是由NVIDIA开发的深度学习库,用于训练LLM。提供丰富的分布式训练优化技术,包括模型和数据并行、混合精度训练和Flash Attention并实现GPU间的高效分布训练
- JAX:由google开发用于高性能机器学习算法的python库,允许在带有硬件加速(GPU、TPU)情况下进行数组高效运算,支持自动微分和即时编译等
- Colossal-AI:由IIPC-AI Tech开发用于训练大规模人工智能模型的深度学习库,其基于pytorch实现,并支持丰富的并行训练策略。
- BMTrain:由OpenBMB开发的用于分布方式训练大规模参数模型的高效库、强调代码简洁、低资源占用和高可用性。已将一些常见的LLM(Flan-T5和GLM)迁移到其ModelCenter中。
- FastMoE:一种专门用于MoE(混合专家)模型的训练库。基于Pytorch开发,注重效率和易用性。
- 其他:pytorch、TensorFlow、MXNet、PaddlePaddle、MindSpore、OneFlow等
4、预训练
4.1 数据收集
可通过上面语料库获取数据
4.2 数据预处理
收集大量数据后对数据进行预处理,特别是消除噪声、冗余、无关和潜在有害的数据是必需的。
- 一个典型的预处理预训练数据的流程图
- 质量过滤:为删除收集到的语料库中的低质量数据,主要有两种方法
- 基于分类器的方法:通过一部分高质量的数据训练出一个分类器,通过分类器识别并过滤低质量的数据;但是有研究发现基于分类器可能会删除方言、口语和社会语言的高质量文本导致有偏的语料库并减少了多样性。
- 基于启发式的方法:可以采用一些规则消除低质量文本
- 基于语言的过滤:如果针对某一种语言任务的LLM可以删除其他非目标语言的语料。
- 基于度量的过滤:可以利用生成文本的评估度量,例如困惑度来检测和删除不自然的句子
- 基于统计的过滤:可以利用语料库的统计特征,如标点符号分布、符合与单词比率和句子长度来衡量并过滤低质量数据
- 基于关键词的过滤:基于特定的关键词集合、可以识别和删除文本中的噪声或无用元素。
- 去重:语料中的重复数据会降低语言模型的多样性,可能导致训练过程不稳定,降低模型的性能。去重可以在句子级、文档级、和数据集级等不同粒度去重
- 句子级:删除包含重复单词和短语的低质量句子,因为它们可能在会在语言建模中引入重复模式。
- 文档级:主要依靠文档之间的表层特征(例如单词和n元的重叠)的重叠比率来检测和删除包含相似内容的重复文档。
- 数据集级:需要从训练集中删除测试集可能出现的重复文本。
- 隐私去除:为了防止训练集中存在敏感或个人信息数据。可以通过基于规则的方法删除隐私数据。
- 分词:分词也是数据预处理的关键步骤。它的目的是将原始文本分割成词序列,随后用作LLM的输入。对于有多种领域、语言和格式组成的语料库使用专门为预训练语料库设计的分词器效果可能更好。最近LLM使用SentencePiece为预训练语料库训练定制化的分词器,同时利用字节级的Byte Pair Encoding(BPE)算法来确保分词后的信息不会丢失。需要注意BPE中的归一化技术,例如NFKC、可能会降低分词性能。
4.3 预训练数据对大语言模型的影响
-
混合数据来源:不同领域或场景的数据具有不同语言特征和语义知识。通过不同来源的文本数据对LLM模型进行预训练,LLM可以获得广泛的知识并有强大的泛化能力。但是需要注意设置预训练数据的分布,因为这个可能影响LLM在下游任务的性能。
-
预训练数据的数量:随着LLM参数的增加,也需要更多的数据来训练模型。
-
预训练数据的质量:现有的研究表明,对低质量的语料库进 行预训练时,例如噪声、有害和重复的数据,可能会损害模型的性能。
4.4 主流架构
一般来说现有LLM主流架构可以大致分为三种类型:即编码器-解码器、因果解码器和前缀解码器。
- 编码器-解码器:传统的Transformer模型是建立在编码器-解码器架构上,有两个Transformer块分别作为编码器和解码器。编码器采用堆叠的多头注意层对输入序列进行编码以生成其潜在表示。解码器对这些表示进行交叉注意并自回归地生成目标序列。目前只有少数的LLM采用此种方式,如Flan-T5
- 因果解码器架构:因果解码器架构采用单向注意力掩码,以确保每个输入token只能关注过去的token和它本身,输入和输出的token通过解码器以相同的方式进行处理。GPT系列是基于因果解码器架构开发,OPT、BLOOM、Gopher都是采用因果解码器。
- 前缀解码器架构:前缀解码器架构(也称非因果解码器架构)修正了因果解码器的掩码机制,使其能够对前缀token执行双向注意力,并仅对生成的token执行单向注意力。前缀编码器可以双向编码前缀token序列并自回归地逐个预测输出token,其中编码和解码过程共享相同的参数。实用建议:不从头开始训练,而是继续训练因果解码器,然后将其转换为前缀解码器以加速收敛。基于前缀解码器架构的LLM代表有GLM-130B和U-PaLM.
总结:可以考虑通过混合专家(MOE)扩展这三种类型架构,其中每个输入的小部分神经网络权重被稀疏激活,Switch Transformer和GLaM证明,通过增加专家数量或总参数大小,性能会有显著的改进。
4.5 Transformer详细配置
Transforme主要部分的相应配置:标准化、位置编码、激活函数、注意力和偏置。
- 标准化:Transformer架构引入层标准化(Layer Norm,LN)是为了能稳定训练LLM。但是LN的位置对LLM的性能影响很大。大多数LLM采用前置LN实现更稳定的训练。LN的代替方案:RMS Norm、DeepNorm都有很好的训练稳定性。
- 激活函数:在现有的LLM中GeLU激活函数广泛使用,最新的LLM(如PaLM和LaMAD)采用GLU激活函数的变体,特别是SwiGLU和GeGLU的变体。性能较好,但是与GeLU比,在前馈网络中需要额外的参数。
- 位置编码:由于 Transformer 中的自注意模块具有置换不变性,因此需要使用位置编码来注入绝对或相对位置信息以建模序列。
- 绝对位置编码: 有两种绝对位置编码,即正弦函数和学习的位置编码。通常在LLM中经常使用学习的位置编码
- 相对位置编码:相对位置编码根据键和查询之间的偏移量生成嵌入,因此它可以在比训练序列更长的序列上表现良好,即外推。代表有
- ALiBi:使用基于键和查询之间距离的惩罚来偏置注意力分数。实证结果表明:它比其他位置编码有更好的零样本泛化能力和更强的外推能力
- RoPE:通过基于绝对位置设置特定的旋转矩阵,RoPE中的键和查询之间的分数可以使用相对位置信息计算。对于建模长序列更有益。
- 注意力机制和偏置:GPT-3采用低计算复杂度的稀疏注意力机制,即分散注意力。对于偏置大多数LLM与原始的Transformer一样,在每一个线性层和标准化层中保留了偏置。但是PaLM和Galactica移除了偏置。研究表明移除偏置可以增强训练的稳定性。
- 总结:通过现有文献总结,为了有更强的泛化能力和训练稳定性,建议选择前置的RMS进行层标准化,并选择SwiGLU或GeGLU作为激活函数,可以选择RoPE或者ALiBi进行位置编码。
码字太累,VX关注晓理紫,后续继续
注意:本文大部分内容总结于,仅供学习,侵权联系删
https://github.com/le-wei/LLMSurvey/blob/main/assets/LLM_Survey_Chinese.pdf