一、TL;DR

  1. 整体介绍:强化微调RFT的原因、步骤、作用以及常见的rft方式
  2. dmeo举例:以Swift给的Qwen2.5-Math-7B-Instruct为例介绍了整个RFT的流程和代码细节
  3. 实际强化微调:以qwen/internVL为例完成一次指令微调并且使用强化学习进一步提升指标

二、整体介绍

2.1 为什么要做强化微调

掉点/回退现象:

基础MLLM经过含有CoT训练集上做SFT后,发现在test集上掉点,可以通过强化微调来确保不会发生这种情况

  1. 在LLaMA3上,使用gsm8k训练集训练llama3.1-8b-instruct,对生成的ckpt使用test集进行评测,会发现掉点。

原因:

模型的知识遗忘,举例如下:

  1. 正常流程:在微调的时候会加入非常多的CoT数据集
  2. 造成结果:在继续训练通用任务后,知识遗忘破坏了模型原有能力,导致了掉点。
  3. 原因分析:当模型在解决数学任务的时候,用到的能力很有可能不是来自于math数据集,而是来自arc数据集,

2.2 什么时候可以使用强化微调

当有如下条件之一时使用强化微调:

  1. 已经微调过模型,能力不满足需求
  2. 需要更强的CoT能力
  3. 对基模型训练通用能力,而原始数据集已经导致模型效果无法提升
  4. 对应query的输出结果可以相对准确地评估好坏,例如结果清晰(数学,代码),过程清晰(翻译,风格)等

强化微调非常依赖于reward评估是否准确。如果评估结果不准确,可能导致模型训练原地震荡,甚至越训越差。

2.3 强化微调的步骤

2.3.1 使用某个模型生成数据/进行原始数据扩充然后采样

  1. 大模型生成数据:使用GPT、Qwen-Max、DeepSeek-V3/R1等生成和扩充数据,则该强化微调可以理解为蒸馏

  2. 模型本身生成数据:可以理解为自我提升(self-improvement)微调
  3. 采样过程-on-policy算法:采样一个batch,然后通过KL散度和reward进行拟合训练并不断循环
  4. 采样算法:包含蒙特卡洛采样、do_sample采样、group beam search、dvts等
  5. 采样过程额外引入细节:可以引入ORM(结果判断),PRM(过程打分),多样性过滤,语种过滤等

2.3.2 使用数据训练目标模型

训练的方式:

  1. 如果使用SFT,则称为拒绝采样微调
  2. 如果是强化学习,则称为强化学习微调

2.3.3 根据需要判断是否重复上述过程

  1. 如果使用更大的模型蒸馏,例如更大模型的蒙特卡洛采样蒸馏,一般不会有循环

  2. 如果使用本模型进行采样,或者PPO等算法,则会有循环

2.4 常见的强化微调方式

  1. 蒸馏:使用蒙特卡洛、do_sample等方式从超大模型中采样大量优质数据,训练小模型
  2. 自我提升:从本模型中采样部分优质数据,筛选后训练本模型,循环执行
  3. on-policy RL:使用PPO、GRPO等方式循环训练

2.5 ms-swift的展示demo

SFT和RFT的区别:

使用competition_math直接SFT后,instruct模型的掉点十分严重。而RFT后模型能力有提升,即使对Qwen2.5_math_7b_instruct这个SOTA的math模型也同样有一定提升空间。

同样可以发现,Qwen2.5这个模型经过RFT后在原有的其他数据集gsm8k上也没有出现大幅度回退(这就是为什么比SFT好的原因,新数据集上有效果,旧数据集上不坍塌)。

参考资料:强化微调 — swift 3.8.0.dev0 文档

三、demo代码分析

3.1 main函数分析

遵循第二节的流程:

  1. 先采样;
  2. 再做RLT
  3. 再做循环-5次

注意:以上这些流程都是使用python拼接输入命令行,不是一个函数就搞定了所有的代码哈,核心的这些命令行的功能都被swift封装在框架里面了,尤其是PRM模型的选取这些。

3.2 do-sample采样函数

如下图所示,过程奖励模型使用了Qwen2.5-Math-PRM-7B模型,为每一块GPU上生成了一个采样的RFT数据集

PRM模型和PRM_threshold如何配合形成采样数据集:

3.3 do_train训练函数

直接将rlhf的训练type写入启动脚本,开始强化微调:

代码参考:https://github.com/modelscope/ms-swift/blob/main/examples/train/rft/rft.py

四、实际项目举例

闲下来再写吧 这个要记录自己的实验结果,我后续截图补充再写

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

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

时序数据:使用关系数据库 vs 时序数据库存储的核心区别是什么?

一、时序数据使用关系数据库 vs 时序数据库存储的核心区别 时序数据(Time Series Data)是指随时间连续产生的数据(如传感器读数、服务器指标、交易记录等),其核心特点是高频写入、时间有序、量大且查询模式集中于时间范…

ansible判断

ansible判断 一、判断运算符 “” “!” “>” “<” “>” “<” “and” “or” “not” is in 每次执行完一个任务&#xff0c;不管成功与失败&#xff0c;都会将执行的结果进行注册&#xff0c;可以使用这个注册的变量来判断 when&#…

接口设计标准化流程,结合RESTful最佳实践和实际开发经验,涵盖从需求分析到部署的全过程

目录一、接口设计流程二、需求分析阶段1. 功能需求2. 非功能性需求三、接口设计规范四、详细实现步骤1. 选择Web框架2. 接口路由设计3. 请求参数定义4. 请求参数验证5. 业务逻辑分层6. 错误处理机制7. 异步任务处理8. 安全策略9. 接口文档10. 测试策略11. 服务部署11.1 生产环境…

LeetCode 1023.驼峰式匹配

给你一个字符串数组 queries&#xff0c;和一个表示模式的字符串 pattern&#xff0c;请你返回一个布尔数组 answer 。只有在待查项 queries[i] 与模式串 pattern 匹配时&#xff0c; answer[i] 才为 true&#xff0c;否则为 false。 如果可以将 小写字母 插入模式串 pattern 得…

【IQA技术专题】 无参考自然图像IQA:NIQE

无参考自然图像IQA&#xff1a;NIQE&#xff1a;Making a “Completely Blind” Image Quality Analyzer&#xff08;2012 IEEE&#xff09;专题介绍一、研究背景二、NIQE方法2.1 NSS model2.2 Patch Selection2.3 Characterizing Image Patches2.4 Multivariate Gaussian Mode…

变位齿轮:分度圆、节圆与中心距的 “特殊关联”

接着上回的话题&#xff0c;在标准齿轮中&#xff0c;我们追求的是“节圆与分度圆重合”的理想状态。但当实际工程提出更苛刻的要求时&#xff0c;比如&#xff1a;需要避免齿轮根切&#xff08;齿数过少时&#xff09;。要配凑一个非标准的中心距。需要大幅提高小齿轮的强度和…

Spring Boot集成Kafka常见业务场景最佳实践实战指南

一、基础集成与核心组件解析 &#xff08;一&#xff09;环境搭建与依赖配置 在 Spring Boot 项目中集成 Kafka&#xff0c;首先需通过 Maven 添加核心依赖&#xff1a; <dependency> <groupId>org.springframework.kafka</groupId> <artifactId>…

黑芝麻智能与云深处科技达成战略合作,共推具身智能平台全球市场应用

8月28日&#xff0c;智能汽车计算芯片引领者黑芝麻智能与具身智能创新技术与行业应用引领者云深处科技达成战略合作。双方将围绕具身智能控制平台开发、行业智能解决方案共建与国际市场拓展三大方向展开深度合作&#xff0c;携手推进高性能机器人在多行业场景的规模化落地与应用…

AI零售创业公司:零眸智能

零眸智能公司分析 引言 “这次融资与合作&#xff0c;让我们的全球化节奏更坚实也更有确定性。秉持‘让热爱与科技成就无限可能’&#xff0c;我们坚持真诚合作、长期主义与价值共享&#xff0c;把行业垂直AI能力按里程碑推进并沉淀为可复制的标准。” —— 零眸智能CEO樊凌云①…

学习插入排序+希尔排序并使用java写代码

目录 插入排序 例子时间复杂度java代码 希尔排序&#xff08;缩小增量排序&#xff09; 例子时间复杂度java代码 相关文章 学习数据结构理论算法时间复杂度学习有序二叉树平衡二叉树红黑树学习冒泡排序选择排序并使用java写代码学习插入排序希尔排序并使用java写代码学习堆…

win10虚拟机报错打不开和ubuntu空间不足

ubuntu主机安装的win10虚拟机报错如下&#xff0c;导致虚拟机无法打开解决办法 如上图&#xff0c;找到ubuntu主机home目录中win10的路径&#xff0c;将红色框的文件删除&#xff0c;然后将绿色框中的文件.prev后缀去掉&#xff0c;如下图所示。重新打开虚拟机就可以了 ubuntu空…

指纹手机技术:破解亚马逊多账号运营痛点的底层逻辑与实践

在亚马逊平台运营中&#xff0c;账号关联、行为异常、网络不合规是卖家绕不开的三大核心风险。随着亚马逊反作弊系统&#xff08;如 A9 算法&#xff09;对设备指纹、操作轨迹、网络特征的识别精度持续提升&#xff0c;传统 “普通手机 VPN” 的多账号运营模式已频繁触发风控&…

《UE5_C++多人TPS完整教程》学习笔记46 ——《P47 蹲伏行走(Crouching Walking)》

本文为B站系列教学视频 《UE5_C多人TPS完整教程》 —— 《P47 蹲伏行走&#xff08;Crouching Walking&#xff09;》 的学习笔记&#xff0c;该系列教学视频为计算机工程师、程序员、游戏开发者、作家&#xff08;Engineer, Programmer, Game Developer, Author&#xff09; S…

TiDB v8.5.3 单机集群部署指南

前言 最近在做 TiDB 的恢复演练&#xff0c;需要在单台 Linux 服务器上部署一套 TiDB 最小的完整拓扑的集群&#xff0c;本文记录一下安装过程。 环境准备 开始部署 TiDB 集群前&#xff0c;准备一台部署主机&#xff0c;确保其软件满足需求&#xff1a; 推荐安装 CentOS 7…

ClickHouse常见问题——ClickHouseKeeper配置listen_host后不生效

ClickHouseKeeper配置listen_host后不生效ClickHouseKeeper配置listen_host后不生效ClickHouseKeeper配置listen_host后不生效 3节点部署ClickHouse集群后&#xff0c;ClickHouse Server执行报错&#xff1a; Poco::Exception. Code: 1000, e.code() 111, Connection refuse…

《Python × MongoDB 实战指南:从连接到查询,构建高效数据操作流程》

《Python MongoDB 实战指南:从连接到查询,构建高效数据操作流程》 一、引言:当 Python 遇上 MongoDB 在当今数据驱动的开发世界里,MongoDB 以其灵活的文档结构、强大的查询能力和良好的扩展性,成为 NoSQL 数据库中的佼佼者。而 Python,作为一门简洁优雅、生态丰富的编…

【Flask + Vue3 前后端分离管理系统】

Flask Vue3 前后端分离管理系统 项目概述 本项目是一个基于 Flask 后端和 Vue3 前端的前后端分离管理系统。项目实现了用户管理、角色管理、菜单管理、权限控制等完整的后台管理功能。 技术栈 后端技术栈&#xff1a; Flask 3.0.0 - Python Web框架Flask-SQLAlchemy 3.1.1 - O…

51c视觉~3D~合集5

自己的原文哦~ https://blog.51cto.com/whaosoft/14165531 #AnimateAnyMesh 文本驱动通用网格动画新范式&#xff0c;实现高效高质量4D内容生成 4D 内容生成&#xff0c;即包含时间维度信息的 3D 内容创建&#xff0c;在 VR/AR、游戏等领域具有广阔的应用前景。…

开悟篇Docker从零到实战一篇文章搞定

目录 一:概述 1:why docker 2:Docker是什么? 3:Docker核心概念 二:初步体验 1:Docker核心架构图 2:准备工作 1:服务器 2:Docker安装 3:阿里云docker安装 4:镜像加速 三:Docker命令和帮助文档的使用 1:帮助文档 2:镜像的基本操作 1:查看本地…

LINUX驱动篇(二)驱动开发

系列文章目录 文章目录系列文章目录总结介绍字符设备驱动工作原理驱动框架加载卸载注册注销设备号详解打开关闭等操作实例分析led驱动编写地址映射LED驱动改进驱动方式总结自动注册注销设备号自动创建设备节点设备树设备树LED驱动实验pinctrl和gpio并发和竞争原子操作自旋锁块设…