大模型:我也会自监督学习~

news2024/11/27 18:34:17

前言

当下大模型的能力已经很强了,但是将来我们想要的是能力更强的大模型,其最好能够处理各种复杂问题也即强对齐模型

之前大模型训练的监督信号主要来源于人类反馈,但是如果想要训练一个强对齐模型必然就需要一个对应的强监督信号,这对于人类来说本身就很难,比如之前openai 的RLHF主要聚焦对齐的是某一方面能力(安全方面),这个时候人类还比较好判断case(是否安全)进而反馈,但是当面对各种复杂问题的时候,人类也很难反馈,可能需要各个领域的专家去反馈,但是这显然是不现实的。

前段时间openai也意识到这个问题了,其还专门成立了一个超级对齐团队来攻克这个方向,并发表了他们第一阶段的工作,其主要通过模拟一个弱监督强的实践来探索实现强对齐模型在理论上是否可行?以及初步提出了一些可能实现的方向,笔者也对其进行了解读,感兴趣的小伙伴可以穿梭:

穿梭门:《openai最新探索:超级对齐是否可行?》:https://zhuanlan.zhihu.com/p/673806165

今天要给大家带来的是一篇meta最新的paper,其也是尝试解决这个难题,具体的是让模型通过自监督的方式完成自我更新。一起来学习下吧~

论文:《Self-Rewarding Language Models》

论文链接: https://arxiv.org/pdf/2401.10020.pdf

背景

正如前言所说,之前的训练方法主要是RLHF,其利用人类标注的偏好数据训练一个reward打分model,然后使用这个reward model通过强化学习PPO来更新LLM,其中在PPO训练阶段,reward model是不更新的。

最近有一些工作则是绕过了训练一个reward model,而是直接用标注好的偏好数据去训练LLM即DPO方法。

可以看到上述两种方法都严重依赖标注好的偏好数据,倘若面对复杂问题,人类不能很高效的标注偏好数据的时候,那么就相当于没有数据了,那不论是PPO也好DPO也罢也就不能训练了。同时RLHF在PPO阶段reward model是不参与更新的,被冻结住了。

基于此,作者提出了训练一个自我更新的reward model(而不是冻结的模型),即reward model在训练LLM对齐过程中也会同步持续更新,具体的做法是不再将reward model和LLM分离成不同的模型,而是看成一个整体,作者将这一方法命名为Self-Rewarding Language Models

方法

  • Initialization

首先是需要初始化,即使用指令微调数据训练一个简单的sft模型,作者将这里的指令微调数据命名为IFT (Instruction Fine-Tuning),同时作者的idea是让LLM自己可以对response打分(即作为Reward model),具体是5分值;具体能打分的这个能力如果有专门的数据能先训练一下子最好,没有的话也无所谓,因为经过用IFT数据微调后,模型已经初步具备了打分能力,后续自我更新的时候,这个能力会自我提高;当然如果有对应的数据更好啦,作者将这个数据命名为EFT。

经过IFT和EFT数据微调也即SFT后,我们后续就会基于这个初版模型进行自我更新啦~

  • Self-Instruction Creation

这个模块具体包含三个步骤,首先是Generate a new prompt即产生新的prompt,具体的是通过few-shot去生成新的prompt;然后每个prompt通过LLM模型的拒绝采样得到N个候选resposne;最后使用同一个LLM对这些response进行打分(reward model的功能),其中打分这一步具体的实施是通过prompt engernering实现的,作者也给出了模版(LLM-as-a-Judge prompt):

  • Instruction Following Training

经过上面的步骤后,我们就相当于有了偏好数据,然后就可以更新模型了,具体更新的机制也有两种,一直是基于偏好数据进行DPO,另一种只使用偏好得分高的数据直接进行SFT,作者发现前者效果更好

为什么前者更好呢?其实也好理解,说的简单点就是前者不仅仅利用了正反馈信号,而且利用负监督信号,这对于LLM-as-a-Judge自身的更新是有帮助的,而整个算法过程又是严重依赖LLM-as-a-Judge的,所以前者理论上就是会更好一些。

在进行完一轮的更新后,就可以进行第二轮的更新了,整个过程完全自动化

  • Overall Self-Alignment Algorithm

总结一下整个过程就是,相信大家一目了然,不用笔者再累述啦。

效果怎么样呢?

这里的SFT Baseline是只使用IFT进行微调的模型,可以看到随着迭代的轮数提高,效果在不断变好。

同时作者也和业界的模型做了一个整体的对比:

同时作者也观察了LLM-as-a-Judge的能力在随着轮数增加而提高

不过实验这里是不是应该再加一个对比实验:和传统的RLHF以及DPO方法相比,带来的提升有多少?这样就更好啦。

总结

作者提出了一个自我更新的流程,大的方向选择还是不错的即自监督,其实其中每个子流程我们都可以进一步优化或者探索,比如

(1)Generate a new prompt部分我们可以做的更精细化一点比如使用进化学习进行生成更有难度的prompt。

(2)在LLM-as-a-Judge prompt部分可以针对
不同query进行不同维度的打分设计

(3)我们可以看到整个过程其实就是依靠自己判断数据质量,然后自己又完全信赖这个结果去更新自己,相当于自己给自己打分,好处就是自动化更新,但是总感觉不踏实,如果能结合一些第三方以合作的方式进行评估更新或许也是一个不错的选择。

(4)是不是可以先进行传统的RLHF或者DPO,再进行自我迭代,换句话说我们可以先尽力使用各种办法达到目前最好的模型性能状态,然后自己实在没招了且还想进一步提高模型性能,这个时候就可以试试本篇的自我更新

(5)等等…

感兴趣的小伙伴可以follow一下这个方向

关注

欢迎关注,下期再见啦~

知乎,csdn,github,微信公众号

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

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

相关文章

第二篇【传奇开心果系列】Vant 开发移动应用:开发常见页面

传奇开心果博文系列 Vant of Vue 开发移动应用示例系列博文博文目录一、常见页面的重要作用二、常见页面介绍三、分别示例代码四、常见页面样式示例代码五、主要知识点总结 Vant of Vue 开发移动应用示例系列博文 博文目录 一、常见页面的重要作用 常见页面在移动应用中扮演…

手把手教你如何快速定位bug,如何编写测试用例,快来观摩......

手把手教你如何快速定位bug,如何编写测试用例,快来观摩......手把手教你如何快速定位bug,如何编写测试用例,快来观摩......作为一名测试人员如果连常见的系统问题都不知道如何分析,频繁将前端人员问题指派给后端人员,后端人员问题指派给前端人员&#xf…

算法第二十一天-丑数

丑数 题目要求 解题思路 首先判断数字是不是为0或者负数&#xff0c;两者均不可能成为丑数&#xff1b; 之后对n进行不断整除&#xff0c;直到无法除尽为止。 简单判断最后的数是不是1即可。 代码 class Solution:def isUgly(self, n: int) -> bool:if n<0:return Fa…

linux perf工具使用

参考文章Linux性能调优之perf使用方法_perf交叉编译-CSDN博客 perf是一款Linux性能分析工具。比如打流性能优化的时候&#xff0c;就能够看到是哪些函数消耗的cpu高 那么linux如何编译perf工具呢&#xff1f; perf工具编译 进入perf目录下linux-3.16/tools/perf make ARCH…

线程状态转换

&#x1f4dd;个人主页&#xff1a;五敷有你 &#x1f525;系列专栏&#xff1a;并发编程⛺️稳中求进&#xff0c;晒太阳 程状态转换 假设有线程Thread t 情况1 new-->RUNNABLE 当调用t.start()方法时&#xff0c;由new ->RUNNABLE 情况2 RUNNABLE WAITING t…

Spark On Hive配置测试及分布式SQL ThriftServer配置

文章目录 Spark On Hive的原理及配置配置步骤在代码中集成Spark On Hive Spark分布式SQL执行原理及配置配置步骤在代码中集成Spark JDBC ThriftServer 总结 Spark On Hive的原理及配置 Spark本身是一个执行引擎&#xff0c;而没有管理metadate的能力&#xff0c;当我们在执行S…

Redis原理篇(SkipList)

一.概述 本质是双端链表&#xff0c;只不过在正向遍历时可以不一个一个遍历&#xff0c;而是可以跳着遍历。 怎么实现的呢&#xff0c;下面是SkipList源码 二.源码 1. zskiplist 意义&#xff1a;跳表 zskiplist里面有头指针和尾指针&#xff0c;节点数量&#xff0c;最大…

Python自动化测试【selenium面试题】

一、selenium中如何判断元素是否存在&#xff1f; expected_conditions模块提供了16种判断方法&#xff0c;以下方法是判断元素存在DOM中&#xff1a; presence_of_element_located """ An expectation for checking that an element is present on the DOM of…

第二百七十八回

文章目录 1. 概念介绍2. 使用方法2.1 DropdownMenu2.1 DropdownMenuEntry 3. 示例代码4. 内容总结 我们在上一章回中介绍了"如何禁止页面跟随手机自动旋转"相关的内容&#xff0c;本章回中将介绍DropdownMenu组件.闲话休提&#xff0c;让我们一起Talk Flutter吧。 1.…

免费的网站站群软件,批量管理不同网站程序

在网站运营的过程中&#xff0c;站群软件成为提高效率、管理多个网站的得力助手。本文将专心分享三款卓越的站群软件&#xff0c;其中特别推荐147SEO软件&#xff0c;它不仅能够批量管理网站&#xff0c;还能自动更新原创文章&#xff0c;并主动推送各大搜索引擎。不论您运营何…

logstack 日志技术栈-02-ELK 的缺点?loki 更轻量的解决方案?

ELK/EFK日志系统 如果今天谈论到要部署一套日志系统&#xff0c;相信用户首先会想到的就是经典的ELK架构&#xff0c;或者现在被称为Elastic Stack。 Elastic Stack架构为Elasticsearch Logstash Kibana Beats的组合&#xff0c;其中&#xff0c;Beats负责日志的采集&…

51单片机中断

1、什么是中断&#xff1f; CPU在处理某一事件A时&#xff0c;发生了另一事件B请求CPU迅速去处理&#xff08;中断发生&#xff09;&#xff1b; CPU暂时中断当前的工作&#xff0c;转去处理事件B&#xff08;中断响应和中断服务&#xff09;&#xff1b; 待CPU将事件B处理完…

解决一个mysql的更新属性长度问题

需求背景&#xff1a; 线上有一个 platform属性&#xff0c;原有长度为 varchar(10)&#xff0c;但是突然需要填入一个11位长度的值&#xff1b;而偏偏这个属性在线上100张表中有50张都存在&#xff0c;并且名字各式各样&#xff0c;庆幸都包含 platform&#xff1b;例如 platf…

【计算机网络】Socket的TCP_NODELAY选项与Nagle算法

TCP_NODELAY是一个套接字选项&#xff0c;用于控制TCP套接字的延迟行为。当TCP_NODELAY选项被启用时&#xff0c;即设置为true&#xff0c;就会禁用Nagle算法&#xff0c;从而实现TCP套接字的无延迟传输。这意味着每次发送数据时都会立即发送&#xff0c;不会等待缓冲区的填充或…

PostgreSQL命令大全

文章目录 连接与退出数据库操作表操作外键约束视图操作存储过程与函数权限管理事务管理查询优化与分析数据类型转换分区表操作复制与备份恢复 PostgreSQL是一个功能强大的开源关系型数据库管理系统&#xff0c;以下是一些基本且常用的命令按功能分类&#xff1a; 连接与退出 连…

【内存管理】flink内存管理(一):内存管理概述:flink主动管理内存原理、flink内存模型

文章目录 一.flink为什么自己管理内存1. 处理大数据时JVM内存管理的问题2. flink主动管理内存逻辑2.1. Flink内存管理方面2.2. 序列化、反序列化说明 3. Flink主动管理内存的好处 二. Flink内存模型1. 堆内存2. 非堆内存2.1. 托管内存2.2.直接内存2.3. JVM特定内存 本节从整体使…

【每日一题】2788. 按分隔符拆分字符串-2024.1.20

题目&#xff1a; 2788. 按分隔符拆分字符串 给你一个字符串数组 words 和一个字符 separator &#xff0c;请你按 separator 拆分 words 中的每个字符串。 返回一个由拆分后的新字符串组成的字符串数组&#xff0c;不包括空字符串 。 注意 separator 用于决定拆分发生的位…

循序渐进学 JavaScript <一>

这周复习完了 js 基础&#xff0c;整理一波~ 一、认识 JavaScript 1. 1 编程语言 计算机语言&#xff1a;概念比较广泛&#xff0c;包括 html 标记语言&#xff08;它并不是编程语言&#xff09;编程语言特点 具有数据和数据结构指令和流程控制&#xff1a;switch&#xff0c…

Ubuntu安装最新版Docker和Docker-Compose

ubuntu环境搭建专栏&#x1f517;点击跳转 Ubuntu系统环境搭建&#xff08;十&#xff09;——Ubuntu安装最新版Docker和Docker Compose 文章目录 Ubuntu系统环境搭建&#xff08;十&#xff09;——Ubuntu安装最新版Docker和Docker Compose1.添加Docker库1.1 安装必要的证书并…

FastDFS 环境搭建及使用详解

文章目录 1、简介1.1 分布式文件系统1.2 FastDFS1.3 FastDFS架构 2、环境搭建2.1 FastDFS安装2.1.1 安装前准备2.1.2 安装包下载2.1.3 安装 libfastcommon2.1.4 安装 libserverframe2.1.5 安装 FastDFS 2.2 FastDFS配置2.2.1 配置tracker2.2.1.1 创建 tracker 工作目录2.2.1.2 …