好的,欢迎大家回来,我们开始上课。
这是第六讲,关于跨模态学习。今天的课上,我们将用“跨模态学习”来结束多模态学习的讨论。我们会讲到跨模态学习的基础,以及实现它的几种方法。跨模态学习非常实用,它的核心思想是在模态之间传递信息。你希望模型完成某个任务、处理某个模态,但往往数据有限,比如医疗数据或真实世界的传感器数据,你很难获取大量数据。那么,如何将大规模的数据资源迁移到你真正关心的任务上?
我们将介绍三种范式。第一种是迁移学习,相信大多数人都见过一些,我们会很快过一下,比如通过预训练来迁移信息到下游任务。第二种是一类叫“协同学习”的方法,它的思路是在训练时引入一个额外模态,不论是作为输入还是输出,但在测试时把它丢弃,只使用你关心的那个模态。第三种是“模型归纳”,即使只能黑盒访问模型,也能在模型之间诱导出某种行为。这在如今很多大型模型只提供黑盒API的背景下非常有用。
第一部分,通过预训练模型迁移。你通常有一个参数中存储了大量信息的大型模型,例如BERT或大语言模型。目标是将其以某种方式适配到你关心的模态上,这个模态可能与预训练分布不同。目标就是得到一个针对特定任务微调的模型。关于大语言模型,春假后会有专门课程,这里先不多讲。但我想指出,很多时候你其实是在做某种多任务学习或迁移学习。
简单回顾一下定义:监督学习是给X预测Y;多模态监督学习是用X1和X2预测Y;多任务学习是用X同时做两个任务,如果任务间能共享信息,两个任务的表现都会提升。迁移学习是用X预测Y1(或X',即自监督预训练),然后迁移到新任务Y2,目标是这样迁移比直接从X训练到Y2要好。跨模态学习则是其延伸:你可能把一种模态(比如语言)上训练的能力,迁移到X2上(比如代码或基因组序列,它们接近语言,但又不完全是语言)。还有很多方法是让模型预测X'而不是标签Y,这通常叫自监督预训练,然后迁移到X到Y的任务。
这些我在第二周讲不同数据收集方式和训练范式时已经提过,大多数人也应该接触过多任务或迁移学习的概念。今天第一部分,我想讲的是多任务与迁移学习的“加强版”。
现在有一种新的方法范式,它们跨许多不同的模态进行多任务和迁移学习。从我们早期的一些工作来看,如果你审视今天的多模态数据集,比如理解人类行为的数据,你会有语言、语音、手势,以及一些标注。在多媒体数据上,模态之间只有部分重叠,比如图像和文本,虽然这里的图文可能并非人正在说的内容。到了机器人领域,你会接触到传感器数据,其中一部分与医疗数据重合,比如ICU里的传感器信息。所以,新一代的方法不再局限于在一个领域内或一组模态内进行多任务和迁移学习,而是跨完全不同的输入模态和输出领域来做这件事。这有一些参考资料,包括我们的论文HighT,还有一篇叫Gato的通才智能体,在多媒体、机器人学和多种强化学习任务上都做到了这一点。
有人问到迁移学习中Y1的准确率问题,以及它与Y2准确率的关系。通常,Y1上准确率越高,迁移效果越好。这就是为什么在计算机视觉研究中,ImageNet预训练模型的图像分类准确率越高,它迁移到医疗图像等其他任务的表现也越好。现在大语言模型也是同理:人们用困惑度或MMLU等多任务语言理解基准来衡量预训练质量,通常这些指标越好的模型,迁移到其他任务也越好。当然也有例外,有时模型对某个路径过拟合了,Y1做得越好,迁移能力反而下降,这也是可能存在的。
总之,如今的方法已能跨完全不同的模态和任务进行多任务迁移学习。这非常有用,因为当你面对医疗任务或设计任务时,即使在该领域内你也拿不到那么多数据,就必须利用其他有更多数据的领域。因此,现在越来越常见的做法是,把所有表面上很不一样的输入数据都序列化:语言是词序列,语音是按采样频率排列的序列,图像是像素序列,传感器数据是时间步序列。一旦序列化之后,Transformer就成了学习模态内一阶关系和交互的非常可靠的方法。单模态Transformer越来越通用,多模态Transformer学习模态间的成对交互也变得越来越通用。这些模型的好处一是可以大规模多任务训练——一个模型在不同数据子集上为不同预测任务训练;二是展现出迁移现象——比如用三个任务三组模态训练,再迁移到第四个医疗任务上。你会看到,预训练用的源任务越多,性能就持续提升。
当然,这些模型也做了一些可能在不同场景下被违反的关键假设。一个关键假设是万物皆可标准化为输入序列,但有些数据更适合看作序列,有些则不然。另一个假设是仅靠一个独热嵌入来识别模态,这可能无法捕捉到很多模态特异的细粒度信息。还有一个假设是使用一个共享的多模态模型处理一切。现在当然有改进工作,比如你们阅读材料中的混合专家模型,或在不同地方用不同专家做融合,但仍然在多个专家间保持一定的信息共享。
有人问到医疗任务的细节和迁移时的数值,也问到了在同时拥有文本、视频和音频三种数据时,为什么有时只用文本来连接视频和音频。原因可能是,当你不同时拥有三者时,文本可以作为中间桥梁来定义两个数据集的共同支撑。因为文本可能与图像和音频都更相似一些,用文本来对齐是合理的。
还有人问到,当目标模态只有结构化数据时,其他模态的信息如何迁移。确实,很多视频和音频数据本质上也可以看作是时间序列,这就构成了迁移的基础。我们能做到的,就是训练一个Transformer编码器来处理所有模态,唯一的区别就是一个独热标识符,告诉模型数据来自哪个模态。然后通过任务特定的头部来微调,希望主干学到通用特征,头部学到任务特定特征。当然,做到这种领域特定的高效学习,确实存在挑战。
我们得继续了。我在2023年做过一个综述,整理了当时所有进行模态和任务间迁移的模型。有些模型如Perceiver,架构通用但不同模态用不同参数;有些尝试标准化图像、视觉和音频;还有些尝试语言和视觉、视觉和音频之间的相互迁移。这就是当时多模态多任务与迁移学习的版图。
第二部分,我们来看“协同学习”。在协同学习中,你有一个真正关心的模态A,训练时引入一个额外模态B作为辅助,目的是学习一个更丰富的表示来增强A的信息。核心在于,B只在训练时作为辅助信息出现,测试时只有A那条分支是激活的,它只用A来预测标签。这与只用A进行监督学习是公平对比的。
协同学习有三种方式,各有利弊,有时有效有时无效。第一种是通过融合。训练时,你把A和B一起学习一个融合表示;测试时,把B的输入用零或平均值替代,仅用A来预测。基线是只用A的单模态监督学习。因为测试时两者都用A,所以是公平对比。我们的一些工作表明,用语言作为A、非语言信息(面部和声音表情)作为B,协同学习比直接只用语言监督学习效果更好。
2014年一篇用深度玻尔兹曼机进行多模态学习的经典论文也证明了这一点:用图像和文本训练联合多模态模型,测试时去掉文本让模型推断,结果优于只用图像的模型。2011年的另一篇经典工作用音频和视频训练共享表示,测试时只用视频,在麦格克效应任务上(根据音频和口型视频识别音素)表现也很有竞争力。
第二种方式是通过对齐。同样是训练时引入B,但不是融合成一个表示,而是学习一个对齐的表示空间,A和B独立但通过相似度函数对齐。2013年的经典论文就展示了这种早期CLIP模式:用低分辨率图像和词袋向量学习对齐空间,测试时新图像来了,即使训练时没见过这个类别,也能通过找到最近邻的词嵌入来实现零样本预测。现在的CLIP等模型就是这种方式的规模化。训练时用图像和文本做对齐,下游推理时只用单一模态,效果却好于直接在目标模态上做监督学习。
还有更酷的机器人例子:用视觉和触觉做对齐预训练,然后迁移到只用视觉的任务上。训练时成对的视觉-触觉数据学习对齐表示,判断输入是否来自同一演示;学到的良好表示可以迁移到纯视觉任务。
第三种方式是通过翻译。这次额外模态B不在输入端,而在输出端。训练时,你让模型基于A去预测B,将预测B作为一个辅助任务。你希望这个预测B的过程能促使模型学到更好的、依然带有多模态特征的表示,测试时则只使用A来预测最终标签。
我们的情感识别工作就用了这个思路:用语言A去预测对应的视觉表情B(重建说话者可能的表情),学到的中间表示依然含有多模态信息,能更好地预测情感。测试时,模型只接收语言,不再预测视觉。进一步,还可以加入循环一致性:从语言预测视觉,再从预测的视觉重建回语言,这样来回翻译能学得更好。多个论文也论证了协同学习对组合性任务有帮助:比如在非常细粒度的视觉推理任务中,用图像去预测富含组合结构描述的辅助任务,即使测试时丢弃这个辅助任务,视觉推理表现也会提升。
还有一个我喜欢的工作,在掩码语言建模之外引入掩码视觉标记分类:在编码文本时,同时预测对应的视觉标记(如“听”“说”的抽象视觉表示)。这很自然,很多人认为这正是人类学习的方式:听人说话时脑中会想象画面,看到画面时脑中会想象声音。证据表明,训练时加入这个辅助任务,测试时只输入文本,也能超越纯语言建模。
最后一个例子是密集监督与稀疏监督。用夜间呼吸数据预测帕金森病,10小时数据只有一个0/1标签,监督信号极稀疏。于是引入同时采集的10小时脑电数据作为预测目标,这个辅助任务提供了极其密集的监督信号。实验表明,预测脑电信号越准,学到的表示对帕金森早期预测也越好。
有人问这背后是否有理论保证。理论上,这取决于你做的假设。直觉是,做这种翻译时,你本质上是在学两个模态的共有信息(韦恩图中的交集)。如果帕金森的指标恰好就在这个交集里,你就成功了;反之则可能不成功。融合和对齐其实也是同样的道理,都在引入更多目标去捕捉模态的共有信息,所以都假设任务标签就在那个共有区域里。至于为什么选脑电而不是其他信号,恐怕没有一定之规,多是直觉和反复试错的结果。
但协同学习并非总有效。有工作显示,一些非常早期的语言-视觉联合预训练模型(如VideoBERT、VisualBERT),虽然在视觉语言任务上表现好,对部分纯NLP任务却有负面作用。比如在语义角色标注等任务上,加入视觉或视频预测后,性能可能从90%跌到76%,甚至从76%跌到65%,骤降10个点。即使是一些看似需要视觉的常识问答任务(比如“如何去除家具上的光泽?”),联合训练带来的提升也很小,有时甚至有较大下降。协同学习有其局限。
第三部分,模型归纳。这是迁移和多任务学习的延伸,但主要针对只能黑盒API访问模型的情况,因为你不需要修改模型内部。
我们先从单模态的“自训练”说起,再推广到双模态的“协同训练”。自训练在如今非常常用。它的直觉是:你有少量有标签数据和大量无标签数据。你会先用有标签数据训练一个分类器,然后用这个分类器对无标签数据打伪标签,通常从置信度最高的样本开始。打完一批伪标签后,把它加入有标签数据集,重新训练分类器,然后重复这个过程,直到所有数据都被标注。测试时就用最终分类器。这里的置信度通常用softmax分布的不确定性来衡量——如果输出概率分布很集中就置信度高,很平均就置信度低。从决策边界的角度看,分类器先学会边界,然后挑选离边界远的点打标签,加入训练后重新调整决策边界,使原本不确定的点变正确。
协同训练是1998年提出但至今仍广泛使用的方法,是自训练向双视图的推广。你拥有两个模态的数据,配对且有部分标签。关键假设是两个模态间存在冗余,即共有信息对任务至关重要,不能有太多独特或协同信息。
算法很简单:你在有标签数据上分别基于X1和X2各训练一个分类器F1和F2。然后,F1在自己模态的无标签数据中挑出置信度最高的样本并打上标签,这个标签同时也赋给对应的X2样本,F2就用这些新标记的数据来训练。反过来,F2也做同样的事,挑出置信度最高的样本,标签赋给对应的X1,F1再据此训练。如此反复,直到所有数据都被标注。数据必须配对,因为一个模态的伪标签要传递给另一个模态的对应样本。测试时可以用任一分类器或集成投票。
协同训练在视频活动识别中效果很好,比如用RGB帧和光流两个视图互补。在语言模型中也很流行:用GPT-3和BERT作为两个视图,互相打标签训练;现在更进一步,多个LLM API之间辩论、交换信息或互相标注数据,本质上都是协同训练思想的延伸。
总结一下,跨模态学习是在模态间传递信息,通常从高资源、多数据的模态传向你真正关心但低资源、少数据的任务。我们讲了三种范式:迁移和多任务学习,协同学习(训练时用额外数据作辅助输入或输出),以及模型归纳(保持黑盒访问)。它们都或明或暗地假设模态间存在冗余——融合、对齐、翻译等方法都在利用共有信息。如果是更多独特或协同信息的情况,目前还没看到很好的方法。
至此,我们已覆盖了AI基础,完成了多模态连接的介绍、对齐、交互与融合,以及今天的跨模态学习。下周春假无课,回来后讨论大模型、现代生成式AI、推理、交互式智能体等等。再次提醒:推进中期项目,报告和展示春假后那周截止;阅读作业明天截止,周四讨论。谢谢大家。
热门跟贴