AI大模型探索之路-训练篇3:大语言模型全景解读


文章目录

  • 前言
  • 一、语言模型发展历程
    • 1. 第一阶段:统计语言模型(Statistical Language Model, SLM)
    • 2. 第二阶段:神经语言模型(Neural Language Model, NLM)
    • 3. 第三阶段:预训练语言模型(Pre-trained Language Model, PLM)
    • 4. 第四阶段:大语言模型(Large Language Model, LLM)
  • 二、大语言模型的能力特点
  • 三、大语言模型关键技术
  • 四、大语言模型的构建过程
    • 1.预训练阶段
    • 2.有监督微调阶段
    • 3.奖励建模阶段
    • 4.强化学习阶段


前言

大规模语言模型(Large Language Models,LLM),也称大语言模型或大型语言模型,是一种由包含数百亿以上参数的深度神经网络构建的语言模型,通常使用自监督学习方法通过大量无标注文本进行训练。

一、语言模型发展历程

语言模型旨在对于人类语言的内在规律进行建模,从而准确预测词序列中未来(或缺失)词的概率。语言模型分为以下四个主要发展阶段:
在这里插入图片描述

1. 第一阶段:统计语言模型(Statistical Language Model, SLM)

统计语言模型基于马尔可夫假设,通过n元(n-gram)方法预测下一个词的出现概率。这些模型在信息检索和自然语言处理中得到广泛应用。然而,它们受限于固定上下文长度,难以捕捉长距离依赖关系,且面临数据稀疏问题。

2. 第二阶段:神经语言模型(Neural Language Model, NLM)

神经语言模型利用循环神经网络(RNN)和词嵌入(Word Embedding)来建模文本序列。与n元模型相比,神经网络方法能够更好地处理数据稀疏问题,并且有助于捕捉长距离依赖关系。但是,早期的神经网络模型在长文本建模能力上存在局限性,且不易并行训练。

3. 第三阶段:预训练语言模型(Pre-trained Language Model, PLM)

预训练语言模型通过在大规模无标注数据上进行预训练,学习上下文感知的单词表示。代表性模型如ELMo、BERT和GPT-1,它们确立了“预训练-微调”范式,通过预训练建立基础能力,然后使用有标注数据进行特定任务的适配。这一阶段的模型改进了长文本建模能力,但仍存在优化空间,特别是在并行训练和硬件友好性方面。

4. 第四阶段:大语言模型(Large Language Model, LLM)

大语言模型通过“扩展法则”(增加模型参数规模或数据规模)进一步提升模型性能。同时,在尝试训练更大的预训练语言模型(例如 175B 参数的 GPT-3 和 540B 参数的 PaLM)来探索扩展语言模型所带来的性能极限过程中。这些大规模的预训练语言模型在解决复杂任务时表现出了与小型预训练语言模型(例如 330M 参数的 BERT 和 1.5B 参数的 GPT-2)不同的行为。例如,GPT-3 可以通过“上下文学习”(In-Context Learning, ICL)的方式来利用少样本数据解决下游任务,这种能力称为:涌现能力。为了区分这一能力上的差异,学术界将这些大型预训练语言模型命名为“大语言模型”,同时大规模模型的训练和应用带来了计算资源和环境影响等方面的挑战。

注意:大语言模型不一定比小型预训练语言模型具有更强的任务效果,而且某些大语言模型中也可能不具有某种涌现能力,和训练的数据质量和方式也有很大的关系。

涌现能力: 主要的涌现能力包括以下3种
1)上下文学习能力:在提示中为大语言模型提供指令和多个任务示例;不需要显式的训练或梯度更新,仅输入文本的单词序列 就能为测试样本生成预期的输出。
2)指令遵循:大语言模型能够按照自然语言指令来执行对应的任务。为了获得这一能力,通常需要使用自然语言描述的多任务示例数据集进行微调,称为指令微调(Instruction Tuning)或监督微调(Supervised Fine-tuning)。通过指令微调,大语言模型可以在没有使用显式示例的情况下按照任务指令完成新任务,有效提升了模型的泛化能力。
3)逐步推理:大语言模型则可以利用思维链(Chain-of-Thought, CoT)提示策略来加强推理性能。具体来说,大语言模型可以在提示中引入任务相关的中间推理步骤来加强复杂任务的求解,从而获得更为可靠的答案

二、大语言模型的能力特点

1. 丰富的世界知识
相较于传统机器学习模型和早期预训练模型(如BERT、GPT-1),大语言模型通过更大规模的数据预训练,能更全面地吸收世界知识。这使得它们在处理特定领域任务时,不再像传统机器学习算法严重依赖微调相关的技术手段。

2. 通用任务解决能力
大语言模型主要通过预测下一个词元的预训练任务进 行学习,够建立了远强于传统模型的通用任务求解能力。这种能力使其在多个自然语言处理任务中取得卓越表现,逐渐取代了传统的任务特定解决方案。例如,在自然语言处理 领域,很多传统任务(如摘要、翻译等)都可以采用基于大语言模型的提示学习 方法进行解决,而且能够获得较好的任务效果。

3. 复杂任务推理能力
大语言模型在复杂推理任务上展现出较强的能力,例如复杂的知识关系推理和数学问题解答。相比之下,传统方法需针对性修改或特定数据学习,而大模型凭借大规模文本数据预训练,显示出更强的综合推理能力。

4. 人类指令遵循能力
大语言模型通过预训练和微调,获得了较好的人类指令遵循能力,能够直接通过自然语言描述执行任务(提示学习)。这一能力为打造以人为中心的应用服务(如智能音箱、信息助手等)提供了自然而通用的技术路径。

5. 人类对齐能力
随着大语言模型性能的提升,其安全性成为关注焦点。采用基于人类反馈的强化学习技术进行对齐,使得模型在线上部署时能有效阻止功能滥用行为,规避使用风险。

6. 工具使用能力
大语言模型展现了可拓展的工具使用能力,可以通过微调、上下文学习等方式掌握外部工具的使用,如搜索引擎与计算器;类似人类利用技术与工具扩展认知与能力。很多先进的模型都支持多种工具使用,增强任务解决能力。

三、大语言模型关键技术

1. 规模扩展
大语言模型性能提升依赖于参数、数据和算力的增加。OpenAI提出的“扩展法则”定量描述了这种关系,GPT-3验证了千亿参数规模的有效性。

2. 数据工程
模型能力本质上是来源于所见过的训练数据,因此数据工程就变得极为重要,不是简单的扩大数据规模就能够实现的。目前来说,数据工程主要包括三个方面:首先,需要对于数据进行全面的采集,拓宽高质量的 数据来源;其次,需要对于收集到的数据进行精细的清洗,尽量提升用于大模型训练的数据质量;第三,需要进行有效的数据配比与数据课程,加强模型对于数据语义信息的利用效率。这三个方面的数据工程技术直接决定了最后大语言模型的性能水平。

3. 高效预训练
由于参数规模巨大,需要使用大规模分布式训练算法优化大语言模型的神经网络参数。在训练过程中,需要联合使用各种并行策略以及效率优化方法,包括 3D 并行(数据并行、流水线并行、张量并行)、ZeRO(内存冗余消除技术)等。比如训练框架:DeepSpeed和 Megatron-LM。

4. 能力激发
通过指令微调和提示词的设计激发或诱导,增强大语言模型的通用任务求解能力。
1)指令微调方面: 使用自然语言表达的任务描述以及期望的任务输出对于大语言模型进行指令 微调,从而增强大语言模型的通用任务求解能力,提升模型在未见任务上的泛化能力。
2)提示学习方面:设计合适的提示策略去诱导大语言模型生成正确的问题答案。比如:上下文学习、思维链提示等,通过构建特殊的提 示模板或者表述形式来提升大语言模型对于复杂任务的求解能力。提示工程已经 成为利用大语言模型能力的一个重要技术途径。

进一步,大语言模型还具有较好的规划能力,能够针对复杂任务生成逐步求解的解决方案,从而简化通过单一步骤直接求解任务的难度,进一步提升模型在复杂任务上的表现

5. 人类对齐
1)互联网上开放的无标注文本数据的内容覆盖范围较广,可能包含低质量、个人隐私、事实错误的数据信息。因此,经过海量无标注文本预训练的大语言模型可能会生成有偏见、泄露隐私甚至对人类有害的内容。因此,需要保证大语言模型能够较好地符合人类的价值观。
2)目前,比较具有代表性的对齐标准是“3 H 对齐标准”,即 Helpfulness(有用性)、Honesty(诚实性)和 Harmlessness(无害性)。
OpenAI 提出了基于人类反馈的强化学习算法(Reinforcement Learning from Human Feedback, RLHF),将人类偏好引入到大模型的对齐过程中:首先训练能够区分模型输出质量好坏的奖励模型,进而使用强化学习算法来指导语言模型输出行为的调整,让大语言模型能够生成符合人类预期的输出。

6. 工具使用
1)通过让大语言模型学会使用各种工具的调用方式,进而利用合适的工具去实现特定的功能需求。例如,大语言模型可以利用计算器进行精确的数值计算,利用搜索引擎检索最新的时效信息。通过这些插件外挂扩展大语言模型的能力范围。
2)由于大语言模型的能力主要是通过大规模文本数据的语义学习所建立的,因此在非自然语言形式的任务(如数值计算)中能力较为受限。此外, 语言模型的能力也受限于预训练数据所提供的信息,无法有效推断出超过数据时 间范围以及覆盖内容的语义信息。为了解决上述问题,工具学习成为一种扩展大语言模型能力的关键技术。

四、大语言模型的构建过程

大语言模型是一种基于Transformer 结构的神经网络模型;其构建过程就是使用训练数据对于模型参数的拟合过程。他的本质是在做模型参数的优化,希望能够作为通用任务的求解器。通过一种非常符复杂、精细的训练方法来进行构建;这个训练过程可以分为大规模预训练和指令微调与人类对齐两个大阶段;同时又分为四小个阶段:预训练、有监督微调、奖励建模、强化学习。这四个阶段都需要不同规模数据集合以及不同类型的算法,会产出不同类型的模型。

1.预训练阶段

预训练(Pretraining)阶段需要利用海量的训练数据,包括互联网网页、维基百科、书籍、GitHub、论文、问答网站等,构建包含数千亿甚至数万亿单词的具有多样性的内容。利用由数千块高性能GPU 和高速网络组成超级计算机,花费数十天完成深度神经网络参数训练,构建基础语言模型(Base Model)。基础大模型构建了长文本的建模能力,使得模型具有语言生成能力,根据输入的提示词(Prompt),模型可以生成文本补全句子。
在这里插入图片描述

2.有监督微调阶段

1)有监督微调(Supervised Finetuning)也称为指令微调(Instruction Tuning),利用少量高质量数据集合,包含用户输入的提示词(Prompt)和对应的理想输出结果。用户输入包括问题、闲聊对话、任务指令等多种形式和任务。
2)利用这些有监督数据,使用与预训练阶段相同的语言模型训练算法,在基础语言模型基础上再进行训练,从而得到有监督微调模型(SFT 模型)。经过训练的 SFT 模型具备了初步的指令理解能力和上下文理解能力,能够完成开放领域问题、阅读理解、翻译、生成代码等能力,也具备了一定的对未知任务的泛化能力
在这里插入图片描述

3.奖励建模阶段

奖励建模(Reward Modeling)阶段目标是构建一个文本质量对比模型,对于同一个提示词,SFT 模型给出的多个不同输出结果的质量进行排序。奖励模型(RM 模型)可以通过二分类模型,对输入的两个结果之间的优劣进行判断。

奖励模型(Reward Model): 当我们在做完 SFT 后,我们大概率已经能得到一个还不错的模型。但我们回想一下 SFT 的整个过程:我们一直都在告诉模型什么是「好」的数据,却没有给出「不好」的数据。我们更倾向于 SFT 的目的只是将 Pretrained Model 中的知识给引导出来的一种手段,而在SFT数据有限的情况下,我们对模型的「引导能力」就是有限的。这将导致预训练模型中原先「错误」或「有害」的知识没能在 SFT数据中被纠正,从而出现「有害性」或「幻觉」的问题。
在这里插入图片描述

4.强化学习阶段

1)强化学习阶段也叫人类对齐,基于人类反馈的强化学习对齐方法 RLHF(Reinforcement Learning from Human Feedback),让模型的输出与人类的期望、需求、价值观对齐。
2)强化学习(Reinforcement Learning)阶段根据数十万用户给出的提示词,利用前一阶段训练的RM模型,给出SFT模型对用户提示词补全结果的质量评估,并与语言模型建模目标综合得到更好的效果。
3)使用强化学习,在SFT 模型基础上调整参数,使得最终生成的文本可以获得更高的奖励(Reward)。该阶段需要的计算量相较预训练阶段也少很多,通常仅需要数十块GPU,数天即可完成训练。

以下面某位大佬对Llama模型进行预训练,期望能训练出来一个能翻译论语的模型为例:
Pretraining模型
在这里插入图片描述
SFT 模型
在这里插入图片描述RLHF模型
在这里插入图片描述

🔻系列篇章
AI大模型探索之路-训练篇1:大语言模型微调基础认知
AI大模型探索之路-训练篇2:大语言模型预训练基础认知

🔖更多专栏系列文章:AIGC-AI大模型探索之路

文章若有瑕疵,恳请不吝赐教;若有所触动或助益,还望各位老铁多多关注并给予支持。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Python基础知识(二)

🎬 秋野酱:《个人主页》 🔥 个人专栏:《Java专栏》 《Python专栏》 ⛺️心若有所向往,何惧道阻且长 文章目录 1.输入和输出函数1.1输出函数1.2输入函数 2.常见运算符2.1赋值运算符2.2比较运算符2.3逻辑运算符2.4and逻辑与2.5or逻辑或2.6not逻…

c++二叉树的进阶--二叉搜索树

1. 二叉搜索树的概念 二叉搜索树又称二叉排序树,它或者是一棵空树,或者是具有以下性质的二叉树: 若它的左子树不为空,则左子树上所有节点的值都小于根节点的值 若它的右子树不为空,则右子树上所有节点的值都大于根节点的值 它的左…

Swift-27-类的初始化与销毁

Swift的初始化是一个有大量规则的固定过程。初始化是设置类型实例的操作,包括给每个存储属性初始值,以及一些其他准备工作。完成这个过程后,实例就可以使用了。 简单来讲就是类的构造函数,基本语法如下: 注意&#xff…

C语言扫雷游戏完整实现(上)

文章目录 前言一、新建好头文件和源文件二、实现游戏菜单选择功能三、定义游戏函数四、初始化棋盘五、 打印棋盘函数六、布置雷函数七、玩家排雷菜单八、标记功能的菜单九、标记功能菜单的实现总结 前言 C语言从新建文件到游戏菜单,游戏函数,初始化棋盘…

JavaScript-4.正则表达式、BOM

正则表达式 正则表达式包含在"/","/"中 开始与结束 ^ 字符串的开始 $ 字符串的结束 例: "^The":表示所有以"The"开始的字符串("There"、"The cat"等&#x…

数据结构(八)——排序

八、排序 8.1 排序的基本概念 排序(Sort),就是重新排列表中的元素,使表少的元素满足按关键字有序的过程。 输入∶n个记录R1,R2...., Rn,对应的关键字为k1, k2,... , kn 输出:输入序列的一个重排R1,R2....,Rn,使得有k1≤k2≤...≤…

综合大实验

题目: 1、R4为ISP,其上只配置IP地址;R4与其他所直连设备间均使用公有IP; 2、R3-R5、R6、R7为MGRE环境,R3为中心站点; 3、整个OSPF环境IP基于172.16.0.0/16划分;除了R12有两个环回,其…

VUE父组件向子组件传递值

创作灵感 最近在写一个项目时,遇到了这样的一个需求。我封装了一个组件,这个组件需要被以下两个地方使用,一个是搜索用户时用到,一个是修改用户信息时需要用到。其中,在搜索用户时,可以根据姓名或者账号进…

[前端]NVM管理器安装、nodejs、npm、yarn配置

NVM管理器安装、nodejs、npm、yarn配置 NVM管理器安装 nvm(Node.js version manager) 是一个命令行应用,可以协助您快速地 更新、安装、使用、卸载 本机的全局 node.js 版本。 nvm下载地址:https://github.com/coreybutler/nvm-windows/releases 1.全部…

Unity面向切面编程

一直说面向AOP(切面)编程,好久直接专门扒出理论、代码学习过。最近因为某些原因😭还得再学学造火箭的技术。 废话不多说,啥是AOP呢?这里我就不班门弄斧了,网上资料一大堆,解释的肯定…

mybatis中<if>条件判断带数字的字符串失效问题

文章目录 一、项目背景二、真实错误原因说明三、解决方案3.1针对纯数字的字符串值场景3.2针对单个字符的字符串值场景 四、参考文献 一、项目背景 MySQL数据库使用Mybatis查询拼接select语句中进行<if>条件拼接的时候&#xff0c;发现带数字的或者带单个字母的字符串失效…

CPU资源控制

一、CPU资源控制定义 cgroups&#xff08;control groups&#xff09;是一个非常强大的linux内核工具&#xff0c;他不仅可以限制被namespace隔离起来的资源&#xff0c; 还可以为资源设置权重、计算使用量、操控进程启停等等。 所以cgroups&#xff08;control groups&#xf…

Netty学习——实战篇5 Netty 心跳监测/WebSocket长连接编程 备份

1 心跳监测 MyServer.java public class MyServer {public static void main(String[] args) {NioEventLoopGroup bossGroup new NioEventLoopGroup(1);NioEventLoopGroup workerGroup new NioEventLoopGroup();try {ServerBootstrap serverBootstrap new ServerBootstrap…

学习Docker笔记

在23号刚刚学完新版本的docker还想说回去继续学习老版本的springcloud课程里面的docker 结果一看黑马首页新版本课程出了&#xff0c;绷不住了。以下是我学习新版本docker的笔记&#xff0c;记录了我学习过程遇到的各种bug和解决&#xff0c;也参考了黑马老师的笔记&#xff1a…

TDengine高可用探讨

提到数据库&#xff0c;不可避免的要考虑高可用HA&#xff08;High Availability&#xff09;。但是很多人对高可用的理解并不是很透彻。 要搞清高可用需要回答以下几个问题&#xff1a; 什么是高可用&#xff1f;为什么需要高可用&#xff1f;高可用需要达到什么样的目标&am…

Unity射线实现碰撞检测(不需要rigbody组件)

使用physic.CapsulCast&#xff08;&#xff09;&#xff1b; 前面3个参数生成一个胶囊体&#xff0c; 向着发射方向&#xff0c;发射出一串的胶囊&#xff08;没有最大距离&#xff09; 有最大距离&#xff0c;可以节约性能开销。 physic.CapsulCast&#xff08;&#xff0…

easypoi 导出增加自增序列

要求&#xff1a;使用easypoi导出Excel的时候&#xff0c;要求增加”序号“列&#xff0c;从1开始增加。这列与业务数据无关&#xff0c;只是展示用&#xff0c;便于定位。如下图所示 实现方式&#xff1a;Java对象新增一列&#xff0c;注意name "序号", format &…

Linux-缓冲区(简单理解)

1. 缓冲区是什么 缓冲区就是一段内存空间。 2. 为什么要有缓冲区 IO写入有两种&#xff1a; 写透模式&#xff08;WT&#xff09; 成本高&#xff0c;效率低写回模式&#xff08;WB&#xff09; 成本低&#xff0c;效率高 写透模式&#xff1a;每次的文件写入都要立即刷新…

使用ClickHouse和Terraform进行CI/CD

本文字数&#xff1a;11047&#xff1b;估计阅读时间&#xff1a;28 分钟 审校&#xff1a;庄晓东&#xff08;魏庄&#xff09; 本文在公众号【ClickHouseInc】首发 简介 在 ClickHouse&#xff0c;我们致力于以 API 为先的开发方式来构建 ClickHouse Cloud。用户通过用户界面…

如何快速学习盲打键盘的指法

学习盲打键盘的指法需要一定的时间和练习&#xff0c;但是以下几个方法可以帮助你加快学习的速度&#xff1a; 掌握正确的手位&#xff1a;了解标准的键盘布局以及手指应该放置的位置是学习盲打的第一步。在QWERTY键盘上&#xff0c;你的左手应该放在ASDF键上&#xff0c;右手应…