CVPR2022 Oral OGM-GE阅读笔记

标题:Balanced Multimodal Learning via On-the-fly Gradient Modulation(CVPR 2022 Oral)
论文:https://arxiv.org/abs/2203.15332
领域:多模态学习
解决本质问题在某些多模态模型的训练过程中,性能更好的模态(主导模态)会对其他模态的优化产生抑制作用 , 因此导致的模态间训练的不平衡现象,单一模态存在欠优化 。
方法文章主要从不同模态的梯度传播上入手 , 根据模态间的效果差异自适应地调制梯度,并结合高斯噪声的泛化性增强能力,提出了具有较强适用性的OGM-GE优化方法 。
优点

  • 即插即用,很通用直观的工作
  • 实验详实,各项实验指标表明该方法的灵活有效性,应用在不同的encoder、fusion method以及优化器中都有一定提升,并且相比其他调节策略提升优势显著
缺点
  • 模态间的融合方式不仅只有论文中所详细阐述的concat方式,融合的阶段也不一定要在各自模态的encoder提完特征后,在某些任务中 , 不同模态的地位是不相同的 , 分清主次模态也是一个方法 , 因此本文的做法有一定局限性 。
  • 本文动态调节梯度中的动态系数\(k_t\)的设置方法是比较handmade的,模态差异率\(\rho_t^u\)的定义符合intuition但也缺乏一定的数学解释证明,仅仅只是实验表明比较work 。
  • 为了弥补因为动态减少强势模态梯度所造成的泛化性减小问题而再引入高斯噪声(GN)的方式感觉不够elegant,既然这样为啥不直接增强弱势模态梯度,加强随机梯度噪声,甚至不需要添加GN?
进一步思考如果是我,我该如何解决这个问题?这也是我一直以来在试着培养的科研思维,当然,idea is cheap,以下思路都尚待实验证明~
method1:gradient decent如上述缺点中提到的 , 既然可以减少强势模态梯度 , 同时增加GN,相反的,也可以尝试增强弱势模态梯度,加强随机梯度噪声,甚至不需要添加GN 。
method2:multi task learning为啥会想到这个,因为我觉得思想差不多!只不过多模态是multiple in,而多任务是multiple out 。
首先多任务学习可以通过不同子任务的互相约束,可以使网络减少归纳偏置、帮助收敛、提取共性特征来取得更好的性能,但是loss权重人为设定相当困难 , 为什么不让网络自己学习?
一种可行的方式参考论文:Multi-Task Learning Using Uncertainty to Weigh Losses for Scene Geometry and Semantics (CVPR 2018)
CVPR2022 Oral OGM-GE阅读笔记

文章插图
本文通过建立贝叶斯模型,基于同方差不确定性建立了多任务的联合loss如下
对于更多任务的模型,根据任务类型也很容易拓展 , 网络将自动学习权重~
本任务中的应用流程通过多任务加强整体任务性能,相对应的提升弱势模态优化效果 。
method3:knowledge distill由于强弱模态之间,存在学习和优化上的差异,可以类比老师和学生,一个学的好,一个学的不好,因此考虑知识蒸馏~
KD整体架构如下:
参考论文:Distilling the Knowledge in a Neural Network
一种可行的方式参考论文:There is More than Meets the Eye: Self-Supervised Multi-Object Detection and  Tracking with Sound by Distilling Multimodal Knowledge (CVPR 2021)
让teacher net(含有RGB、Depth、Themal多个模态)训练student net(Audio)然后让student net单独实现定位,MTA损失来对齐学生的中间表示与教师的中间表示 。
本任务中的应用流程
  1. gt教强模态train一个teacher net
  2. 强模态教弱模态, 使用强模态的输出概率值而不是onehot向量对弱模态进行训练 , train student net
  3. 一般知识蒸馏的做法是单独用student去预测的,但这里可以进行模态fusion实现共同预测 。
解决的问题本质都是模态不均衡,但思路不同,这个方法侧重于使弱模态从本质上变强 。
该方法可能存在的问题:模态差异性太大 , 无法对齐导致效果不好 。。。
method4:self-supervised learning原先的动态系数\(k_t\)只对encoder部分进行动态调节,来使得弱势模态优化得到提升 , 这种方法是有点后天培养的意思,那么为啥不能直接就让encoder先天就比较厉害呢?这样我不怎么需要优化就perform well了~于是就想到了利用自监督 , 自监督是目前比较火的方向,通过在上游任务中先进行预训练然后应用到下游任务中往往效果比较好 。

推荐阅读