LLM自对齐技术最新研究分享(一):对齐 Pipeline 数据合成(上)

news2024/11/16 15:39:40

欢迎关注 OpenMMLab 公众号获取一手技术干货

当我们向 ChatGPT 提问时,我们希望他能准确地回答我们的问题。当我们向他提出不合理的要求,比如询问如何制作炸弹或者如何考试作弊,我们希望他能拒绝回答并及时纠正我们的错误。AI 对齐,就是让 AI 的价值观符合我们人类的价值观,更好地为我们所用。

为什么要自对齐(Self-alignment)

之前的对齐方式一般需要大量高质量的微调数据或者人类反馈的偏好数据,但是随着 LLM 的能力的不断提高,我们已经在越来越多的任务上逊色于 LLM,以往这种依赖于人类标注数据的对齐方式目前面临着如下两个挑战:

  1. 进一步提升对齐水平需要更多的高质量标注数据,成本过高,且边际效益不断递减。

  2. LLM 能力超过人类,我们可能无法继续提供有效的对齐信号。面对能力强大的 LLM,我们不能轻易地分辨出他们回答的好坏来得到偏好数据,或者难以判断 LLM 回答的缺点,此时的对齐信号将不可避免存在许多噪音。

既然从人类标注数据中获取对齐信号的方式遇到了困难,那么能不能依靠模型自己依靠自己来对齐呢?当然有,这就是 Self-alignment 所要解决的问题,依靠模型自己进行对齐,尽量减少人类的干预。 根据当前工作所采用的方法,我们将 Self-alignment 的实现路线大致分为两类:

  1. 对齐 Pipline 数据合成:对目前对齐 Pipline 中所需的数据用 LLM 合成。传统 Pipline 主要包括 Instructions 和 Response 数据的采集,之后采用 SFT 或 RLHF 训练方式来对齐。既然 LLM 已经足够强大,我们何不利用 LLM 自己来合成这些数据。

  2. Multi-agent:基于 Multi-agent 的对齐。我们可以精心设计多个 LLM 之间的组织形式,比如“左右互搏”的对抗方式或者利用多智能体协作合成微调数据。

本系列文章将分享 LLM 自对齐技术的最新研究进展,基于下图的架构,对当前 Self-alignment 相关工作进行全面梳理,厘清技术路线并分析潜在问题。

添加图片注释,不超过 140 字(可选)

对齐 Pipline 一般包括收集 Instructions、收集 Response、SFT 或 RLHF 训练三个步骤。这里收集的 Response 数据可能是人类撰写的 Response(SFT)或者是人类标注的偏好 Response(RLHF)。

该 Pipline 以数据作为驱动,依赖于高质量的标注数据。为了实现 Self-alignment,我们需要让 LLM 替代人类来采集这些数据。对于该路线的 Self-alignment,我们需要回答两个问题:

  • 如何让 LLM 合成 Instructions

  • 如何让 LLM 采集 Response 本篇文章将重点探讨“如何让 LLM 合成 Instructions”,深入分析现有的研究工作是如何解答这一问题的。


首先需要明确一下我们的目标——合成高质量的 Instructions,这里“高质量”涵盖了这几个方面:

  1. 任务多样性和复杂程度高

  2. 与 Response 的匹配性高

  3. 与当前对齐 LLM 的匹配程度高

其中前两点对多数任务都适用,可以用来构建通用的高质量数据集,第三点则更加灵活和“因材施教”,所带来的效益也最大。

目前 LLM 合成 Instructions 的工作所采用方法可以分为如下四种:In-context、Instruction Backtranslation、Instruction evolution、Feedback based。

In-context

In-context 主要利用了 LLM 的上下文学习能力,通过在上下文中加入示例,可以引导 LLM 参照示例进行“举一反三”。

较早进行该工作的是 Self-Instruct,从一个不断增加的 Task pool 中随机挑选示例加入 Prompt 中,让 LLM 仿照这些示例进行生成,该 Task pool 初始化时包含了手工撰写的种子示例,同期的 Unnatural Instructions 也采用了类似的思路,利用 3 个种子合成构建了一个数据集。

早期工作的 Prompt 上下文未加入太多的其他信息,生成数据多样性和复杂度较差,因此后续工作从已有高质量数据中引入更多先验信息。 LaMini-LM 观察到可以利用维基百科中丰富的 Topic 来引导合成 Instructions,让生成的 Instructions 符合提供的主题,进一步提高了合成数据的多样性。DYNOSAUR 则充分利用之前 NLP 多种任务已有的数据集(如文本摘要),提示 LLM 将其转换为 Instructions 和对应 Response,只要现有数据集数量不断增加,就可以持续地合成涵盖更多任务的 Instructions 数据。

当我们面临任务数据量较少或容易得到其他不相关任务的高质量数据,可以考虑通过 In-context 的方式合成数据或者对其他任务的数据转化为本任务下的 Instructions。对已有数据的挖掘方式也可以进一步探索,可以利用数据集的不同角度下的信息,比如主题、人物、实体等。

Instruction Backtranslation

Instruction Backtranslation 核心出发点是现有无标注数据集存在大量的可以被视为 Response 的内容,如果能够构造对应的Instructions,就可以得到大量的问答数据对。这种数据集的问题和回答适配度会较高。

Instruction backtranslation 较早利用该技术,他们注意到无标注的 Web 语料中存在大量适合当做 Response 的数据,因此他们首先利用现有的 SFT 数据训练一个能够根据 Response 合成 Instruction 的模型,之后对提取出的 Response 进行反向标注,该方式合成的数据可以提高 LLM 的 instruction following 能力。LongForm 和 Instruction backtranslation 方法基本一致,除了选用的无标注数据集稍有不同,由于 LongForm 更加关注长问答任务,因此从长文档中提取 Gold Response。

虽然无标注数据中存在这些看起来似乎完美的 Response,但以往工作都是依靠定义的启发式规则从无标注数据中提取,这种方式得到的 Response 不可避免含有一些噪音。比如跟问答对话形式的 Response 存在分布差异。 DoG-Instruct 训练了一个模型对无标注数据集中的 Response 进行了润色修改(Wrap),使其符合对话风格。UDIT 从无标注文本中利用各种已经完善的工具提取出不同任务下(如文本摘要、多选题)的伪标签,之后加上提前写好的 Instructions 即可构造 SFT 数据,提高了 LLM 在不同任务间的泛化性。

Instruction Backtranslation 和 In-context 都属于将 LLM 的生成能力与现有数据结合,充分挖掘现有的数据潜力。In-context 更侧重于 LLM 的生成能力,Instruction Backtranslation 则更侧重于现有数据(存在 Gold Response)。未来可以探索其他范式来结合 LLM 生成能力和现有真实数据,并取得两者间的平衡。

Instruction evolution

Instruction evolution 核心思路是根据定义好的规则对现有的 Instructions 进行改写,定义的规则和我们想要 Instructions 具有的性质有关。

较早进行该工作的是 WizardLM,主要目的在于提高 Instructions 的多样性和复杂性,因此设计从深度和广度两个方向上进行 Evolve,其中深度指的是提升 Instructions 的复杂度,可以定义增加限制、使输入更加复杂、增加推理步骤等演化规则,广度指的是生成完全不同的 Instruction,增加 Instructions 的多样性。后续该方法也用到了其他下游任务中,比如代码生成(WizardCoder)、数学推理等(WizardMath)。

WizardLM

但是人为设计 evolution 的规则可能带来成本问题,这些规则缺乏泛化性,针对一种任务设计的 evolution 规则可能无法迁移到新的任务中。 Auto Evol-Instruct 尝试对这些规则的自动优化,以增加 Instructions 的复杂性为目标,设计了一个自动寻找 evolution 规则的框架。该工作让一个 Optimizer LLM 对当前 Evolution 规则下得到的 Instructions 进行分析,之后根据分析出的问题对 Evolution 规则进行优化,整个过程可以迭代多次。当需要迁移到新的任务时,只需要更换输入数据即可。

Instruction evolution 和 In-context 都是举一反三,不同的是 Instruction evolution 合成 Instructions 具有明显的方向,目前多面向复杂性和多样性两个角度,这两个数据性质也在许多工作中被证明对模型性能有增益。除了复杂性和多样性,是否有其他数据集属性也可以提高模型表现,这些未被探索的属性也可以进一步作为 Instruction evolution 的演化方向。

Feedback based

Feedback based 核心思路是根据模型的反馈来动态地调整合成 Instructions 的方向,这种方式可以针对性的提高模型某一方面的能力,所合成的 Instructions 相比较前几种方法与 LLM 更加匹配。 根据对齐场景不同,这种反馈的利用方式也随之变化,常见的有如下几个对齐场景:

提升对困难问题的回答质量

该场景下模型的 Feedback 就是回答的正确性,错误的回答可以给 Instructions 合成模型提供反馈。 LLM2LLM 让一个教师模型根据当前 LLM 的错误回答合成相似的问答对,该过程可以迭代进行,从而不断修正当前 LLM 对类似问题的回答正确性。LLMs-as-Instructors 和 LLM2LLM 采用类似的思路,也是从 LLM 错误的 Response 中获得反馈,Teacher model 之后根据当前 LLM 存在的问题和分析结果合成相似问答数据。

LLMs-as-Instructors

提升对 Harmful Instructions 的安全性

该场景下的反馈就是模型的 Response 是否符合 Harmless 的要求。Rainbow Teaming 中模型的 Feedback 被用作“适应度评价”的输入信息,来对父代和变异的子代 Red team prompts 进行筛选,哪个 Prompts 更能引起目标模型产生有害的回答,就说明该 Prompts 的适应度更高。

自动搜索模型表现欠佳的任务

在不同任务上 LLM 的表现情况也可以被当做 Feedback,此时需要其他模型对任务表现进行打分评价。AutoDetect 根据模型的回答情况来寻找缺点,他们设计了 Examiner、Questioner、Assessor 三种身份的 LLM,模型回答情况一方面提供给 Questioner 进行分析合成新的问题,另一方面则提供给 Examiner 进行知识点的更新,这些新产生的知识点将继续指导 Questioner 合成问题。

另外,除了根据 Feedback 进行 Instructions 合成,还可以根据 Feedback 对合成 Instructions 进行筛选,也能起到定向适配的效果。Selective Reflection-Tuning 让 Teacher model 对 Instructions 润色合成后,利用 Student model 的困惑度计算 IFD 分数,筛选出对于 Student model 比较困难的指令。

目前基于反馈的工作更偏向于被动反馈,需要对模型表现情况进行主动询问测试才可以得到,可能会面临搜索空间过大的问题,需要大量测试样本才能得到有效的反馈。未来可以考虑:1. 如何减小搜索空间;2.是否存在模型测试表现之外的其他反馈形式;3. 是否可以让待测模型主动反馈。

总结

本文我们重点探讨了“如何让 LLM 合成 Instructions”,解决了 Instructions 从哪里来的问题。下一篇文章,我们将重点探讨“如何让 LLM 采集 Response”,敬请期待哦!

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

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

相关文章

GAMES104:09高级动画技术:动画树、IK和表情动画-学习笔记

文章目录 一,动画混合1.1 数学混合:线性插值1.2 混合空间Blend Space1.2.1 1D Blend Space1.2.2 2D Blend Space1.2.3 Skeleton Masked Blending骨骼遮罩混合1.2.4 Addictive Blending 二,动画状态机Animation State Machine(ASM&…

JMeter之插件jp@gc - Stepping Thread Group

文章目录 业务场景核心功能安装教程常规使用 业务场景 在性能测试中,希望jemter能动态设置线程数,并且线程数量能从低到高依次压测接口,比如线程数量从10增加到50,通过设定一定的并发线程数,给定加压规则,遵…

并发服务器

服务器,后台服务软件,后端开发,为软件客户端提供支持,数据支持,存储支持,数据中转 高并发要求,随着用户数量的增长,服务器的设计结构扩展,为更多用户提供服务器。 Web服…

深入了解:浅拷贝深拷贝

浅拷贝和深拷贝 在java中 理解深拷贝和浅拷贝的概念对于处理对象复制时 保持数据的一致性和独立性至关重要 这两种拷贝方式主要区别在于它们如何处理对象内部的引用类型成员变量 在学习浅拷贝和深拷贝前 我们要区分 对象引用 和 对象本身的区别 对象引用:在Java中…

线上考试系统---虚拟化技术部署

部署前端服务器 1.将资源上传到服务器 scp -r dist/ root192.168.1.50:~2.在服务器上创建基础容器 [rootdocker0 ~]# docker run -it --name c0 centos:latest /bin/bash [rootc1092b8c9ce5 /]# [rootdocker0 ~]# [rootdocker0 ~]# docker attach c0 3.在容器中修改yum源 …

Using Managed Identity to Access Azure OpenAI Service

题意:使用托管身份访问 Azure OpenAI 服务 问题背景: Im working with Azure OpenAI service, and want to test its Managed Identity support. According to the docs it supports Managed Identity authentication, for example - using a VM. 我正…

鸿蒙界面开发(四):支付宝首页开发实战

利用了层叠布局和一个scroll滚动组件。 包括底部导航、顶部导航、主体的滚动窗口。 主体的滚动窗口又包括一个快捷导航栏和一个导航窗口、以及主体部分 import text from ohos.graphics.text;Entry Component struct Index {State message: string Hello World;//支付宝首页b…

全网最最最详细的企业级WEB应用服务器TOMCAT

目录 一:tomcat的介绍 Tomcat请求过程 实验部分: 1:安装 Tomcat 1.1:安装java环境 1.2:安装并启动tomcat 1.3: 查看端口 1.4:浏览器访问以下试试 2:tomcat的文件结构和组成 3&…

高性能web服务器4——Nginx反向代理A

Nginx 反向代理 Nginx 的反向代理功能是其最强大的特性之一,它允许 Nginx 作为中间层来接收客户端的请求,并将这些请求转发到后端服务器。这种架构不仅可以提高安全性,还可以实现负载均衡、缓存和内容过滤等功能。本文将详细介绍 Nginx 反向…

【neo4j】neo4j-Desktop安装

Neo4j是一个高性能的图数据库,它使用图形结构来存储和处理数据。它是一个开源的、完全事务的数据库,专门设计用于大规模的图形数据。Neo4j使用一种名为Cypher的查询语言来处理图形数据,使用户能够方便地进行复杂的图形查询和分析。 Neo4j的主…

AIGC 大模型:实践与未来

一、AIGC 大模型的概念与发展 (一)AIGC 大模型的定义与特点 AIGC(AI Generated Content)大模型是一种基于大规模数据训练的人工智能模型,具备强大的内容生成能力和多模态交互能力。它能够理解和处理多种类型的信息&a…

找不到工作四处闲逛github,我发现了一个找工作的神器

前言 到底是谁把我那不值钱的班给上了,博主找不到工作,天天游荡。 终于在github上发现一个找工作的神器,那就是:get_gobs 该项目支持定时投递,自动编写打招呼语,妈妈,再也不用担心我打招呼的…

简易STL实现 | List的实现

基于双向链表的数据结构 1、list的特性 双向链表:允许在序列的两端和中间 执行高效的插入和删除操作 不支持随机访问:要访问list中的元素,必须通过迭代器进行 动态内存管理: list的内部实现使用节点,每个节点都包含…

Java 入门指南:Java IO 模型

UNIX I/O 模型 根据冯.诺依曼结构,计算机结构分为 5 大部分:运算器、控制器、存储器、输入设备、输出设备。 输入设备(比如键盘)和输出设备(比如显示器)都属于外部设备。网卡、硬盘这种既可以属于输入设备…

日期反向格式化之前导零

1.问题描述 2.问题分析 为什么用yyyy年MM月dd日会报错,原因是:"前导零" 2.1前导零 前导零指的是在单个数字前面添加一个零以确保数字位数相同的过程。在日期格式化中,前导零常用于确保月份或日期总是显示为两位数字。 例…

mac苹果电脑配置Docker最新国内源

如图: 具体配置如下: {"builder": {"gc": {"defaultKeepStorage": "20GB","enabled": true}},"experimental": false,"registry-mirrors": ["https://docker.anyhub.us.kg", &…

单线程,多线程,异步,同步详解

关于异步与多线程,笔者在刚接触的时候一直存在诸多疑惑,甚至一度以为这俩概念是用来描述同一种技术在不同场景下的应用,进而导致对很多与它们相关的概念都一知半解,代码中的async/await关键词也是莫名其妙地在用。 但是在不断地接…

【解析几何笔记】8.向量的投影与内积

8. 向量的投影与内积 复习前面的知识:,若BCE三点共线,则 A E ⃗ ( 1 − s ) A B ⃗ s A C ⃗ , ( B , C , E ) μ ⇒ s μ 1 μ , 1 − s 1 1 μ \vec{AE}(1-s)\vec{AB}s\vec{AC},(B,C,E)\mu\Rightarrow s\frac{\mu}{1\mu},1-s\frac…

【案例59】WebSphere类加载跟踪开启方法

问题现象 WAS加载代码时,模块开发怀疑是WebSphere本身加载某个类的代码出现了问题。但不知道怎么排查。故寻求帮助。 问题分析 WebSphere本身是提供相关类加载跟踪的方法的。 解决方案 经过排查资料。如果实际诊断中,能够明确断定是某个类的加载出了…

MySQL集群技术详解

目录 一、MySQL在服务器中的部署方法 1.1 编译安装MySQL 1.2 部署MySQL 二、MySQL主从复制 2.1 配置master 2.2 配置slave 2.3 添加slave2 测试: 2.4 延迟复制 2.5 慢查询日志 2.6 MySQL的并行复制 2.7 MySQL主从复制原理剖析 2.8 架构缺陷 三、MySQL…