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

【EMNLP2024】基于多轮课程学习的大语言模型蒸馏算法 TAPIR

近日,阿里云人工智能平台PAI与复旦大学王鹏教授团队合作,在自然语言处理顶级会议EMNLP 2024 上发表论文《Distilling Instruction-following Abilities of Large Language Models with Task-aware Curriculum Planning》。文章提出了一个名为 TAPIR 的知识蒸馏框架,TAPIR 通过多任务课程规划来蒸馏黑盒大语言模型的指令回答能力,在蒸馏和多轮迭代过程中,使用教师 LLM 做为裁判找出对于学生 LLM 来说难以回答的指令,进行难度重采样。同时,TAPIR 调整多任务配比,进行训练集中的任务多样性分布的重采样,并根据相应多任务特点自动优化教师模型的回答风格。

背景

大语言模型在回答开放领域通用任务的指令上取得了很大地进步。指令微调是微调预训练模型,使其从文本补全模型成为强大的对话模型的关键。尽管已有研究探索了使用强大的黑盒教师模型(如GPT-4, Qwen-max)来自动蒸馏和标注指令的方法,但这些研究往往忽视了微调训练集中任务的多样性分布,以及训练集中指令难度的差异,这可能导致学生LLMs知识能力的不平衡和解决复杂任务的能力的不足。为了解决这些挑战,文章提出了一个名为TAPIR的新框架,它通过多任务课程规划来蒸馏黑盒大语言模型的指令回答能力,从而提高学生小模型的指令遵循能力。

算法流程

文章中提出的TAPIR(Task-Aware Curriculum Planning for Instruction Refinement)框架的算法流程是一个多轮次的蒸馏方法,旨在提升学生大型语言模型(LLMs)遵循指令的能力。整个流程从初始化一个预训练的学生模型开始,然后通过以下步骤进行:

  1. 数据集难度过滤:使用一个开源的指令数据集(如Alpaca数据集)作为基础,通过计算模型拟合难度(MFD)分数来筛选出对学生模型来说较难的指令对,过滤得到种子数据集。

  2. 多任务规划指令蒸馏:根据设定的任务类型配比,利用一个教师模型(如ChatGPT)扩展种子数据集,生成更多具有相似难度水平的指令-响应对,并提升推理类任务的采样概率,以更好的缓解能力冲突问题。

  3. 多任务回答风格增强:对于某些任务,使用特定的提示重写响应,以便从教师模型获得更精细、更详细的回答,或者是特定任务格式的回答(如思维链,代码注释),这有助于学生模型更好地理解和学习复杂任务。

  4. 模型多轮优化迭代:通过多轮训练,利用裁判模型得到学生模型的回答质量反馈奖励分数,采样得到新的蒸馏种子数据集。逐步增加新一轮蒸馏种子数据集中挑战性指令的比例,实现从易到难的泛化。

TAPIR框架通过这种逐步提升任务难度和均衡任务类型的策略,使学生模型能够在较少的训练数据下超越更大的模型,显示出更好的性能,并在多个基准测试中取得了显著的性能提升。

难度重采样

难度重采样旨在解决训练集中任务难度分布不均的问题。难度重采样的目标是确保学生大型语言模型在蒸馏微调过程中能够接触到难度逐渐增大的任务,从而在困难的任务中泛化。我们通过计算模型拟合难度(Model Fitting Difficulty, MFD)分数来评估每个指令对学生模型的难度。MFD分数是通过比较学生模型生成的响应与教师模型生成的响应之间的质量差异来确定的。我们使用教师模型来作为裁判打分。

MFD(x_i) = f_J(x_i, \tilde{y}_i) - f_J(x_i, y_i)

根据MFD分数,筛选出对学生模型来说较难的指令对,即分差大于阈值 \delta 的指令。这些指令对将被纳入种子数据集。

D_S = {(x_i, y_i) \in D \mid MFD(x_i) > \delta }

任务重采样

在TAPIR框架中,任务重采样旨在解决训练集中任务分布不均的问题。其目的是提升训练集的多样性。在均衡的任务配比下为微调学生模型,以缓解微调过程中的能力冲突和灾难性遗忘问题。

首先,我们训练了一个指令任务分类模型(Deberta v3)识别和分类训练集中的任务类型,给每条指令打上显示的任务标签。然后通过任务标签重采样,使数据集中的任务分布更均衡,并且增强逻辑推理和编程任务的占比。基于我们的采样概率,教师模型扩展种子数据生成了新指令问答对,这些新数据与原有数据在难度上相近。

设指令对(x_i, y_i)的任务采样概率为 \Pr(\mathcal{T} | (x_i, y_i),则学生模型微调的自回归损失可以写作:

\mathcal{L}(\Phi) = - \sum_{(x_i, y_i) \in D_P} \Pr(\mathcal{T} | (x_i, y_i)) \cdot \log \Pr(\hat{y}_i|x_i; \Phi)

我们针对任务特点增强了教师模型标注的回答格式。如下所示:

多轮迭代优化

在多轮迭代的过程中,我们可以不断更新计算学生模型在新的微调数据集上的模型拟合难度来动态调整新一轮的蒸馏种子数据集难度配比。如下面的公式所示,当 \alpha_r 设置为 1 时,整个训练语料库仅由这些“困难”样本作为种子蒸馏。通过逐渐增加 \alpha_r , 系统地提高学习任务的复杂性。同时,为了保证指令的多样性,在每一轮中通过教师模型扩展难度重采样后的数据集,并将扩展后的数据集表示为D_P^{(r)}。第 r 轮的损失函数定义如下:

\mathcal{L}(\Phi, r) = - \alpha_r \sum_{(x_i, y_i) \in D_P^{(r)}} \mathbb{1}{(x_i, y_i)} \cdot \log \Pr(\hat{y}i | x_i; \Phi) - (1 - \alpha_r) \sum{(x_i, y_i) \in D \setminus D_S} \mathbb{1}{(x_i, y_i)} \cdot \log \Pr(\hat{y}_i | x_i; \Phi)

在每轮之后,更新规则为:

\alpha_{r+1} = \alpha_r + \Delta_\alpha

其中 \Delta_\alpha 是一个预定义的常数,用来逐渐增加学习任务的难度。

实验结果

实验结果表明,使用TAPIR框架训练的学生语言模型在较少的训练数据下,其性能超过了更大的指令调整模型和其他蒸馏基线方法。具体地说,TAPIR训练的模型在AlpacaEval 2.0基准测试中取得了7.80的胜率,优于Vicuna 13B和LLaMA2-Chat 13B,即便其培训数据和参数量仅为后者的一半。此外,在MT-Bench基准测试中,该模型在角色扮演、推理、数学、编程和人文学科等子任务中,表现优于LLaMA2 7B Chat 基线模型。为验证TAPIR框架在不同规模模型上的一致性,我们在Qwen1.5-Chat系列模型上做了实验,结果显示TAPIR能有效提升模型的指令遵循能力。

TAPIR-7B模型例子如下所示。在角色扮演任务中,语言模型扮演体育解说评论员。TAPIR-7B 生动地描述了比赛的最后胜利时刻并表现出色,而 Lion-7B 只是提供了如何评论的分析,没有完全执行任务,LLaMA2-Chat则误解了指令。

参考文献

  • Li, M., Chen, L., Chen, J., He, S., Huang, H., Gu, J., & Zhou, T. Reflection-Tuning: Data Recycling Improves LLM Instruction-Tuning. ArXiv, abs/2310.11716.

  • Song, C., Zhou, Z., Yan, J., Fei, Y., Lan, Z., & Zhang, Y. Dynamics of Instruction Tuning: Each Ability of Large Language Models Has Its Own Growth Pace. ArXiv, abs/2310.19651.

  • Jiang, Y., Chan, C., Chen, M., & Wang, W. Lion: Adversarial Distillation of Proprietary Large Language Models. EMNLP 2023.

论文信息

论文名字:Distilling Instruction-following Abilities of Large Language Models with Task-aware Curriculum Planning

论文作者:岳元浩、汪诚愚、黄俊、王鹏

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

阿里云人工智能平台PAI长期招聘研究实习生。团队专注于深度学习算法研究与应用,重点聚焦大语言模型和多模态AIGC大模型的应用算法研究和应用。简历投递和咨询:chengyu.wcy@alibaba-inc.com

相关文章:

【EMNLP2024】基于多轮课程学习的大语言模型蒸馏算法 TAPIR

近日,阿里云人工智能平台PAI与复旦大学王鹏教授团队合作,在自然语言处理顶级会议EMNLP 2024 上发表论文《Distilling Instruction-following Abilities of Large Language Models with Task-aware Curriculum Planning》。文章提出了一个名为 TAPIR 的知…...

置信传播算法复现

本文所涉及所有资源均在 传知代码平台 可获取。 目录 一.背景及意义介绍 1. 实际应用广泛 2. 理论研究重要性...

【在Linux世界中追寻伟大的One Piece】poll代码改写

目录 1 -> poll代码改写 1 -> poll代码改写 结合select代码&#xff0c;将select server更改成为pollserver&#xff0c;不是一件困难的事情。 #pragma once#include <iostream> #include <string> #include <poll.h> #include <memory> #inc…...

C++builder中的人工智能(17):神经网络中的自我规则非单调(Mish)激活函数

在这篇文章中&#xff0c;我们将探讨自我规则非单调激活函数——Mish在神经网络中的应用。了解Mish函数的工作原理&#xff0c;将有助于您在使用C IDE构建C应用程序时更加得心应手。 目录 神经网络中的激活函数是什么&#xff1f;能在C中创建激活函数吗&#xff1f;自我规则非…...

Java 的 Scanner 类:控制台输入与文件扫描

Java 的 Scanner 类是一个非常方便的工具类&#xff0c;主要用于从控制台或文件中扫描输入数据。虽然它也可以用于扫描文件内容&#xff0c;但我们通常更喜欢它用于控制台输入&#xff0c;因为扫描文件可以通过文件流来完成。接下来&#xff0c;我们将通过几个简单的示例来讲解…...

使用纯HTML和CSS绘制圣诞树:打造网页中的冬日奇景

### HTML & CSS 实现节日圣诞树&#xff1a;一步步打造你的冬季主题网页 在这篇文章中&#xff0c;我们将使用纯HTML和CSS创建一棵节日圣诞树。通过简单的代码&#xff0c;您可以在网页上实现一棵带有星星、彩球装饰的圣诞树&#xff0c;为网站增添节日氛围。 ### 实现思…...

深度学习-图像评分实验(TensorFlow框架运用、读取处理图片、模型建构)

目录 0、实验准备 ①实验环境 ②需要下载的安装包 ③注意事项&#xff08;很关键&#xff0c;否则后面内容看不懂&#xff09; ④容易出现的问题 1、查看数据并读取数据。 2、PIL库里的Image包进行读取&#xff08;.resize更改图片尺寸&#xff0c;并将原始数据归一化处…...

羲和数据集收集器0.9

为了进一步完善代码,增强其文字抓取能力和文件读取能力,我们做以下改进: 增强 DOCX 文档的文本提取:不仅提取段落和文本框内容,还提取表格中的文本。 增强 PDF 文档的文本提取:不仅提取页面文本和注释,还提取表格中的文本。 优化文本清理:确保文本清理更加彻底,避免不…...

哈尔滨等保测评常见误区破解:避免陷入安全盲区

在当今信息化社会&#xff0c;网络安全已成为各行各业不可忽视的重要议题。等级保护&#xff08;简称“等保”&#xff09;作为我国网络安全的基本制度&#xff0c;旨在通过划分不同安全保护等级&#xff0c;对信息系统实施分等级的安全保护。然而&#xff0c;在实施等保测评的…...

Python学习------第四天

Python的判断语句 一、布尔类型和比较运算符 二、 if语句的基本格式 if语句注意空格缩进&#xff01;&#xff01;&#xff01; if else python判断语句的嵌套用法&#xff1a;...

【Django】配置文件 settings.py

【Django】配置文件 settings.py 和Flask框架不同&#xff0c;Django框架项目在创建的时会默认生成配置文件settings.py&#xff0c;在深入学习Django框架前&#xff0c;我们先简单了解settings.py文件内非注释代码&#xff0c; from pathlib import Path BASE_DIR Path(__f…...

量化交易系统开发-实时行情自动化交易-Okex K线数据

19年创业做过一年的量化交易但没有成功&#xff0c;作为交易系统的开发人员积累了一些经验&#xff0c;最近想重新研究交易系统&#xff0c;一边整理一边写出来一些思考供大家参考&#xff0c;也希望跟做量化的朋友有更多的交流和合作。 接下来聊聊基于Okex交易所API获取K线数…...

【基于轻量型架构的WEB开发】课程 12.5 数据回写 Java EE企业级应用开发教程 Spring+SpringMVC+MyBatis

12.5 数据回写 12.5.1 普通字符串的回写 接下来通过HttpServletResponse输出数据的案例&#xff0c;演示普通字符串的回写&#xff0c;案例具体实现步骤如下。 1 创建一个数据回写类DataController&#xff0c;在DataController类中定义 showDataByResponse()方法&#xff…...

apache-seata-2.1.0 AT模式使用篇(配置简单)

最近在研究seata的AT模式&#xff0c;先在本地搭建了一个演示demo&#xff0c;看看seata是如何使用的。在网上搜的demo&#xff0c;配置相对来说都比较多。我最终搭建的版本&#xff0c;配置较少&#xff0c;所以写篇文章分享下&#xff0c;希望能帮到对seata感兴趣的小伙伴。先…...

(金蝶云星空)客户端追踪SQL

快捷键 ShitfCtryAltM 点击开始、最后操作功能、然后查看报告 SQL报告...

OAK相机:纯视觉SLAM在夜晚的应用

哈喽&#xff0c;OAK的朋友们&#xff0c;大家好啊&#xff0c;今天这个视频主要想分享一下袁博士团队用我们的OAK相机产出的新成果 在去年过山车SLAM的演示中&#xff0c;袁博士团队就展示了纯视觉SLAM在完全黑暗的环境中的极高鲁棒性。 现在袁博士团队进一步挖掘了纯视觉的潜…...

发送方确认

在使用RabbitMQ的时候&#xff0c;可以通过消息持久化来解决因为服务器的异常而导致的消息就是&#xff0c;但是还有一个问题&#xff0c;当消息的生产者将消息发送出去之后&#xff0c;消息到底有没有正确地到达服务器呢&#xff1f;如果消息在到达服务器之前已经丢失&#xf…...

如何使用HighBuilder前端开发神器

一&#xff0c;前言 前端开发是网页和应用程序设计与开发中的一个重要分支&#xff0c;直接涉及用户界面的构建和用户与网页的交互。前端是用户在浏览器中看到的部分&#xff0c;负责为用户提供良好的体验。 二&#xff0c;前段介绍 1. 前端的组成 前端开发主要由三个核心技…...

发现了NitroShare的一个bug

NitroShare 是一个跨平台的局域网开源网络文件传输应用程序&#xff0c;它利用广播发现机制在本地网络中找到其他安装了 NitroShare 的设备&#xff0c;从而实现这些设备之间的文件和文件夹发送。 NitroShare 支持 Windows、macOS 和 Linux 操作系统。 NitroShare允许我们为…...

如何关闭 Ubuntu22.04 LTS 的更新提醒

引言 众所周知&#xff0c;Ubuntu 的软件更新和版本更新提醒是又多又烦&#xff0c;如果不小心更新到了最新的 Ubuntu 还可能面临各种各样的问题&#xff0c;这里提供一个解决方法 步骤 首先按照下面步骤打开 Software & Updates 然后按照下面步骤依次点击 最后关闭即可…...

云计算——弹性云计算器(ECS)

弹性云服务器&#xff1a;ECS 概述 云计算重构了ICT系统&#xff0c;云计算平台厂商推出使得厂家能够主要关注应用管理而非平台管理的云平台&#xff0c;包含如下主要概念。 ECS&#xff08;Elastic Cloud Server&#xff09;&#xff1a;即弹性云服务器&#xff0c;是云计算…...

Auto-Coder使用GPT-4o完成:在用TabPFN这个模型构建一个预测未来3天涨跌的分类任务

通过akshare库&#xff0c;获取股票数据&#xff0c;并生成TabPFN这个模型 可以识别、处理的格式&#xff0c;写一个完整的预处理示例&#xff0c;并构建一个预测未来 3 天股价涨跌的分类任务 用TabPFN这个模型构建一个预测未来 3 天股价涨跌的分类任务&#xff0c;进行预测并输…...

电脑插入多块移动硬盘后经常出现卡顿和蓝屏

当电脑在插入多块移动硬盘后频繁出现卡顿和蓝屏问题时&#xff0c;可能涉及硬件资源冲突、驱动兼容性、供电不足或系统设置等多方面原因。以下是逐步排查和解决方案&#xff1a; 1. 检查电源供电问题 问题原因&#xff1a;多块移动硬盘同时运行可能导致USB接口供电不足&#x…...

CRMEB 框架中 PHP 上传扩展开发:涵盖本地上传及阿里云 OSS、腾讯云 COS、七牛云

目前已有本地上传、阿里云OSS上传、腾讯云COS上传、七牛云上传扩展 扩展入口文件 文件目录 crmeb\services\upload\Upload.php namespace crmeb\services\upload;use crmeb\basic\BaseManager; use think\facade\Config;/*** Class Upload* package crmeb\services\upload* …...

在WSL2的Ubuntu镜像中安装Docker

Docker官网链接: https://docs.docker.com/engine/install/ubuntu/ 1、运行以下命令卸载所有冲突的软件包&#xff1a; for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do sudo apt-get remove $pkg; done2、设置Docker…...

Android Bitmap治理全解析:从加载优化到泄漏防控的全生命周期管理

引言 Bitmap&#xff08;位图&#xff09;是Android应用内存占用的“头号杀手”。一张1080P&#xff08;1920x1080&#xff09;的图片以ARGB_8888格式加载时&#xff0c;内存占用高达8MB&#xff08;192010804字节&#xff09;。据统计&#xff0c;超过60%的应用OOM崩溃与Bitm…...

分布式增量爬虫实现方案

之前我们在讨论的是分布式爬虫如何实现增量爬取。增量爬虫的目标是只爬取新产生或发生变化的页面&#xff0c;避免重复抓取&#xff0c;以节省资源和时间。 在分布式环境下&#xff0c;增量爬虫的实现需要考虑多个爬虫节点之间的协调和去重。 另一种思路&#xff1a;将增量判…...

Go语言多线程问题

打印零与奇偶数&#xff08;leetcode 1116&#xff09; 方法1&#xff1a;使用互斥锁和条件变量 package mainimport ("fmt""sync" )type ZeroEvenOdd struct {n intzeroMutex sync.MutexevenMutex sync.MutexoddMutex sync.Mutexcurrent int…...

三分算法与DeepSeek辅助证明是单峰函数

前置 单峰函数有唯一的最大值&#xff0c;最大值左侧的数值严格单调递增&#xff0c;最大值右侧的数值严格单调递减。 单谷函数有唯一的最小值&#xff0c;最小值左侧的数值严格单调递减&#xff0c;最小值右侧的数值严格单调递增。 三分的本质 三分和二分一样都是通过不断缩…...

华为OD机试-最短木板长度-二分法(A卷,100分)

此题是一个最大化最小值的典型例题&#xff0c; 因为搜索范围是有界的&#xff0c;上界最大木板长度补充的全部木料长度&#xff0c;下界最小木板长度&#xff1b; 即left0,right10^6; 我们可以设置一个候选值x(mid)&#xff0c;将木板的长度全部都补充到x&#xff0c;如果成功…...