大语言模型LLM综述
一、LM主要发展阶段
1.1、统计语言模型SLM
基于统计学习方法,基本思想是基于马尔可夫假设HMM建立词概率预测模型。如n-gram语言模型
1.2、神经语言模型NLM
基于神经网络来做词的分布式表示。如word2vec模型
1.3、 预训练语言模型PLM
预训练一个网络模型来做词表示,然后根据任务微调网络模型。即“预训练+微调”学习范式。如BERT、GPT-2
1.4、 大语言模型LLM
扩展预训练模型PLM,参数达到百亿级别及以上,模型出现涌现能力,如GPT-3,显著应用ChatGPT
二、 LLM基本概念和技术
2.1 LLM模型架构
- LLM主要采用基于Transformer模型架构和预训练目标构建。但它大幅扩展了模型大小、预训练数据和总计算量,可以更好地根据上下文理解自然语言并生成高质量的文本。
2.2 “涌现能力”
2.2.1上下文学习能力:
假设提供给语言模型自然语言指令或多个任务演示,它可以为测试实例生成期望的输出,无需额外的训练。
2.2.2 指令遵循能力:
通过指令微调 ,LLM可以在未见任务上遵循任务指令,具有更好的泛化能力。
2.2.3逐步推理:
通过采用“思维链”推理策略,LLM可以利用包含中间推理步骤的提示机制来解决任务。
2.3 LLM关键技术
- 扩展:将模型参数规模提升到百亿、千亿级别。在模型大小、数据大小、总运算量上的扩展。
- 训练:训练稳定性、混合精度训练的分布式训练框架。
- 能力引导:通过设计合适的任务指令或上下文学习策略激发LLM的任务求解能力。
- 对齐微调:使LLM与人类价值观保持一致,如有用性、诚实性、无害性。
- 工具操作:为解决不适合以文本形式表达的任务而设计和扩展的外部插件。
2.4 LLM模型资源
2.4.1公开的模型
- 百亿参数级别的模型
- LLaMA、NLLB、PanGu-a
- 千亿参数级别的模型
- OPT、OPT-IML、BLOOM、GPT-3、GLM
2.4.2 公共API
- GPT-3系列模型的API接口: ada、babbage、curie、 davinci等
- GPT -4模型API接口:gpt-4、gpt-4-0314、gpt-4-32k、gpt-4-32k-0314
- chatGPT接口: gpt-3.5-turbo-o301
2.4.3 常用语料库
- BOOKs 、Butenberg:有上万本文学作品、电子书的开源书籍集合。
CommonCrawl: 网络爬虫数据库
Reddit Links:社交媒体语料库
Wikipedia:在线百科全书
Code:网络上爬取的开源许可的代码。
- GPT-3使用的预训练语料库: CommonCrawl、WebText2、Books1、Books2、Wikipedia
2.4.4 算法库资源
- Transformers:Hugging Face
- DeepSpeed: Microsoft
- Megatron-LM: NVIDIA
- JAX:Google
- FastMoE
三、 如何预训练LLM
3.1 数据收集
3.1.1 语料库来源
- 通用文本数据: 网页、对话文本、书籍
- 专用文本数据:多语言文本、科学文本(如论文、教材等)、代码
3.1.2 数据预处理
- 质量过滤: 删除低质量数据。
(1) 基于分类器的方法
(2)基于启发式的方法: 基于语言的过滤、基于度量的过滤、基于统计的过滤、基于关键词的过滤
- 去重: 在句子级、文档级、数据集级等不同粒度上去重。
- 隐私去除: 删除可识别的个人信息PII,一般采用基于规则的方法
- 分词:将文本分割成词序列。SentencePiece、Byte Pair Encoding(BPE)算法
3.2 架构设计
3.2.1 主流架构
(1) 编码器-解码器架构: Transformer架构是目前各LLM的事实标准骨干。
(2) 因果解码器架构: 采用单向注意力掩码,每个输入标记只关注过去的标记和它本身。输入和输出通过解码器以相同的方式进行处理。GPT系列模型基于此架构。
(3) 前缀解码器: 也称为非因果解码器架构,修正了因果解码器的掩码机制,使其能够对前缀标记执行双向注意力,并对生成的标记执行单向注意力。模型有GLM-130B、U-PaLM
(4) 专家混合MoE
3.2.2 详细配置
(1)标准化: 为了缓解LLM预训练的不稳定问题,设计了层标准化LN。前置LN、RMS Norm、DeepNorm
(2)激活函数: 广泛使用GeLU激活函数,GLU激活函数变体,如SwiGLU 、GeGLU等。
(3) 位置编码: a.绝对位置编码:正弦函数、学习的位置编码;
b.相对位置编码:RoPE算法
(4) 注意力机制和偏差: 原始的Transformer是全自注意力机制,GPT-3采用了稀疏注意力机制,即分解注意力,计算复杂度更低。
3.2.3 预训练任务
(1) 语言模型LM:基于序列前面的标记x,自回归地预测目标标记xi。
训练目标为最大化似然函数L(x)=sum(logP(xi|x<i))
(2) 去噪自编码DAE: 任务的输入是一些有随机替换区间的损坏文本。
训练目标L(x) = logP(x~|x)
3.3 模型训练
3.3.1 优化设置
1、批量训练: 将批量大小设置为较大的数字,或动态增加批量大小
2、学习率:调整策略warm-up、decay
3、优化器: Adam、AdamW优化器
4、 稳定训练:使用权重衰减和梯度裁剪等,来解决预训练过程不稳定的问题
3.3.2 可扩展的训练技术
解决计算资源和训练效率的技术问题,即提高训练吞吐量和将更大的模型加载到GPU内存中。
1、3D并行
(1) 数据并行: 将模型参数和优化器状态复制到多个GPU上,将训练语料库分配到GPU上
(2) 流水线并行:将LLM的不同层分布到多个GPU上。 气泡开销问题 。Gpipe、PipeDream
(3)张量并行:专注于分解LLM的张量(参数矩阵)。
2、ZeRO技术
3、 混合精度训练
- FP16和FP32精度训练,BF16
4、整体训练建议(基于现大模型实例)
- BLOOM:采用8路数据并行、4路张量并行、12路流水线并行
- DeepSpeed:支持3D并行训练,ZeRO、FSDP和激活计算技术。
四、如何有效微调LLM模型
4.1 指令微调
在自然语言格式的实例集合上微调LLM的方法,目的是增强LLM的能力
4.1.1 格式化实例构造
- 格式化已有数据集:PromptSource众包平台
- 格式化人类需求:真实用户提交给OpenAI API的查询任务作为任务描述、真实生活中的任务指令编写。
- 实例构建的关键因素
- 扩展指令: 从任务数量、任务描述的多样性来增加任务实例样本,增加模型的泛化能力。
- 格式设计: 指令的多样性比实例数量更重要。
4.1.2 指令微调策略
- 平衡数据分布
- 结合指令微调和预训练
4.1.3 指令微调的效果
- 性能改进
- 任务泛化性
4.2 对齐微调
将LLM的行为与人类的价值观或偏好对齐。
4.2.1 对齐标准
- 有用性、诚实性、无害性
4.2.2 人类反馈收集
- 标注人员选择
- 人类反馈收集
- 基于排序的方法:Elo评分系统、基于问题的方法、基于规则的方法
4.2.3 基于人类反馈的强化学习
- RLHF系统
- 关键组件:预训练LM、从人类反馈中学习的奖励模型、训练LM的RL算法。
- 关键步骤:监督微调、训练奖励模型、RL微调
五、 使用利用LLM解决下游任务
为解决各种任务设计适当的提示策略。
5.1上下文学习
5.1.1 上下文学习的一般形式: ICL
5.1.2样例设计
1、样例选择
- 启发式的方法
- 基于LLM的方法
2、样例格式
3、样例顺序
5.1.3底层机制
- 预训练如何影响ICL?
- LLM如何实现ICL?
5.2 思维链提示
5.2.1 用CoT进行上下文学习
(1)少样本CoT
- CoT提示设计
- 增强的CoT策略
(2)零样本CoT
5.2.2 关于CoT
- CoT合适适用于LLM?
- LLM为什么能够进行CoT推理?
- CoT能力的来源
- 各个组件的作用
六、如何评估LLM的能力
为检验LLM模型的有效性和优越性,设计了大量的任务和基准数据来进行实证评估和分析。
6.1基础评测任务
6.1.1语言生成
- 语言建模
- 条件文本生成
- 代码合成
- 主要问题
- 可控生成
- 专业化生成
6.1.2 知识利用
- 闭卷问答
- 开卷问答
- 知识补全
- 主要问题
- 幻觉
- 知识实时性
6.1.3 复杂推理
- 知识推理
- 符号推理
- 数学推理
- 主要问题
- 不一致性
- 数值计算
6.2 高级能力评估
- 人类对齐
- 与外部环境的互动
- 工具操作
6.3 公开基准和经验性分析
6.3.1评测基准
- MMMLU
- BIG-bench
- HELM
6.3.2 LLM的综合分析
- 通才
- 熟练度
- 稳定度
- 专才
- 医疗、教育、法律等