揭秘ChatGPT背后的魔法:三阶段训练打造智能对话模型应用

devtools/2024/9/30 1:12:31/

请添加图片描述

1. 引言

随着自然语言处理技术的快速发展,基于深度学习的大规模预训练模型成为了人工智能领域的重要里程碑。这些大模型能够在广泛的数据上学习,并在不同任务中展现出出色的表现。2022年底释出的ChatGPT正是这种大规模预训练模型的代表性应用,它一经释出就引发了学术界乃至社会各界的热烈反响,因为它基于生成式预训练模型(GPT)系列,具备的强大语言理解和生成能力让世人都为止惊叹,难道AGI时代真的要来了吗?

然而,训练ChatGPT这样的大模型并非易事。模型的规模和复杂度要求大量的数据、计算资源,以及精心设计的训练步骤。
本文将详细介绍ChatGPT模型训练的三个关键阶段:预训练pretrain、微调fine-tune和基于人类反馈的强化学习RLHF
在这里插入图片描述
这三个关键阶段串联起来便成了ChatGPT的完整训练流程:
在这里插入图片描述

2. 第一阶段: 预训练 (Pre-training)

在这里插入图片描述

预训练是大模型训练的核心起点,它的目的是让模型在大量非结构化数据上学习通用的语言知识。在这一阶段,模型通过自监督学习(self-supervised learning)进行训练,这意味着它可以通过预测下一词或填补句子中的缺失词语来自我监督。这种训练方式使得模型能够学习语言的语法、语义以及世界知识。
在这里插入图片描述

为了实现预训练,ChatGPT使用了互联网上的大量文本数据,数据规模通常达到数百GB甚至TB,所用到的Toknes数量达到惊人的万亿级别。通过这些数据,模型能够学习到广泛的语言模式和上下文关联性。预训练的目标并不是针对特定任务,而是为了让模型具备足够广泛的语言理解能力,为之后的任务奠定基础。

3. 第二阶段: 微调 (Fine-tuning)

在这里插入图片描述

预训练虽然为模型提供了大量的通用知识,但为了让模型更好地应用于特定任务,微调阶段至关重要。微调的目标是通过较小且专门的数据集,让模型在特定任务上表现得更好。对于ChatGPT来说,这些数据集通常是人工标注的对话数据,包含了人类对于不同问题的回答和期望的回复。

微调的过程通常使用有监督学习方法,模型在标注的数据集上进行训练,学习如何根据输入生成更符合人类预期的输出。微调之后,模型不仅保留了预训练阶段所学的通用知识,还增强了在特定任务上的表现能力,例如对话生成、问题回答等。例如OpenAI的InstructGPT(Ouyang等,2022年)所公布的SFT模型微调数据集的类型和占比:文本内容生成(45.6%)、开放式问答(12.4%)、头脑风暴(11.2%)、聊天(8.4%)、文本改写(6.6%)、内容摘要(4.2%)、封闭式问答(2.6%)、文本内容分类(3.5%)、其他类型(3.5%)和关键词提取(1.9%)。

4. 第三阶段: 基于人类反馈的强化学习 (Reinforcement Learning with Human Feedback, RLHF)

在这里插入图片描述

尽管微调让模型在特定任务上表现得更好,但模型在某些情况下的表现仍然可能不符合人类的期望。这时候,基于人类反馈的强化学习(Reinforcement Learning with Human Feedback, RLHF)成为了进一步优化模型的关键。RLHF通过让人类参与模型输出的评价过程,从而为模型提供反馈。在这个过程中,模型会生成多个回复,人类对这些回复进行排序,告诉模型哪些回复更符合期望。随后,模型通过强化学习算法(例如Proximal Policy Optimization, PPO)调整自己的策略,使得未来生成的内容更符合人类的偏好。

RLHF 是一项涉及多个模型和不同训练阶段的复杂概念,我们按三个步骤分解:

  1. 使用SFT微调预训练语言模型LLM

先收集⼀个提示词集合,并要求标注⼈员写出⾼质量的回复,然后使⽤该数据集以监督的⽅式微调预训练的基础模型。对这⼀步的模型,OpenAI 在其第⼀个流⾏的 RLHF 模型 InstructGPT 中使⽤了较⼩版本的 GPT-3
在这里插入图片描述

  1. 训练一个奖励模型 (Reward Model,RM)

RM 的训练是 RLHF 区别于旧范式的开端。这⼀模型接收⼀系列⽂本并返回⼀个标量奖励,数值上对应⼈的
偏好。我们可以⽤端到端的方式⽤ LM 建模,或者⽤模块化的系统建模 (比如对输出进行排名,再将排名转换
为奖励) 。这⼀奖励数值将对后续⽆缝接⼊现有的 RL 算法⾄关重要。
在这里插入图片描述

  1. 用强化学习 (RL) 方式微调 LM

将微调任务表述为 RL 问题:

  • 首先,该策略 (policy) 是一个接受提示并返回一系列文本 (或文本的概率分布) 的 LM
  • 这个策略的行动空间 (action space) 是 LM 的词表对应的所有词元 (一般在 50k 数量级)
  • 观察空间 (observation space) 是可能的输入词元序列,也比较大 (词汇量 ^ 输入标记的数量)
  • 奖励函数是偏好模型和策略转变约束 (Policy shift constraint) 的结合
  • PPO 算法确定的奖励函数具体计算如下:将提示 x 输入初始 LM 和当前微调的 LM,分别得到了输出文本 y1, y2,将来自当前策略的文本传递给 RM 得到一个标量的奖励 rθ 。将两个模型的生成文本进行比较计算差异的惩罚项KL散度。这一项被用于惩罚 RL 策略在每个训练批次中生成大幅偏离初始模型,以确保模型输出合理连贯的文本。如果去掉这一惩罚项可能导致模型在优化中生成乱码文本来愚弄奖励模型提供高奖励值。
    在这里插入图片描述

总结一下:RLHF通过让人类参与模型输出的评价过程,从而为模型提供反馈。在这个过程中,模型会生成多个回复,人类对这些回复进行排序,告诉模型哪些回复更符合期望。随后,模型通过强化学习算法(例如Proximal Policy Optimization, PPO)调整自己的策略,使得未来生成的内容更符合人类的偏好。

RLHF不仅能够提升模型的对话质量,还能够减少不恰当或不相关回复的出现,使得模型在实际应用中表现得更加自然和可靠。

5. 总结

ChatGPT的成功背后离不开复杂的三阶段训练过程。从预训练阶段学习大量通用知识,到微调阶段的特定任务优化,再到基于人类反馈的强化学习,模型的能力得到了全面提升。这三个阶段的协同作用,使得ChatGPT能够在广泛的任务中表现出色。未来,随着大模型技术的进一步发展,我们有望看到更智能、更灵活的语言模型应用于更多的实际场景中。请添加图片描述


http://www.ppmy.cn/devtools/118989.html

相关文章

9月27日,每日信息差

第一、中国科学家团队在干细胞治疗领域取得重要突破,通过化学重编程技术成功制备出胰岛细胞,并用于移植治疗一名 1 型糖尿病患者,实现了临床功能性治愈。相关研究成果已发表在国际权威期刊《细胞》上。 第二、交通运输部公路局局长周荣峰在国…

Ubuntu 上安装 Miniconda

一、下载 Miniconda 打开终端。访问 Anaconda 官方仓库下载页面https://repo.anaconda.com/miniconda/选择Miniconda3-py310_24.7.1-0-Linux-x86_64.sh,进行下载。文件名当中的py310_24.7.1表示,在 conda 的默认的 base 环境中的 Python 版本是3.10&…

【linux】gcc makefile

🔥个人主页:Quitecoder 🔥专栏:linux笔记仓 目录 01.gcc如何完成02.gcc选项03.函数库与动静态链接静态链接动态链接库文件特点和用途动态链接版本和兼容性 04.makefile自动推导 01.gcc如何完成 预处理(进行宏替换) 预处理功能主要…

我能禁止使用某协议的ip禁止访问我的资源吗

是的,你可以禁止使用某个协议的IP地址访问你的资源。这种操作通常涉及网络防火墙、服务器配置或应用程序设置,具体方法取决于你的网络环境和使用的技术。以下是一些常见的实现方法: 1. 使用防火墙 大多数防火墙(硬件或软件&…

皮带机、配电室巡检机器人联合方案 轨道巡检、挂轨机器人、室内轮式、室外轮式、井下机器人

项目背景 背景综述 某某煤矿铁路专用线配套工程配置有巡检机器人系统,巡检机器人系统与现有机器人巡检系统完全兼容,同时开放免费通用接口能无缝接入矿一体化调度平台。巡检机器人系统安装位置如下:201带式输送机、202带式输送机、203带式输送…

uniapp中h5环境添加console.log输出

<script src"https://unpkg.com/vconsolelatest/dist/vconsole.min.js"></script><script>// VConsole 默认会挂载到 window.VConsole 上window.vConsole new window.VConsole({defaultPlugins: [system, network, element, storage],// 可以在此…

Python_itertools

itertools itertools.count(start, step) 返回一个无限迭代器&#xff0c;从指定的start开始&#xff0c;每次增加step。 import itertools # 从1开始&#xff0c;每次增加1&#xff0c;输出前5个数 for i in itertools.count(1, 1):if i > 5:breakprint(i)运行结果&#…

vue嵌套路由刷新页面空白问题

问题描述 在vue项目开发中遇到这样一个问题&#xff0c;在history模式下通过页面点击路由跳转可以打开页面&#xff0c;但是在当前页面刷新就空白了&#xff0c;如下&#xff1a; 点击路由跳转页面是有的 刷新页面就空白 代码 {path: "/home",name: "home&qu…