当前位置: 首页 > news >正文

苹果提出RLAIF:轻量级语言模型编写代码

获取本文论文原文PDF,请在公众号【AI论文解读】留言:论文解读

代码生成一直是一个充满挑战的领域。随着大型语言模型(LLM)的出现,我们见证了在自然语言理解和生成方面的显著进步。然而,当涉及到代码生成,尤其是在需要正确使用API调用的任务中,即使是先进的LLM也会面临所谓的“幻觉”问题,即生成不切实际或错误的代码片段

为了解决这一问题,本文介绍了一种基于AI反馈的强化学习(RLAIF)框架,旨在提高轻量级LLM(参数少于1B)在代码生成任务中的表现。

7a44b0e58488ce4be6729f2fa5cad8a7.jpeg

  • 论文标题: Applying RLAIF for Code Generation with API-usage in Lightweight LLMs
  • 机构: Rochester Institute of Technology, Apple
  • 论文链接:https://arxiv.org/pdf/2406.20060.pdf

RLAIF框架介绍

1. RLAIF的概念与发展

Reinforcement Learning from AI Feedback (RLAIF) 是一种新兴的强化学习方法,它利用大型语言模型(LLM)生成的反馈来训练小型模型。这种方法首次由Bai等人在2022年提出,并迅速在多个领域展示了其潜力,例如在减少LLM输出中的伤害、增强文本摘要和数学推理方面。RLAIF通过专门的提示策略从更大的LLM(例如GPT-3.5)中提取AI反馈,并使用这些数据训练奖励模型,以改善小型LLM的表现。

2. 为何选择RLAIF替代传统RLHF

传统的强化学习与人类反馈(RLHF)方法通过整合人类评估来训练模型,以提高模型在复杂任务上的表现。然而,这种技术因高质量人类反馈的需求而成本高昂。RLAIF作为一种替代方案,使用AI反馈代替人类反馈,使得微调过程更具可扩展性。此外,RLAIF能够在资源较少的情况下通过AI反馈显著提高代码生成质量,超越简单微调基线。

3. RLAIF在轻量级LLM中的应用

在本研究中,我们将RLAIF框架应用于轻量级LLM(参数少于1B)的代码生成任务中,特别是在需要正确编写API调用的任务上。我们使用RLAIF微调了GPT-2-large(780M参数),不仅在API调用正确性上与先前的研究相当,还在代码生成性能上有所超越。

方法详解:从大模型获取反馈到训练奖励模型

1. 初始模型的微调

我们首先在Gorilla数据集上微调了一个基础模型GPT-2-large,使用了监督式微调技术。这个微调的模型被称为MSFT,为后续的奖励模型训练提供了基础。

2. 使用GPT-3.5生成反馈

为了获取训练奖励模型所需的数据,我们没有采用人类注释员,而是使用了更大的LLM(GPT-3.5)来生成标签。我们设计了一系列问题,通过GPT-3.5对这些问题进行回答,以评估生成代码的质量。这些问题是二元的(是/否),我们根据GPT-3.5的回答计算每个输入-输出对的得分。

3. 奖励模型的训练与应用

使用上述方法获得的得分,我们标记训练数据中的输出(接受或拒绝),并将这些数据用于训练奖励模型Mreward。Mreward的训练目标是分类机器生成的代码是否对给定的输入指令可接受。最后,我们使用近端策略优化(PPO)算法微调MSFT,其中Mreward提供的逻辑分数作为奖励信号,最终得到的微调模型称为MRL。

实验设置:Gorilla数据集的应用

1. 数据集的结构与特点

Gorilla数据集由Patil等人在2023年发布,主要包括三个部分:HuggingFace、TensorFlow和PyTorch。本研究主要关注其中的HuggingFace部分,这是三者中最大的一个,包含超过925个独特的API,涵盖37个不同的领域,如多模态文本到图像、计算机视觉图像分类、音频文本到语音等。每个API都有十个独特的指令。数据集中的每个实例包含一个指令(任务描述)、领域、API调用(单行代码)、解释(如何使用API解决任务)以及完成任务的完整Python脚本。

2. 训练与评估过程

我们的实验使用了GPT-2-large模型(780M参数),通过监督式微调技术对其进行训练。训练过程中,我们没有进行超参数搜索,而是使用了固定的学习率。训练集占数据集的90%,剩余的10%用于评估。我们在NVIDIA A100 40GB GPU集群上进行了实验,总共花费了约60个GPU小时

实验结果与分析

1. 代码生成质量的多指标评估

我们采用了多种指标来评估生成代码的质量,包括ROUGE和Code-BLEU。ROUGE指标是ROUGE-1、ROUGE-2、ROUGE-L和ROUGE-sum的平均值。Code-BLEU则是标准BLEU、加权n-gram匹配(BLEUweight)、语法AST匹配(Matchast)和语义数据流匹配(Matchdf)的加权平均。此外,我们还报告了生成代码的成功执行率(Executability Rate),这是一个衡量代码是否能在隔离环境中正确运行的指标。

2. 轻量级模型与大模型的性能比较

在我们的实验中,经过RLAIF框架训练的轻量级模型(GPT-2-large,780M参数)不仅在API调用的正确性上与Patil等人的LLaMA-7B模型相当,而且在代码生成性能上还有所超越。特别是在代码的可执行率上,轻量级模型比7B参数的大模型高出1.0%。这一结果表明,即使是参数较少的模型,通过AI反馈也能显著提高代码生成的质量。

cf2d9a971747859fa0b505c13030c83d.jpeg


相关文章:

苹果提出RLAIF:轻量级语言模型编写代码

获取本文论文原文PDF,请在公众号【AI论文解读】留言:论文解读 代码生成一直是一个充满挑战的领域。随着大型语言模型(LLM)的出现,我们见证了在自然语言理解和生成方面的显著进步。然而,当涉及到代码生成&a…...

[leetcode] shortest-subarray-with-sum-at-least-k 和至少为 K 的最短子数组

. - 力扣&#xff08;LeetCode&#xff09; class Solution { public:int shortestSubarray(vector<int>& nums, int k) {int n nums.size();vector<long> preSumArr(n 1);for (int i 0; i < n; i) {preSumArr[i 1] preSumArr[i] nums[i];}int res n…...

专业140+总分420+天津大学815信号与系统考研经验天大电子信息与通信工程,真题,大纲,参考书。

顺利上岸天津大学&#xff0c;专业课815信号与系统140&#xff0c;总分420&#xff0c;总结一些自己的复习经历&#xff0c;希望对于报考天大的同学有些许帮助&#xff0c;少走弯路&#xff0c;顺利上岸。专业课&#xff1a; 815信号与系统&#xff1a;指定教材吴大正&#xf…...

前端如何取消接口调用

&#x1f9d1;‍&#x1f4bb; 写在开头 点赞 收藏 学会&#x1f923;&#x1f923;&#x1f923; 1. xmlHttpRequest是如何取消请求的&#xff1f; 实例化的XMLHttpRequest对象上也有abort方法 const xhr new XMLHttpRequest(); xhr.addEventListener(load, function(e)…...

k8s 容器环境下的镜像如何转换为docker 使用

在无法连接registry 的环境中&#xff0c;想要把 crictl 中的镜像给docker 使用&#xff0c;应该怎么处理&#xff1f; 其实容器镜像是通用的&#xff0c;crictl 和ctr 以及docker 镜像是可以互相使用的&#xff0c;因为docker 在1.10版本之后遵从了OCI。所以crictl 环境下的镜…...

FreeRTOS 队列

队列是一种任务到任务、任务到中断、中断到任务数据交流的一种机制。在队列中可以存 储数量有限、大小固定的多个数据&#xff0c;队列中的每一个数据叫做队列项目&#xff0c;队列能够存储队列项 目的最大数量称为队列的长度&#xff0c;在创建队列的时候&#xff0c;就需要指…...

如何识别图片文字转化为文本?5个软件帮助你快速提取图片文字

如何识别图片文字转化为文本&#xff1f;5个软件帮助你快速提取图片文字 将图片中的文字提取为文本是一项非常有用的技能&#xff0c;特别是当你需要处理大量扫描文档、截图或其他图片时。以下是五款能够帮助你快速提取图片文字的软件&#xff1a; 迅捷文字识别 这是一款非…...

Flink SQL kafka连接器

版本说明 Flink和kafka的版本号有一定的匹配关系&#xff0c;操作成功的版本&#xff1a; Flink1.17.1kafka_2.12-3.3.1 添加kafka连接器依赖 将flink-sql-connector-kafka-1.17.1.jar上传到flink的lib目录下 下载flink-sql-connector-kafka连接器jar包 https://mvnreposi…...

glm-4 联网搜索 api 测试

今天测试了一下 glm-4 的联网搜索 web_search tool 调用&#xff0c;发现了 web_search 的网页检索返回结果中几个比较诡异的事情&#xff0c;特此记录&#xff1a; 有些检索结果没有 icon、link、media 字段&#xff0c;但从内容上看确实是联网搜索出来的结果&#xff0c;不知…...

Java毕业设计 基于SSM vue图书管理系统小程序 微信小程序

Java毕业设计 基于SSM vue图书管理系统小程序 微信小程序 SSM 图书管理系统小程序 功能介绍 用户 登录 注册 首页 图片轮播 图书信息推荐 图书详情 赞 踩 评论 收藏 系统公告 公告详情 用户信息修改 我的待还 图书归还 催还提醒 我的收藏管理 意见反馈 管理员 登录 个人中心…...

bert训练的一些技巧(rand() < self.skipgram_prb)

rand() < self.skip_gram_prb) 是一个条件表达式&#xff0c;用来判断是否进行skip-gram掩码操作。这种掩码操作通常用于自然语言处理中的数据增强&#xff0c;通过概率决定是否应用skip-gram掩码。下面是对这个表达式的详细解释&#xff1a; 解释 rand(): rand() 是一个随…...

pandas修改时间索引报错处理

import pandas as pd import numpy as np import osdfpd.DataFrame(index[a,b,c],data{序列:[1,2,3]}) df.rename(index{a:a1},inplaceTrue) print(df) print(df.index.dtype)df1pd.DataFrame(index[2024-01-01,2024-01-02,2024-01-03],data{序列:[1,2,3]}) df1.rename(index{2…...

Nginx Bla~Bla~

root 和 alias指令都用于指定服务器上的文件系统路径&#xff0c;但它们在用法和行为上有一些不同 root指令通常用于在Nginx配置中定义一个目录&#xff0c;该目录将作为请求的根目录。 server { location /static/ {root /var/www; 请求 /static/index.html 将映射到 /v…...

java awt和swing介绍

Java AWT&#xff08;Abstract Window Toolkit&#xff09;和 Swing 是用于创建图形用户界面&#xff08;GUI&#xff09;的 Java API。 AWT AWT 是 Java 最初的平台依赖的窗口图形界面工具包&#xff0c;它提供了一组基本的 GUI 组件、窗口管理、事件处理等。AWT 组件是重量…...

奇怪的错误记录

https://github.com/meta-llama/llama3/issues/80 读模型没问题&#xff0c;推理时出现&#xff1a; RuntimeError: “triu_tril_cuda_template” not implemented for ‘BFloat16’ ———————————————— 事发原因 我尝试了解transformers的AutoProcessor时&a…...

来啦,经典传说大变身牛郎织女后代逗趣日常

《落凡尘&#xff1a;星宿大冒险》来啦&#xff01; 经典传说大变身&#xff0c;牛郎织女后代金风&#xff0c; 上演一出“星际小侦探”的逗趣日常&#xff01; 想象一下&#xff0c;二十八星宿那些傲娇的星星们&#xff0c; 居然能“离家出走”&#xff0c;还差点把天给掀了…...

【uniapp-ios】App端与webview端相互通信的方法以及注意事项

前言 在开发中&#xff0c;使用uniapp开发的项目开发效率是极高的&#xff0c;使用一套代码就能够同时在多端上线&#xff0c;像笔者之前写过的使用Flutter端和webview端之间的相互通信方法和问题&#xff0c;这种方式本质上实际上是h5和h5之间的通信&#xff0c;网上有非常多…...

Qt常用基础控件总结—表格控件(QTableWidget类)

表格控件QTableWidget 表格控件最上面一排是只读的水平表头,最左边一列是只读的垂直表头。表头又可以细分为多个分段(section),水平表头的分段就是表格各个列的列首,垂直表头 分段就是表格各个行的行首。表格控件的实体区域是按行、列排布的单元格,单元格内容一般用 QTa…...

笔记:Entity Framework Core 数据库迁移add-migration

一、目的&#xff1a; 数据库迁移是一种管理数据库架构变化的技术&#xff0c;它允许开发者在应用程序的生命周期中安全地更新数据库架构&#xff0c;而不会丢失数据或破坏现有的数据库结构。在Entity Framework Core&#xff08;EF Core&#xff09;中&#xff0c;数据库迁移特…...

准备工作+1、请求和响应+2、模型和管理站点

Django快速入门——创建一个基本的投票应用程序 准备工作1、创建虚拟环境2、安装django 1、请求和响应&#xff08;1&#xff09;创建项目&#xff08;2&#xff09;用于开发的简易服务器&#xff08;3&#xff09;创建投票应用&#xff08;4&#xff09;编写第一个视图1、编写…...

js 格式化时间

方法一&#xff1a;使用toLocaleString或toLocaleDateString/toLocaleTimeString Date对象提供了toLocaleString()、toLocaleDateString()和toLocaleTimeString()方法&#xff0c;这些方法允许你根据本地时间格式来显示日期和时间。虽然它们不直接提供高度自定义的格式选项&am…...

python 缩放照片

pip install Pillow from PIL import Image 打开一个图片文件 img Image.open(r"C:\Users\Administrator\Desktop\我的证件\证件照.jpg") 设定新的尺寸 new_size (480, 640) 缩放图片 resized_img img.resize(new_size) 显示缩放后的图片 resized_img.sh…...

【C语言】指针(1):入门理解(课堂随笔)

目录 一、内存和地址 二、指针变量和地址 三、指针变量类型的意义 一、内存和地址 只要讲指针就离不开内存 因为指针就是访问内存的 计算上CPU&#xff08;中央处理器&#xff09;在处理数据的时候&#xff0c;需要的数据是在内存中读取的&#xff0c;处理后的数 据也会放…...

LLMs可以进行任务规划吗?如果不行,LLMs+GNN可以吗?

深度图学习与大模型LLM(小编): 大家好,今天向大家介绍一篇最新发布的研究论文&#xff08;20240530&#xff09;。这篇论文探讨了如何通过引入GNN来提高大模型在任务规划(task planning)中的性能。*论文分析了LLMs在任务规划上的局限性,并提出了一种简单而有效的解决方案。* 1.…...

性价比高充电宝有哪些?充电宝十大最佳品牌大盘点!

在如今这个高度数字化的时代&#xff0c;我们的生活离不开各种电子设备&#xff0c;而充电宝作为保障电子设备续航的重要工具&#xff0c;其地位日益凸显。然而&#xff0c;面对市场上琳琅满目的充电宝品牌和产品&#xff0c;要挑选到一款性价比高的充电宝并非易事。在这篇盘点…...

hnust 1963: 邻接矩阵表示法

hnust 1963: 邻接矩阵表示法 题目描述 输入一个图&#xff0c;用邻接矩阵存储&#xff0c;并实现一些操作。 拷贝下面的代码&#xff0c;按要求完成其中的FirstAdjVex&#xff0c;NextAdjVex和CreateUDG操作&#xff0c;其他地方不得改动。 //邻接矩阵表示图 #include <io…...

Hadoop-15-Hive 元数据管理与存储 Metadata 内嵌模式 本地模式 远程模式 集群规划配置 启动服务 3节点云服务器实测

章节内容 上一节我们完成了&#xff1a; Hive中数据导出&#xff1a;HDFSHQL操作上传内容至Hive、增删改查等操作 背景介绍 这里是三台公网云服务器&#xff0c;每台 2C4G&#xff0c;搭建一个Hadoop的学习环境&#xff0c;供我学习。 之前已经在 VM 虚拟机上搭建过一次&am…...

215.Mit6.S081-实验三-page tables

在本实验室中&#xff0c;您将探索页表并对其进行修改&#xff0c;以简化将数据从用户空间复制到内核空间的函数。 一、实验准备 开始编码之前&#xff0c;请阅读xv6手册的第3章和相关文件&#xff1a; kernel/memlayout.h&#xff0c;它捕获了内存的布局。kernel/vm.c&…...

flask使用定时任务flask_apscheduler(APScheduler)

Flask-APScheduler描述: Flask-APScheduler 是一个 Flask 扩展&#xff0c;增加了对 APScheduler 的支持。 APScheduler 有三个内置的调度系统可供您使用&#xff1a; Cron 式调度&#xff08;可选开始/结束时间&#xff09; 基于间隔的执行&#xff08;以偶数间隔运行作业…...

ApiFox或postman怎么用params类型传输json或集合+json的String类型

你是否碰见过这样的接口? post请求然后传输的参数都要和查询时一样以param形式传参数,那String什么的都好说,传就直接进后台了,那json呢,集合呢,是不是直接给你返400呢. 1.传json如何处理 那我们看看怎么实现,如果你要传json数据,那需要将特殊字符转义,也叫url转码,否则传不…...