模型微调,低预算,高期望!

news2024/11/15 12:51:38

bc151fc6cb60df018cbbad6fc0d57093.png

作为迁移学习中的常用技术,Fine-tuning(微调)已经成为了深度学习革命的重要部分。微调不需要针对新任务从头开始学习,只需要加载预训练模型的参数,然后利用新任务的数据进行一步训练模型即可。也可以说微调是对开放域任务的预训练模型进行训练,从而适应特定域任务。

与从零开始训练网络相比,微调是一种低成本,高收益的解决方案。它可以做到:

  • 更少的数据标注,微调不需要从头学习所有内容,所有的训练都是为了获取特定域知识。

  • 更短的训练时间,因为微调的过程中,深度神经网络的大多数层都会冻结,所以需要训练的参数很少。

充分利用现有的训练,并将其迁移到新任务上是深度学习革命的重要实践。微调不仅经济高效,而且不需要高额的算力。这对于希望利用 AI 技术的微小企业和个人开发者来说非常友好。(至少,几乎所有深度学习的博文都会这样告诉你。)

但是如果你仔细想想,或者尝试在真实世界的用例中使用微调技术,很快你就会发现这个承诺伴随着很多不确定因素:

  • 微调究竟需要多少数据,才能得到好的结果?一条标记数据?十条还是一千条?

  • 究竟需要多长时间的训练,才能获得好的结果?一分钟,一小时,一天或者一周?

即使对于大型企业来说,这些问题也很难解答。对于投入 AI 的资源有限的中小型企业和个人来说,这些问题显得尤为关键。特定域数据既不免费,也有错误,所以需要昂贵的人力来标记数据。而且顶级 GPU 算力的购买和维护成本高得惊人,大多数企业都在云服务上租用 GPU 资源。最好的情况下,租借云服务器每月也需要数千元到数万元。这笔费用对于企业来说不容小觑。

针对以上问题,本文将使用 Jina AI Finetuner 给出 定量 答案。Finetuner 旨在提升预训练模型的性能,并且无需昂贵的硬件设施就能将预训练模型投入生产。

https://github.com/jina-ai/finetuner

Finetuner 是一款能够简化神经网络微调流程,加快微调速度的工具。它基于云端整合工作流,并处理所有复杂性和基础架构要求,使得微调神经网络变得更容易、更快速、更高效。

实验设计

我们设计了两个实验来定量研究 标记数据训练时间 对微调性能的影响。在每个实验中,我们通过微调 3 个深度神经网络来构建 3 个多模态搜索任务。我们一共使用了 7 个数据集,为了保证实验的泛化性,其中两个数据集是非特定域的公开据集。

我们通过评估微调模型执行搜索任务的能力来衡量微调模型的性能,评估指标分别为 mRR(Mean Reciprocal Rank[1] )、Recall、mAP(Mean Average Precision[2])。这些指标都是基于验证集中每次搜索的前 20 个结果计算得到的。

下表总结了我们的实验任务、模型和数据集,以及它们在没有微调的情况下的性能指标。

932e14d76b79fdda55581c6b8675ec97.png

我们已经知道,对于训练任务来说,同等的实验条件下,更多的标注数据、更长的训练时间会对模型的性能产生积极影响。但这远远不够,我们要知道具体需要多少标注数据和多长的训练时间?

实验的首要问题是:

我们能否估计出,为了达到足够好的性能所需的最少的标签数据和训练时间?

1. 为了达到良好的微调性能,需要多少标注数据?

我们将 Finetuner 的标注数据逐渐从 100 条增加到 100,000 条,然后观察这对实验指标产生的影响。为了进一步计算投资收益率(ROI),我们将相对改进(代表净利润)除以标注数据量(代表投资成本)。这对于我们观察实验结果很有帮助,因为它指出了添加标注数据所产生收益递减的点。

下图中,X 轴表示标注数据的数量,Y 轴表示预训练模型的相对改进, Y 值越高越好。

5dd21c686e8ae1b2390c418eb9e72a10.png

bf3d7305a9f2d89262022b8c0994095f.png

540b2f2201445d0b40195df8cfeab835.png

图中显示的结果并不令人惊讶,在所有任务上,模型的性能随着数据集中标记数据的增加而提高,某些任务和数据集比其它任务和数据提升更大。然而,我们可以从这些数字中得出的唯一结论是 Finetuner 的效果和宣传的一样。到目前为止,一切都很好。

更有趣的是 ROI 曲线。在下图中,X 轴表示标记数据的数量,Y 轴表示每个标记数据项的 ROI,当然 Y 值越高越好。特别说明的是,ROI=0 意味着在该点添加新的标记数据,模型的性能将不再提升。

d7eabf059b7c3c7e59bb3847994489db.png

f3991e2a135be4575bf18b1be2d7ab2e.png

a629be8a0a50983690f3c098d8ce5119.png

令人惊讶的是,我们可以看到,每单位标签数据的 ROI 从一开始就立即下降。虽然我们预计到它最终会下降,但没想到它从一开始就一直下降,这是一个意外的结果。

2. 为了达到良好的微调性能,微调需要多长时间?

为了评估增加训练时长带来的影响,我们将增加的标注数据固定为 1000 项,然后将训练 epoch 从 1 逐渐增加到 10。每次增加训练 epoch,我们都评估预训练模型的改进并且计算 ROI。对于这些实验,ROI 的计算方法是用相对改进除以训练时长(以秒为单位)。这意味着,当 ROI=0时,增加训练时间将不会提高预训练模型的性能。

0ba335ee624244ec7cc0d645313c62b9.png

c08d6a336035e7223e35bc97a29d549e.png

b775e21fc750b7b6306dc52a99f9b4e8.png

我们事先知道,一直增加更多时间并不能保证模型有任何改善。事实上,这可能会带来过拟合问题,导致预训练模型性能下降。某些模型(例如 CLIP)比其他模型更容易过度拟合。原则上,如果我们不断地用相同的 1000 个数据点进行训练,肯定会造成过度拟合,导致模型的整体性能下降。

让我们一起看看 ROI 曲线。

c28eb6d8d8a1ade555c5249d514f18a5.png

83bc9d066c001a259fb9b912516c45b4.png

8a1fc04e306fc0d65f0c88d8250b2b1a.png

ROI 在微调的第一个 epoch 后立即下降。在上一个实验中, 当 ROI 接近零时,增加标注数据,ROI 依然保持正值。与上一个实验不同,由于过拟合问题,继续增加训练时间,ROI 可能会变成负数。

总结

这对追求最大化收益和最小化成本的用户意味着什么?

  • 许多最先进的深度神经网络都能进行小样本学习,它们只需要几百条标注数据和几分钟训练,就能得到很大的性能提升。你可能会认为训练深度神经网络需要数百万的数据和一周的运行时间,本文打破了这种刻板印象。

  • 它们能以最快的速度,从最少的数据中学习到最多的知识,所以随着投入更多时间和数据进行微调,ROI 会迅速下降。上面的实验中,在 500 个标记数据上训练,或者将 GPU 训练时长增加 600 秒后,ROI 从最高值缩小了 70%。这说明使用超过数百项的训练数据,超过几分钟的训练时长,并不会带来预期的收益。

总的来说,对于开发者来说,使用 Jina AI Finetuner[3]  绝对是明智之举。它能以最快的速度,从最少的数据中学习到最多的知识,而且能在保持最小化成本的同时,实现最大化收益。赶快来试试吧!

参考资料

[1]

Mean Reciprocal Rank: https://en.wikipedia.org/wiki/Mean_reciprocal_rank

[2]

Mean Average Precision: https://stats.stackexchange.com/questions/127041/mean-average-precision-vs-mean-reciprocal-rank

[3]

Finetuner: https://github.com/jina-ai/finetuner

原文链接

https://jina.ai/news/fine-tuning-with-low-budget-and-high-expectations/

本文作者

肖涵,Jina AI 创始人兼 CEO

王博,Jina AI 高级算法工程师

Scott,Jina AI 高级布道师

本文译者

吴书凝,Jina AI 社区贡献者

🐰 新年活动预约

春节即将到来,1 月 16 日,Jina AI “中文社区面对面·兔年迎新活动”将会在线上举行,欢迎大家点击下方卡片预约直播,定制新年礼盒、多轮互动抽奖、定制红包封面等你来拿!Jina AI 将与社区用户一起,回顾过去一年的高光时刻,展望新一年的美好愿景!

最后,祝大家新年快乐、万事顺遂!1 月 16 日,晚 8 点,我们线上不见不散哦!

更多技术文章

📖 Jina AI创始人肖涵博士解读多模态AI的范式变革

🎨 语音生成图像任务|🚀 模型微调神器Finetuner

💨 DocArray + Redis:快到飞起来的推荐系统

😎 Jina AI正式将DocArray捐赠给Linux基金会

🧬 搜索是过拟合的生成;生成是欠拟合的搜索

👬 在Jina AI社区连接、分享、共创

11a80eac1b83bea5aec9c4f043924883.png

点击“阅读原文”,即刻了解 Jina

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

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

相关文章

一文简单了解并部署Zookeeper集群

GreatSQL社区原创内容未经授权不得随意使用,转载请联系小编并注明来源。GreatSQL是MySQL的国产分支版本,使用上与MySQL一致。作者:蟹黄瓜子文章来源:GreatSQL社区投稿 1.Zookeeper概述 Zookeeper对于很多人开始可能都有所耳闻&am…

基于Java+SpringBoot+vue+element实现爱心捐赠平台系统

基于JavaSpringBootvueelement实现爱心捐赠平台系统 博主介绍:5年java开发经验,专注Java开发、定制、远程、文档编写指导等,csdn特邀作者、专注于Java技术领域 作者主页 超级帅帅吴 Java毕设项目精品实战案例《500套》 欢迎点赞 收藏 ⭐留言 文末获取源码…

排他思想的运用

思路简述 需求:桌子上有一排灯,点哪个亮哪个,但是要求每次只能点亮一盏。如果不使用排他思想,操作过程如下: 第一次打开一盏灯,记为 A,记录下来。第二次打开灯之前,先去找记录&…

[cpp进阶]C++智能指针

文章目录为什么需要智能指针?智能指针的原理及使用智能指针的原理智能指针的使用C中的智能指针C智能指针的发展历程std::auto_ptrstd::auto_ptr的使用std::auto_ptr的模拟实现std::unique_ptrstd::unique_ptr的使用std::unique_ptr的模拟实现std::shared_ptrstd::shared_ptr的…

Springboot @InitBinder处理from-data表单传参,指定参数默认新增前缀

前言 有兄弟突然找到我,江湖救急,我以为是啥问题呢? 一看这位小兄弟也是半路出家, 没有对springboot的常用注解有过研究。 不过没大碍,还是那句话, 学习的事情,只有先知和后知 现在你看完这篇…

纳米软件分享:光伏逆变器ATE测试系统,逆变器测试解决方案

光伏并网逆变器(以下简称“逆变器”)是光伏发电系统的核心部件之一,其主要功能是将光伏阵列的直流逆变为符合电网接入要求的交流电并入电网。并网逆变器ATE测试平台,主要是模拟光伏阵列特性输入的直流电源、模拟电网电源、系统控制…

Java垃圾分类查询管理系统源码+数据库,基于SpringBoot+mybatis-plus,垃圾分类查询及预约上门回收

垃圾分类查询管理系统 完整代码下载地址:Java垃圾分类查询管理系统源码数据库 1.介绍 垃圾分类查询管理系统,对不懂的垃圾进行查询进行分类并可以预约上门回收垃圾。 让用户自己分类垃圾, 按国家标准自己分类, 然后在网上提交订…

java学习之main方法

目录 一、main方法的注意事项 二、在IDEA中传入参数 一、main方法的注意事项 形式:public static void main(String[] args){},main方法是一个静态方法,访问修饰符是:public,形参是String数组 args 注意事项&#xf…

go语言--函数

package mainimport "fmt"func main(){//功能: 10 20var num1 int 10var num2 int 20var sum int 0sum num1sum num2fmt.Println(sum) }为什么使用函数 提高代码的复用性,减少代码冗余, 代码维护性也提高了 函数的定义 为完成摸一个功能的程序指令(…

IRCNN-FPOCS 文章解读

1、论文概述 1)待解决的问题:地震道数据缺失(野外地震数据的质量往往受到地质环境或设备参数的影响,这些数据可能在空间上不连续,导致地震痕迹缺失,也称为下采样观测) 2)目的&…

从菜鸟到团队协同大神:产品经理工具技能修炼

现在,自雇人士和自由职业者越来越普遍。受环境影响,员工们正在放弃朝九晚五的工作,转而采用更灵活的远程工作,另一方面,随着办公数字化转型、远程办公的需求强烈、在线协协同管理工具飞项等一批知名互联网工具如雨后春…

c#入门-捕获变量

局部变量捕获 局部函数,匿名函数,可以直接在函数体内使用局部变量。 如果作为委托使用,传递给别人。可能在别人使用委托的时候,这些局部变量的作用域就已经消失了。 因此,编译器会对这些变量做出特殊的操作&#xff…

优维低代码:I18n 国际化

优维低代码技术专栏,是一个全新的、技术为主的专栏,由优维技术委员会成员执笔,基于优维7年低代码技术研发及运维成果,主要介绍低代码相关的技术原理及架构逻辑,目的是给广大运维人提供一个技术交流与学习的平台。 连载…

第8季3:使用字库字符实现区域显示

以下内容源于朱有鹏嵌入式课程的学习与整理,如有侵权请告知删除。 一、代码框架分析 在第8季2:OSD实验演示与代码分析中,我们分析了SAMPLE_RGN_CreateVideoRegion函数,该函数完成了左下角的logo区域显示、右下角的时间区域显示&a…

Ubuntu18.04安装教程

Ubuntu18.04安装教程# 阿里云源 deb http://mirrors.aliyun.com/ubuntu/ bionic main restricted universe multiverse deb http://mirrors.aliyun.com/ubuntu/ bionic-security main restricted universe multiverse deb http://mirrors.aliyun.com/ubuntu/ bionic-updates ma…

【Vue+Springboot】综合程序设计后端部分实现(含跨越访问)

文章目录1、功能展示2、前端部分:VueAPI3、后端部分:Springboot1、功能展示 大致分为用户管理,商品管理,收藏管理,购物车管理,订单管理五个模块。 2、前端部分:VueAPI Vue 使用 axios 库进行网…

如何在Unity中实现MVC模式?

MVC是什么? ​ MVC即Model View Controller,是模型(model)【数据层】-视图(view)【表现层】-控制器(controller)【逻辑层】的缩写。主要应用于网站开发,在游戏开发方面,因为不同游戏的需求、功能不尽相同&…

数字化转型迫在眉睫,企业应该如何面对?

火热的数字化转型,在国企、央企公布数字化转型规划后,进一步向各行各业开始扩散,吸引了很多对于数字化并不熟悉的企业。这些企业大多没有一个确定的目标,只是想要让企业完成转型改革,所以对于怎样做没有什么好的规划。…

Unity3d C#实现基于SocketIOUnity的与后端(node.js为例)Socket通信功能(含工程)

#前言 该功能主要是项目上的需求,按后端的需求就是我们通过SocketIO进行通信,之前游戏通信功能大多是基于原始的Socket进行封装,需要对包体进行设计,还需要粘包拆包等系列操作,属实有点麻烦。这次尝试了SocketIOUnity的…

Exynos_4412——RTC实验

目录 一、ADC小作业 二、RTC简介 三、Exynos_4412下的RTC控制器 四、RTC中的寄存器 五、RTC编程 六、RTC小作业 一、ADC小作业 电压在1501mv~1800mv时,LED2、LED3、LED4、LED5点亮 电压在1001mv~1500mv时,LED2、LED3、LED4点亮 电压在501mv~1000m…