构建大语言模型的四个主要阶段

        大规模语言模型的发展历程虽然只有短短不到五年的时间,但是发展速度相当惊人,国内外有超过百种大模型相继发布。中国人民大学赵鑫教授团队在文献按照时间线给出 2019 年至 2023 年比较有影响力并且模型参数量超过 100 亿的大规模语言模型。大规模语言模型的发展可以粗略的分为如下三个阶段:基础模型、能力探索、突破发展。

       大语言模型构建通常包含以下四个主要阶段:预训练、有监督微调、奖励建模和强化学习,简要介绍各阶段使用的算法、数据、难点以及实践经验。

  • 预训练
       需要利用包含数千亿甚至数万亿 单词的训练数据,并借助由数千块高性能 GPU 和高速网络组成的超级计算机,花费数十天完成深 度神经网络参数的训练。这一阶段的核心难点在于如何构建训练数据以及如何高效地进行分布式训练。

       预训练阶段是大规模语言模型训练的关键步骤之一,特别是对于GPT(Generative Pre-training Transformer)系列模型而言。在预训练阶段,模型通过自我监督学习(Self-supervised Learning)的方式,利用海量无标签的互联网文本数据集进行训练。具体来说,GPT模型采用了自回归语言模型的形式,其核心任务是根据给定的文本序列预测下一个可能出现的单词。

       模型通过Transformer架构的多层自注意力机制学习到文本序列中词汇之间的深层上下文依赖关系。在训练过程中,模型试图最小化预测下一个单词的交叉熵损失,从而逐步建立起对自然语言规律的深刻理解,其中包括词汇搭配、语法结构、短语和句子的意义等。

       通过预训练,模型能够在大规模无标注数据上习得通用的语言表示,这些表示可以被进一步应用于多种不同的自然语言处理任务中,只需要在预训练模型的基础上进行微调,就可以在特定任务上达到相当出色的性能。这极大地降低了对大量有标注数据的依赖,并为多种下游任务提供了强有力的模型基础。

  • 有监督微调阶段
       利用少量高质量的数据集,其中包含用户输入的提示词( Prompt )和对应的理想输出结果。提示词可以是问题、闲聊对话、任务指令等多种形式和任务。这个阶段是从语言模型向对话模型转变的关键,其核心难点在于如何构建训练数据,包括训练数据内部多个任务之 间的关系、训练数据与预训练之间的关系以及训练数据的规模。

       有监督微调是预训练模型适应特定任务的关键步骤。在完成了大规模无标注数据上的预训练后,模型已经学习到了丰富的语言结构和模式。然而,为了针对性地解决特定的自然语言处理任务(如问答系统、文本分类、机器翻译等),我们需要对预训练模型进行微调(Fine-tuning)。

       微调过程中,我们会使用特定任务的有标签数据集,重新训练模型的部分或全部权重,使其能够针对特定任务进行优化。这意味着模型会在原有的预训练基础上,针对新的任务目标调整其内部参数,以便更好地理解和处理任务特有的特征和规律。

       在微调阶段,模型的输入和输出会与特定任务一致。例如,在文本分类任务中,模型将学习如何根据输入文本预测相应的类别标签;而在问答系统任务中,模型则将学会根据提供的背景文本生成恰当的答案。

       通过这种方法,预训练模型能够快速适应新任务,通常比从零开始训练模型需要更少的数据和计算资源,同时也能够取得更好的性能表现。这种预训练-微调范式已经成为现代自然语言处理中广泛采用的技术手段。

  • 奖励建模阶段
       奖励建模阶段 的目标是构建一个文本质量对比模型,用于对于同一个提示词,对有监督微调模型给出的多个不同输出结果进行质量排序。这一阶段的核心难点在于如何限定奖励模型的应用范围以及如何构建训练数据。

       奖励建模(Reward Modeling)是一种强化学习中的技术,尽管像GPT这样的大规模预训练语言模型通常基于自监督学习或最大似然估计进行训练,但在某些情况下,奖励建模可以作为一种补充手段,帮助进一步优化模型的行为,特别是当涉及到道德、伦理或者更加符合人类价值判断的输出时。

       在奖励建模框架下,首先定义一个“奖励函数”,该函数量化了模型行为的好坏程度,即模型输出越符合预期的目标或人类偏好,则获得的奖励越高。然后,通过训练一个辅助模型(也称为奖励模型)来预测这些奖励信号,辅助模型通常是基于少量人工标注数据或者其他方式表达的人类偏好。

       在实际应用中,奖励建模可能被用来指导预训练语言模型的微调过程,使模型在生成文本时不仅追求语法和语义的正确性,还能尽量遵循预设的价值观或社会规范。这一过程可能包括让模型根据所学到的奖励信号调整其策略,生成更加符合期望的结果。通过这种方式,即使原始训练并未采用强化学习,奖励建模也可以间接引入强化学习的理念来改进模型的表现。

  • 强化学习阶段
       根据数十万提示词,利用前一阶段训练的奖励模型,对有监督微调模型对用户提示词补全结果
的质量进行评估,并与语言模型建模目标综合得到更好的效果。这一阶段的难点在于解决强化学
习方法稳定性不高、超参数众多以及模型收敛困难等问题。

       强化学习(Reinforcement Learning,RL)确实是一个强有力的机器学习框架,尤其适用于那些智能体需要通过与环境交互来学习最优行为的场景。在自然语言处理(NLP)领域,强化学习应用于对话模型的训练时,模型扮演的角色就是一个智能体,这个智能体会在对话交互的环境中采取行动(例如,生成回应),然后根据接收到的外部反馈(即奖励信号)来调整它的策略。

       在对话系统的上下文中,强化学习允许模型通过与用户或其他评价机制交互,根据用户的满意度、对话连贯性、信息准确性等因素获取即时或延迟的奖励。比如,如果模型生成的回答得到了用户的积极反馈或实现了预定的目标(如解答了问题或完成了任务),那么模型会得到正向奖励;反之,若回答不恰当或不符合预期,则可能得到负向奖励或没有奖励。

      一些高级应用场景中,强化学习与语言模型相结合的技术已经发展到了更为精细的层次,如使用人类反馈强化学习(Human Feedback Reinforcement Learning, RLHF),这种技术可以让语言模型更有效地吸收和理解人类偏好,并据此优化其生成的文本内容和风格。例如,OpenAI的ChatGPT就是通过RLHF技术进行了后期微调,以便更好地实现与人类的友好交互和遵循社会规范。

1. 预训练(Pre-training)

算法

  • 在预训练阶段,最常用的算法是基于Transformer架构的自注意力机制,如BERT、GPT系列、XLNet、RoBERTa等模型。这些模型通过无监督学习的方法,在大规模未标注文本数据上进行训练,学习语言的基本结构和模式。

数据

  • 使用数十亿乃至数百亿字节级别的大规模语料库,包括网页抓取数据、书籍、百科全书、论坛讨论等各类文本数据。

难点

  • 数据清洗和预处理:去除噪声数据,确保训练数据的质量和多样性。
  • 计算资源需求:训练超大规模模型需要极其庞大的计算资源,包括GPU集群或TPU阵列。
  • 学习效率和泛化能力:如何设计有效的预训练任务(如掩码语言模型、自回归语言模型等)以提高模型学习质量和泛化性能。

实践经验

  • BERT使用双向Transformer编码器结构,并引入了掩码语言模型(Masked Language Modeling, MLM)和下一句预测(Next Sentence Prediction, NSP)任务进行预训练。
  • GPT系列模型使用自回归Transformer解码器,通过预测下一个词语的方式进行预训练。

2. 有监督微调(Supervised Fine-tuning)

算法

  • 在预训练模型的基础上,针对特定的下游任务(如文本分类、问答、命名实体识别等),在带标签的小规模任务数据集上进行有监督微调。

数据

  • 微调阶段使用的数据集通常是有标注的任务特异性数据,如GLUE、SuperGLUE、SQuAD等任务数据集。

难点

  • 过拟合:由于预训练模型参数量庞大,如何在有限的标注数据上进行有效微调而不至于过拟合是一个挑战。
  • 微调策略:如何选择合适的微调层、冻结部分层、调整学习率等因素以优化微调效果。

实践经验

  • 微调时通常会对预训练模型的顶部层进行训练,同时调整模型整体的学习率,以充分利用预训练阶段学到的通用知识。

3. 奖励建模(Reinforcement Learning)

算法

  • 在某些情况下,模型的训练可以通过强化学习方式进行,模型根据所采取的动作(生成文本等)得到环境反馈(奖励或惩罚),进而调整策略。

数据

  • 不再依赖于明确的标签,而是根据模型生成的文本内容与预期目标的匹配程度或其他相关指标给予奖励信号。

难点

  • 设计合理的奖励函数:确保奖励信号能够正确反映生成文本的质量和目标任务的要求。
  • 稳定性与收敛性:强化学习过程可能较不稳定,需要精细调整训练策略以保证收敛到最优解。

实践经验

  • OpenAI的GPT-3在一些生成任务上采用了基于奖励的微调(RLHF,Reinforcement Learning with Human Feedback),通过人类评估员对模型生成结果的打分来调整模型策略。

4. 强化学习(Reinforcement Learning)

算法

  • 强化学习应用于语言模型时,通常涉及到自动生成任务,模型通过不断试错并根据外部环境的反馈(例如人类用户的评价或内置评估指标)调整自身行为。

数据

  • 可能是与环境交互产生的序列数据,或者是用户对模型生成结果的反馈数据。

难点

  • 采样效率:强化学习往往需要大量交互以学习最优策略,而在自然语言生成场景下,采样和反馈可能十分耗时和昂贵。
  • 环境模拟:如果不能直接与真实世界交互,可能需要构建模拟环境来优化模型。

实践经验

  • 一些研究尝试将强化学习用于对话系统,通过与模拟用户交互,使模型学会更加流畅和有意义的对话策略。在实践中,通常会结合有监督学习和强化学习,以最大化模型性能。

       总之,构建大语言模型是一个循序渐进的过程,从大规模预训练开始,逐步通过有监督微调、奖励建模和强化学习等手段,让模型适应更具体和复杂的任务需求。在这个过程中,如何优化算法、合理利用数据、克服难点以及总结最佳实践,都是推动模型性能持续提升的关键要素。

        根据 OpenAI 联合创始人 Andrej Karpathy 在微软 Build 2023 大会上所公开的信息,OpenAI 所使用的大规模语言模型构建流程主要包含四个阶段:预训练、有监督微调、奖励建模、强化学习。这四个阶段都需要不同规模数据集合、不同类型的算法,产出不同类型的模型,所需要的资源也有非常大的差别。

以下是每个阶段的详细描述:

  1. 预训练 (Pre-training):

    • 数据集: 预训练阶段通常使用大规模无标注文本数据集,例如Wikipedia、Common Crawl、BookCorpus等。这些数据集包含了海量未标记的自然语言文本,用于训练模型捕捉语言的基本规律和结构。
    • 算法: 常见的预训练算法包括自注意力机制为基础的Transformer架构下的BERT(Bidirectional Encoder Representations from Transformers)、GPT(Generative Pre-training Transformer)系列模型等。这些模型首先通过掩码语言模型(MLM)或自回归语言模型(ARLM)任务进行预训练,使模型学习通用的语言表示。
    • 模型: 输出的是一个通用的语言模型,如BERT、GPT-3等,它们能生成或预测缺失的词汇,形成对语言深层次理解的基础模型。
    • 资源: 预训练需要巨大的计算资源,包括GPU集群和大量的存储空间,训练时间也可能长达数周甚至数月。
  2. 有监督微调 (Supervised Fine-tuning):

    • 数据集: 微调阶段使用的是带有标签的小规模或者特定领域的数据集,如GLUE、SuperGLUE、SQuAD等基准测试任务的数据集,涵盖文本分类、问答、语义相似度等多种任务类型。
    • 算法: 在预训练模型的基础上,通过调整模型权重并对特定任务进行有监督训练,例如添加额外的分类层,然后针对具体任务目标优化模型参数。
    • 模型: 经过微调后的模型具有针对性,能够解决具体的下游任务,如情感分析模型、命名实体识别模型等。
    • 资源: 虽然相比预训练所需资源较少,但仍需要一定量的GPU资源来进行快速有效的训练,同时对于某些复杂任务可能需要较长的训练时间。
  3. 奖励建模 (Reward Modeling):

    • 数据集: 这个阶段的数据集是由人类评估员给出的评价或奖励信号构成,反映模型在某个任务上的表现好坏。
    • 算法: 奖励建模常用于强化学习框架中,通过模仿学习或RLHF(Reinforcement Learning from Human Feedback)等方法,将来自人类反馈的奖励信号转化为模型更新的信号。
    • 模型: 通过这种方式微调的模型能够在遵循人类价值观的前提下提高决策质量和输出质量,如ChatGPT中的安全性和有用性就通过奖励建模得以增强。
    • 资源: 同样需要GPU资源进行训练,另外还需要人力投入收集和整理高质量的人类反馈数据。
  4. 强化学习 (Reinforcement Learning):

    • 数据集: 强化学习环境可以是模拟环境产生的数据,也可以是实际操作过程中的实时反馈数据,模型通过与环境互动获得经验样本。
    • 算法: Q-learning、Policy Gradient、Actor-Critic等算法被用来训练模型如何在给定环境中采取最优行动以最大化累积奖励。
    • 模型: 强化学习训练出的模型可以直接应用于游戏、机器人导航、对话系统等场景,模型具备动态适应环境变化的能力。
    • 资源: 强化学习训练过程中往往需要大量的尝试和探索,因此需要大量计算资源,尤其是对于复杂环境和高维动作空间的任务。此外,构建模拟环境或获取真实世界的即时反馈也是一项重要资源投入。

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

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

相关文章

BUGKU 本地管理员

打开环境,先F12查看看到一串代码。Base64解码一下,得到的应该是密码,然后输入admin | test123试一下 使用BP抓包,修改XFF,得到flag

Vue开发实例(六)实现左侧菜单导航

左侧菜单导航 一、一级菜单二、二级菜单三、三级菜单1、加入相关事件 四、菜单点击跳转1. 创建新页面2. 配置路由3. 菜单中加入路由配置4、处理默认的Main窗口为空的情况 五、动态左侧菜单导航1、动态实现一级菜单2、动态实现二级菜单 一、一级菜单 在之前的Aside.vue中去实现…

php儿童服装销售管理系统计算机毕业设计项目包运行调试

php mysql儿童服装销售网 功能:前台后台 前台: 1.服装资讯 文章标题列表 详情 2.服装选购中心 分页查看图文列表 详情 3.用户注册 登陆 退出 4.服装加入收藏 5.加入购物车 6.对服装进行评论 会员中心: 1.我的账户 查看 修改 2.我的收藏 查看 …

文献阅读笔记《Spatial-temporal Forecasting for Regions without Observations》13页

目录 发行刊物 ABSTRACT 1 INTRODUCTION 2 RELATED WORK(相关工作 2.1 Spatial-temporal Forecasting(时空预测 2.2 Spatial-temporal Forecasting withIncomplete Data(不完全数据的时空预测 2.3 Graph Contrastive Learning&#xf…

Vue2:路由的两种模式history模式和hash模式

一、情景说明 之前我们写的项目启动后,浏览器访问时,路径中会有个#/,会导致不够美观 因为一般的访问地址都是http://123.123.123.123/aaa/bbb这种形式 这一篇,就来解决这个问题 二、案例 1、hash模式 特点:#/后的…

【JavaEE进阶】 代理模式

文章目录 🍃前言🎋什么叫代理模式🌴静态代理🎍动态代理🚩JDK动态代理🚩CGLIB动态代理 ⭕总结 🍃前言 前面对Spring AOP的详细使用进行了介绍,这篇博客博主将详细讲解一下Spring AOP…

lottie加载带图片的json 预览

背景 产品看到一款app的动效很不错,让我去模仿实现。 第一步 获取apk中的静态资源 拿到这个app的apk后,直接使用压缩工具解压, assets文件夹就是静态资源的目录 静态资源里面有lottie 那么大部分的动效应该都是lottie实现的 网上找了很多…

Linux学习之信号

目录 1.信号的概念 2.信号的产生 3.信号的保存 4.信号的捕捉 信号的其它内容: SIGCHLD信号 1.信号的概念 在Linux中,信号是一种用于进程之间通信的基本机制。它是一种异步事件通知,用于通知进程发生了某些事件。如下是一些常见的Linux信…

DC-DC转换电路简介

DC-DC转换电路简介 1. 源由2. 工作原理3. 转换芯片4. DC-DC干扰5. DC-DC滤波5.1 PCB Layout5.2 电容滤波5.3 电感滤波 6. DC-DC电感/电容取值实验如何做?7. 参考资料 1. 源由 虽然说嵌入式系统涉及软件、硬件、机械、结构、网络等诸多领域内容。因此,在…

【MATLAB】 ICEEMDAN信号分解+FFT傅里叶频谱变换组合算法

有意向获取代码,请转文末观看代码获取方式~ 展示出图效果 1 ICEEMDAN信号分解算法 ICEEMDAN 分解又叫改进的自适应噪声完备集合经验模态分解,英文全称为 Improved Complete Ensemble Empirical Mode Decomposition with Adaptive Noise。 ICEEMDAN (I…

诊所门诊电子处方软件操作教程及试用版下载,医务室处方笺管理系统模板教程

诊所门诊电子处方软件操作教程及试用版下载,医务室处方笺管理系统模板教程 一、前言 以下软件程序教程以 佳易王诊所电子处方软件V17.0为例说明 软件文件下载可以点击最下方官网卡片——软件下载——试用版软件下载 如上图,点击基本信息设置——处方配…

一起去吃面条子吧

微风掠进窗沿,拂过愣在键盘上的指尖,正踌躇于命题的“||”还是“&&”。      突来的惬意,让人猛然惊醒,似是季节恍惚间悄然更替,那么这道命题索性就先放着。      毕竟实际编译运行结果,与…

实现定时器的两种方法:使用windows api定时器 和使用c++11/14 定时器

前言: 当我有一个开发需求,符合下面的条件 1.需要某个任务在程序中每隔一段时间就要执行一次,可能把这个任务封装成了一个函数。 2.这种需要定时执行的任务,有2个,3个....越来越多。 这个时候我们就可以考虑使用定时…

web基础03-JavaScript

目录 一、JavaScript基础 1.变量 2.输出 3.变量提升 4.区块 5.JavaScript数据类型 6.查看数值类型 7.undefined和null 8.布尔值 9.和的区别 10.算数/三元/比较/逻辑/赋值运算符 11.特殊字符 12.字符串 (1)获取字符串长度 (2&am…

基于YOLOv8/YOLOv7/YOLOv6/YOLOv5的番茄成熟度检测系统(Python+PySide6界面+训练代码)

摘要:开发番茄成熟度检测系统对于提高农业产量和食品加工效率具有重大意义。本篇博客详细介绍了如何利用深度学习构建一个番茄成熟度检测系统,并提供了完整的实现代码。该系统基于强大的YOLOv8算法,并结合了YOLOv7、YOLOv6、YOLOv5的对比&…

SpringBoot约定大于配置

什么是约定大于配置 "约定大于配置"(Convention Over Configuration)是一种理念,旨在通过默认约定和规则来减少开发人员需要做的配置工作。在Spring Boot框架中,这一原则得到了充分应用,帮助开发者更快地构…

300分钟吃透分布式缓存-15讲:如何深入理解、应用及扩展 Twemproxy?

Twemproxy 架构及应用 Twemproxy 是 Twitter 的一个开源架构,它是一个分片资源访问的代理组件。如下图所示,它可以封装资源池的分布及 hash 规则,解决后端部分节点异常后的探测和重连问题,让 client 访问尽可能简单,同…

AI时代,我们需要什么能力?

AI 时代,一定会重构很多行业,也会重构人民的生活工作方式,那么 AI 时代,我们需要培养什么能力呢? 我们应该去做那些 AI 做不了的事情!让 AI 成为我们的工具,助力我们更高效的解决问题&#xff…

Java - 获取汉字大写首字母输出

背景 有个项目需要将一批字符串的拼音首字母输出并大写&#xff0c;写了个工具类。 实现 需要引入外部jar。 <dependency><groupId>com.belerweb</groupId><artifactId>pinyin4j</artifactId><version>2.5.1</version> </dep…

C++之set、multiset

1、set简介 set是一种关联式容器&#xff0c;包含的key值唯一&#xff0c;所有元素都会在插入时自动被排序&#xff0c;其存储结构为红黑树。set只能通过迭代器(iterator)访问。 set和multiset的区别&#xff1a; &#xff08;1&#xff09;set不允许容器中有重复的元素&…