大模型训练过程概述

在这里插入图片描述

上图来自 Andrej Karpathy,深度学习的大拿,目前在Tesla。这张图的信息量相当大,通过该图能让我们对大模型的整个训练过程有一个总体的了解。

从该图可知大模型训练主要有4步:

  1. Pretraining — 预训练阶段

  2. Supervised Finetuning(SFT) — 监督微调,也叫指令微调阶段

  3. Reward Modeling — 奖励模型训练阶段

  4. Reinforcement Learning(RL)— 增强学习微调阶段

技术交流群

前沿技术资讯、算法交流、求职内推、算法竞赛、面试交流(校招、社招、实习)等、与 10000+来自港科大、北大、清华、中科院、CMU、腾讯、百度等名校名企开发者互动交流~

建了技术交流群&星球!想要本文源码、进交流群的同学,可以直接加微信号:mlc2060。加的时候备注一下:研究方向 +学校/公司,即可。然后就可以拉你进群了。

方式①、添加微信号:mlc2060,备注:技术交流
方式②、微信搜索公众号:机器学习社区,后台回复:技术交流

在这里插入图片描述

在这里插入图片描述

下面分别就这四个阶段进行说明。

预训练阶段

这个阶段的产出物是基础模型(base model),基础模型通常不会被直接使用,因为它只能完成续写,无法完成特定的任务。比如你问它中国的首都是?它可能会输出一系列的选项,如:a) 上海,b)北京,c)巴黎 ……,因为训练语料可能就包括了这样的选择题。

这个阶段是最消耗算力的阶段, 基本上99%的算力用在这个阶段,主要因为这个阶段训练的数据量巨大,最近发布的大模型训练数据基本都达到了2T~3T的token。这些语料形式多样,包括网络内容、论文、代码,再加上多语种,目前国内开源大模型的训练语料一般是中英双语。根据MPT公开的资料,训练一个MPT-7B Base基础模型动用了440张A100共训练了9.5天,对应的成本达到20w刀。

为了让大模型能具备特定的能力,如对话,就必须对大模型进行微调,那么就进入到下一个阶段:监督微调或叫指令微调。

指令微调阶段

这个阶段的难点不再是对算力的高要求,转而对微调所需的语料质量有非常高的要求,对语料的总体要求是少而精,如上图所示问答对(prompt和答案)的数量一般在10K~100K,这些语料通常是人工编写的,也有利用chat-gpt这种超牛大模型输出问答语料,目前网上也能找到比较丰富的开源的指令微调语料。以MPT-7B-Chat模型为例,该chat模型是基于MPT-7B Base基础模型微调出来,微调的语料包括:ShareGPT-Vicuna, HC3, Alpaca, Helpful and Harmless, 及Evol-Instruct这些开源语料。对于一个chat模型来说,它应该能回答用户的提问或根据用户的指令进行输出,所以语料中包括了各种问答对、指令集等内容,例如Alpaca的语料形式如下:

{
    "instruction": "Create a classification task by clustering the given list of items.",
    "input": "Apples, oranges, bananas, strawberries, pineapples",
    "output": "Class 1: Apples, Oranges\nClass 2: Bananas, Strawberries\nClass 3: Pineapples",
    "text": "Below is an instruction that describes a task, paired with an input that provides further context. Write a response that appropriately completes the request.\n\n### Instruction:\nCreate a classification task by clustering the given list of items.\n\n### Input:\nApples, oranges, bananas, strawberries, pineapples\n\n### Response:\nClass 1: Apples, Oranges\nClass 2: Bananas, Strawberries\nClass 3: Pineapples",
}

“text”部分是一个prompt模板,将instruction, input及output进行格式化。该prompt作为微调语料,微调后的模型就能接受这样的prompt格式,完成用户的指令,比如将以下prompt喂给微调后的chat模型:

Below is an instruction that describes a task, paired with an input that provides further context. Write a response that appropriately completes the request.

### Instruction:
sort the the given numbers

### Input:
20, 19, 33, 1

### Response:

模型会输出:1, 19, 20, 33。

这个阶段完成后其实已经能获得一个可以上线的大模型了(SFT模型)!对于那些需要私有化部署并只要求大模型完成特定任务的场景,指令微调出来的大模型已经完全满足要求。比如nl2sql的场景。

后面两个阶段的主要目的是让大模型有更好的表现,并且与人类喜好、意识形态进行对齐(有用、诚实和无害)。目前比较主流的技术就是RLHF(reinforcement learning from human feedback)— 也就是后面两个阶段的工作。一般企业内部私有化部署的大模型很少会去做RLHF。首先,RLHF很难,需要人工对模型的输出进行打标,成本太高。其次,没有这个必要,对于那些nl2sql,增强分析,RAG等场景基本不涉及“政治正确”这个维度。当然,对于通用大模型或各种客服类的模型与人类价值观对齐还是必须的。

奖励模型训练阶段

这个阶段会输出一个奖励模型(RM模型),该模型不直接用于业务场景,RM模型的作用是对SFT的输出进行打分—根据人类的习惯进行排序。这么做有什么意义呢?举例来说,你可以要求大模型生成一份营销文案,但这个文案是否满足你的要求,写得是否足够好是一件很难量化的事情。然而,如果拿三份文案来让你挑选,那么你通过横向比较,很容易就能选出最好的那篇。

如何训练出RM模型?这个阶段也涉及到大量的人工作业,主要是对SFT模型的输出进行排序。具体来说就是用同一个prompt从SFT模型获取多个输出,然后人工对这些输出进行排序。从上图可知,这个工作量相当大,需要准备100K~1M条待比较数据并且对数据质量的要求很高,要知道这些记录都需要人工进行比较排序,每组比较往往需要不同人来打标进行交叉比对。

有了这些排序后的数据就可以训练出一个RM模型,RM模型接受SFT模型的输出并给出一个奖励分值,SFT模型的输出越符合人类的价值观则RM模型输出的奖励分值越高,反之则越低。举个例子,向SFT模型输入prompt:“狗是人类的?”,SFT模型给出两个输出:

  1. 人类的朋友

  2. 毛茸茸的猛犸象

将prompt和以上两个输出喂给RM模型,RM会给第一个输出高分,给第二个输出很低的分数。

增强学习微调阶段

有了RM模型就能通过增强学习(RL)来微调模型,以实现大模型同人类偏好对齐。这个阶段依旧需要不少人工作业。如上图所示,需要编写10K~100K条prompts并且对质量的要求很高。RL微调阶段的主要目标是获取最高的奖励分值。整个微调过程大致如下:

  1. 将准备好的prompt分别喂给SFT模型和RL微调中的模型,并分别获取输出y1和y2。注意,这里还是会用到SFT模型,具体原因会在下面给出

  2. 将y2输入至RM模型获取奖励分值r,这个分值越高代表模型对齐效果越好

  3. 将y1与y2计算散度k,例如KL divergence,这个值的作用类似regularization,y1与y2的散度越高,说明RL微调模型与SFT模型这两者表现的偏离越大,也表示RL微调模型为了获取更高的奖励分数出现了过拟合

  4. 以(r-λk)作为奖励函数,通过更新RL微调模型的参数最大化奖励分值。

总结

以上4个阶段构成了完整的GPT模型训练的pipeline,从中可以看出训练大模型是一个非常艰巨的任务,例如对庞大算力资源的要求、对高质量语料数据的要求。另外,在训练大模型的时候一般需要基于一些优化框架,如DeepSpeed,这些工程化方面的任务也有不少坑。因此,对于一般的企业而言通常不建议自己训练基础大模型,如果必须进行私有化部署,可以根据实际情况选择一款开源大模型,如有必要可基于开源大模型进行微调,通过这个途径可以用比较少的投入来高效地落地大模型应用。

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

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

相关文章

透过许战海矩阵洞察安记食品增长战略

引言:安记食品如果想实施增长战略,建议深耕招牌产品,走向全国市场,目前招牌产品咖哩和复合调味粉市场空间没有被全面释放出来,需要科学的产品战略作为支撑。安记食品选择功能性产品方向是正确的,但“功能性”需要一个大品类作为载体,牛奶,饮料是最大的载…

C# Onnx yolov8n forklift detection

目录 效果 模型 项目 代码 下载 C# Onnx yolov8n forklift detection 效果 模型 Model Properties ------------------------- date:2023-12-25T16:22:05.530078 author:Ultralytics task:detect license:AGPL-3.0 https:/…

牛客网SQL训练4—SQL进阶挑战

文章目录 一、增删改操作1. 插入记录2. 更新记录3. 删除记录 二、表与索引操作1. 表的创建、修改与删除2. 索引的创建、删除 三、聚合分组查询1. 聚合函数2. 分组查询 四、多表查询1. 嵌套子查询2. 合并查询3. 连接查询 五、窗口函数1. 专用窗口函数2. 聚合窗口函数 六、其他常…

分布式【4. 什么是 CAP?】

什么是 CAP? C 代表 Consistency,一致性,是指所有节点在同一时刻的数据是相同的,即更新操作执行结束并响应用户完成后,所有节点存储的数据会保持相同。 A 代表 Availability,可用性,是指系统提…

开源radishes高仿网易云音乐完整源码,可试听和下载“灰色”歌曲,跨平台的无版权音乐平台

源码介绍 Radishes是项目名称,是由萝卜翻译而来。可以在这里试听和下载“灰色”歌曲,是一个可以跨平台的无版权音乐平台。 萝卜音乐界面和功能参考 windows 网易云音乐界面和 ios 的网易云音乐 安装依赖 cd radishes/ yarn bootstrap 运行项目 web:…

【回溯】0-1背包Python实现

文章目录 [toc]问题描述形式化描述 回溯法时间复杂性Python实现 个人主页:丷从心 系列专栏:回溯法 问题描述 给定 n n n种物品和一背包,物品 i i i的重量是 w i w_{i} wi​,其价值为 v i v_{i} vi​,背包的容量为 c …

力扣每日一题99:恢复二叉搜索树

题目 给你二叉搜索树的根节点 root ,该树中的 恰好 两个节点的值被错误地交换。请在不改变其结构的情况下,恢复这棵树 。 示例 1: 输入:root [1,3,null,null,2] 输出:[3,1,null,null,2] 解释:3 不能是 1 …

vue保姆级教程----组件之间的参数传递

📢 鸿蒙专栏:想学鸿蒙的,冲 📢 C语言专栏:想学C语言的,冲 📢 VUE专栏:想学VUE的,冲这里 📢 CSS专栏:想学CSS的,冲这里 &#x1f4…

QT 输入框输入限制 正则表达式限制 整理

在使用 输入数值时,经常遇到限制其范围的需要,比如角太阳高度角范围为[-90,90],经度值范围[-180,180],方位角范围[0,360]。Qt提供了QIntValidator和QDoubleValidator可以限定数值输入范围,如使用QIntValidator限制整数…

RK3568测试tdd

RK3568测试tdd 一、门禁取包二、烧录三、跑tdd用例四、查看结果参考资料 一、门禁取包 右键复制链接,粘贴下载;解压到文件夹; 二、烧录 双击\windows\RKDevTool.exe打开烧写工具,工具界面击烧写步骤如图所示: 推荐…

单片机的存储、堆栈与程序执行方式

一、单片机存储区域 如图所示位STM32F103ZET6的参数: 单片机的ROM(内部FLASH):512KB,用来存放程序代码的空间。 单片机的RAM:64KB,一般都被分配为堆、栈、变量等的空间。 二、堆和栈的概念 …

中间人攻击是什么,会产生哪些危害,如何有效防止中间人攻击

简介 中间人攻击(Man-in-the-Middle Attack,简称MITM攻击)是一种网络攻击,其原理是攻击者通过各种技术手段将受攻击者控制的一台计算机虚拟放置在网络连接中的两台通信计算机之间,这台计算机称为“中间人”。在攻击过…

关于HTTPS

目录 什么是加密 对称加密 非对称加密 中间人攻击 引入证书 HTTPS是一个应用层的协议,是在HTTP协议的基础上引入了一个加密层. HTTP协议内容都是按照文本的方式明文传输,这就导致在传输的过程中出现一些被篡改的情况. 运营商劫持事件 未被劫持的效果,点击下载按钮,就会…

Spring Cloud Gateway 常见过滤器的基本使用

目录 1. 过滤器的作用 2. Spring Cloud Gateway 过滤器的类型 2.1 内置过滤器 2.1.1 AddResponseHeader 2.1.2 AddRequestHeader 2.1.3 PrefixPath 2.1.4 RequestRateLimiter 2.1.5 Retry 2.2 自定义过滤器 1. 过滤器的作用 过滤器通常用于拦截、处理或修改数据流和事…

Redis 快速搭建与使用

文章目录 1. Redis 特性1.1 多种数据类型支持1.2 功能完善1.3 高性能1.4 广泛的编程语言支持1.5 使用简单1.6 活跃性高/版本迭代快1.7 I/O 多路复用模型 2. Redis发展历程3. Redis 安装3.1 源码安装3.1.1 下载源码包3.1.2 解压安装包3.1.3 切换到 Redis 目录3.1.4 编译安装 3.2…

slf4j+logback源码加载流程解析

Logger log LoggerFactory.getLogger(LogbackDemo.class);如上述代码所示,在项目中通常会这样创建一个Logger对象去打印日志。 然后点进去,会走到LoggerFactory的getILoggerFactory方法,如下代码所示。 public static ILoggerFactory getILo…

缓存cache和缓冲buffer的区别

近期被这两个词汇困扰了,感觉有本质的区别,搜了一些资料,整理如下 计算机内部的几个部分图如下 缓存(cache) https://baike.baidu.com/item/%E7%BC%93%E5%AD%98 提到缓存(cache),就…

<PDF-Pics> support

If get any questions,email me caohechunhotmail.com

Channel 使用事项和注意细节

&#xff08;1&#xff09;channel 可以声明为只读&#xff0c;或者只写性质 &#xff08;2&#xff09;channel 只读和只写的最佳实践案例 在默认情况下&#xff0c;管道是双向管道&#xff0c;即可读可写。 var ch chan intfunc main() {//声明为只写管道var chan1 chan<…

系统编程--常用命令

这里写目录标题 常用命令tab补齐获取历史命令快捷键相对路径和绝对路径ls补充详细区分文件对自己自身列-l递归ls which命令 系统目录介绍内容补充上一级目录运行一个可执行文件&#xff08;运行一个程序&#xff09; 一级目录二级目录二级目录二级目录 一级目录二级目录二级目录…