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

news2024/9/23 3:21:39

        大规模语言模型的发展历程虽然只有短短不到五年的时间,但是发展速度相当惊人,国内外有超过百种大模型相继发布。中国人民大学赵鑫教授团队在文献按照时间线给出 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等算法被用来训练模型如何在给定环境中采取最优行动以最大化累积奖励。
    • 模型: 强化学习训练出的模型可以直接应用于游戏、机器人导航、对话系统等场景,模型具备动态适应环境变化的能力。
    • 资源: 强化学习训练过程中往往需要大量的尝试和探索,因此需要大量计算资源,尤其是对于复杂环境和高维动作空间的任务。此外,构建模拟环境或获取真实世界的即时反馈也是一项重要资源投入。

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

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

相关文章

关于synchronized介绍

synchronized的特性 1. 乐观锁/悲观锁自适应,开始时是乐观锁,如果锁冲突频繁,就转换为悲观锁 2.轻量级/重量级锁自适应 开始是轻量级锁实现,如果锁被持有的时间较长,就转换成重量级锁 3.自旋/挂起等待锁自适应 4.不是读写锁 5.非公平锁 6,可重入锁 synchronized的使用 1&#…

01背包(详细)

背包最大重量为4。 有物品3件&#xff0c;分别有其质量和价值。 vector<int> weight{1,3,4}; vector<int> value{15,20,30}; int bag4; 问背包能背的物品最大价值是多少&#xff1f; 这是标准的动态规划问题&#xff0c;每一个问题鱼鳍前面的子问题相联。 目…

structuredClone() 详解

您是否知道&#xff0c;现在 JavaScript 中有一种原生的方式可以深拷贝对象&#xff1f; 没错&#xff0c;这个内置于 JavaScript 运行时的structuredClone函数就是这样&#xff1a; const calendarEvent {title: "Builder.io大会",date: new Date(123),attendees…

#WEB前端(CSS基础)

1.实验&#xff1a;HTML是网页骨架&#xff0c;CCS是网页装修 2.IDE&#xff1a;VSCODE 3.记录&#xff1a; style 4.代码&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"view…

Ajax(黑马学习笔记)

Ajax介绍 Ajax概述 我们前端页面中的数据&#xff0c;如下图所示的表格中的学生信息&#xff0c;应该来自于后台&#xff0c;那么我们的后台和前端是互不影响的2个程序&#xff0c;那么我们前端应该如何从后台获取数据呢&#xff1f;因为是2个程序&#xff0c;所以必须涉及到…

风电机组来说,CMS振动数据和SCADA数据各有其优点和缺点

对于风电机组来说&#xff0c;CMS振动数据和SCADA数据各有其优点和缺点。 CMS振动数据的缺点主要包括&#xff1a; 数据解读难度高&#xff1a;振动数据包含大量的专业信息&#xff0c;如振动幅度、频率、相位等&#xff0c;需要专业的知识和技能才能准确解读。受环境影响大&…

DETR详解

1. 动机 传统的目标检测任务需要大量的人工先验知识&#xff0c;例如预定义的先验anchor&#xff0c;NMS后处理策略等。这些人工先验知识引入了很多人为因素&#xff0c;且较难处理。如果能够端到端到直接生成目标检测结果&#xff0c;将会使问题变得很优雅。 2. 主要贡献 提…

2024最新算法:电鳗觅食优化算法(Electric eel foraging optimization,EEFO)求解23个基准函数(提供MATLAB代码)

一、电鳗觅食优化算法 电鳗觅食优化算法&#xff08;Electric eel foraging optimization,EEFO&#xff09;由Weiguo Zhao等人提出的一种元启发算法&#xff0c;EEFO从自然界中电鳗表现出的智能群体觅食行为中汲取灵感。该算法对四种关键的觅食行为进行数学建模&#xff1a;相…

ESP8266智能家居(5)——开发APP深入篇

1.代码解析 接下来重点介绍一下逻辑代码 这里面主要是设置mqtt服务器的IP地址和端口号&#xff0c;设置服务器的用户名和登录密码 绑定好订阅主题和发布主题&#xff08;和8266上的订阅、发布交叉就行&#xff09; 绑定界面&#xff0c;设置界面标题 绑定6个文本控件 将从mq…

【C语言】熟悉文件基础知识

欢迎关注个人主页&#xff1a;逸狼 创造不易&#xff0c;可以点点赞吗~ 如有错误&#xff0c;欢迎指出~ 文件 为了数据持久化保存&#xff0c;使用文件&#xff0c;否则数据存储在内存中&#xff0c;程序退出&#xff0c;内存回收&#xff0c;数据就会丢失。 程序设计中&…

在您的下一个项目中选择 Golang 和 Node.js 之间的抉择

作为一名软件开发者&#xff0c;我总是在寻找构建应用程序的最快、最高效的工具。在速度和处理复杂任务方面&#xff0c;我认为 Golang 和 Node.js 是顶尖技术。两者在性能方面都享有极高的声誉。但哪一个更快——Golang 还是 Node&#xff1f;我决定深入一些硬核基准测试&…

抽象类、模板方法模式

抽象类概述 在Java中abstract是抽象的意思&#xff0c;如果一个类中的某个方法的具体实现不能确定&#xff0c;就可以申明成abstract修饰的抽象方法&#xff08;不能写方法体了&#xff09;&#xff0c;这个类必须用abstract修饰&#xff0c;被称为抽象类。 抽象方法定义&…

吸猫毛空气净化器哪个好?推荐除猫毛效果好宠物空气净化器品牌

当下有越来越多的家庭选择养宠物&#xff01;尽管家里变得更加温馨&#xff0c;但养宠可能会带来异味和空气中的毛发增多可能会带来健康问题&#xff0c;这是一个大问题&#xff01; 不想家里弥漫着异味&#xff0c;特别是来自宠物便便的味道&#xff0c;所以需要一款能够处理…

网络仿真(一)

网络仿真的意义 在网络规划和设计、网络设备研发、网络协议开发中&#xff0c;需要一种手段来反映和预测网络的性能 网络仿真可以提高网络规划设计的可靠性和准确性&#xff0c;明显降低网络投资风险&#xff0c;减少不必要的浪费 Ns-2 is a discrete event simulator Sched…

若依框架使用mars3d的环境配置,地球构建

因项目需要&#xff0c;原本使用过的cesium依赖&#xff0c;现在想使用火星科技mars3d的一些功能&#xff0c;所以需要引入mars3d依赖&#xff0c;整个过程非常的坎坷&#xff0c;以至于我都不知道到底是哪些部分是标准的。。。先把我认为对的记录一下&#xff1a; 1.vue.conf…

(四)优化函数,学习速率与反向传播算法--九五小庞

多层感知器 梯度下降算法 梯度的输出向量表明了在每个位置损失函数增长最快的方向&#xff0c;可将它视为表示了在函数的每个位置向那个方向移动函数值可以增长。 曲线对应于损失函数。点表示权值的当前值&#xff0c;即现在所在的位置。梯度用箭头表示&#xff0c;表明为了增…

4.Java---方法+重载

方法 方法的调用是需要开辟内存的,方法调用结束内存就被销毁了. 下面将介绍一个经典的错误标准的0分的示意! 我们日常中写交换两个数字的代码的时候都会用如下的方法进行描述: 你是不是觉得自己写的特别对!终于可以独立写一个小小的函数了? 下面运行一下看看结果 哦莫!怎么…

MySQL进阶45讲【28】如何判断一个数据库是不是出问题了?

1 前言 在MySQL进阶45讲【24】MySQL是怎么保证高可用的&#xff1f;和MySQL进阶45讲【26】主库出问题了&#xff0c;从库怎么办&#xff1f;文章中&#xff0c;介绍了主备切换流程。从这两篇文章中可以知道&#xff0c;在一主一备的双M架构里&#xff0c;主备切换只需要把客户…

kettle开发-Day43-加密环境下运行作业

前言&#xff1a; 金三银四&#xff0c;开年第一篇我们来介绍下&#xff0c;怎么在加密情况下运行我们的kettle作业及任务。无疑现在所有企业都认识到加密的重要性&#xff0c;加密后的文件在对外传输的时候不能被访问&#xff0c;访问时出现一堆乱码&#xff0c;同时正常的应用…

nginx笔记整理

目录 一.Nginx基础介绍 二.nginx安装配置 三.Nginx配置文件 3.1nginx主配置文件(/etc/nginx/nginx.conf) 3.2默认的网站配置文件(/etc/nginx/conf.d/default.conf) 四.创建新的虚拟主机 五.Nginx日志 5.1nginx日志格式 5.2查看日志 5.3日志缓存(了解) 5.4日志轮转(/…