PHATGOOSE:使用LoRA Experts创建低成本混合专家模型实现零样本泛化

这篇2月的新论文介绍了Post-Hoc Adaptive Tokenwise Gating Over an Ocean of Specialized Experts (PHATGOOSE),这是一种通过利用一组专门的PEFT模块(如LoRA)实现零样本泛化的新方法

这个方法冻结整个模型,包括PEFT模块,并为每个模块训练一个类似于混合专家(MoE)模型中使用的路由(门控)网络。我们可以将此方法视为创建MoE模型的一种廉价方法,因为每个专家都只是一个LoRA的adapter。

这种门控网络训练的计算量非常小,并且通过在推理期间使用top-k路由策略进行令牌分发,提高了模型处理未显式训练的任务的能力。

PHATGOOSE的有效性在t5系列模型上进行了测试,与之前专家或依赖单个PEFT模块的方法相比,在标准基准上的零样本泛化方面表现优异。有时它的表现也优于明确目标的多任务训练。

使用PHATGOOSE可以实现更加灵活的模型开发,使用同一个基础模型,针对不同的任务训练专家,并且只共享专家参数,然后将模型自动组合提高泛化能力。

PHATGOOSE方法为每个专家模块训练一个sigmoid门控单元,该单元学习哪些令牌应该使用哪些模块。这些单元被组合成一个路由器,在专家模块之间执行稀疏的top-k路由。并且这个方法还支持每个令牌和每个模块的路由,不像过去的检索方法只为每个输入选择单个专家模型。

作者的实验采用T5模型,专家模块在两个集合上训练:T0(36个数据集)和FLAN(166个数据集)。PHATGOOSE在零样本评估中优于过去的路由方法,如检索、合并和平均基线。

论文提出了一种很有前途的方法,将独立训练的专家模型以分散的方式组合在一起,提高零样本泛化能力,这是一个非常有意思的研究方向,并且提供了源代码,所以推荐仔细阅读。

但是目前有一个最大的问题就是它们的代码只针对T5这个模型,作者也在论文中提出了将在后续的工作中将这个方法与现有的LLM进行整合,所以目前我们还是只能使用T5来进行测试。

论文地址:

https://avoid.overfit.cn/post/e099b8f39fb44497b010d8b929169ac8

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

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

相关文章

2024牛客寒假算法基础集训营6

文章目录 A-宇宙的终结B-爱恨的纠葛C-心绪的解剖D-友谊的套路E-未来的预言F-命运的抉择I-时空的交织J-绝妙的平衡 A-宇宙的终结 用试除法分解质因数&#xff0c;判断是否刚好分解为三个不同的质数 #include<bits/stdc.h> #define endl \n #define int long long using …

golang 函数式编程库samber/mo使用: Option

golang 函数式编程库samber/mo使用&#xff1a; Option 1. samber/mo 是什么&#xff1f; samber/mo是一个Go语言库&#xff0c;它提供了一组函数式编程&#xff08;FP&#xff09;的抽象&#xff0c;包括Monad。这些抽象可以帮助你更好地组织和处理你的代码&#xff0c;尤其…

力扣随笔之移除元素(简单27)

思路&#xff1a;定义一个指针left&#xff0c;使该指针及该指针左边的数全部都不等于val&#xff0c;定义一个遍历指针i&#xff0c;若nums[i] val&#xff0c;则i自加&#xff0c;若nums[i] ! val&#xff0c;则将left&#xff0c;并将nums[i]的值赋给nums[left]&#xff0c…

MySQL引擎对决:深入解析MyISAM和InnoDB的区别

欢迎来到我的博客&#xff0c;代码的世界里&#xff0c;每一行都是一个故事 MySQL引擎对决&#xff1a;深入解析MyISAM和InnoDB的区别 前言引擎概述MyISAM&#xff1a;InnoDB&#xff1a; 使用场景使用 MyISAM 的最佳实践&#xff1a;使用 InnoDB 的最佳实践&#xff1a;可能的…

Qt/Slot与Signal /信号与信号连接/信号与槽的关系

一个信号可以绑定多个槽 signalObject* sg1 new signalObject():slotObject* sl1 new slotObject();QPushButton* btn new QPushButton(); connect(sg1, &slotObject::signal1(), sl1, &signalObject::slot1());connect(sg1, &slotObject::signal1(), sl1, …

Jenkins自动化部署构建说明(8)

Jenkins构建说明 - 20211012 什么是Jenkins? Jenkins 是一款流行的开源持续集成&#xff08;Continuous Integration&#xff09;工具&#xff0c;广泛用于项目开发&#xff0c;具有自动化构建、测试和部署等功能。它是一个自动化的周期性的集成测试过程&#xff0c;从检出代…

QT day3 作业2.22

思维导图&#xff1a; 作业&#xff1a; 完善对话框&#xff0c;点击登录对话框&#xff0c;如果账号和密码匹配&#xff0c;则弹出信息对话框&#xff0c;给出提示”登录成功“&#xff0c;提供一个Ok按钮&#xff0c;用户点击Ok后&#xff0c;关闭登录界面&#xff0c;跳转到…

ChatGPT Plus遇到订阅被拒原因与解决方案

ChatGPT Plus被广泛认为相比普通版本更快、更强&#xff0c;并且能最先体验新功能。 很多小伙伴再订阅时遇到图片中的问题 错误提示包括这些&#xff1a; Your credit card was declined.Try paying with a debit card instead.您的信用卡被拒绝了。请尝试用借记卡支付。你的…

【Python】遇到的一些小问题及解决办法汇总

【工具】&#xff1a;pycharm 【环境】&#xff1a;Windows 一、数据集路径导入报错 【错误提示】&#xff1a; SyntaxError: (unicode error) ‘unicodeescape’ codec can’t decode bytes in position 2-3: truncated \UXXXXXXXX escape 如图&#xff1a; 【原因分析】&a…

pytest如何在类的方法之间共享变量?

在pytest中&#xff0c;setup_class是一个特殊的方法&#xff0c;它用于在类级别的测试开始之前设置一些初始化的状态。这个方法会在类中的任何测试方法执行之前只运行一次。 当你在setup_class中使用self来修改类属性时&#xff0c;你实际上是在修改类的一个实例属性。在Pyth…

突破编程_C++_高级教程(内存管理(2))

1 内存泄漏的预防与处理 内存泄漏是指程序中已动态分配的堆内存由于某种原因程序未释放或无法释放&#xff0c;造成系统内存的浪费&#xff0c;导致程序运行速度减慢甚至系统崩溃等严重后果。内存泄漏缺陷具有隐蔽性、积累性的特征&#xff0c;比其他如内存非法访问等问题更难…

数据库的介绍、分类、作用和特点

数据库是用来存储和管理数据的系统。它提供了一种结构化的方式来组织和存储数据&#xff0c;以便于有效地进行数据的增删改查操作。 数据库可以按照不同的分类方式进行分类&#xff0c;下面是一些常见的分类方式&#xff1a; 关系型数据库&#xff08;RDBMS&#xff09;&#…

嵌入式学习第二十天!(进程)

进程基本概念&#xff1a; 1. 进程&#xff1a; 程序&#xff1a;存放在外存中的一段数据组成的文件 进程&#xff1a;是一个程序动态执行的过程&#xff0c;包括进程的创建、进程的调度、进程的消亡 2. 进程相关命令&#xff1a; 1. top: 动态查看当前系统中的所有进程信息…

6.4 应用组件 Application

本节介绍Android的重要组件Application的基本概念和常见用法&#xff1a;首先说明Application的生命周期贯穿了App的整个运行过程&#xff0c;然后利用Application实现App全局变量的读写&#xff0c;以及如何避免方法数过多的问题&#xff0c;最后阐述如何借助App实例来操作Roo…

pytorch -- torch.nn.Module

基础 torch.nn 是 PyTorch 中用于构建神经网络的模块。nn.Module包含网络各层的定义及forward方法。 在用户自定义神经网络时&#xff0c;需要继承自nn.Module类。通过继承 nn.Module 类&#xff0c;您可以创建自己的神经网络模型&#xff0c;并定义模型的结构和操作。 torch.n…

简单学习语音唤醒

目录 一、总体介绍 二、来到讯飞开放平台 ​三、代码修改 1.ivw_sample.cpp代码修改 &#xff08;1&#xff09;库的导入 &#xff08;2&#xff09;宏定义​编辑 &#xff08;3&#xff09;定义 &#xff08;4&#xff09;修改OnOutput​编辑 &#xff08;5&#xff0…

C语言——oj刷题——判断闰年

当我们谈到判断闰年时&#xff0c;我们通常会遵循以下规则&#xff1a;闰年是指能被4整除但不能被100整除的年份&#xff0c;或者能被400整除的年份。在C语言中&#xff0c;我们可以通过编写一个简单的程序来实现这一功能。下面是一个示例代码&#xff0c;用于判断一个给定年份…

C++多态的原理

目录 函数虚表 多态原理 普通调用和多态调用的区别 函数虚表 含有虚函数的类&#xff0c;都会有一个函数虚表指针&#xff0c;指向函数虚表。 class Base{public:virtual void Func1(){cout << "Func1()" << endl;}private:int _b 1;}; _vfptr就是函…

如何在C++中实现文件操作

大家好&#xff0c;今天给大家介绍如何在C中实现文件操作&#xff0c;文章末尾附有分享大家一个资料包&#xff0c;差不多150多G。里面学习内容、面经、项目都比较新也比较全&#xff01;可进群免费领取。 在C中&#xff0c;实现文件操作主要涉及到 <fstream> 库&#xf…

批量删除传参那些事

接口参数&#xff1a; public Object batchDeleteUsers(RequestBody List userIds) 工具提示传参&#xff1a; { “userIds”: [] } 错误&#xff01;&#xff01;&#xff01;讨逆猴子 报错&#xff1a;JSON parse error: Cannot deserialize value of type java.util.ArrayL…