欢迎回来,各位。希望你们度过了愉快的一周。
今天的课程将介绍多模态人工智能。首先说一下项目的后勤工作。感谢大家提交开题报告,我很高兴能读到这些。我已经尽量对每份提案给出了反馈,也为你们的项目分配了一位主要助教,助教是David或Chanaka,我会在邮件中抄送他们。目标是让你们每周轮流与我和主要助教会面,平均下来每周都能有人来了解你们的进展。我们的目标是把这些项目真正转化为前沿的、高质量的研究成果。
接下来是阅读作业。第二次阅读作业明天(周三)截止,这是为本周四的阅读讨论做准备。同样有两篇论文,主要围绕现代人工智能架构这个主题。其中一篇是关于这些现代自回归模型的缩放定律。缩放定律本质上是指,当你投入更多数据、增加模型参数时,性能会如何变化。令人惊讶的是,这种缩放呈现出一条相当好的趋势线。所以你基本可以预测,随着模型规模的扩大,性能会达到什么水平。第二篇论文也有一个很有趣的洞见:也许你在做自回归预训练时,并不需要所有的数据单元,有些单元可能比其他更重要。这会对如何更高效地训练模型带来很多启发。
好了,项目方面,开始和我们开会,在项目上取得进展。有阅读作业明天要交,周四进行讨论。
目前为止,我们已经涵盖了人工智能的基础知识,包括人工智能和人工智能研究导论、不同形式的数据、其中的结构化信息、从数据中学习的方法,并且在高层次上,涵盖了一个统一的范式,涉及不同的模型架构,包括序列模型、卷积模型、空间模型,以及用于集合和图的模型。当然,现实世界中的很多问题都会涉及多种不同的数据源、多种不同的模态。这是一个活跃的研究领域。在接下来的三周,直到春假前,我们将广泛地概览多模态人工智能的不同范式。今天更多是介绍,以及如何对齐不同的模态。下次课会讲如何更好地利用不同模态间的信息。最后,在第七周,我们将探讨迁移这个概念。你可能关心的模态数据量不多,但可以用其他更常见的模态来补充信息。
好,这就是今天课程的概览:多模态人工智能导论,一些核心原则、挑战,以及深入探讨第一个挑战——对齐。开始之前,先讲一点关于多模态人工智能的行为学历史。和很多事物一样,人工智能其实起源于研究心理学和人类行为的人。在一位名叫大卫·麦克尼尔的心理学家进行这项研究之前,大多数人认为我们主要用语言交流,其他任何东西,比如手势和声音,都只是次要的,用处不大,并不能取代语言。大卫·麦克尼尔提出了一个实验,叫做“麦格克效应”,这个实验真正撼动了当时的一些主流思想。
谁能说说这两段视频有什么有趣的地方,异同点都可以?视觉信息很相似,但声音方面,第一段是“bar”,第二段是“far”,尽管掩蔽得很好。视觉信息相似,但声音不同。有人要补充吗?是的,我确信是不同的。也许只是因为它不同,因为嘴唇看起来不同,所以感觉不同,你也听到了一些变化。如果我没有视觉信息的话……
我以为你举手了,所以点了你。不过没关系,我想大多数人都抓住了关键点。当我给很多人展示这个时,有一半的人在看笔记本电脑,他们会问:你播放第二段视频了吗?因为如果你只看笔记本电脑听声音,你会意识到两段音频完全一样。当你开始看人的嘴唇时,你会发现第一个人做“bar”的口型(B音),第二个人做“far”的口型(F音)。所以,我们对同一个音频的感知,会因为说话者的口型而变得非常不同。
这真正开启了20世纪80年代多模态研究的第一个时代,即行为学时代。人们意识到,当我们识别他人的言语并与之互动时,实际上是在综合运用多种不同的交流模态。那是更偏向行为学的时代。之后,人们有了构建人工智能工具、计算工具的雄心,来在计算机中复制这种人类对不同模态的行为学感知。在计算时代之后,多模态人机交互和界面变得非常流行。所以,你看到人工智能和人类用不同模态进行交互。最后,到了现在,我们有了深度学习时代。自2010年代以来,我们目睹了海量的GPU、海量的数据、海量的大型模型,它们真正革新了多模态人工智能。当然,这其中还有一个子时代,即基础模型时代,真正开始于2020年代,我们看到了将这些大型Transformer模型扩展到单模态和多模态任务的巨大潜力。
从历史上看,人们关注哪些任务呢?我举了视听语音识别的例子,目标是从音频和视觉两方面来识别说话者所说的内容。这始于行为学时代,实际上是人们应用计算方法去解决的第一个任务。紧接着出现了早期互联网数据驱动的热潮。当时人们对于构建数字化互联网多媒体数据系统很感兴趣。比如,给定内容,你能检索到视频吗?之后不久,人们也开始关注从多模态行为中识别人的情感和情绪。进入交互时代后,出现了基于视频事件识别的系统,还有识别多人互动时的情绪和情感的工作。而真正开启现代多模态深度学习工作的,是图像描述任务。如果给你一张图像,你能为它生成正确的描述文字吗?这基本上开创了现代语言与视觉研究的先河。当然,在过去几年里,我们看到多模态人工智能的应用大量涌现。
在多模态深度学习中,从图像描述到视频描述,再到撰写视频的文字说明。后来人们发现描述虽然很酷,但很难评估一段描述是否正确,因为太主观了。于是人们将描述任务转化为问答任务。如果我问你关于某个视频的问题,或者如何训练一个AI系统给出正确答案,这就是视觉问答。同理,人们又将其扩展到基于视频的问答。接着,它又从静态系统——只写一段描述、回答一个问题——发展到能够进行多模态对话的AI系统。比如,针对某张特定图像,与人类就这些模态进行引用和对话。更大规模的YouTube数据成为了重要的数据来源。人们预训练了各种视频模型,能够识别、描述和检索不同类型的视频。
之后不久,我们看到了大量关于自主智能体的工作。这类智能体能够利用视觉和语言进行导航。比如,你可以给它指令,像“去那里,然后在最近的加油站左转”。这些智能体能够基于视觉和语言进行导航。当然,自动驾驶汽车也做了大量的多模态融合,融合不同的视觉、语言和传感器信息。如今,在生成式人工智能中,我们看到了很多将文本转化为图像和视频的应用,这些生成式模型能把文字转化为图像和视频。最后,可能也是目前最大的应用领域,是交互式智能体。这些运行在你电脑里、机器人里的智能体,能接收大量数据,并以数字或物理世界为基础,完成复杂的任务,诸如此类,还有很多。
这只是对多模态人工智能各个领域及其影响的一个简要历史回顾。
在今天课程的第一部分,我们将对多模态人工智能进行导论性介绍。然后在下半部分,我们将深入探讨一些核心方法。这里的很多内容都基于我们一篇关于多模态人工智能基础与趋势的综述论文。如果你有兴趣,可以在国际会议上找到更详细的版本。
首先,什么是模态?模态是某种数据源,代表了信息在世界中被表达或感知的一种方式。就像我们在人工智能中看到的所有数据形式一样,你可以想象一个传感器在采集数据,比如相机或麦克风。你可以把模态看作一个频谱,从更接近传感器的原始模态,到经过更多处理、离传感器更远的抽象模态。你可以把麦克风的原始语音信号、相机拍摄的原始图像看作是原始模态。你可以从语音信号中提取语言,从图像中检测物体,从语言中提取情感,并对物体进行分类。所以,显然你获得了更抽象的信息,甚至可以用文字来表达,比如“正面情感”、“这是桌子”、“这是椅子”。如我们所见,原始数据可能差异巨大,所有数据都有不同的结构类型和维度。
但当你使用我们学过的那些模型架构来处理这些不同模态的数据时,本质上就是在学习抽象。你在从不同形式的数据中学习抽象和语义信息。因此,就有机会把它们拉得更近。所以,多模态问题就是那些涉及不同模态的问题。
当不同模态出现时,往往会面临几个挑战。这些挑战首先是异质性,即模态本身差异很大,将它们一同处理会很困难。其次,是模态之间存在着某些相互关联。我们将这些相互关联分解为:首先是连接,即两个模态本身存在一些相互重叠的信息。然后是交互,当你把它们融合在一起完成某项任务时,会产生一些新信息。
更详细地说,异质性也应该被视为一个频谱,一端是更同质、具有更相似特质和表征的模态,另一端是更异质、具有更多样特质和表征的模态。你可以把来自两个摄像头的图像看作是更同质的。它们都是视觉模态,都有空间结构,都对相机模糊这类噪声敏感,所以它们更同质。但同样,它们提供的信息也不同,比如同一物体的不同角度、不同视角。
然后你可以想想那些差异更大的。例如,两种不同语言的文本:英语和法语,英语和中文。不同的语系有不同的结构、语法和词汇。但你知道,它们仍然有相似之处,因为你可以训练一个模型在两种语言间翻译,有时信息能完美转换,有时会丢失一点。再想想语言和视觉,图像和文本,差异就更大了。你开始看到更显著的差异。你甚至可以比较语言和传感器数据,那差异就更大的。因为至少在视觉和语言中,你可以用语言来描述图像。但有没有一种语言能成功地描述传感器数据呢?这些都是差异更大的模态。
有人问含义和安全性是什么意思?指的是我们讲过的模态特征中的所有维度。包括基本元素本身,元素的分布,数据是连续的还是离散的,它们包含哪种信息。我要特别强调结构和表征,因为它们是可能稍微更重要的特性。不是指图像或语言的质量,而仅仅是关于模态本身的特性、信息、属性。
抽象模态更容易被边缘化。你已经看到原始模态是更接近传感器采集的,比如原始图像和原始传感器数据。而抽象模态则是那些经过更多处理的。比如,从我的语音信号中提取我是开心还是难过,或者从我的生理传感器中判断我是开心还是难过。所以,抽象本质上能让异质的模态变得更接近。这是第一个原则:模态是异质的,因而不同。
多模态学习的第二个关键原则是,我们观察这些模态时,总会发现它们之间存在某种共享信息,将它们连接起来。同样,你可以把它想象成一个频谱,一端是共享信息,另一端是独特信息。情况可能是重叠多、重叠少,甚至在有些设置下,模态之间可能完全独立,没有重叠。以成对出现的图像和文本为例,你可以看到它们之间存在一些联系,都在描述T恤的颜色和沙发。但例如,图像中有很多信息是描述文字没有捕捉到的,比如沙发的颜色、桌子的大小,甚至桌子的存在,这些都没有在语言中体现出来。所以,一般来说,模态之间有一些连接,但信息并不完全重叠。
最后是交互。交互描述了我们将模态汇集并组合时发生的现象。针对你的任务,通常会有新的信息涌现。对于这些特性和任务,人们关心的一种常见交互类型是冗余:两个模态都给你一些共有的信息,你的目标是真正利用好这些共有信息。比如,如果我说着“这部电影很棒”这种积极的话,同时又在微笑,这种冗余性就在强化“这个人真的很喜欢这部电影”这个信息。与之相对的是唯一性,即信息只存在于一个模态中,另一个没有。例如,你用一种中性的面部表情,说着稍微积极的话,比如“这部电影在塑造角色方面做得不错”,这里某一个模态就包含了独特的信息。所以,挑战在于识别出哪个模态包含了正确的信息,以及哪些是应该抛弃的。
最后,是协同。这意味着信息只有在你同时使用多个模态时才会出现。有人嘴上说“哇,看起来不错”,这似乎很正面,但脸上却带着愤怒或沮丧的表情。这时你就能推断出,这个人可能是在说反话。所以你必须同时看两个模态。是的,我们计算得出模态之间存在差异,这暗示了讽刺。这就是交互的核心理念。
所以,从高层次来看,多模态问题就是那些涉及异质、相互关联且交互的数据的问题。异质是因为数据源各不相同,处理不同来源的数据存在困难;连接是因为这些模态之间存在信息重叠;交互是因为当你试图将它们融合在一起完成任务时,信息的不同部分会结合起来。这就是对多模态问题的简要解释。
我们将探讨为什么这很难,多模态人工智能中有哪些独有的、在计算机视觉和自然语言处理等单模态问题中通常见不到的挑战,以及应对这些挑战的前沿方法。
所有这些多模态模型看起来都像是这样:用不同的颜色和形状来表示多个模态。我也不会将这些数据分解到元素层面,比如你说的句子中的单词,某张给定图像中的图像区域,或者你正在处理的远程传感器数据中的时间步。就像我们在所有机器学习讨论中那样,把所有事物分解成独立的部分,学习表示,再聚合信息。这里我们也将使用类似的图式。通常,你是在设计一个人工智能系统,它接收多个这样的模态作为输入,然后输出一个表示或预测一个标签。那么,这个模块里究竟有什么,设计其中的组件又会遇到哪些挑战?从高层次上讲,有六个挑战让多模态人工智能变得困难且独特。
第一个挑战是表示。你拥有数据,有不同的模态,它们之间存在异质性,你如何学习到能够将它们有效整合并结合的表示?在几乎所有问题中,表示往往是核心构建模块。当你从原始数据开始时,首先要思考的永远是如何表示你的模态。为简单起见,我们来看一个图示。你可能会有包含不同元素的数据输入,比如你说的多个词,传感器数据中的多个时间步。我们现在只看最简单的,假设每个模态只有一个元素,只讨论表示这一个元素,而忽略其他的。我们将在后续的挑战中再看其他的。
有三种关键的表示方式,每种都有不同的目的。第一种叫融合。你接收两个元素,可能已经有了一些独立的表示,但你如何将它们融合成一个通用的表示,以最佳方式利用信息?这种融合可能利用的是重叠的信息,也可能是根据不同信息选择正确的模态,或者可能以更复杂的方式组合它们以捕捉某种协同效应。所以,有一类方法就叫融合。
第二类方法叫协调。这些方法接收你的两个元素,分别学习它们的表示,一个给第一个,一个给第二个。但这并非独立,因为它们会用一些相似度函数来对齐这两个表示。这就强制了你学到的两个表示之间存在某种结构,而所有研究都集中在如何定义这种对齐上。当你需要做检索时,这更有用。例如,你把这个函数定义为余弦相似度或点积相似度。然后,你可以拿一个学到的表示,在另一个模态中找到最接近的,从而检索到最匹配的。所以,从图像检索最匹配的描述文字,或反之亦然。这就是协调方法。
最后一种方式是,你可能从两个元素开始,现在试图学习一个划分空间,其表示数量比开始的模态数量更多。这在你想要学习更多解耦且可解释的特征时会很有用,其中一些特征捕捉两个模态间的重叠信息,一个捕捉第一个模态独有的信息,另一个捕捉第二个模态独有的信息。现在,你为两个模态有了三个表示,甚至可以有更多。所以,三种通用的表示学习方式,区别在于你是减少、组合表示,还是保持它们独立,抑或是学习更多表示来捕捉不同信息。
第二个挑战是对齐。在表示学习中,我们只关注一个元素,一个和另一个模态中的一个元素。当然,在大多数问题中,你会有序列或结构中的元素。你说的话中有随时间排列的词语。空间图像中有图像区域。传感器数据也是跨时间的。所以,对齐主要研究如何将你的数据在元素级别和全局级别上对齐。举个例子,如果我在描述一张图像时,我所说的“人”这个词,应该匹配图像中显示人的那个区域。我说的“球杆”这个词,应该与图像中“曲棍球杆”的区域有关。所以,学习这种模态间的映射,就是要捕捉那些具有相似语义信息的部分。
这里有几个子挑战。第一个子挑战是处理数据被细分为离散元素的情况。例如,单词是离散的,图像边界框是离散的。目标是学习或设计哪个词对应图像中的哪个区域,哪个其他词又代表图像中的其他区域。解决这个匹配问题,就是学习离散连接。
第二个子挑战是更困难的情况:你不能再将数据清晰地切分为离散边界,你的数据是更连续的。比如,你有高频传感器数据、医疗数据等。在这类连续传感器数据的同时,我想把它与医生正在写的记录对齐。这部分表示心跳在加速,这部分表示病人摔倒了。所以,你需要在做匹配和对齐的同时,进行分割。因此,你增加了这一步,对连续数据进行分割和离散化。前两个子挑战的目标仅仅是实现对齐,找到模态间的匹配。
第三个子挑战是利用对齐来学习更好的表示。我们称之为上下文化表示,通过将元素与其他部分的匹配关系进行上下文化,来完成更好的表示学习。现在很多关于多模态Transformer的工作都属于这一类。因为我试图通过学习上下文中的其他词,或许还通过图像中作为上下文给出的部分,来学习某种语言的更好表示。所有这些都是为了通过考虑词语如何与其他词以及可能的其他图像、视频对齐,来学习更好的词语表示。所以,有时我们也称前两个为显式对齐,因为对齐是明确的目标。我们有时称这个为隐式对齐,因为对齐只是学习更好表示的中间步骤。
第三个挑战是推理。我们已经在表示中看到,如何表示一个模态中的一个元素和另一模态中的一个元素。在对齐中,我们研究了如何学习多个元素间的连接。推理的目标是,获取所有这些信息,并通过多个推理步骤将其组合起来,做出一些预测。当你思考通过多步组合信息时,曾经人们通过多层神经网络,每一层学习越来越接近预测目标的更抽象信息。但如今,正如大家在社交媒体上看到的,人们对更显式地进行推理产生了浓厚兴趣。
我是以树状结构还是图结构来组合信息?我是否使用注意力图来说明,我先看图像的这部分,看到人藏在另一个人后面,然后再看图像的这部分,看到人摔倒了,等等。或者现在,甚至用文字作为推理的中间媒介。你使用大语言模型,它不仅能做预测,还能一步步地解释:先做这个,再做那个,看图像,与这个结合,因此,这就是病人可能患的疾病。文字也能被用作推理的中间步骤。所以,很多推理工作是关于首先定义结构是什么:顺序的(一步接一步),还是某种树或图?需要多少步?如何参数化中间步骤?是通过更视觉化的注意力图,还是更语言化的文字?当然,没有外部知识,你也无法进行推理。你需要了解问题,知道什么是好的推理序列,然后才能让AI系统执行。
有人问,推理真的能改善多模态输入吗?链式思维通常只用在纯语言领域,但我看到很多例子表明,如果在包含图像时使用链式思维推理,效果反而更差。我们将有一整节课专门讲推理,以及推理的现状。这涉及过去一年内发生的事情,我的学生正在帮我准备那节课并协助讲授。答案是,语言推理更容易,图像推理可能更难。例如,数字化思维链更难,但如果做得对,潜力很大。我们有项研究,假设你要解一道几何题,给你一个起始图形和一些问题。如果一个系统能一步步做数学证明,同时一步步画图、标注,看这个角度、画这条垂线,从而构成一个直角三角形,这会非常直观。这些都是视觉化的步骤。如果做得好,不仅能提高性能,更重要的是,当我把它作为辅导系统给一个学生时,能让过程更易理解。我们阅读这些中间的语言和视觉,可能还有更多形式的推理媒介。我们会关注所有这些。明确一下,这是概览。在后续课程中,我们会针对每个挑战看具体的模型。
第四个挑战是生成。我们已经看了很多对齐、融合并做出预测的系统。当然,人们对构建能在不同模态间运行的生成模型有浓厚兴趣。有摘要,你获取更多数据,总结出最重要的特征。有翻译,你把一种模态作为输入,精确地映射到另一种模态,例如文本生成图像、文本生成视频。还有创作,这虽非终极目标,但还没人能真正成功做到:从更少的数据开始,比如一帧画面,试图生成多帧,将图像变成视频;或者为视频生成同步的音乐和音频。这些都是生成领域现在在多模态生成模型方面的工作。
第五个挑战是迁移。你可能试图在你关心的模态上做出预测,比如医学图像,但你没有那么多数据。在医学领域,你没有那么多数据,没有那么多标签。即使有,也可能充满噪声。有诸多原因导致仅在你关心的单一模态上做预测可能不成功。目标是利用一些额外的模态来辅助你的学习,为你真正关心的主要模态学习更好的表示。例如,现在你可以用语言来辅助图像分类模型。以前,你可以用ImageNet预训练来支持医学图像分类。有很多例子是利用某种模态作为额外信息,来帮助你所关心的主要模态。
有几种方法可以做到这一点。一种可能是重新构建然后初始化,有很多这样的例子。有一类新方法叫协同学习,你在训练过程中引入一些额外信息,要么作为训练时的输入,要么作为训练时的预测目标。如果作为训练时的输入引入,在测试时你就把它设为零。测试时,你只有你关心的模态用于推理。如果你把它作为训练时的预测目标,测试时你就不需要它了。所以,在推理时,你只使用你关心的那一个模态。这是在训练期间通过更多数据输入或更多训练目标来补充,以帮你得到更好模型的方法。还有一类模型归纳方法,你保持分类器分离,但鼓励它们共享一些信息,这样好的、强的分类器就能帮助弱的分类器。
最后一个挑战是量化。挑战一到五更多是关于构建、设计新模型。挑战六则更多是关于更好地理解从数据到模型、训练目标再到评估的整个流程。现在有很多说法,但如何衡量不同模态的正式化程度仍然是一个挑战,理解它如何影响模型优化和训练也仍是开放问题。有很多启发式方法,但没有深刻的理解。我们有直觉,有些模态是冗余的,或提供独特信息,但这些都没有被正式化,无法通过实际估计来形式化,也不清楚如何影响学习过程。所以,量化包含了很多挑战,主要是在更好地理解这个主题下,理解它们何时有效、何时无效。
总结这六个挑战,表示和对齐可能是最重要的。在任何问题中,你都要将其分解为元素,把大数据分解为单个元素,你首先要决定如何表示你的数据。如果你的目标是组合,你就会关注融合。如果你在研究检索问题,我们可能倾向于保持独立并对齐它们。如果你在关注决策问题,对齐就是你要尝试将一方的不同部分与另一方模态的不同部分匹配起来的问题。通常你先做表示,然后必须考虑对齐。一旦完成了这些,如果还能进行推理,一步步分解你的问题,并用语言和视觉等媒介一步步解释正在发生的事情,那就更好了。你需要预测标签,但有时你不关心预测标签,你关心的是生成更多数据。还有些时候,你关心的是从一个模态向另一个模态迁移信息。当然,虽然一直做推理会很好,但有时人们会跳过推理步骤,很多模型在这里仍是黑箱。最后,量化是带着批判的眼光,重新审视之前的这些挑战,并试图以某种原则性的方式,真正理解事物何时有效,何时无效。
好,这是对多模态挑战的快速介绍。到目前为止,有什么问题吗?
很好。在最后大约十五分钟,我会尝试覆盖对齐的一部分内容。下周我们将涵盖所有关于融合的内容,但对齐相对短一些,所以我会在十五分钟内讲完。对齐挑战分为三个子挑战。核心是观察一个模态中的元素和另一个模态中的元素,试图找出连接和匹配在哪里。最简单的情况是数据能被分解成离散元素,比如词和边界框。更难的是数据是连续的。所以你必须解决这个问题:在进行对齐之前,先将连续数据分解成语义边界。稍后我们也会在课上讲到隐式对齐这个概念。
利用对齐来学习更好的表示,就像在那些大型Transformer模型中那样。再谈离散对齐。这里有一个例子,你可能会尝试将包含词和短语的语言,与更视觉化的非语言元素联系起来。比如,“女人在读报纸”,你可能只拥有整体层面的数据,整个句子和整张图像。你的目标可能不仅仅是全局地把整个句子和图像对齐,还要在更精细的层面,找到“女人”对应哪里,“报纸”对应哪里等等。一类常见的方法是使用对比学习。
在大多数这些设置中,你的监督信号来自于某种配对数据。比如,一张图像配一个对应的描述,另一张图像配另一个描述,第三张图像配第三个描述。你可以从Instagram、维基百科、Flickr获取这些。这些都是常见的包含图像和文本配对数据的数据集。当然,如果你想为某些应用做这件事,但并非图像和文本,你需要思考如何获得正确的数据。
通常,这些表示的学习方式是,将两个元素分别通过独立的编码器,每个得到某种表示,然后你试图在这两个表示之间施加某种相似度函数。这个相似度函数就捕捉了“这两个表示是对齐的”这一事实。这些表示不应该对齐,它们应该离得更远。所以通常这就是你能定义的一个相似度函数。
在对比学习中,你要做的是,对于这些正例对,即图像和它们真正的描述,让这个相似度函数的值非常高,或者让它们非常非常接近。而所有红色的部分,我们称为负例对。比如,一张图像和一个错误的描述,对于那张图像可能有很多个错误的描述。你要努力让这个相似度函数的值更小,也就是不那么相似。
你甚至可以证明,这类方法本质上可以学习到我们所说的共同信息。你将共同信息形式化,定义为这两个随机变量间共享的、区别于各自独有信息的部分。那么这类对比方法,本质上是保留中间的一切,丢弃那些在一方独有而另一方没有的信息。这就是人们在学习这些连接时的高层视角。
更正式一点说,这些编码器可以设计得非常专用。我们见过那种不同模型架构的路线图。对于空间数据,你可能使用非空间方法,比如CNN或视觉Transformer。如果你有传感器数据,你可能用其他的编码器。所以,编码器可以非常不同,它们能捕捉每个模态独有的信息。而这个对齐相似度函数本质上会捕捉连接关系,即哪些表示应该被连接起来,哪些不应该。这里有几种选择:编码器是什么,相似度函数G是什么。一旦你设计好了第一个模态的编码器F和第二个的FB,然后计算这两个表示之间的相似度函数G。你的损失函数本质上就是最大化这些表示的相似度,或者最小化它们之间的距离。你可以更新的参数包括编码器模型FA、FB中的任何参数,以及定义相似度函数的任何参数。
关于相似度函数有几种选择。余弦相似度很常见,你为第一个和第二个分别学习向量Z,余弦相似度本质上是看这两个向量在嵌入空间中是否指向同一个方向。计算非常简单,本质上就是归一化的点积。人们也设计过核相似度函数。你可以认为点积基本就是衡量这两个向量在原始空间中是否邻近,我们称之为线性空间。也有一些方法能将向量投影到其他更具表达力的空间,然后在这个更具表达力的空间中衡量这些嵌入的相似度,我们称之为核相似度函数。不必过于关注细节,只需理解:你可以在嵌入的原始空间中衡量相似度,也可以在一些更具表达力的变换后空间中衡量相似度。
还有一种相当流行的是基于相关性的方法。也许你不关心两个嵌入是否非常接近,而是给定一批嵌入,你希望它们彼此相关。比如32张图像和32个描述,你希望它们可能在某个轴上是相关的。室外的可能在这边,室内的可能在那边。所以这些是基于相关性的方法。
你也可以更进一步,不满足于一个元素匹配另一个,而是可以基于成对关系来定义相似度。例如,一对图像非常相似,我希望描述这对图像的对应描述也非常相似。所以这些是超越了在单个数据点上定义相似度,而去考察多个数据点之间关系的方法。
看起来像是这样:你可能在一侧有图像配对数据,另一侧有描述。你将那些真正相对应的定义为正例对,例如“蓝色的车”和“黄色的巴士”对应于彼此。负例对则是那些不正确的描述。你在训练这个函数,最大化正例对的相似度,最小化负例对的相似度。你的相似度函数可以是类似余弦相似度的东西。虽然这是个非常简单的想法,但它已经存在了很长时间,并能给出非常酷的结果。
当你学会了这种通用嵌入空间,它能把“蓝色的车”拉到相应的文本旁边,把“红色的车”拉到相应的文本旁边,你就可以进行一些新的操作了。你可以输入一张“蓝色的车”,把它嵌入到嵌入空间,减去“蓝色”这个词的嵌入,加上“红色”这个词的嵌入。这会得到另一个嵌入,然后你尝试检索最接近这个新嵌入的图像,你真的会得到红色的车!
你可以看一个很酷的例子。你把“碗里的猫”的嵌入,减去“碗”的嵌入,加上“盒子”的嵌入,用这些词嵌入得到一个新嵌入,然后找到最近的图像,你真的会看到“盒子里的猫”。这还只是2014年的工作!那时候图像分辨率可能更低,词语也只是看二元词法之类的。当然,现在人们真正把这些系统规模化了。你大概见过CLIP,它本质上就是这种基于对齐的方法规模化的一个例子。
你拥有数百万、数十亿张图像,以及数十亿描述这些图像的文本。你同样可以计算一个相似度矩阵,其对角线上的条目代表那些图像与其正确描述相对应的配对,这些相似度应该被最大化,把它们拉近。所有非对角线上的条目都代表图像与错误描述的配对,它们的相似度应该被最小化。这里所有计算都只是余弦相似度的点积,图像嵌入点乘文本嵌入。这基本上就是你常看到的那个对比损失函数:对你的数据点求和,取平均,取对数以使数值更稳定,本质上是最大化正例点的相似度,最小化负例点的相似度。有时人们也会在这里加上正例点,只是为了计算简便,但本质上起主导作用的是所有n-1个负例对。相似度函数就是余弦相似度。CLIP非常有用,因为现在你可以做一些像零样本分类这样的事情。
训练好之后,你给它一张新的图像,比如一个看起来像电视演播室的东西。以前,当人们想对图像中的内容进行分类时,必须训练专门的图像分类器,只能预测5类或10类。就像一个预训练的ImageNet模型,你有一个固定数量的类别。而CLIP最大的好处之一,就是你现在可以实现开放集分类。所以,任何你想要对图像进行分类的类别或描述,你都可以把它作为一个列表提供给模型。模型会做的是:将图像嵌入到特征空间中,将每一个潜在的类别或描述也嵌入到特征空间中,然后计算点积。可能某一个是相似度较高的点积,其他是较低的。它本质上会给你一个归一化的分数,让你能对任何你想要的类别进行分类,而不必是一个固定的、预定义的一千个ImageNet类别。你可以看到,它在这些零样本分类任务上表现得非常好。
正如我所提到的,你可以思考一下,使用对比学习的对齐方法与信息之间有什么关系。我们看到模态可以有关联信息和独特信息。你将关联信息定义为共享信息,并且可以证明对比学习本质上捕获了互信息。所以它学习这个,而把其他一切都扔掉。这是可以被证明的,这既是好事也是坏事。这意味着,如果你只关心共同信息,那么基于对齐的对比方法真的很棒,它能保留共同信息,抛弃其他一切,并且是一种非常可扩展的方法。但如果你关心的是独有信息,那你就有麻烦了。因为你做越多的对比学习和对齐,你的模型在保留独有信息方面就可能表现得越差,它会抛弃你可能关心的信息。
有几种方法可以解决这个问题。我们有一些工作,其他人也有一些工作,只需做非常简单的修改。你可以跨模态做对比学习,即用图像和描述做对比学习,这会保留中间的共同信息。如果你想保留图像独有的信息,你可以拿图像,在某种意义上,只做图像模态内部的对比学习。有方法能做到这一点:你对图像稍作修改,然后只在图像上做对比学习。直觉上,你也应该只对文本做基于对齐的对比学习。也就是拿描述,稍作修改,只在文本上做对比学习。这样,你就能同时学到数据中共享和独有的信息。
我快速过一下连续对齐。大部分是参考文献。连续对齐更难,因为你面对的是没有离散元素的连续信号。通常,这些方法的核心是恢复并尝试将你的连续数据分解成离散部分。我在这里提供一些参考文献,因为我知道有些人在研究传感器数据和视频。例如,有方法可以接收连续数据并学习其间的离散边界。我们在计算机视觉中研究时序视频数据。我团队里的一些人在研究变化点检测,这样就能自动将你的传感器数据切分成离散的边界。每个边界都应有语义意义,比如,这是人在睡觉的时候,这是醒来锻炼的时候,这是工作的时候。所以,有一些方法能自动将连续数据分解成语义上有意义的离散边界,这样你就能将其与文本对齐。
最后,还有一类常用于语音的方法:对于连续数据,找到一个固定的采样边界,得到一段连续数据,然后进行聚类。聚类是将连续的东西转化为离散嵌入的一种方式,比如只聚成三类,然后你就可以用你的自监督学习Transformer来预测这些离散的标记了。
好了,总结一下。我们介绍了多模态人工智能导论,讨论了几个关键挑战:数据是异质的,模态间存在关联共享信息,它们可能交互以融合信息并得到我们关心的标签。我们概览了几个挑战,并深入探讨了对齐。最后快速提醒一下,阅读作业明天截止,为周四的讨论做准备。请确保在项目上取得进展,这样你就可以每周与我和助教会面。谢谢大家。
热门跟贴