在多模态模型训练时,如何合适地融合单模态损失
前言
文章[1]的作者发现在多模态分类模型中,经常出现最好的单模态模型比多模态模型效果还好的情况,作者认为这是由于多模态模型的容量更大,因此更容易过拟合,并且由于不同模态的信息过拟合和泛化有着不同的节奏,如果用同一个优化策略进行优化,那么很可能得到的不是一个最佳的结果。也就是说作者认为目前的多模态融合方式还不是最合适的,因此在[1]中提出了一种基于多模态梯度混合的优化方式。本文是笔者对该文的读后感,如有谬误请联系指出,本文遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明并且联系笔者,谢谢。
∇\nabla∇ 联系方式:
e-mail: FesianXu@gmail.com
github: https://github.com/FesianXu
知乎专栏: 计算机视觉/计算机图形理论与应用
微信公众号:
假如一个多模态分类模型由MMM个模态信息组成(如RGB,光流,音频,深度信息等等),每一个模态的输入记为xix_ixi,每一个模态的特征提取网络记为fi=gi(xi)f_i = g_i(x_i)fi=gi(xi),其中i=1,⋯,Mi=1,\cdots,Mi=1,⋯,M,那么对于一个后融合(Late-fusion)[2]的多模态分类模型来说,如Fig1.1©所示,其后融合的多模态特征由拼接(concatenate)操作构成,因此多模态特征表示为fm=f1⨁f2⋯fMf_{m} = f_1 \bigoplus f_2 \cdots f_Mfm=f1⨁f2⋯fM,其中⨁\bigoplus⨁表示拼接操作。最后将会用fmf_mfm进行训练和分类。假设训练集为T={X1,⋯,n,y1,⋯,n}\mathcal{T}=\{X_{1,\cdots,n}, y_{1,\cdots,n}\}T={X1,⋯,n,y1,⋯,n},其中XiX_iXi为第iii个训练样本而yiy_iyi为第iii个训练样本的标签,那么对于多模态分类而言,其损失为:
Lmulti=L(C(f1⨁f2⋯fM),y)(1-1)\mathcal{L}_{multi} = \mathcal{L}(\mathcal{C}(f_1 \bigoplus f_2 \cdots f_M), y) \tag{1-1} Lmulti=L(C(f1⨁f2⋯fM),y)(1-1)
容易知道对于单模态分类而言,其损失为:
Luni=L(C(fm),y)(1-2)\mathcal{L}_{uni} = \mathcal{L}(\mathcal{C}(f_{m}), y) \tag{1-2} Luni=L(C(fm),y)(1-2)
从理想情况看,由于多模态特征是由各个模态的特征拼接而成的,通过训练学习出合适的分类器参数ΘC∗\Theta_{\mathcal{C}}^{*}ΘC∗,那么多模态损失(1-1)就可以崩塌到单模态损失(1-2),也就是说最坏情况下多模态训练得到的结果,都应该要比单模态训练的要好。然而结果并不是如此,如Fig 1.2(a)所示,以在Kinetics上的结果为例,最好的单模态结果总是要显著比多模态结果(Audio,RGB,Optical Flow三者的任意组合)要好。不仅如此,如Fig 1.2(b)所示,即便采用了一些流行的正则手段,也无法得到有效的效果提升。这不是偶然,[1]的作者认为这是由于不同模态的信息陷入过拟合的节奏是不同的,而通过相同的训练策略对多模态特征进行训练,可能对于整体而言并不能达到最优的状态。为此,对于多模态损失而言需要适当地进行加权,去适应不同模态学习的节奏,假设权系数wkw_kwk满足∑kwk=1\sum_kw_k=1∑kwk=1,其中的kkk是第kkk个模态,那么最终的损失为:
Lblend=∑i=1K+1wiLi(1-3)\mathcal{L}_{blend} = \sum_{i=1}^{K+1} w_i \mathcal{L}_i \tag{1-3} Lblend=i=1∑K+1wiLi(1-3)
其中的K+1K+1K+1模态表示的是拼接起来后的多模态特征,也即是式子(1-1)所示的损失。关键问题有两个:
- 这些模态均衡系数wiw_iwi应该怎么确定
- 这些模态均衡系数是在线计算(动态更新)还是离线计算(静态计算后使用)
显然,均衡系数是一个超参数,单纯靠网格搜索或人工调参肯定不显示,而且无法解决关键问题2,也即是动态更新。因此作者提出了一种确定多模态均衡系数的方法。
首先需要定义出一个度量以衡量该模态的过拟合与泛化情况,如Fig 1.3所示,作者定义了一种综合度量模型的过拟合与泛化情况的指标,其定义为过拟合程度与泛化程度的比值的绝对值,如式子(1-4)所示。其中ΔON,n=ON+n−ON\Delta O_{N,n} = O_{N+n}-O_{N}ΔON,n=ON+n−ON,而ON=LNV−LNTO_{N}=\mathcal{L}_{N}^{V}-\mathcal{L}_{N}^{T}ON=LNV−LNT,表示为训练损失和验证损失的差值,其可被认为是过拟合大小,显然该值越大,过拟合程度越大。而ΔON,n\Delta O_{N,n}ΔON,n表示第NNN个epoch与第N+nN+nN+n个epoch之间的过拟合程度差值。那怎么表示泛化能力呢?可以通过第NNN个epoch与第N+nN+nN+n个epoch之间的验证损失L∗\mathcal{L}^{*}L∗的差值表示两个checkpoint之间的泛化能力差值。也就是说可以将式子(1-4)认为是两个epoch的checkpoint之间的过拟合程度与泛化程度比值的差分。显然我们希望OGR指标越小越好。注意此处的L∗\mathcal{L}^{*}L∗表示理想中的真实验证损失,通常会用有限的验证集损失去近似,表示为LV\mathcal{L}^{V}LV。后续我们都用LV\mathcal{L}^{V}LV代替L∗\mathcal{L}^{*}L∗。
OGR=∣ΔON,nΔGN,n∣=∣ON+n−ONLN∗−LN+n∗∣(1-4)OGR = \Bigg |\dfrac{\Delta O_{N,n}}{\Delta G_{N,n}} \Bigg | = \Bigg | \dfrac{O_{N+n}-O_{N}}{\mathcal{L}^{*}_{N} - \mathcal{L}^{*}_{N+n}} \Bigg | \tag{1-4} OGR=∣∣∣∣∣ΔGN,nΔON,n∣∣∣∣∣=∣∣∣∣∣LN∗−LN+n∗ON+n−ON∣∣∣∣∣(1-4)
显然有
ΔON,n=LN+nV−LN+nT−(LNV+LNT)=ΔLV−ΔLT(1-5)\Delta O_{N,n} = L^{V}_{N+n}-L^{T}_{N+n}-(L^{V}_{N}+L^{T}_{N}) = \Delta L^{V} - \Delta L^{T} \tag{1-5} ΔON,n=LN+nV−LN+nT−(LNV+LNT)=ΔLV−ΔLT(1-5)
然而对于欠拟合的模型来说,可能ΔON,n\Delta O_{N,n}ΔON,n足够小也会导致OGR指标也很小,但是这并没有意义,因为模型仍然未学习好。因此此处用无穷小量进行衡量,也即是有:
limn→0∣ΔON,nΔGN,n∣=∣∂ON,n∂GN,n∣(1-6)\lim_{n \rightarrow 0} \Bigg |\dfrac{\Delta O_{N,n}}{\Delta G_{N,n}} \Bigg | = \Bigg |\dfrac{\partial O_{N,n}}{\partial G_{N,n}} \Bigg | \tag{1-6} n→0lim∣∣∣∣∣ΔGN,nΔON,n∣∣∣∣∣=∣∣∣∣∣∂GN,n∂ON,n∣∣∣∣∣(1-6)
当然,由于此处的nnn有实际的模型含义(一个step),也就是说其实应该是n→1n\rightarrow 1n→1,也就是只有1个step的参数更新。对此我们对损失进行一阶泰勒展开有:
LT(Θ+ηg^)≈LT(Θ)+η<∇LT,g^>LV(Θ+ηg^)≈LV(Θ)+η<∇LV,g^>(1-7)\begin{aligned} \mathcal{L}^{T}(\Theta+\eta \hat{g}) &\approx \mathcal{L}^{T}(\Theta)+\eta<\nabla \mathcal{L}^{T}, \hat{g}> \\ \mathcal{L}^{V}(\Theta+\eta \hat{g}) &\approx \mathcal{L}^{V}(\Theta)+\eta<\nabla \mathcal{L}^{V}, \hat{g}> \end{aligned} \tag{1-7} LT(Θ+ηg^)LV(Θ+ηg^)≈LT(Θ)+η<∇LT,g^>≈LV(Θ)+η<∇LV,g^>(1-7)
结合(1-5)和(1-7)我们有:
∂ON,n=η<∇LV−∇LT,g^>∂GN,n=η<∇LV,g^>(1-8)\begin{aligned} \partial O_{N,n} &= \eta<\nabla \mathcal{L}^{V}-\nabla\mathcal{L}^{T}, \hat{g}> \\ \partial G_{N,n} &= \eta <\nabla \mathcal{L}^{V}, \hat{g}> \end{aligned} \tag{1-8} ∂ON,n∂GN,n=η<∇LV−∇LT,g^>=η<∇LV,g^>(1-8)
因此有:
OGR2=(<∇LV−∇LT,g^><∇LV,g^>)2(1-9)OGR^2 = \Bigg ( \dfrac{<\nabla \mathcal{L}^{V}-\nabla\mathcal{L}^{T}, \hat{g}>}{<\nabla \mathcal{L}^{V}, \hat{g}>} \Bigg )^2 \tag{1-9} OGR2=(<∇LV,g^><∇LV−∇LT,g^>)2(1-9)
此时我们对每个模态的梯度{g^i}i=1M\{\hat{g}_i\}_{i=1}^M{g^i}i=1M进行预估,这个预估通过各模态对应的分类器梯度反向求导得到,表示为{vk}1M\{v_k\}_{1}^M{vk}1M,当满足E[<∇LT−∇LV,vk><∇LT−∇LV,vj>]=0\mathbb{E}[<\nabla \mathcal{L}^T-\nabla \mathcal{L}^{V}, v_k><\nabla \mathcal{L}^T-\nabla \mathcal{L}^{V}, v_j>] = 0E[<∇LT−∇LV,vk><∇LT−∇LV,vj>]=0,其中j≠kj \neq kj=k时,并且给定约束∑kwk=1\sum_k w_k=1∑kwk=1,我们的对OGR2OGR^2OGR2求最小值以求得最佳的模态均衡参数,表示为(1-10):
w∗=argminwE[(<∇LT−∇LV,∑kwkvk><∇LV,∑kwkvk>)2](1-10)w^{*} = \arg\min_{w} \mathbb{E} \Bigg [ \Bigg ( \dfrac{<\nabla \mathcal{L}^{T}-\nabla \mathcal{L}^{V}, \sum_k w_k v_k>}{<\nabla \mathcal{L}^V, \sum_kw_kv_k>} \Bigg )^2 \Bigg ] \tag{1-10} w∗=argwminE[(<∇LV,∑kwkvk><∇LT−∇LV,∑kwkvk>)2](1-10)
原文[1]中对其进行了解析解的证明,这里就不展开了,其解析解如(1-11):
wk∗=1Z<∇LV,vk>σk2(1-11)w^{*}_k = \dfrac{1}{Z} \dfrac{<\nabla \mathcal{L}^V, v_k>}{\sigma^2_k} \tag{1-11} wk∗=Z1σk2<∇LV,vk>(1-11)
其中σk2=E[<∇LT−∇LV,vk>2]\sigma^2_k = \mathbb{E}[<\nabla \mathcal{L}^T - \nabla \mathcal{L}^V, v_k>^2]σk2=E[<∇LT−∇LV,vk>2], Z=∑k<∇LV,vk>2σk2Z = \sum_k \dfrac{<\nabla \mathcal{L}^V, v_k>}{2\sigma^2_k}Z=∑k2σk2<∇LV,vk>是标准化常数项。由此可计算出最佳的模态均衡系数,回答了我们之前提出的第一个问题。
在实践中,再强调下,正如一开始所说的,∇L∗\nabla \mathcal{L}^*∇L∗无法得到,因此通常会从训练集中划出一部分VVV作为子集去验证,得到∇LV\nabla \mathcal{L}^V∇LV,用此去近似∇L∗\nabla \mathcal{L}^*∇L∗。此时我们可以正式去描述Gradient-Blending(GB)算法了,我们的数据集包括训练集TTT,训练集中划出来的验证集VVV,kkk个输入模态{mi}i=1k\{m_i\}^k_{i=1}{mi}i=1k以及一个多模态拼接得到的特征mk+1m_{k+1}mk+1。对于GB算法来说,有两种形式:
- 离线Gradient-Blending: 只计算一次模态均衡参数,并且在以后的训练中都一直固定。
- 在线Gradient-Blending: 将会定期(比如每n个epoch-也称之为super epoch)更新,并且用新的模态均衡参数参与后续的训练。
离在线GB算法和GB估计模态均衡参数的算法见Fig 1.4,作者发现采用了GB估计模态均衡参数后,无论是离线还是在线的G-Blend结合了多模态分类模型训练后,效果都比单模态模型有着显著的提升,并且离线效果仅仅比在线效果差一些,而在线G-Blend的计算代价远比离线高,因此后续的实验都是用离线G-Blend展开的。
作者同样对比了不同epoch下在线G-Blend学习出的模态均衡参数的分布,如Fig 1.6(a)所示,可以发现其在不同epoch下其参数分布都不同,在15-20和20-25的时候甚至出现了Video部分和Audio-Video部分独占鳌头的情况,作者认为这是由于在不同训练阶段其过拟合和泛化行为特征都会改变,导致均衡参数也在一直变化,但是不管怎么样,其效果都会比不采用G-Blend的多模态分类训练更好,如Fig 1.6(b)所示。
同样的,G-Blend不仅仅适用于Video/Audio这两个模态,还能在其他模态下生效,如Fig 1.7所示。
笔者从业务的角度上看,在进行图-文/视频-文匹配的时候,经常会采用双塔多模态匹配,最后对匹配损失进行优化的实践,如[3,4,5]。这个时候由于任务只关注了多模态匹配任务,而没有考虑维持单模态内的特征空间稳定性,此时容易导致单模态内的特征空间破损。如Fig 1.8所示,其中的Fig 1.8(a)图片虽然都和猫有关,但是显然一种是真的猫,一种是猫相关的书法作品,但是这两类的文本信息可能都包含有猫,在进行多模态匹配的时候如果不考虑单模态的损失,就会导致如Fig 1.8(b)所示的单模态特征空间破损,将一些细粒度的单模态知识给『遗忘』了。
Reference
[1]. Wang, W., Tran, D., & Feiszli, M. (2020). What makes training multi-modal classification networks hard?. In Proceedings of the IEEE/CVF Conference on Computer Vision and Pattern Recognition (pp. 12695-12705).
[2]. https://blog.csdn.net/LoseInVain/article/details/105545703, 《万字长文漫谈视频理解》 by FesianXu
[3]. https://fesian.blog.csdn.net/article/details/120364242, 《图文搜索系统中的多模态模型:将MoCo应用在多模态对比学习上》 by FesianXu
[4]. https://fesian.blog.csdn.net/article/details/119516894, 《CLIP-对比图文多模态预训练的读后感》 by FesianXu
[5]. https://fesian.blog.csdn.net/article/details/121699533, 《WenLan 2.0:一种不依赖Object Detection的大规模图文匹配预训练模型 & 数据+算力=大力出奇迹》 by FesianXu
在多模态模型训练时,如何合适地融合单模态损失相关推荐
- pytorch(4)Pytorch模型训练时从CPU与GPU之间的转换
1.如何进行迁移 使用Pytorch写的模型: 对模型和相应的数据使用.cuda()处理.通过这种方式,我们就可以将内存中的数据复制到GPU的显存中去.从而可以通过GPU来进行运算了. 另外一种方式, ...
- 模型训练时测试集上正确率大于训练集
模型训练时测试集上正确率大于训练集 参考 模型在测试集的准确率大于训练集 神经网络与深度学习-验证集(测试集)准确率高于训练集准确率的原因 一.问题 近日再进行Point Cloud Transf ...
- 一种 用于GPT模型 训练的 包含加权 和 数据增强 和 损失方法 的设计
序 根据之前训练的字模型+PALM效果和经验.真是胡言乱语,牛头不搭马嘴.观察了模型的在各种条件下的输出.看大佬的各种的增强方法,搞了2周写完了新的增强管道. 换了新方案,继续训练了一晚上,马上就有不 ...
- 多模态模型前沿研究(1)
1 ERNIE-ViL(百度,2021.3.,aaai) ERNIE-ViL是一个知识增强视觉-语言预训练模型,首次将场景图知识融入到多模态预训练中. 1.1 模型适用场景 ERNIE-ViL结合了从 ...
- 谷歌最新多模态模型CoCa,多项任务取得SOTA效果,ImageNet达到91.0%
每天给你送来NLP技术干货! 来自:圆圆的算法笔记 作者:Fareise 最近谷歌提出了最新多模态预训练方法CoCa,在图像分类.图文检索.看图说话.VQA等多个任务都取得了SOTA效果.CoCa可以 ...
- 图文多模态语义融合前的语义对齐——一种单双混合塔多模态模型
图文多模态语义融合前的语义对齐--一种单双混合塔多模态模型 FesianXu 20220127 at Baidu Search Team 前言 之前在博文[2-4]中介绍了一些图文多模态语义对齐相关的 ...
- 深度学习——训练时碰到的超参数
深度学习--训练时碰到的超参数 文章目录 深度学习--训练时碰到的超参数 一.前言 二.一些常见的超参数 学习率(Learning rate) 迭代次数(iteration) batchsize e ...
- ICML 2022|达摩院多模态模型OFA,实现模态、任务和架构三个统一
作者:霜清.钟煌.鸿侠 通用统一的预训练大模型逐渐成为AI研究的一大趋势,本文将介绍达摩院提出的多模态模型OFA,是如何实现架构.模态.任务的三个统一. 近年来,基于大规模无监督数据的预训练逐渐成为深 ...
- 分析《 yolov7人脸+手机检测模型训练》
现在是大三的下学期,已经到了四月份,最近在搞一个华为云的"揭榜挂帅"挑战杯的项目. 项目的初赛阶段是用model arts(华为云的一个ai开发平台)去做一个云端的疲劳/分神检测的 ...
最新文章
- usaco Network of Schools
- python中filenotfounderror_Python3 报错 FileNotFoundError: [WinError 2]
- Android组件化初探
- icf表格_ICF企业教练实践大奖案例——建立改变和拯救生命的教练文化
- idea教程--Maven 骨架介绍
- DXP 内电层分割
- moodle 分配系统角色_如何安装Moodle学习管理系统
- 打扰了!MacBook Pro 16英寸国行版正式开售:顶配46421元
- python意外退出_有趣的Python上下文管理器
- oracle字段枚举值,E.1.9 结构、联合、枚举和位字段 (G.3.9)
- Linux学习——操作文件与目录
- Qt之时间轴样式汇总
- 【转】SCI论文写法攻略
- Win系统 - 更新卡太久,我能不能强制关机?
- 在数组对象中取出对应属性的值
- 行车百科系列之(四): 交警执法宝典(内部资料)
- 十字链表(icoding)(土豆土豆皮版本微微调)
- 新浪微博互粉php,新浪微博粉丝服务平台配置教程
- wechat-0022,微信公众号,接收事件推送
- bing必应壁纸下载器