论文阅读:Training language models to follow instructions with human feedback

Ouyang L, Wu J, Jiang X, et al. Training language models to follow instructions with human feedback[J]. Advances in neural information processing systems, 2022, 35: 27730-27744.

引言

引言首先指出了当前大型语言模型(LMs)存在的一个核心问题:模型规模变大并不意味着它们能更好地遵循用户的意图 。具体而言,大型模型经常生成不真实、有毒或对用户毫无帮助的输出,这是因为语言模型的训练目标(预测网页上的下一个 token)与用户希望的目标(“有用且安全地遵循指令”)是错位的。作者的目标是让模型在“有用性”(Helpful)、“诚实性”(Honest)和“无害性”(Harmless)这三个方面与用户意图对齐。

为了解决上述问题,论文提出使用人类反馈强化学习(RLHF)来微调 GPT-3,使其能遵循广泛的书面指令,该方法分为三个步骤展开,其中监督学习部分使用标注者编写的 prompt 和演示数据微调 GPT-3 ;奖励模型构建部分收集模型输出的排名数据,训练一个奖励模型;强化学习部分使用 PPO 算法,根据奖励模型的反馈进一步微调模型。

在 RLHF 过程中,模型在公共 NLP 数据集上的性能可能会下降。作者发现通过将 PPO 更新与预训练分布的对数似然更新混合(即 PPO-ptx 模型),可以大大减少这种性能衰退。经过RLHF的模型模型不仅符合训练它的标注者的偏好,也能很好地泛化到未参与训练数据的“保留(held-out)”标注者的偏好上,此外能够将“遵循指令”的能力泛化到其微调数据中很少见的任务上的潜力,例如非英语语言和代码相关的任务。

方法与实验细节

从预训练语言模型,通过三个步骤使其与用户意图对齐。其中,步骤一监督微调(SFT)收集由人类标注者针对输入的 prompt 提供期望的输出行为,而后使用这些数据对预训练的 GPT-3 模型进行监督学习微调;步骤二训练奖励模型(RM)收集比较数据。对于同一个 prompt,模型生成多个输出,由人类标注者根据优劣进行排名,利用这些排名数据训练一个奖励模型,该模型的目标是预测人类更偏好哪个输出;步骤三强化学习(RL)使用 PPO算法针对奖励模型优化策略,奖励模型的输出作为标量奖励,指导 SFT 模型进行微调,使其生成的输出能获得更高的奖励。

其中,RM使用6B参数的模型,通过让标注者对 K 个(4到9个)响应进行排名来提高效率,一次性训练所有

\binom{K}{2}

个比较对,RL环境是一个“老虎机”(bandit)环境,给定 prompt 生成响应并获得奖励,为了防止模型过度优化奖励模型而偏离原始分布,在每个 token 上增加了 KL 散度惩罚,此外为了解决在公共 NLP 数据集上的性能退化问题,作者在 PPO 更新中混合了预训练梯度,由此得到的模型是PPO-ptx


本部分需要补充的内容:

1.KL散度

KL 散度(也称为相对熵)是衡量两个概率分布之间差异的一种非对称度量。它量化了当使用分布 Q来近似真实分布P时所损失的信息量。对于离散概率分布P和Q,其公式为:

D_{KL}(P || Q) = \sum_{x} P(x) \log \left( \frac{P(x)}{Q(x)} \right)

,在Instruct GPT中,KL散度的添加是为了为了防止强化学习模型在优化奖励模型时过拟合,具体而言,在强化学习的每一步,模型生成的最终奖励R(x,y)不仅仅是奖励模型给出的分数

r_\theta(x, y)

,还减去了一个 KL 惩罚项:

R(x, y) = r_\theta(x, y) - \beta \log \left( \frac{\pi^{RL}(y|x)}{\pi^{SFT}(y|x)} \right)

,其中带有RL/SFT上标的分别为当前正在训练的强化学习模型的输出概率和原始监督微调模型的输出概率。

注意,这里是RL模型根据提示词生成一个完整的回复序列,而后计算自己生成每个token yt的概率

P_{RL}(y_t | x, y_{<t})

,而后将完全相同的序列输入SFT模型中,计算“如果是我,生成这个token yt的概率是多少”,即

P_{SFT}(y_t | x, y_{<t})

,所以这里不存在长度不一致的问题,因而KL散度可以进行计算。

2.如何在更新中混合预训练梯度

作者发现单纯使用 RLHF(即只优化人类偏好奖励)会导致模型在公共 NLP 数据集(如问答、阅读理解等)上的性能下降,这种现象被称为“对齐税”。因此作者在在进行PPO梯度更新的同时,混合了预训练梯度的更新,训练的目标函数变成了一个组合目标:既要最大化人类偏好奖励(PPO 目标),又要最大化预训练数据分布的对数似然。总的优化目标函数可以表示为:

\text{Objective} = \text{Objective}_{PPO} + \gamma \cdot \mathbb{E}_{x \sim D_{pretrain}} [\log \pi(x)]

,其中

\text{Objective}_{PPO}

是包含KL惩罚的标准的强化学习目标,

\gamma \cdot \mathbb{E}_{x \sim D_{pretrain}} [\log \pi(x)]

这是预训练损失项,

D_{pretrain}

是原始的预训练数据集。【这里说人话就是在训练 PPO 的同时,随机抽取一些原始的预训练文本让模型填空(相当于重复预训练过程),并将这部分的损失纳入PPO的优化指标】


Read more

基于FPGA的北斗导航自适应抗干扰算法的设计与实现(任务书+开题报告+文献综述+代码+仿真+实物+毕业论文)

基于FPGA的北斗导航自适应抗干扰算法的设计与实现(任务书+开题报告+文献综述+代码+仿真+实物+毕业论文)

摘   要 如今,随着卫星导航技术的飞速发展,位置信息服务已经融入到我们的日常生活中,导航目前被称为继移动互联网后第三大产业。卫星导航在维护国家的安全中也发挥着不可替代的作用。为了使导航系统不受干扰的影响,本文以北斗导航系统为平台,研究基于阵列天线的自适应抗干扰算法。 首先,文章就自适应抗干扰算法的原理和方法进行了系统介绍,并在MATLAB中建立阵列模型,对基于功率倒置算法的空域抗干扰算法和空时联合抗干扰算法进行性能仿真。然后根据系统的指标,确定了在FPGA中实现抗干扰算法的方案,包括数字下变频、权值计算、数据加权、数字上变频等模块。根据权值计算模块实现方式的不同,本文提供了两种抗干扰算法在FPGA中实现的方案:一种是基于FPGA嵌入式软核NIOS II的抗干扰实现,将权值计算的过程放在NIOS II软核中,用C语言进行实现;另一种是基于逻辑语言的抗干扰算法的实现,即用硬件描述语言Verilog HDL进行权值的计算。权值计算涉及到浮点数运算和Hermite矩阵求逆,本文给出了各模块的设计方法和仿真结果,并与MATLAB仿真结果进行对比。最后给出了两种实现方案的实测结果,表明两种实

基于 FPGA 的千兆网 GigE Vision 视频传输方案实现(A7/K7 实战篇)

基于 FPGA 的千兆网 GigE Vision 视频传输方案实现(A7/K7 实战篇)

基于 FPGA 的千兆网 GigE Vision 视频传输方案实现(A7/K7 实战篇) 前言 在工业视觉和自动化领域,GigE Vision 协议因其无需采集卡、传输距离远、生态成熟等优势,已成为高性能工业相机的核心通讯标准。然而,在 FPGA 上实现一套完全符合标准的 Transmitter(发射端)方案并非易事。 本文将结合 Artix-7 和 Kintex-7 系列 FPGA 的架构特性,深度解析一套工业级 GigE Vision 方案的底层逻辑、核心功能以及在 A7/K7 平台上的落地实践,为企业项目集成和个人进阶学习提供参考建议。 一、 GigE Vision 协议栈的工业级功能拆解 一套商用级的 GigE Vision 方案(Transmitter)必须在

AI小白也能快速用五分钟复现的ERNIE-4.5系列模型单卡部署与心理健康机器人实战案例

AI小白也能快速用五分钟复现的ERNIE-4.5系列模型单卡部署与心理健康机器人实战案例

* 本文重点在于文心大模型的微调 * 一起来轻松玩转文心大模型吧👉一文心大模型免费下载地址: https://ai.gitcode.com/theme/1939325484087291906 计算机配置 * 在国内部署选个自带CUDA的会快一点,不自带还得去NVIDIA下载,而其提供的CUDA依赖需要科学上网才能下载快。换阿里清华源也没用。 * 文心模型汇总 环境配置与部署 1. 更换镜像源(使用阿里云镜像源): sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak sudo sed -i 's|http://archive.ubuntu.com/ubuntu|http://mirrors.aliyun.com/ubuntu|g' /etc/apt/sources.

【全网最全・保姆级】Stable Diffusion WebUI Windows 部署 + 全套报错终极解决方案

大家好,我是在部署 SD WebUI 过程中把几乎所有坑都踩了一遍的选手,从 Git 报错、模块缺失、依赖冲突到虚拟环境异常,全部踩完。今天把完整安装流程 + 我遇到的所有真实错误 + 一行一解全部整理出来,写成一篇能直接发 ZEEKLOG 的完整文章。 一、前言 Stable Diffusion WebUI 是目前 AI 绘画最主流的本地部署工具,但 Windows 环境下因为 Python 版本、虚拟环境、Git 仓库、依赖包、CLIP 编译 等问题,90% 的新手都会启动失败。本文包含: * 标准 Windows 一键部署流程 * 我真实遇到的 10+ 种报错 * 每一种报错的 原因 + 直接复制可用的命令 * 最终测试出图提示词(