CLIPFit:不绕弯子,直接微调比提示微调和适配器微调更好 | EMNLP'24
来源:晓飞的算法工程笔记 公众号,转载请注明出处
论文: Vision-Language Model Fine-Tuning via Simple Parameter-Efficient Modification

创新点
- 提出了一种
CLIPFit方法以高效地微调CLIP模型,从而揭示经典模型微调在视觉语言模型(VLMs)上的潜力。 - 与现有的提示调整或适配器调整方法不同,
CLIPFit不引入任何外部参数,而仅微调CLIP固有参数中的一个小特定子集。
内容概述

微调视觉语言模型(VLMs)方面的进展见证了提示调优和适配器调优的成功,而经典模型在固有参数上的微调似乎被忽视了。有人认为,使用少量样本微调VLMs的参数会破坏预训练知识,因为微调CLIP模型甚至会降低性能。论文重新审视了这一观点,并提出了一种新视角:微调特定的参数而不是全部参数将揭示经典模型微调在VLMs上的潜力。
通过细致研究,论文提出了ClipFit,可以在不引入额外参数开销的情况下微调CLIP。仅通过微调特定的偏置项和归一化层,ClipFit可以将零样本CLIP的平均调和均值准确率提升7.27%。
为了理解CLIPFit中的微调如何影响预训练模型,论文进行了广泛的实验分析以研究内部参数和表示的变化。在文本编码器中,当层数增加时,偏置的变化减少。在图像编码器中,LayerNorm也有同样的结论。进一步的实验表明,变化较大的层对知识适应更为重要。
CLIPFit

在不引入任何外部参数的情况下,CLIPFit仅对文本编码器中FNN的投影线性层的偏置项进行微调,并更新图像编码器中的LayerNorm。
文本编码器
对于文本编码器,CLIPFit并不是对所有偏置项进行微调,而仅对文本编码器中FFNs的投影线性层(即第二层)的偏置项进行微调。仅微调部分偏置项将减少训练参数的数量,相较于微调所有偏置项。此外,实验表明,微调部分偏置项可以实现比微调所有偏置项更好的性能。
图像编码器
BitFit证明了在不引入任何新参数的情况下,仅微调预训练语言模型中的偏置项可以与完全微调的表现相媲美。然而,BitFit是为大型语言模型(LLM)微调设计的,直接将BitFit应用于视觉语言模型(VLM)微调可能会损害模型的泛化能力。
为此,CLIPFit并没有对图像编码器的偏置项进行微调,而是对LayerNorm进行微调。在LayerNorm中,两个可学习参数增益 \(\boldsymbol{g}\) 和偏置 \(\boldsymbol{b}\) 用于对标准化输入向量 \(\boldsymbol{x}\) 进行仿射变换,以进行重新中心化和重新缩放,这有助于通过重新塑形分布来增强表达能力。在训练过程中,不同的数据分布应该在LayerNorm中产生不同的增益和偏置,以实现分布的重新塑形。
如果在推理过程中应用偏移的增益和偏置,可能会导致次优解。因此,CLIPFit对图像编码器中的LayerNorm进行微调。
损失函数
在微调阶段,通用的预训练知识很容易被遗忘。因此,论文探索了两种不同的策略来减轻这种遗忘。
第一种策略是使用知识蒸馏损失来指导CLIPFit从原始的零样本CLIP中学习。设 \(\{\boldsymbol{w}_i^\mathrm{clip}\}_{i=1}^K\) 为原始CLIP的文本特征, \(\{\boldsymbol{w}_{i}\}_{i=1}^K\) 为CLIPFit的文本特征。CLIPFit的训练损失和知识蒸馏损失定义为:
\mathcal{L}=\mathcal{L}_{\mathrm{ce}}+\beta \mathcal{L}_{\mathrm{k g}},
\end{equation}
\]
\mathcal{L}_\mathrm{k g} = \frac{1}{K}\sum_{i=1}^{K}\cos(\boldsymbol{w}_i^{\mathrm{clip}},\boldsymbol{w}_i),
\end{equation}
\]
第二种策略是使用均方误差(MSE)损失来惩罚文本编码器的变化。设 \(\{\boldsymbol{b}_i^\mathrm{clip}\}_{i=1}^L\) 为来自预训练CLIP的未固定文本偏置项, \(\{\boldsymbol{b}_i\}_{i=1}^L\) 为来自CLIPFit的未固定文本偏置项,其中 \(L\) 是未固定偏置层的数量。均方误差损失定义为:
\mathcal{L}_\mathrm{m s e} = \frac{1}{L}\sum_{i=1}^{L}||\boldsymbol{b}_i^\mathrm{clip}-\boldsymbol{b}_i||^2.
\end{equation}
\]
这两种策略都能缓解遗忘问题,而知识蒸馏损失的效果更佳。因此,选择将知识蒸馏损失作为CLIPFit的最终解决方案。
主要实验



如果本文对你有帮助,麻烦点个赞或在看呗~
更多内容请关注 微信公众号【晓飞的算法工程笔记】

CLIPFit:不绕弯子,直接微调比提示微调和适配器微调更好 | EMNLP'24的更多相关文章
- 表单(下)-EasyUI Spinner 微调器、EasyUI Numberspinner 数值微调器、EasyUI Timespinner 时间微调器、EasyUI Slider 滑块
EasyUI Spinner 微调器 扩展自 $.fn.validatebox.defaults.通过 $.fn.spinner.defaults 重写默认的 defaults. 微调器(spinne ...
- NLP论文解读:无需模板且高效的语言微调模型(上)
原创作者 | 苏菲 论文题目: Prompt-free and Efficient Language Model Fine-Tuning 论文作者: Rabeeh Karimi Mahabadi 论文 ...
- 使用 LoRA 进行 Stable Diffusion 的高效参数微调
LoRA: Low-Rank Adaptation of Large Language Models 是微软研究员引入的一项新技术,主要用于处理大模型微调的问题.目前超过数十亿以上参数的具有强能力的大 ...
- lecture14-RBM的堆叠、修改以及DBN的决策学习和微调
这是Hinton的第14课,主要介绍了RBM和DBN的东西,这一课的课外读物有三篇论文<Self-taught learning- transfer learning from unlabele ...
- easyui源码翻译1.32--TimeSpinner(时间微调)
前言 扩展自$.fn.spinner.defaults.使用$.fn.timespinner.defaults重写默认值对象.下载该插件翻译源码 时间微调组件的创建基于微调组件.它和数字微调类似,但是 ...
- 第二百一十七节,jQuery EasyUI,NumberSpinner(数字微调)组件
jQuery EasyUI,NumberSpinner(数字微调)组件 学习要点: 1.加载方式 2.属性列表 3.事件列表 4.方法列表 本节课重点了解 EasyUI 中 NumberSpinner ...
- 在一张 24 GB 的消费级显卡上用 RLHF 微调 20B LLMs
我们很高兴正式发布 trl 与 peft 的集成,使任何人都可以更轻松地使用强化学习进行大型语言模型 (LLM) 微调!在这篇文章中,我们解释了为什么这是现有微调方法的有竞争力的替代方案. 请注意, ...
- [Pytorch框架] 4.1 Fine tuning 模型微调
文章目录 4.1 Fine tuning 模型微调 4.1.1 什么是微调 为什么要微调 迁移学习 Transfer Learning 二者关系 4.1.2 如何微调 4.1.3 注意事项 4.1.3 ...
- 解密Prompt系列6. lora指令微调扣细节-请冷静,1个小时真不够~
上一章介绍了如何基于APE+SELF自动化构建指令微调样本.这一章咱就把微调跑起来,主要介绍以Lora为首的低参数微调原理,环境配置,微调代码,以及大模型训练中显存和耗时优化的相关技术细节 标题这样写 ...
- 如果在敲代码的时候eclipse不弹出提示,怎么办?
非常弱智的操作,我们曾经在输入System.out.println("content");的时候,当我们输入了"."之后,在输入错误,此时我们再回退至" ...
随机推荐
- Linux内核如何访问另外一个模块的函数和变量 原创
一.问题整理 内核中两个模块,一个A,一个B,A模块中有操作函数,B模块要调用A模块的函数. 二.分析 这是一个驱动工程师经常遇到的一个问题,该问题其实是模块符号导出问题,实现该功能比较简单,借助EX ...
- Win32_SDK 屏蔽Edit控件的右键系统菜单方法
找了好久的方法,网上都是基于mfc的方法,现在找到解决方法了,分享给大家, 就是要重新设置Edit控件的回调函数 //Win32 SDK 下Edit控件屏蔽右键系统菜单方法 第一步: //声明保存旧的 ...
- Graphics2D绘图方法总结
一.简介 在开发中可能会遇到这样一类场景,业务复杂度不算太高,技术难度不算太深,但是做起来就很容易把人整破防,伤害很高侮辱性很强的:绘图. 绘图最怕有人挑刺:这里变形,那里不对,全图失真. 最近在处理 ...
- Linux 主流桌面环境
GNOME KDE Xfce Ubuntu 使用 GNOME 作为桌面环境. 基于 KDE Plasma 开发的 Ubuntu 发行版:Kubuntu 基于 Xfce 开发的 Ubuntu 发行版:X ...
- 使用 AWS CLI 管理 EC2
EC2 EC2 是 AWS 的云服务器服务 EC2: Elastic Compute Cloud 创建实例 选择一个系统镜像(AMI): AMI(Amazon Machine Image)定义了启动实 ...
- 关于java连接数据库时提示异常java.sql.SQLException: No suitable driver found for说明
当我们测试一个新的数据库服务时,需要使用对方提供jdbc驱动来连接数据库,有时候简单的写个demo去连接,发现提示异常: java.sql.SQLException: No suitable driv ...
- 小tips:HTML的实体
为了能在HTML文档中正确显示某些特殊字符,就需要使用HTML实体(entity).HTML实体就是对当前文档的编码方式不能包含的字符,提供一种转义表示. HTML实体定义 1.名称方式 名称方式会以 ...
- reinstall nodejs 后跑不到 command
现象 : node -v 可以跑 , ng new 这些就跑不到 (确保已经安装了 global cli) 那多半是 path 的问题 https://stackoverflow.com/questi ...
- JDBC——案例
创建一个商品表 drop table if exists tb_brand; -- 创建tb_brand表 create table tb_brand( id int primary key auto ...
- USB gadget configfs
概述 USB Linux Gadget是一种具有UDC (USB设备控制器)的设备,可以连接到USB主机,以扩展其附加功能,如串口或大容量存储能力. 一个gadget被它的主机视为一组配置,每个配置都 ...