大规模语言模型:从理论到实践(1)

1、绪论

        大规模语言模型(Large Language Models,LLM)是由包含数百亿以上参数的深度神经网络构建的语言模型,采用自监督学习方法通过大量无标注文本进行训练。自2018年以来,多个公司和研究机构相继发布了多种模型,如BERT和GPT,并在自然语言处理任务中取得了显著的成果。尤其是2022年11月发布的ChatGPT,引发了广泛关注,使得用户能够通过自然语言与系统交互,完成多种任务,包括问答、分类、摘要、翻译和聊天等。本文主要介绍大规模语言模型的基本概念、发展历程和构建流程。

1.1、大规模语言模型基本概念

       直接计算整个句子的联合概率是不现实的,因为涉及到的参数非常庞大。使用链式法则可以将这个复杂的计算分解为几个较小的、易于估计的条件概率。 语言是人类与动物的重要区别,许多知识以自然语言的形式记录和传播。语言模型的目标是建模自然语言的概率分布。词汇表 V 上的语言模型使用链式法则可表示为:

P(w_1 w_2 \ldots w_m) = P(w_1) P(w_2 | w_1) P(w_3 | w_1 w_2) \ldots P(w_m | w_1 w_2 \ldots w_{m-1}) = \prod_{i=1}^{m} P(w_i | w_1 w_2 \ldots w_{i-1})        

        这表示词序列的生成过程为单词逐个生成。例如,对于句子“把努力变成一种习惯”,其概率计算为:

        通过上述过程将联合概率转换为多个条件概率的乘积。为减少模型的参数空间,可以假设任意单词 w_i 的出现概率只与过去 n-1 个词相关:

P(w_i | w_1 w_2 \ldots w_{i-1}) = P(w_i | w_{i-n+1} \ldots w_{i-1})

        这种模型称为 n 元语法或 n 元文法(n-gram)模型。

Q:能举例说明一下直接计算句子得联合概率和使用链式法则计算的方式的区别吗?

A: 

1. 词汇表和语料库

首先,我们需要一个词汇表(vocabulary)和一个训练好的语料库。语料库中的文本数据将用于统计各个词及其组合出现的频率。

2. 频率统计

在语料库中,统计每个词的出现频率以及每对或三词组合的出现频率。例如:

  • 计算“我”的出现次数 C(我)

  • 计算“我 爱”的出现次数 C(我 爱)

  • 计算“我 爱 学习”的出现次数 C(我 爱 学习)

3. 计算联合概率

通过频率统计,我们可以使用最大似然估计(MLE)来估计联合概率:

                        P(我 爱 学习)=C(我 爱 学习)/C(所有句子)

其中,C(所有句子)是语料库中所有句子的总数。

4. 链式法则

由于直接计算联合概率可能非常稀疏,因此通常采用链式法则将其分解为条件概率:

                        P(我 爱 学习)=P(我)×P(爱∣我)×P(学习∣我 爱)

这样,我们可以分别估计每个词的概率和条件概率,通常通过相似的方法进行统计。

        大规模语言模型(LLM)通过分析大量无标注文本来理解和生成自然语言。然而,由于语言的复杂性和多样性,传统的 n 元语言模型在处理稀疏数据时存在一些挑战。具体来说:

  1. 零概率问题:在训练语料中,某些词组可能未出现,这会导致模型计算联合概率时出现零值。因此,平滑技术被引入,以确保每个可能的字符串都有非零的概率。

  2. 平滑技术:通过调整概率分布,使得低概率的词组概率提高,而高概率的词组概率降低,从而使整体分布更加均匀。这有助于减少零概率现象,使模型更为鲁棒。

  3. 缺点

    • n 元语言模型只能建模长度不超过 n 的上下文。

    • 依赖人工设计的平滑规则。

    • 随着 n 的增大,数据稀疏性和模型参数量急剧增加,导致学习困难。

        为了解决这些问题,研究者们转向基于神经网络的语言模型(NLM)。Bengio等人在2000年提出了使用前馈神经网络来估计词的条件概率,这种方法使用词向量(Word Embedding)将词映射为低维稠密向量,能更好地捕捉词之间的相似性。随着深度学习的发展,循环神经网络(RNN)、卷积神经网络(CNN)等方法也被广泛应用于语言模型。这些神经网络模型能够处理长距离依赖关系,并在一定程度上减少数据稀疏问题。

        神经语言模型的训练可以基于大规模无标注文本,这使得自监督学习成为一种主流方法。受计算机视觉领域预训练的启发,自然语言处理也逐渐采用预训练模型的方法。例如,动态词向量模型ELMo、生成式预训练模型GPT和BERT等,代表了基于Transformer的预训练语言模型的最新进展。这些模型在预训练阶段学习了丰富的语言知识,然后通过微调(fine-tuning)来适应特定任务。用户只需在预训练模型上进行监督训练,而无需设计新的网络结构,从而大幅提升了性能。

        在2020年,OpenAI发布了包含1750亿参数的生成式大规模预训练语言模型GPT-3(Generative Pre-trained Transformer 3),这标志着大规模语言模型时代的到来。GPT-3的庞大参数量使得在不同任务上进行微调需要消耗巨大的计算资源,这一预训练微调范式变得不再适用。

新的学习方法

为了应对这一挑战,研究人员开始探索新的方法:

  1. 语境学习(In-context Learning, ICL):直接利用大规模语言模型在少样本场景下进行任务,取得良好效果。

  2. 提示词(Prompt)学习:通过设计提示词来引导模型进行特定任务,而无需进行复杂的微调。

  3. 模型即服务(Model as a Service, MaaS):提供基于模型的服务,使得用户能够方便地使用大规模模型。

  4. 指令微调(Instruction Tuning):通过特定指令进一步优化模型在某些任务上的表现。

        随着这些方法的出现,众多公司和研究机构相继发布了各自的大规模语言模型,如Google的PaLM、Meta的LaMDA、百度的T0等。

缩放法则

Kaplan等人提出了缩放法则(Scaling Laws),强调模型的性能与以下三个因素密切相关:

  • 参数数量

  • 数据集大小

  • 计算量

        研究表明,如下图所示,随着这三者的指数增加,模型的效果会线性提升。具体而言,模型的损失值会随着规模的增加而降低,这为进一步提升大模型规模提供了定量分析依据。

1.2、大规模语言模型发展历史

        尽管大规模语言模型的发展历程不足五年,但其进展速度惊人。截至2023年6月,国内外已发布超过百种大模型,如下图所示,从2019年至2023年5月,比较有影响力且模型参数量超过100亿的大规模语言模型的发展可以粗略分为以下三个阶段:

  1. 基础模型阶段

  2. 能力探索阶段

  3. 突破发展阶段

这些阶段反映了大规模语言模型在技术、应用和研究方面的快速演变。

        大规模语言模型的发展经历了基础模型的建立、能力的探索以及突破性进展,各阶段展现出不同的技术创新和应用潜力,推动了自然语言处理领域的快速发展。

典型开源大模型汇总 ​​​​​​​

典型闭源大模型汇总 

 

  • 基础模型阶段(2018-2021)

  1. 2017年:Vaswani等人提出了Transformer架构,突破了机器翻译任务的瓶颈。
  2. 2018年:Google和OpenAI分别推出了BERT(1.1亿参数和3.4亿参数的BERT-Large)和GPT-1(1.17亿参数),开启预训练语言模型时代。
  3. 2019年:OpenAI发布了GPT-2(15亿参数),Google随后发布了T5(110亿参数)。
  4. 2020年:OpenAI推出了GPT-3(1750亿参数),成为当时最大规模的语言模型。
  5. 国内也推出了如清华大学的ERNIE、百度的ERNIE和华为的盘古-α等大规模语言模型。
  6. 研究集中在各种模型结构(仅编码器、编码器-解码器、仅解码器)和预训练微调。
  • 能力探索阶段(2019-2022)

  1. 探索方法:研究人员探索如何在不进行特定任务微调的情况下,利用大规模语言模型的能力。
  2. 2019年:Radford等人研究了GPT-2的零样本学习能力。
  3. GPT-3:Brown等人提出了通过语境学习(In-Context Learning)进行少样本学习,展示了模型在多个任务上的强大能力。
  4. 指令微调:提出统一生成式自然语言理解框架,利用大量任务进行有监督微调,提升了模型性能。
  5. 2022年:Ouyang等人提出了InstructGPT,结合监督微调和强化学习,提升模型对人类指令的响应能力。
  • 突破发展阶段(2022至今)

  1. ChatGPT发布(2022年11月):通过简单对话框,实现问题回答、文稿撰写、代码生成等多种功能,超越传统自然语言处理系统。
  2. GPT-4发布(2023年3月):具备多模态理解能力,在多种基准考试中表现出色,展现近乎通用人工智能的能力。
  3. 许多公司和研究机构相继发布类似系统,如Google的Bard、百度的文心一言、科大讯飞的星火大模型等。
  4. 从2022年开始,大规模语言模型呈现爆发式增长,各类模型不断涌现。

1.3、大规模语言模型构建流程 

        根据OpenAI联合创始人Andrej Karpathy在微软Build 2023大会上公开的信息,如下图所示,OpenAI的大规模语言模型构建流程可分为四个主要阶段:

1. 预训练(Pretraining)

        在预训练阶段,模型利用大量多样化的数据,包括互联网网页、维基百科、书籍、GitHub、论文和问答网站等,构建一个包含数千亿到数万亿单词的语料库。训练过程中,使用由数千块高性能GPU和高速网络组成的超级计算机,通常需要数十天来完成深度神经网络的参数训练,从而构建基础语言模型(Base Model)。

  • 建模能力:模型能够生成文本,并在接收输入提示(Prompt)后补全句子。研究人员认为,语言模型在训练中也隐含构建了事实性知识(Factual Knowledge)和常识知识(Commonsense),即世界知识(World Knowledge)。

  • 计算资源:例如,GPT-3的训练总计算量达到3640PFlops,使用1000块NVIDIA A100 80G GPU,训练时间约为一个月。其他模型如OPT和BLOOM的训练也消耗了相应的计算资源和时间。

2. 有监督微调(Supervised Finetuning)

        在这一阶段,利用少量高质量的数据集,包括用户输入的提示词和对应的理想输出结果进行训练。

  • 例子:

    • 提示词(Prompt):复旦大学有几个校区?

    • 理想输出:复旦大学现有4个校区,分别是邯郸校区、新江湾校区、枫林校区和张江校区。

        使用这些有监督数据,通过与预训练阶段相同的训练算法在基础模型上进行进一步训练,得到有监督微调模型(SFT模型)。训练后的SFT模型具备初步的指令理解能力和上下文理解能力,可以完成开放领域问题、阅读理解、翻译、生成代码等任务,具备一定的泛化能力。

  • 计算需求:SFT模型训练需要的计算资源相对较少,通常使用数十块GPU,训练时间为数天。许多类似ChatGPT的模型,如Alpaca、Vicuna、MOSS等,都属于这一类型。

3. 奖励建模(Reward Modeling)

        在奖励建模阶段,目标是构建一个文本质量对比模型。对于同一个提示词,SFT模型生成的多个输出结果的质量进行排序。

  • 工作原理:奖励模型(RM模型)通过二分类模型来判断输入的两个输出结果的优劣。RM模型不同于基础模型和SFT模型,不能单独提供给用户使用。训练RM模型通常需要数十块GPU,耗时几天。

  • 数据需求:RM模型的训练需要大规模的对比数据,标注过程需耗费大量人力,标注人员必须认真遵循规范,以确保一致性。此阶段的难点在于如何界定RM模型的泛化边界,以确保模型能够高质量地评估所有生成输出。如下图所示,给出了 InstructGPT 系统中奖励模型训练样本标注示例

4. 强化学习(Reinforcement Learning)

        在强化学习阶段,利用数十万用户提供的提示词,通过之前训练的奖励模型(RM模型)评估SFT模型对用户提示的文本补全结果的质量。这一阶段的提示词数量与有监督微调阶段相似,通常在十万量级,并且不需要人工提前指定每个提示词的理想回复。

  • 工作原理:通过强化学习,调整SFT模型的参数,使得最终生成的文本能够获得更高的奖励(Reward)。这一过程相较于预训练阶段所需的计算量少得多,通常只需要数十块GPU,经过几天即可完成训练。

  • 效果对比:根据文献,强化学习在模型参数量相同的情况下,通常能获得比有监督微调更好的效果。然而,截止到2023年9月,关于为何强化学习能够取得更好结果的原因尚未有完整和广泛认可的解释。

  • 潜在问题:Andrej Karpathy指出,强化学习也存在问题,例如它可能导致基础模型的熵降低,从而减少模型输出的多样性。经过强化学习训练后的RL模型,最终提供给用户的就是一个具备理解用户指令和上下文能力的类ChatGPT系统。

  • 挑战:由于强化学习方法的稳定性较低,并且超参数众多,使得模型收敛难度增加。此外,RM模型的准确性对结果也有重要影响,因此在大规模语言模型中有效应用强化学习仍然面临诸多挑战。

        这四个阶段在数据规模、算法类型和所需资源上存在显著差异,形成了一个逐步优化的模型构建流程,从基础的语言理解到复杂的任务执行能力,确保了模型在实际应用中的有效性和灵活性。

​​​​​​​

1.4、 本专栏后文内容安排

后文围绕大规模语言模型的构建和评估展开,主要涵盖三个部分:

第一部分:预训练相关内容

  • 第2章:介绍大规模语言模型的基础理论,包括语言模型的定义、Transformer架构和大规模语言模型框架,以LLaMA的模型结构为例提供代码实例。

第二部分:理解与指令遵循

  • 第3章和第4章:聚焦于大规模语言模型的预训练阶段,讨论分布式训练中的数据并行、流水线并行和模型并行等技术,以及Zero系列优化方法。同时,介绍预训练所需的数据分布和数据预处理方法,以Deepspeed为例展示如何进行大规模语言模型的预训练。

  • 第5章和第6章:探讨如何在基础模型上利用有监督微调和强化学习方法,提升模型对指令的理解和人类回答能力。包括高效微调方法(如Lora、Delta Tuning)、有监督微调数据构造、强化学习基础及近端策略优化(PPO)。并以DeepSpeed-Chat和MOSS-RLHF为例,展示如何训练类ChatGPT系统。

第三部分:扩展应用与评价

  • 后续章节:将讨论大规模语言模型的应用场景和评价方法,重点分析模型的性能和实用性。

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

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

SpringBoot中@Validated或@Valid注解校验的使用

文章目录 SpringBoot中Validated或Valid注解校验的使用1. 添加依赖2. 使用示例准备2-1 测试示例用到的类2-2 实体Dto,加入校验注解2-2 Controller 3. 示例测试4. Valid 和 Validated注解详解4-1 常用规则注解4-2 分组验证4-2-1 示例准备4-2-2 Controller接口4-2-3 P…

HarmonyOS使用arkTS拉起指定第三方应用程序

HarmonyOS使用arkTS拉起指定第三方应用程序 前言代码及说明bundleName获取abilityName获取 前言 本篇只说采用startAbility方式拉起第三方应用,需要用到两个必备的参数bundleName,abilityName,本篇就介绍如何获取参数… 代码及说明 bundle…

04_CC2530+Uart串口通信

04_CC2530UART串口通信 串口通信基本概念 串行通信: 数据字节一位位地依次传送的通信方式, 串行通信的速度慢, 但用的传输线条数少, 成本低,适用于远距离的数据传送并行通信: 数据字节的各位同事传送的通信方式, 优点是数据传送速度快, 缺点是占用的传输线条数多,…

Speaker Recognition说话人识别(声纹识别)

说话人识别,又称声纹识别。从上世纪60年代开始到现在,声纹识别一直是生物识别技术研究的主题。从传统的基于模板匹配的方法,到早期基于统计学方法,直到基于深度学习的声纹识别技术成为主流。本项目给出一个从传统(基于…

SpringBoot篇(简化操作的原理)

目录 一、代码位置 二、统一版本管理(parent) 三、提供 starter简化 Maven 配置 四、自动配置 Spring(引导类) 五、嵌入式 servlet 容器 一、代码位置 二、统一版本管理(parent) SpringBoot项目都会继…

华为HarmonyOS借助AR引擎帮助应用实现虚拟与现实交互的能力3-获取设备位姿

设备位姿描述了物体在真实世界中的位置和朝向。AR Engine提供了世界坐标下6自由度(6DoF)的位姿计算,包括物体的位置(沿x、y、z轴方向位移)和朝向(绕x、y、z轴旋转)。通过AR Engine,您…

【Git】Git常用命令

目录 1 前言2 git命令2.1 branch2.2 checkout2.3 pull and push2.4 config2.4.1 Proxy 2.5 tag2.6 rebase2.7 patch2.8 remote2.9 submodule2.10 rm2.10 gitignore2.11 某个commit更改了哪些文件2.12 clean 3 结束语 1 前言 本章记录总结在使用git过程中常用的一些命令&#x…

cgroup2版本下使用cgroups对内存/cpu进行控制

先查看cgroups的版本支持: cat /proc/filesystems | grep cgroup 运行结果: 如上表示支持cgroup2版本 一、对内存进行控制 cgroup版本对于内存控制是单独使用/sys/fs/cgroup/memory路径控制的,而在cgroup2版本中是统一管理,所以没有该路径,所以只需先进入该路径: cd /sys/…

安卓应用跳转回流的统一和复用

本文字数:6799字 预计阅读时间:35分钟 作为一个功能复杂的应用,无法避免地需要支持众多路径的回流,比如从Launcher、从Push通知、从端外H5、从合作第三方App以及从系统资源分享组件等。 我们知道,不同的回流路径会通过…

C3.【C++ Cont】名字空间、注释和变量

目录 1.回顾 2.名字空间(也称命名空间) 介绍 代码示例 3.注释 4.练习 B2003 输出第二个整数 方法1 方法2 1.回顾 在C1.【C Cont】准备中提到了名字空间(namespace)语句 using namespace std; 2.名字空间(也称命名空间) 介绍 1.处在在同一个空间内的,若有重名则会名…

常见自动化测试框架分层架构

作为一名专业的测试人员,搭建一个高级的自动化测试框架需要考虑多个因素。以下是一些步骤和指导,帮助你构建一个强大且灵活的自动化测试框架: 1. 理解框架的概念: - 首先,我们需要明确什么是“框架”。在自动化测试中…

103 - Lecture 2 Table and Data Part 1

SQL - Tables and Data Part 1 Relational Database Management System(RDBMS) 关系型数据库管理系统(RDBMS)是基于关系模型的数据库系统,它支持多种关系操作。关系模型是一种数据存储和检索的模型,它使用表格来组织数据&#x…

NestJS vs Fastify:Node.js框架的性能对决

在Node.js的世界中,框架的选择对于应用的性能和可维护性有着至关重要的影响。NestJS和Fastify是两个备受瞩目的框架,它们各自以其独特的优势在开发者社区中赢得了声誉。本文将深入探讨这两个框架的性能特点,并分析它们在不同场景下的适用性。…

【NOIP普及组】明明的随机数

【NOIP普及组】明明的随机数 C语言实现C实现Java实现Python实现 💐The Begin💐点点关注,收藏不迷路💐 明明想在学校中请一些同学一起做一项问卷调查,为了实验的客观性,他先用计算机生成了N个1到1000之间的随…

python中t是什么意思

python中t是什么意思? python中t指的是“\r”:回车符,返回到这一行的开头,return的意思。 其他相关: \n:换行符,到下一行的同一位置,纵坐标相同,new line的意思。 \t…

OracleJDK与OpenJDK的区别(附带win11下多版本jdk安装)

OracleJDK与OpenJDK的区别(附带win11下多版本jdk安装) 在Java开发领域,OracleJDK与OpenJDK是两个常被提及的名词,它们都是Java开发工具包(JDK)的实现,但各自具有不同的特点和优势。在早期的jav…

代码随想录算法训练营第三十一天 | 56.合并区间 738.单调递增的数字 968.监控二叉树

LeetCode 56.合并区间: 文章链接 题目链接:56.合并区间 思路: ① 合并所有重叠的区间,合并后的区间数组不重叠,因此下面两种多区间重叠,其中的区间都要进行合并 ② 合并区间:因为情况2也算作…

[ComfyUI]FaceAging:太好玩啦!FaceAging终于装好了!负50到正100岁随心调整!超强又难装的节点安装教程来了! Comfyui教程

大家好!今天我要向大家介绍一个超级有趣的话题——[ComfyUI]FaceAging!这个工具能够让你轻松实现人脸年龄的调整,从负50岁到正100岁,让你的创作更加有趣和独特。 想象一下,你有一个强大的AI助手,它能够根据…

蓝桥杯真题——乐乐的序列和(C语言)

问题描述 乐乐在玩一个游戏,她有一排宝石,每个宝石上都刻有一个整数值。她的目标是从中挑选出一些宝石,使得选出的宝石数量为偶数,且这些宝石上的数字总和最大。如果不选任何宝石(即选出宝石数量为 00,也是…

猫用宠物空气净化器哪个牌子好?求噪音小的宠物空气净化器推荐!

最近真是烦躁到了顶峰!猫咪换毛季太折磨人了,白天上班累的要死,晚上回家还要和猫毛斗争。每天回家都是一场豪赌,需要花费的清理时间取决于家里的猫毛散落程度。有时候忙起来完全不想管,回到家只想躺着。 但最近身体出…