1. 前言
大模型训练三步走,pre-training、SFT、RLHF。今天来到了第三步,即基于人工反馈的强化学习(Reinforcement learning from human feedback)。对于NLP从业者来说,前两步还是比较熟悉的,无非是模型大点、数据多些,但是整个模型的架构、原理和一些tricks还是比较容易理解的。但是对于RLHF,因为其中涉及到了强化学习,所以对于没有接触过强化学习的,理解起来还是比较困难的。下面我们就从NLPer的视角,理解RLHF的原理。
2 RLHF
2.1 强化学习基础
对于RLHF来说,强化学习是其核心,所以要想理解RLHF,必须对强化学习有一点了解。强化学习中的几个概念
-
智能体(Agent):它是强化学习中与环境交互、并执行策略的主体,跳棋中的棋子,gpt中的gpt模型本身;
-
环境(Environment):某一时刻的空间状态,跳棋中整个棋盘、规则等,gpt中的所有上下文以及模型状态;
-
状态(state):状态空间,当有可选的状态集合,跳棋中的上下左右,gpt中词表;
-
动作(Action):下一个选择的状态,跳棋中的动作,gpt中预测的下一个token;
-
奖励(Reward):根据agent的动作得到的反馈,跳棋中赢下的概率,gpt中输出好句子的概率;
-
累积奖励(Cumulative Reward):智能体在一系列连续决策中获得的所有奖励之和,目标是最大化这个值。
在强化学习过程中,智能体通过尝试不同的动作,观察环境对其行为的奖励,并根据获得的奖励进行学习,从而调整其策略以期望在未来获得更高的累积奖励。通过反复迭代这一过程,智能体能够学会在不同状态下的最优行为策略。类比跳棋就是,通过大量棋局的学习,跳棋会在当前步骤选出最优的下一个动作;GPT也是可以在当前上下文状态下,生成最优的token。
简单介绍完,强化学习的一些概念之后,我们进入RLHF中的每个细节,首先Agent没什么疑问就是LLM,状态当前的context(prompt+前面生成的token),动作也比较好理解就是预测下一个Token,那么如何得到奖励那,以及优化策略和算法是什么,下面主要看这两个问题。
2.2 RM
RLHF的Reward是通过一个Reward model模型生成,Reward model最好和agent的model能力相似,能对agent的结果进行打分。
模型:奖励模型是对LLM的输出做判断,奖励模型决定了LLM的上限,所以理论上,奖励模型越大越好。但是模型太大可能面临资源消耗过大,训练不稳定等(在instruct-gpt 论文中, 作者提到175B的模型训练不稳定因此只使用了6B的模型作为RM, 这里应该是作者当时把RM作为critic 起始点, 使得PPO需要同时训练actor & critic 两个大模型, 从而很不稳定)。另外,建立模型的主要任务是做判别式排序,任务难度相对较小,所以通常比被评估的语言大模型小一些(deepspeed的示例中,语言大模型66B,奖励模型只有350M)。所以,Reward model一般也是一个参数量较小的transformer模型(instructGPT的Reward_model:GPT-3-6B,deepspeed中的OPT-13B的Reward_model:OPT-350M)。
数据:数据要求格式是prompt,LLM生成K个(K是4-9,这里可以调节温度系数等输出不同答案)答案,人工对LLM的答案进行排序。这里的prompt一般来自问答数据集,比如Anthropic的Prompt,GPT的数据来自于OpenAI自家的API用户数据。没有直接对答案进行打分的原因是OpenAI发现由于标注人员的认知和价值观的差异,直接标得分,会有很多脏数据,改成排序会好很多。
虽然数据是排序的,但是,这些不同的排序结果会通过某种归一化的方式变成标量信号(即point-wise)丢给模型训练。
损失函数:上面说了数据的格式,模型需要做的就是对输入的prompt和一好一坏的两个答案进行分类(可以理解成二分类),那么直观的一个损失就是用交叉熵损失(cross entropy loss)。
但是作者发现这么做很容易过拟合;也不高效,因为每比较一次都要重新过一下reward model。
因此instractGPT作者的做法是,在一个batch里面,把每个Prompt对应的所有的模型输出,都过一遍Reward model,并把所有两两组合都比较一遍。比如一个Prompt有K个模型输出,那么模型则只需要处理K个样本就可以一气儿做 次比较。loss的设计如下:
Reward Model的初始化:6B的GPT-3模型在多个公开数据((ARC, BoolQ, CoQA, DROP, MultiNLI, OpenBookQA, QuAC, RACE, and Winogrande)上fintune。不过Paper中提到其实从预训练模型或者SFT模型开始训练结果也差不多。
2.2 PPO算法
强化学习的优化算法分三大类,这里主要说一下基于基于策略的PPO算法(即ChatGPT中用到的算法)。PPO算法是基于Actor-Critic算法做的,Actor-Critic算法是进阶版的Policy Gradient算法。
Policy Gradient(PG)算法
2.1中提到,agent会与环境交互作出动作,和环境交互后是根据什么策略做动作那。PG算法的核心是用“Reward”作为权重,最大化策略网络所做出的动作的概率。
虽然在强化学习算法中对每一步都有一个即时的“reward”,但是每一步对后面的可能状态都是有影响的。所以会将未来的奖励累计到当前的奖励上,累计需要乘以一个小于1的做折损。
这里需要注意:
Actor-Critic (AC)算法
关于优势函数——GAE
PPO
AC算法存在稳定性问题,特别是深度模型。为了优化这一点PPO算法的做法包括两种,一种是:用拉格朗日乘数法直接将 KL 散度的限制放进了目标函数中,这就变成了一个无约束的优化问题,在迭代的过程中不断更新 KL 散度前的系数:
另一种做法比较简单直接,在目标函数中进行限制,以保证新的参数和旧的参数的差距不会太大:
以上就是PPO算法的发展和简单的原理介绍。
2.3 RLHF的PPO
在上面提到的PPO算法中我们需要三个模型网络RM、actor_model(SFT后的LLM)、critic_model。
上面提到的PPO算法在LLM还存在一个问题,就是LLM可能会被训练变“废”,LLM会生成奇怪的文本来骗RM得到好的奖励,为了解决这么问题,引入了一个网络来控制一下actor_model让它更新不要太偏离原本的SFT后的LLM,所以通过KL散度(作用是控制两个分布之间的差异)。所以正式的奖励如下:
转化为 loss 就是:
至此RLHF中的四个网络就都出现了,分别是:
Actor model:SFT后的LLM,需要训练的LLM,参数可变;
Ref model:SFT后的LLM,用于限制actor model的KL散度,参数冻结;
RM model:奖励模型,用于强化学习的奖励提供,参数冻结;
Critic model:用于期望奖励生成,参数可变;
RLHF中有四个模型,这就是为什么它需要显存大了,四个模型中Actor model和Ref model初始化一致,RM model和Critic model初始化一致。
把这四个网络,结合reward的构造,带入到上面提到的PPO算法中,整个过程就如下:
如何学习大模型 AI ?
由于新岗位的生产效率,要优于被取代岗位的生产效率,所以实际上整个社会的生产效率是提升的。
但是具体到个人,只能说是:
“最先掌握AI的人,将会比较晚掌握AI的人有竞争优势”。
这句话,放在计算机、互联网、移动互联网的开局时期,都是一样的道理。
我在一线互联网企业工作十余年里,指导过不少同行后辈。帮助很多人得到了学习和成长。
我意识到有很多经验和知识值得分享给大家,也可以通过我们的能力和经验解答大家在人工智能学习中的很多困惑,所以在工作繁忙的情况下还是坚持各种整理和分享。但苦于知识传播途径有限,很多互联网行业朋友无法获得正确的资料得到学习提升,故此将并将重要的AI大模型资料包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。
第一阶段(10天):初阶应用
该阶段让大家对大模型 AI有一个最前沿的认识,对大模型 AI 的理解超过 95% 的人,可以在相关讨论时发表高级、不跟风、又接地气的见解,别人只会和 AI 聊天,而你能调教 AI,并能用代码将大模型和业务衔接。
- 大模型 AI 能干什么?
- 大模型是怎样获得「智能」的?
- 用好 AI 的核心心法
- 大模型应用业务架构
- 大模型应用技术架构
- 代码示例:向 GPT-3.5 灌入新知识
- 提示工程的意义和核心思想
- Prompt 典型构成
- 指令调优方法论
- 思维链和思维树
- Prompt 攻击和防范
- …
第二阶段(30天):高阶应用
该阶段我们正式进入大模型 AI 进阶实战学习,学会构造私有知识库,扩展 AI 的能力。快速开发一个完整的基于 agent 对话机器人。掌握功能最强的大模型开发框架,抓住最新的技术进展,适合 Python 和 JavaScript 程序员。
- 为什么要做 RAG
- 搭建一个简单的 ChatPDF
- 检索的基础概念
- 什么是向量表示(Embeddings)
- 向量数据库与向量检索
- 基于向量检索的 RAG
- 搭建 RAG 系统的扩展知识
- 混合检索与 RAG-Fusion 简介
- 向量模型本地部署
- …
第三阶段(30天):模型训练
恭喜你,如果学到这里,你基本可以找到一份大模型 AI相关的工作,自己也能训练 GPT 了!通过微调,训练自己的垂直大模型,能独立训练开源多模态大模型,掌握更多技术方案。
到此为止,大概2个月的时间。你已经成为了一名“AI小子”。那么你还想往下探索吗?
- 为什么要做 RAG
- 什么是模型
- 什么是模型训练
- 求解器 & 损失函数简介
- 小实验2:手写一个简单的神经网络并训练它
- 什么是训练/预训练/微调/轻量化微调
- Transformer结构简介
- 轻量化微调
- 实验数据集的构建
- …
第四阶段(20天):商业闭环
对全球大模型从性能、吞吐量、成本等方面有一定的认知,可以在云端和本地等多种环境下部署大模型,找到适合自己的项目/创业方向,做一名被 AI 武装的产品经理。
- 硬件选型
- 带你了解全球大模型
- 使用国产大模型服务
- 搭建 OpenAI 代理
- 热身:基于阿里云 PAI 部署 Stable Diffusion
- 在本地计算机运行大模型
- 大模型的私有化部署
- 基于 vLLM 部署大模型
- 案例:如何优雅地在阿里云私有部署开源大模型
- 部署一套开源 LLM 项目
- 内容安全
- 互联网信息服务算法备案
- …
学习是一个过程,只要学习就会有挑战。天道酬勤,你越努力,就会成为越优秀的自己。
如果你能在15天内完成所有的任务,那你堪称天才。然而,如果你能完成 60-70% 的内容,你就已经开始具备成为一名大模型 AI 的正确特征了。