在人工智能领域,多模态学习正成为研究的热点。最近,微软亚洲研究院的研究人员提出了一种名为Visual ChatGPT的创新框架,它巧妙地将ChatGPT的强大意图理解和对话管理能力与各种多模态视觉基础模型(VFMs)相结合,从而实现了多任务的统一处理。初看之下,这似乎只是一个工程整合的项目,但深入研究后,你会发现其背后蕴含着深刻的洞察和强大的技术实力。
一直以来,多模态学习面临着一个核心挑战:如何有效地整合来自不同模态的信息,并使其在各种任务中发挥作用。传统的做法往往是针对特定任务设计特定的模型,这种方法虽然在特定场景下表现良好,但缺乏通用性和可扩展性。而Visual ChatGPT的出现,为解决这一问题提供了一个全新的思路。
该框架的核心思想是将复杂的多模态任务分解为一系列子任务,并利用ChatGPT作为“大脑”来 orchestrate 这些子任务的执行。具体来说,ChatGPT负责理解用户的意图,并根据意图选择合适的VFMs来处理视觉信息,生成中间结果。这些中间结果又会被反馈给ChatGPT,用于指导下一步的行动,直到最终完成任务。
这种方法的巧妙之处在于,它将多模态学习问题转化为一个对话管理问题。通过将各种视觉任务表示为对话中的不同状态,ChatGPT可以像一个熟练的对话者一样,引导整个过程朝着正确的方向前进。这种基于对话的交互方式,不仅使得任务的执行更加灵活和可控,而且也使得模型的学习更加高效和稳定。
在多模态训练中,一个常见的难题是如何平衡不同任务之间的学习。如果学习目标过于简单,模型可能会过度拟合单一模态的信息,而忽略跨模态之间的交互。反之,如果学习目标过于复杂,模型则可能难以收敛,无法有效地学习到有用的知识。为了解决这个问题,Visual ChatGPT采用了以下策略:
首先,它通过设计一套统一的思维框架,来保证任务的复杂性。这种框架不关注具体的任务细节,而是从更高的层面来定义任务,从而使得模型能够学习到更加通用的知识。其次,它通过设计解决问题的思维链,来保证任务在复杂的情况下仍然可以学习。这种思维链将复杂的任务分解为一系列简单的步骤,使得模型可以逐步地学习和掌握。最后,它利用ChatGPT作为思维链的中转管理,来保证各个环节之间的顺畅衔接。ChatGPT不仅负责理解用户的意图,还负责协调各个VFMs的工作,从而使得整个过程更加高效和稳定。
为了实现这一目标,Visual ChatGPT采用了以下几个关键的技术手段:
- 多模态特征抽取器:利用现有的基础多模态模型作为特征抽取器,将图像和文本信息转化为统一的向量表示。
- 多轮对话管理:将解决问题的思维链表示为多轮对话,ChatGPT负责管理对话的状态和流程。
- Prompt工程:将各种多模态信息(图像、文本、历史图像、时序信息、中间特征、对话状态)转化为统一的prompt格式,输入给ChatGPT。
通过这种方式,Visual ChatGPT成功地将各种信息、任务和处理流程统一起来,从而使得模型能够学习到更加强大的表征能力和知识。在下游任务中,只需要针对性地进行finetune、prompt或者instruct调教,就可以在少量数据下取得很好的表现。
**系统原则 P:**系统原则提供了 Visual ChatGPT 的基本规则,例如应对图像文件名敏感,并使用 VFMs 处理图像而不是根据聊天历史生成结果。
**视觉基础模型 F:**Visual ChatGPT 的核心之一是各种 VFMs 的组合:F = {f1,f2,...,fN},其中每个基础模型 fi 包含一个确定的函数,具有明确的输入和输出。
**对话历史 H:**我们将第 i 轮对话的对话历史定义为先前问题答案对的字符串连接,即 {(Q1,A1),(Q2,A2),...,(Qi-1,Ai-1)}。此外,我们根据最大长度阈值截断对话历史,以满足 ChatGPT 模型的输入长度。
**用户查询 Qi:**在视觉 ChatGPT 中,查询是一个通用术语,因为它既可以包含语言查询,也可以包含视觉查询。例如,图 1 显示了包含查询文本和相应图像的示例查询。
**推理历史 R(
**中间答案 A(j):**在处理复杂查询时,Visual ChatGPT 将逻辑地尝试通过调用不同的 VFMs 逐步获得最终答案,从而产生多个中间答案。
**提示管理器 M:**提示管理器旨在将所有视觉信号转换为语言,以便 ChatGPT 模型可以理解。在下面的子部分中,我们重点介绍 M 如何管理上述不同部分:P、F、Qi、F(A(j>)i)。
管理系统原则 M(P)
Visual ChatGPT 是一个系统,集成了不同的 VFMs 来理解视觉信息并生成相应的答案。为了实现这一点,需要定制一些系统原则,然后将它们转换为 ChatGPT 可以理解的提示语。这些提示语有几个目的,包括:
- Visual ChatGPT 的角色 Visual ChatGPT 的设计旨在帮助完成各种文本和视觉相关的任务,如视觉问答(VQA)、图像生成和编辑等。
- VFMs 的可访问性 Visual ChatGPT 可以访问一系列 VFMs,以解决各种 VL 任务。决定使用哪个基础模型完全由 ChatGPT 模型自己决定,因此易于支持新的 VFMs 和 VL 任务。
- 文件名的敏感性 Visual ChatGPT 根据文件名访问图像文件,因此使用精确的文件名非常重要,以避免歧义。因为一轮会话可能包含多个图像及其不同的更新版本,如果文件名被误用,将导致混淆哪个图像正在讨论。因此,Visual ChatGPT 的设计严格要求使用文件名,以确保它检索和操作正确的图像文件。
- Chain-of-Thought 如图 1 所示,为了应对一个看似简单的命令,可能需要多个 VFMs,例如,查询“在预测的深度条件下生成一朵红花,然后将其变成卡通样式”,需要深度估计、深度到图像和风格转换 VFMs。为了将更具挑战性的查询分解成子问题,Visual ChatGPT 引入了 CoT,帮助决定、利用和分派多个 VFMs。
- 推理格式的严格性 Visual ChatGPT 必须遵循严格的推理格式。因此,我们使用精细的正则表达式匹配算法解析中间推理结果,并构造 ChatGPT 模型的合理输入格式,帮助它确定下一步的执行,例如触发新的 VFM 或返回最终响应。
- 可靠性 作为一个语言模型,Visual ChatGPT 可能会编造虚假的图像文件名或事实,这可能会使系统不可靠。为了处理这些问题,我们设计提示语,要求 Visual ChatGPT 忠实于视觉基础模型的输出,不编造图像内容或文件名。此外,多个 VFMs 的协作可以增加系统的可靠性,因此我们构造的提示语将引导 ChatGPT 优先利用 VFMs,而不是基于对话历史记录生成结果。
管理基础模型M(F)
Visual ChatGPT配备了多个VFMs以处理不同的VL任务。由于这些不同的VFMs可能存在一些相似之处,例如,在图像中替换对象可以被视为生成新图像,而图像到文本(I2T)任务和图像问答(VQA)任务都可以理解为根据提供的图像给出响应,因此区分它们是至关重要的。如图3所示,Prompt Manager专门定义了以下方面,以帮助Visual ChatGPT准确理解和处理VL任务:
- 名称prompt提供每个VFM的整体功能摘要,例如回答关于图像的问题。它不仅帮助Visual ChatGPT以简洁的方式理解VFM的目的,而且作为进入VFM的入口。
- 使用prompt描述了VFM应该使用的特定场景。例如,Pix2Pix模型[35]适用于更改图像的风格。提供这些信息可以帮助Visual ChatGPT做出有根据的决策,选择适合特定任务的VFM。
- 输入/输出prompt概述了每个VFM所需的输入和输出格式,因为格式可能会有很大的差异,提供清晰的指导对于Visual ChatGPT正确执行VFMs至关重要。
- 示例(可选)prompt是可选的,但可以帮助Visual ChatGPT更好地理解如何在特定的输入模板下使用特定的VFM,并处理更复杂的查询。
用户查询的提示管理 M(Qi)
Visual ChatGPT支持各种类型的用户查询,包括语言或图像、简单或复杂的查询以及对多个图像的引用。提示管理器从以下两个方面处理用户查询:
生成唯一的文件名 Visual ChatGPT可以处理两种类型的图像相关查询:涉及新上传图像和引用现有图像的查询。对于新上传的图像,Visual ChatGPT生成一个带有通用唯一标识符(UUID)的唯一文件名,并添加一个表示相对目录的前缀字符串“image”,例如“image/{uuid}.png”。虽然新上传的图像不会被输入到ChatGPT中,但会生成一个虚假的对话历史记录,其中包含一个说明图像文件名的问题和一个表示已接收到图像的答案。这个虚假的对话历史记录有助于后续的对话。对于涉及引用现有图像的查询,Visual ChatGPT忽略文件名检查。这种方法已被证明是有益的,因为如果不会导致歧义,ChatGPT有能力理解用户查询的模糊匹配,例如UUID名称。
强制VFM思考 为确保成功触发Visual ChatGPT的VFM,我们在(Qi)后附加一个后缀提示:“由于Visual ChatGPT是一个文本语言模型,Visual ChatGPT必须使用工具观察图像,而不是想象。思考和观察只对Visual ChatGPT可见,Visual ChatGPT应该记得在最终响应中重复重要信息。思考:我需要使用工具吗?”这个提示有两个目的:
1)它提示Visual ChatGPT使用基础模型,而不是仅仅依靠想象;
2)它鼓励Visual ChatGPT提供由基础模型生成的具体输出,而不是通用的响应,如“这是你要的”。
管理基础模型输出 M(F(A(j)i))
对于来自不同视觉基础模型的中间输出 F(A(j)i),Visual ChatGPT会隐式地对它们进行总结并将它们传递给ChatGPT进行后续交互,即调用其他VFMs进行进一步操作,直到达到结束条件或向用户提供反馈。以下是内部步骤的概述:
- 生成链接文件名 由于Visual ChatGPT的中间输出将成为下一个隐式对话轮的输入,因此我们应该使这些输出更有逻辑性,以帮助LLMs更好地理解推理过程。具体来说,从视觉基础模型生成的图像保存在“image /”文件夹中,这暗示以下字符串表示图像名称。然后,将图像命名为“{Name} {Operation} {Prev Name} {Org Name}”,其中{Name}是上面提到的UUID名称,{Operation}是操作名称,{Prev Name}是输入图像的唯一标识符,{Org Name}是由用户上传或由VFMs生成的原始图像名称。例如,“image / ui3c edge-of o0ec nji9dcgf.png”是一个名为“ui3c”的Canny边缘图像,输入为“o0ec”,而这个图像的原始名称是“nji9dcgf”。通过这样的命名规则,它可以提示ChatGPT中间结果的属性,即图像,以及它是如何从一系列操作中生成的。
- 调用更多VFMs Visual ChatGPT的一个核心是它可以自动调用更多VFMs来完成用户的命令。更具体地说,我们使ChatGPT保持问自己是否需要VFMs来解决当前的问题,通过在每个生成的结尾添加一个后缀“Thought:”。
- 要求更多细节 当用户的命令不明确时,Visual ChatGPT应该向用户询问更多细节,以帮助更好地利用VFMs。这种设计是安全和关键的,因为LLMs不被允许在没有依据的情况下随意篡改或推测用户的意图,特别是当输入信息不足时。
限制
总的来说,Visual ChatGPT 是一个强大的多模态对话框架,但它仍然存在一些局限性。例如,该模型依赖于多个独立的组件和模块,而不是一个一体化的整体。这种设计可能会影响模型的效率和可扩展性。未来,我们需要构建更加集成化的模型,例如通过芯片将所有功能都集成在一起,从而实现更加通用的计算。
论文中也提到了Visual ChatGPT 的一些限制,包括:
- 依赖于 ChatGPT 和 VFMs 视觉 ChatGPT 在很大程度上依赖于 ChatGPT 分配任务和 VFMs 执行任务。因此,视觉 ChatGPT 的性能受到这些模型准确性和有效性的严重影响。
- 大量的提示工程视觉 ChatGPT 需要大量的提示工程,将 VFMs 转换为语言并使这些模型描述可区分。这个过程可能耗时,并需要在计算机视觉和自然语言处理方面的专业知识。
- 有限的实时能力视觉 ChatGPT 的设计是通用的。它尝试自动将复杂任务分解为多个子任务。因此,在处理特定任务时,视觉 ChatGPT 可能会调用多个 VFMs,导致与专门针对特定任务进行训练的专家模型相比,实时能力有限。
- 标记长度限制在 ChatGPT 中的最大标记长度可能限制可以使用的基础模型数量。如果有成千上万个基础模型,可能需要一个预过滤模块来限制馈入 ChatGPT 的 VFMs。
- 安全和隐私易于插拔基础模型的能力可能引发安全和隐私方面的担忧,特别是通过 API 访问远程模型。必须仔细考虑并进行自动检查,以确保敏感数据不会被暴露或泄露。