NLP中的绿色Finetune方法

发布时间 - 2025-07-12 00:00:00    点击率:

在自然语言处理(nlp)领域,利用预训练的大型模型进行微调(finetune)已成为解决各种任务的常见方法。通过对bert、gpt等在海量文本上预训练的模型在下游任务上进行微调,可以得到针对特定任务的模型。然而,这种方法的成本不容忽视,因为需要为每个任务保存一个完整的特定任务模型,随着预训练模型规模的增大,存储空间的需求也随之增加。此外,为每个任务微调如此庞大的模型,还会消耗大量的训练资源。

为了实现更加环保和经济的NLP预训练模型迁移,近年来业界提出了多种优化微调的方法,如adapter微调、mask微调等。最近颇为流行的prompt技术甚至能够在不进行微调的情况下应用于下游任务。本文将重点介绍近两年在NLP领域中几种经典的微调优化工作,包括adapter-tuning、side-tuning、mask-tuning以及prefix-tuning等。

Adapter-tuning

在迁移NLP预训练模型的方法中,主要分为微调(finetune)和基于特征的方法(feature-based)。微调方法是对原模型在下游任务上进行训练,而基于特征的方法则是使用预训练模型生成的词或句子嵌入作为输入,连接到下游的独立模型进行预测。通常情况下,微调的效果优于基于特征的方法,但其计算开销也更大。Parameter-Efficient Transfer Learning for NLP(ICML 2019)提出了一种更经济的迁移学习方法,即adapter-tuning。这种方法只需微调少量参数就能达到与微调整个模型相当的效果。具体做法是在Bert模型的每一层中间插入两个adapter。adapter首先通过全连接层对原始输入进行降维,减少参数量,经过内部的NN后再将维度恢复,形成一种瓶颈结构。在微调过程中,预训练的Bert模型参数被冻结(freeze),只更新adapter的参数,大大减少了微调阶段需要更新和保存的参数量。

AdapterFusion: Non-Destructive Task Composition for Transfer Learning(2025)在Adapter Finetune的基础上,提出了一种在存在多个下游任务时使用的两阶段微调方法。第一阶段与Adapter Finetune的思路一致,在预训练的大模型基础上添加每个任务的adapter进行微调,预训练模型参数被冻结。第二阶段,继续冻结预训练模型和第一阶段训练的adapter参数,学习一个AdapterFusion模型,这个模块的作用是融合各个adapter的信息,实现下游多个任务之间的信息共享。AdapterFusion的思路是利用当前样本在FF层的输出和各个任务的adapter输出做Attention,实现从多个Adapter产出信息中的选择和融合。这样,模型能够根据每个样本选择合适的adapter输出,综合多任务的adapter信息。

Side-Tuning

Side-tuning: A baseline for network adaptation via additive side networks(ECCV 2019)提出了一种side-tuning的方法。如下图所示,side-tuning是在原预训练模型的基础上,增加一个小的side network,然后将预训练模型的输入和side-network的输出进行融合。融合的方法是使用一个可学习的参数α进行加权融合。训练过程中,预训练模型不会被更新,只更新side-network部分的参数。Side模型的尺寸和复杂度可以根据任务的难易程度进行调整。Side-tuning与adapter-tuning有相似之处,都是通过一个附属的小模型对原预训练大模型的表示进行更精细化的调整,以适应下游任务。

Mask-tuning

Masking as an efficient alternative to finetuning for pretrained language models(2025)提出了一种简单的mask方法来实现高效微调。与一般的微调不同,该方法在微调阶段不调整参数,而是学习一个mask矩阵。对于每一个Transformer层,都会学习一个0-1的矩阵,然后用这个矩阵对该层的全连接权重进行缩放。公式如下,m表示矩阵中的某一个元素,根据一个阈值设置为1或0,再用这个矩阵和每层的全连接参数相乘进行对应元素的缩放。

Mask-tuning的出发点是,在预训练模型微调的过程中,其实不需要微调那么多参数,只要微调一些关键参数就能达到较好的效果,减少微调阶段计算的冗余性。在How fine can fine-tuning be? Learning efficient language models(2025)一文中也提出了类似的思路。

Prefix-tuning

REFORMER: THE EFFICIENT TRANSFORMER(ICLR 2025)提出了采用局部敏感哈希的方法来提升Transformer的效率。当序列较长时,QK^T的维度[batch_size, L, L]的计算量和存储开销会非常大,但由于我们关注的是softmax后的结果,并不关注QK^T本身是什么,而softmax只关注值最大的几个元素,因此我们可以只选择k个最相关的元素进行计算。

Prefix-Tuning: Optimizing Continuous Prompts for Generation(2025)提出的方法只微调0.1%的参数就能取得与微调相当的效果,并且在少样本任务上效果优于微调。本文提出了针对自然语言生成任务(如摘要生成、table-to-text等任务)的迁移预训练大模型的方法。基于Language models are few-shot learners(2025,GPT3)等文章中提出的Prompt思路,只要能给模型一个合适的上下文信息context,预训练的语言模型不需要修改参数就能很好地解决下游问题。例如,当我们想生成Obama这个词,只要上下文信息给Barack,模型就有可能生成Obama,因为模型在预训练阶段已经学到了这些信息。

该方法的具体实现是,将预训练的Transformer模型参数整体冻结(Freeze),在正常输入文本序列时,在最前端添加几个prefix id,每个prefix id都对应一个随机初始化的embedding,不同的任务有不同的prefix id。这样,在模型中,prefix之后每个时刻的表示都会受到prefix的影响,prefix代表某个对应具体任务的上下文信息。在微调过程中,模型的其他参数都被冻结,只微调prefix的embedding以及prefix后面接的一些全连接层,微调参数量只占整体模型的0.1%,远小于其他的微调方法。该方法的核心思想是利用prefix embedding去学习对于某个任务来说,需要从预训练语言模型中提取什么样的信息。

总结

NLP领域预训练大模型的发展,催生了许多关于如何提升迁移效率的研究工作。从目前的研究趋势来看,基于prompt思想的微调是未来的一个重要研究趋势,充分利用预训练模型的信息,让下游任务更贴近预训练模型,而不是让预训练模型贴近下游任务。后续我们也会对prompt进行更为详细的介绍。

END

如果觉得我的文章对你有帮助,请关注我吧~


# ai  # for  # table  # transformer  # bert  # nlp  # gpt  # prompt  # embedding  # 提出了  # 就能  # 多个  # 基础上  # 过程中  # 几个  # 是在  # 自然语言  # 不需要  # 新和 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: Laravel如何配置中间件Middleware_Laravel自定义中间件拦截请求与权限校验【步骤】  Laravel N+1查询问题如何解决_Eloquent预加载(Eager Loading)优化数据库查询  如何快速搭建高效WAP手机网站?  Laravel路由Route怎么设置_Laravel基础路由定义与参数传递规则【详解】  Laravel如何记录日志_Laravel Logging系统配置与自定义日志通道  长沙做网站要多少钱,长沙国安网络怎么样?  Laravel如何发送系统通知_Laravel Notifications实现多渠道消息通知  如何在Windows环境下新建FTP站点并设置权限?  如何在Windows服务器上快速搭建网站?  Laravel怎么多语言本地化设置_Laravel语言包翻译与Locale动态切换【手册】  香港服务器WordPress建站指南:SEO优化与高效部署策略  Laravel如何集成Inertia.js与Vue/React?(安装配置)  如何在腾讯云服务器快速搭建个人网站?  如何在自有机房高效搭建专业网站?  详解vue.js组件化开发实践  Laravel怎么为数据库表字段添加索引以优化查询  悟空识字如何进行跟读录音_悟空识字开启麦克风权限与录音  Laravel Session怎么存储_Laravel Session驱动配置详解  微信小程序 input输入框控件详解及实例(多种示例)  详解Android中Activity的四大启动模式实验简述  详解一款开源免费的.NET文档操作组件DocX(.NET组件介绍之一)  Laravel怎么实现模型属性的自动加密  HTML5空格和margin有啥区别_空格与外边距的使用场景【说明】  Laravel如何实现API资源集合?(Resource Collection教程)  如何快速上传建站程序避免常见错误?  Laravel如何创建自定义Facades?(详细步骤)  uc浏览器二维码扫描入口_uc浏览器扫码功能使用地址  Laravel怎么集成Vue.js_Laravel Mix配置Vue开发环境  Android实现代码画虚线边框背景效果  INTERNET浏览器怎样恢复关闭标签页_INTERNET浏览器标签恢复快捷键与方法【指南】  Laravel如何使用Eloquent ORM进行数据库操作?(CRUD示例)  b2c电商网站制作流程,b2c水平综合的电商平台?  javascript基本数据类型及类型检测常用方法小结  动图在线制作网站有哪些,滑动动图图集怎么做?  独立制作一个网站多少钱,建立网站需要花多少钱?  详解Android图表 MPAndroidChart折线图  Laravel如何升级到最新的版本_Laravel版本升级流程与兼容性处理  Laravel如何实现RSS订阅源功能_Laravel动态生成网站XML格式订阅内容【教程】  如何快速搭建高效可靠的建站解决方案?  网站页面设计需要考虑到这些问题  制作企业网站建设方案,怎样建设一个公司网站?  郑州企业网站制作公司,郑州招聘网站有哪些?  学生网站制作软件,一个12岁的学生写小说,应该去什么样的网站?  Java Adapter 适配器模式(类适配器,对象适配器)优缺点对比  常州企业网站制作公司,全国继续教育网怎么登录?  三星、SK海力士获美批准:可向中国出口芯片制造设备  如何快速生成凡客建站的专业级图册?  Laravel如何生成API文档?(Swagger/OpenAPI教程)  如何用狗爹虚拟主机快速搭建网站?  Midjourney怎么调整光影效果_Midjourney光影调整方法【指南】