大语言模型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的综合分析

    - 通才

        - 熟练度
        - 稳定度

    - 专才

        - 医疗、教育、法律等

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/915337.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【Jenkins实战】Windows安装服务启动失败

写此篇短文&#xff0c;望告诫后人。 如果你之前装过Jenkins&#xff0c;出于换域账号/本地帐号的原因想重新安装&#xff0c;你大概率会遇上一次Jenkins服务启动失败提示&#xff1a; Jenkins failed to start - Verify that you have sufficient privileges to start system…

Linux kernel 堆溢出利用方法(二)

前言 本文我们通过我们的老朋友heap_bof来讲解Linux kernel中off-by-null的利用手法。在通过讲解另一道相对来说比较困难的kernel off-by-null docker escape来深入了解这种漏洞的利用手法。&#xff08;没了解过docker逃逸的朋友也可以看懂&#xff0c;毕竟有了root权限后&a…

微服务(一)

目录 1.认识微服务 1.1.单体架构 1.2.微服务 1.3.SpringCloud SpringCloud版本 SpringBoot版本 2.服务注册和发现 2.1.注册中心原理 2.2.Nacos注册中心 2.3.服务注册 2.3.1.添加依赖 2.3.2.配置Nacos 2.4.服务发现 2.4.1.引入依赖 2.4.2.配置Nacos地址 2.4.3.发…

ubontu--cuDNN安装

1. 下载 cuDNN https://developer.nvidia.com/cudnn 2. 拷贝到服务器/home/<username>文件夹下 解压缩到当前文件夹&#xff1a; tar -xvf cudnn-linux-x86_64-9.5.1.17_cuda11-archive.tar.xz复制头文件和库文件到cuda安装目录/usr/local/cuda/ sudo cp /home/usern…

Vue 批量注册组件实现动态组件技巧

介绍 Vue 动态组件的应用场景很多,可应用于动态页签,动态路由等场景,其核心原理是批量注册。在Vue2和Vue3中实现原理相同,只是语法略有差异。 Vue2 实现 基于 webpack require.context() 是webpack提供的一个自动导入的API 参数1&#xff1a;加载的文件目录 参数2&#xff…

WEB攻防-通用漏洞SQL读写注入MYSQLMSSQLPostgraSQL

知识点&#xff1a; 1、SQL注入-MYSQL数据库&#xff1b; 2、SQL注入-MSSQL数据库&#xff1b; 3、SQL注入-PostgreSQL数据库&#xff1b; 首先要找到注入点 详细点&#xff1a; Access无高权限注入点-只能猜解&#xff0c;还是暴力猜解 MYSQL&#xff0c;PostgreSQL&am…

NocoBase 本周更新汇总:提升工作流易用性

汇总一周产品更新日志&#xff0c;最新发布可以前往我们的博客查看。 NocoBase 目前更新包括两个分支&#xff1a;main 和 next 。 main &#xff1a;截止目前最稳定的版本&#xff0c;推荐安装此版本。 next&#xff1a;内测版&#xff0c;包含一些未发布的新特性&#xff…

python高级之面向对象编程

一、面向过程与面向对象 面向过程和面向对象都是一种编程方式&#xff0c;只不过再设计上有区别。 1、面向过程pop&#xff1a; 举例&#xff1a;孩子上学 1. 妈妈起床 2. 妈妈洗漱 3. 妈妈做饭 4. 妈妈把孩子叫起来 5. 孩子起床 6. 孩子洗漱 7. 孩子吃饭 8. 妈妈给孩子送学校…

❤React-React 组件基础(类组件)

❤React-React 组件基础 1、组件化开发介绍 组件化开发思想&#xff1a;分而治之 React的组件按照不同的方式可以分成类组件&#xff1a; 划分方式一&#xff08;按照组件的定义方式&#xff09; 函数组件(Functional Component )和类组件(Class Component)&#xff1b; …

在Java中使用ModelMapper简化Shapefile属性转JavaBean实战

目录 前言 一、原始的处理办法 1、使用Set方法来转换 2、使用构造方法转换 二、基于ModelMapper的动态转换 1、ModelMapper简介 2、集成到项目中 3、Shapefile属性读取 三、总结 前言 在现代软件开发中&#xff0c;尤其是在多层架构中&#xff0c;经常需要将数据从一个…

Arduino IDE Windows 系统 离线安装 esp32 开发板 亲测好用。

1、前提条件需要具备特殊网络。 2、官方文档地址&#xff1a;Installing - - — Arduino ESP32 latest documentation 3、系统&#xff1a;Windows10 Arduino IDE 版本2.3.3 之前安装的esp32开发板的版本是2.0.13&#xff0c;由于之前没有接触过esp32开发&#xff0c;也没…

期权懂|请问如何用期权进行风险管理?

期权小懂每日分享期权知识&#xff0c;帮助期权新手及时有效地掌握即市趋势与新资讯&#xff01; 请问如何用期权进行风险管理&#xff1f; 一、期权可以选择交易活跃的期权合约进行风险管理&#xff1a; 对于初级投资者来说&#xff0c;选择交易活跃的期权合约是非常重要的。…

GNU构建系统和Autotool

1、前言 经常使用Linux的开发人员或者运维人员&#xff0c;可能对configure->make->make install相当熟悉。事实上&#xff0c;这叫GNU构建系统&#xff0c;利用脚本和make程序在特定平台上构建软件。这种方式成为一种习惯&#xff0c;被广泛使用。本文从用户视角和开发…

NLP论文速读|ScPO:自我一致性的偏好优化(Self-Consistency Preference Optimization)

论文速读|Self-Consistency Preference Optimization 论文信息&#xff1a; 简介&#xff1a; 这篇论文试图解决的问题是如何在没有人类标注数据的情况下&#xff0c;提高大型语言模型&#xff08;LLMs&#xff09;在复杂推理任务上的性能。现有的自我对齐技术往往因为难以分配…

【前端学习指南】Vue computed 计算属性 watch 监听器

&#x1f36d; Hello&#xff0c;我是爱吃糖的范同学 &#x1f534; 想把自己学习技术的经历和一些总结分享给大家&#xff01; &#x1f534; 通过这样的方式记录自己成长&#xff0c;同时沉淀自己的技术&#xff0c;我会把所有额外的时间和经历投放到CSDN和公众号&#xff0…

自动驾驶合集(更新中)

文章目录 车辆模型控制路径规划 车辆模型 车辆模型基础合集 控制 控制合集 路径规划 规划合集

vcenter service基本异常处理

服务&#xff1a;vcenter service 版本&#xff1a; 7.0.3 问题描述&#xff1a;无法访问vcenter ui 排障思路&#xff1a; 1. 登入vcenter所在服务器执行基础排查&#xff1a;内存、cpu、磁盘、网络等&#xff0c;发现磁盘日志目录已经爆满&#xff0c;删除180天前的日志恢…

Background Tasks Kit(后台任务开发服务)

11_13日学习笔记 Background Tasks Kit&#xff08;后台任务开发服务&#xff09; Background Tasks Kit简介 设备返回主界面、锁屏、应用切换等操作会使应用退至后台。 应用退至后台后&#xff0c;如果继续活动&#xff0c;可能会造成设备耗电快、用户界面卡顿等现象。 为了…

modbus协议 Mthings模拟器使用

进制转换 HEX 16进制 (0、1、2、3、4、5、6、7、8、9、A、B、C、D、E、F表示0-15) dec 10进制 n(16进制) -> 10 abcd.efg(n) d*n^0 c*n^1 b*n^2 a*n^3 e*n^-1 f*n^-2 g*n^-3&#xff08;10&#xff09; 10 -> n(16进制) Modbus基础概念 高位为NUM_H&…

Python多进程间通讯(包含共享内存方式)

文章目录 1 通过非共享内存配合队列方式2 通过共享内存配合队列方式 注&#xff1a;本博文测试环境为Linux系统。 1 通过非共享内存配合队列方式 下面是一个常见的生产者与消费者的模式示例&#xff0c;这里分别启动了两个子进程&#xff0c;一个为生产者&#xff08;producer…