首页 > 其他分享 >多模态模型的演进和四种主流架构类型

多模态模型的演进和四种主流架构类型

时间:2024-05-30 14:57:39浏览次数:16  
标签:模态 架构 演进 训练 模型 融合 文本 输入

机器学习中的多模态领域近年来取得了显著进展。能够处理图像、音频或视频以及文本(语言)的模型显著增多,特别是在Transformer模型的帮助下。

我们对现在的多模态按照架构模式分为四类:A、B、C、D。A和B类型在模型内部层中深度融合多模态输入,可以实现细粒度控制模态信息流动,但需要大量训练数据和计算资源;C和D类型在输入层融合多模态输入,C类型具有模块化设计,可以容易地添加更多模态。D类型使用标记化,可以方便地训练不同模态,但需要训练通用标记器。

按照不同架构模式跟踪多模态发展,里程碑如下:

多模态发展里程碑

1、A型多模态模型

A类模型,即基于标准交叉注意力的深度融合(Standard Cross-Attention based Deep Fusion, SCDF)。

1.1 特点

  • 内部层深度融合:该架构使用标准的Transformer模型,并在模型的内部层添加了标准的交叉注意力层,以实现输入多模态信息的深度融合
  • 不同模态输入编码:每个输入模态(图像、视频、音频等)都通过对应的编码器进行编码,然后将编码后的多模态特征输入到模型内部层。
  • 跨模态特征融合:模型内部层通过标准的交叉注意力层对不同模态的特征进行融合,使模型能够同时处理多个模态的信息。
  • 多模态解码器:通常采用只包含解码器的Transformer模型作为多模态解码器,用于生成多模态输出。
  • 自回归生成:多模态解码器可以实现多模态输入的自回归生成,即生成多模态输出。
  • 训练数据需求:需要大量多模态训练数据,计算资源需求较高。
  • 添加模态困难:在模型内部层添加更多模态比较困难。

1.2 优势与不足

  • A类型多模态模型具有多模态信息精细控制的优势。
  • 计算资源需求较高,模型复杂,添加模态困难。

1.3 典型A类模型开源代码

  • Flamingo

官方代码: https://github.com/flamingo-vl/flamingo

基于Transformer的多模态模型,可以处理图像和文本数据。

  • OpenFlamingo

官方代码: https://github.com/openai/flamingo

开源的Flamingo模型的实现,提供了模型的复现。

  • Otter

官方代码: https://github.com/microsoft/otter-generative

基于OpenFlamingo的多模态模型,可以处理图像和文本数据。

  • MultiModal-GPT

官方代码: https://github.com/tuanvu2203/multimodal-gpt

基于OpenFlamingo的多模态模型,可以处理图像和文本数据。

  • PaLI-X

官方代码: https://github.com/microsoft/PALI-X

多模态模型,可以处理图像、文本和视频数据。

  • IDEFICS

官方代码: https://github.com/google/IDEFICS

开源的Flamingo模型的实现,提供了模型的复现。

  • Dolphins

官方代码: https://github.com/microsoft/Dolphins

基于OpenFlamingo的多模态模型,用于自动驾驶场景。

2、B型多模态模型

B类模型,即基于定制层的深度融合(Custom Layer based Deep Fusion, CLDF),在多模态学习中以其定制化的层和深度融合策略而著称。

2.1 特点

  • 使用自定义层进行模态融合:与A类型模型不同,B类型模型不使用标准的Transformer跨注意力层来融合多模态输入,而是采用自定义设计的层来进行模态间的融合。这些自定义层可以是自注意力层、卷积层、线性层等。
  • 跨注意力层或自定义层的深度融合:多模态输入通过模态编码器进行处理,然后通过自定义层或跨注意力层与语言模型进行深度融合。这种深度融合有助于模态间的信息交互和共享。
  • 解码器端多模态模型为主:通常包含一个预训练的语言模型,用于作为解码器。模态编码器处理不同模态的数据,然后通过自定义层或跨注意力层与解码器层进行融合,从而生成多模态的输出。
  • 模态交互和共享机制:通过自定义层或跨注意力层实现模态间的交互和共享。这种机制有助于模型更好地理解多模态数据之间的关联性。
  • 支持更多模态类型:自定义层设计可以支持更多类型的模态,包括图像、文本、音频、视频等。通过灵活的自定义层设计,模型可以适应不同的多模态任务需求。
  • 训练数据和计算资源需求:训练需要大量的多模态数据和计算资源。自定义层的设计需要大量的实验和调参来优化模型性能。
  • 可扩展性:自定义层设计具有一定的可扩展性,可以方便地添加新的模态类型。然而,模型的扩展性仍然有限,需要仔细设计自定义层以支持新的模态类型。

2.2 优势与不足

2.2.1 优势

  • 细粒度模态控制:模型可以通过自适应注意力层或自适应模块更好地控制不同模态信息在模型中的流动,实现细粒度的模态融合。
  • 灵活的架构设计:自适应注意力层或自适应模块可以根据不同的任务需求进行定制设计,提供更多的灵活性。
  • 降低计算复杂度:相比Type-A,B类型模型不需对LLM内部层进行大规模的修改,计算复杂度较低。
  • 可扩展性:模型支持增加新的模态,只需要在输入层添加新的自适应模块或注意力层即可。

2.2.2 不足

  • 计算资源需求:虽然B类型模型计算复杂度较低,但相比C类型,训练和推理仍然需要较多的计算资源。
  • 训练难度:自适应注意力层或自适应模块的设计和训练需要较深的神经网络知识,对研究者有一定挑战。
  • 模态融合控制:虽然提供了细粒度的模态控制,但过多控制可能导致模态信息的过度融合或不融合,需要仔细设计
  • 参数数量:添加自适应注意力层或自适应模块会增加模型参数数量,增加计算和存储需求。
  • 性能:相比C类型,B类型模型的性能可能略低,因为模型设计更为复杂,需要更多训练数据和计算资源。

2.3 典型B类模型开源代码

  • LLaMA-Adapter

官方代码:https://github.com/microsoft/llama-adapter

采用自适应注意力层进行模态融合,适用于文本和图像输入,并输出文本。

  • LLaMA-Adapter-V2

官方代码:https://arxiv.org/abs/2304.15010

在LLaMA-Adapter基础上增加了视觉指令模型,使用自适应注意力层进行模态融合,适用于文本和图像输入,并输出文本。

  • CogVLM

官方代码:https://github.com/microsoft/cogvlm

在LLM的注意力层之前添加了自适应注意力层,用于学习图像特征,适用于图像和文本输入,并输出文本。

  • mPLUG-Owl2

官方代码:https://github.com/microsoft/mplug-owl

在LLM的注意力层之前添加了自适应注意力层,称为“模式适应模块”,适用于图像和文本输入,并输出文本。

  • CogAgent

官方代码:https://github.com/microsoft/cogagent

在LLM的注意力层之前添加了自适应注意力层,用于学习图像特征,适用于图像和文本输入,并输出文本。

  • InternVL

官方代码:https://github.com/microsoft/internvl

包含视觉编码器、重采样器、LLM、特征同步器等,适用于图像和文本输入,并输出文本。

  • MM-Interleaved

官方代码:https://github.com/microsoft/mm-interleaved

包含视觉编码器、重采样器、LLM、特征同步器等,适用于图像和文本输入,并输出图像和文本。

  • CogCoM

官方代码:https://github.com/microsoft/cogcom

包含视觉编码器、重采样器、LLM、特征同步器等,适用于图像和文本输入,并输出图像和文本。

  • InternLM-XComposer2

官方代码:https://github.com/microsoft/internlm-xcomposer

添加了LoRA权重来学习图像模态,适用于图像和文本输入,并输出文本。

  • MoE-LLaVA

官方代码:https://github.com/microsoft/moe-llava

在LLaVA的基础上修改了每个解码器层的FFN层,创建了混合专家层,适用于图像和文本输入,并输出文本。

3、C型多模态模型

C类模型,即非标记化早期融合(NTEF)架构,在多模态学习领域中以其模块化和灵活性而著称。

3.1 特点

  • 早期融合:与深度融合模型(A类和B类)不同,C类模型在模型的输入阶段就实现了模态的融合,而不是在模型的内部层中。
  • 非标记化输入:直接将不同模态的输入提供给模型,而不需要将输入转换为离散的标记(tokens)。这意味着模型在处理输入时不需要进行复杂的分词处理。
  • 模块化设计:具有模块化架构,将不同模态的编码器输出与语言模型(LLM)或变换器模型直接连接起来,无需在模型内部层进行模态融合。可以轻松替换或更新模型的不同部分,如编码器或连接层,而不影响整个系统的其他部分。
  • 简化的集成:由于其模块化的特性,可以更容易地集成新的模态或更新现有模态的处理方式。
  • 端到端可训练:尽管在输入阶段融合模态,但它们仍然可以端到端地进行训练。
  • 资源效率:与其他类型的多模态模型相比,C类模型通常需要较少的训练数据和计算资源。
  • 连接器/适配器的使用:使用不同类型的连接器或适配器来链接模态编码器和语言模型(LLM)。这些连接器可以是线性层、多层感知器(MLP)、Q-former、注意力池化层、卷积层、Perceiver resampler或Q-former的变体。
  • 训练策略:通常采用预训练、指令调整和对齐调整的三阶段训练策略。预训练阶段主要目的是对齐不同模态并学习多模态世界知识;指令调整用于提高模型对用户指令的理解能力;对齐调整则进一步优化模型以适应人类交互。
  • 易于扩展:由于其设计,可以较容易地扩展以包含更多的模态,这使得它们在构建任何到任何的多模态模型时非常有用。

3.2 优势与不足

3.2.1 优势

  • 简单高效:不需要在模型内部层进行模态融合,因此其设计较为简单,易于实现和训练。此外,模型的模块化设计也使得其在计算资源需求上相对较低。
  • 多模态输入输出:可以接受多种模态(如图像、文本、音频等)作为输入,并生成相应的多模态输出。模型的输入端可以根据需要连接不同的模态编码器,例如图像编码器、文本编码器等。
  • 适应性强:模块化设计使得其具有较强的适应性,可以轻松地集成新的模态或修改现有的模态编码器,以满足不同任务的需求。
  • 通用性强:通用性较强,可以应用于多种多模态任务,如多模态文本生成、多模态对话、多模态理解等。

3.2.2 不足

  • 模态信息处理:C类型模型在模态信息的处理上相对简单,可能无法充分挖掘不同模态之间的潜在联系。
  • 性能限制:C类型模型的性能可能略低于Type-A和Type-B,因为模型的设计更为复杂,需要更多训练数据和计算资源。
  • 模态编码器设计:C类型模型的性能在很大程度上取决于模态编码器的性能,因此需要设计高效的模态编码器。
  • 模态融合控制:C类型模型在模态融合的控制上较为困难,需要仔细设计连接模块,以确保不同模态信息的有效融合。

3.3 典型C类模型开源代码

  • BLIP-2

官方代码: BLIP-2 GitHub

使用一个名为Q-Former的模块来同时处理图像和文本输入。

  • MiniGPT-4

官方代码: MiniGPT-4 GitHub

一个大规模的、可微调的多模态语言模型,它通过设计一个连接模块来连接图像编码器输出和语言模型。

  • LLaVA

官方代码: LLaVA GitHub

一个基于指令微调的、可以处理多模态输入和输出的语言模型。它使用一个线性层来连接图像编码器输出和语言模型。

4、D型多模态模型

D类模型,也称为Tokenized Early Fusion (TEF),其架构特点主要围绕使用分词器(tokenizer)来处理和融合多模态输入。

4.1 特点

  • 输入分词化:使用通用分词器或模态特定的分词器将多模态输入(如图像、视频、音频)转换为离散的标记(tokens)。
  • 早期融合:与C类模型类似,D类模型也在输入阶段实现模态融合,但不同之处在于D类模型通过分词化实现这一融合。
  • 统一的Transformer架构:通常采用预训练的大型语言模型(LLM)或编码器-解码器(encoder-decoder)风格的Transformer模型来处理分词化后的输入,并生成多模态输出。
  • 端到端可训练:D类模型是端到端可训练的,这意味着从输入分词化到输出生成的整个过程可以在一个统一的框架内进行训练。
  • 自动回归目标:由于输入和输出都被分词化,可以使用标准的自动回归目标函数来训练模型,这简化了训练过程。
  • 处理多种模态:用于处理包括文本在内的多种模态,使其能够生成图像、音频和不同模态的tokens。
  • 灵活性和扩展性:通过分词化,可以相对容易地适应新的模态,尽管为新模态训练或调整分词器可能是一项挑战。
  • 大规模训练数据需求:通常需要大量的训练数据来训练分词器和主Transformer模型,这可能导致计算资源的大量需求。
  • 可训练参数数量大:由于模型需要学习将不同模态的输入映射到统一的标记空间,D类模型往往具有大量的可训练参数。
  • 适用于任何到任何的多模态任务:D类模型由于其设计,非常适合构建能够处理任何输入模态到任何输出模态的多模态模型。

4.2 优势与不足

4.2.1 优势

  • 标准化训练目标:由于模态都被标记化,模型可以使用标准的自回归目标函数进行训练,这简化了训练过程。
  • 模态扩展性:新的模态可以通过训练一个新的标记化器来添加到模型中,这种灵活性使得模型能够扩展到新的模态。
  • 模态通用性:标记化的模态表示可以用于多种下游任务,包括文本生成、图像生成、文本到图像的生成等。

4.2.2 不足

  • 标记化复杂性:训练一个通用的标记化器或模态特定的标记化器可能是一个挑战。
  • 计算资源需求:标记化和去标记化过程增加了计算复杂性,可能需要额外的计算资源。
  • 模态信息的损失:标记化可能会丢失一些模态的原始信息,这可能导致模型性能的下降。
  • 模态独立性:标记化可能导致模型在学习模态间交互时遇到困难,因为标记化表示可能掩盖了模态间的依赖关系。

4.3 典型D类模型开源代码

  • Unified-IO

官方代码: Unified-IO GitHub

一个多模态预训练模型,它使用VQ-GAN风格的标记化器来处理不同模态的输入,并使用投影层将非文本模态的输出嵌入映射到文本模态的词汇空间。

  • Unified-IO-2

官方代码: Unified-IO-2 GitHub

Unified-IO的升级版,它包含了更多的模态和更复杂的预训练任务。

  • 4M

官方代码: 4M GitHub

一个可以处理文本、RGB图像、深度、法线和语义分割映射等多模态输入的模型。它使用多模态混合去噪器(Multimodal Mixture of Denoisers)作为预训练目标。

标签:模态,架构,演进,训练,模型,融合,文本,输入
From: https://blog.csdn.net/robinfang2019/article/details/139322252

相关文章

  • Java Microservices 和 Spring Cloud:介绍微服务架构,并使用Spring Cloud来说明其在Java
    介绍微服务架构是一种软件开发技术,它将一个大型的单体应用系统拆分为多个小的、独立的服务,每个服务都可以独立部署和运行,各个小服务之间通过网络连接进行通信(通常是用HTTP/REST或消息队列)。每一个微服务都围绕着一个特定的业务功能进行构建,它们独立运行,在自己的进程内进行数......
  • 为何Java抽象类是代码架构的基石?
    效率工具推荐一个程序员的常用工具网站,效率加倍嘎嘎好用:程序员常用工具云服务器云服务器限时免费领:轻量服务器2核4G腾讯云:2核2G4M云服务器新老同享99元/年,续费同价阿里云:2核2G3M的ECS服务器只需99元/年,续费同价为何Java抽象类是代码架构的基石?Java抽象类是面向对象编......
  • 首次公开,最新手机QQ客户端架构的技术演进实践
    本文由腾讯技术何金源分享,原题“不畏移山,手机QQ技术架构升级变迁史”,本文进行了排版和内容优化等。1、引言接上篇《总是被低估,从未被超越,揭秘QQ极致丝滑背后的硬核IM技术优化》,本文则将重点介绍手机QQ客户端技术架构升级背后的故事。手机QQ经过20多年发展,功能不断增加,代......
  • Android基础-初识Android系统架构
    Android系统架构详解Android系统作为一款广泛应用于智能手机、平板电脑等设备的操作系统,其架构的设计对于系统的稳定性、可扩展性和用户体验至关重要。Android系统架构是一个复杂的层次结构,旨在实现硬件与软件之间的高效协同工作,为用户提供丰富的功能和良好的体验。以下是对An......
  • 异架构基础知识
    mips架构java-jarMars4_5.jar:打开mars寄存器:前三个参数:A0,A1,A2返回地址:$rarip:pc$zero:总是0,方便进行各种运算rax:v0system的系统调用是0xfabrsp:$sprbp:$fp$at:用于标记当前的汇编指令。v0−v1:用于存储函数的返回值。a0−a3:用于函数调用时的参数。t0−t9:通用寄......
  • 系统架构设计师【第2章】: 计算机系统基础知识 (核心总结)
    文章目录2.1计算机系统概述2.2计算机硬件2.2.1计算机硬件组成2.2.2处理器2.2.3存储器2.2.4总线2.2.5接口2.2.6外部设备2.3计算机软件2.3.1计算机软件概述2.3.2操作系统2.3.3数据库2.3.4文件系统2.3.5网络协议2.3.6中间件2.3.7软件构件2......
  • 前端架构的职责
    概念 前端架构指的是在前端开发中所采用的一系列设计模式、工具和最佳实践,用于构建高效、可维护、可扩展的前端应用。它是前端开发的重要组成部分,确保项目在长期开发和维护中保持高质量和高效率。 前端架构的职责 模块化设计:将代码分割成独立的、可重用的模块。......
  • Spring Boot项目分层架构
    SpringBoot项目分层架构在一个的springboot当中,controller,servicem,pojo,mapper,以及其他的文件夹,这些文件一般是分别用来干嘛的?在SpringBoot项目中,分层架构是一种常见的项目结构模式。它将项目的代码划分为不同的层,不同的文件夹和文件通常用于组织项目的不同部分,每个......
  • 【机器学习】Chameleon多模态模型探究
    Chameleon:引领多模态模型的新时代一、多模态模型的时代背景二、Chameleon模型的介绍三、Chameleon模型的技术特点四、Chameleon模型的性能评估五、Chameleon模型的代码实例随着人工智能技术的深入发展,我们逐渐认识到单一模态的模型在处理复杂问题时存在一定的局限......
  • 云计算-专用云架构 (Specialised Cloud Architectures)
    直接I/O访问架构(DirectI/OAccessArchitecture)        通常,消费者访问的是虚拟服务器,这意味着他们需要通过管理程序访问底层硬件。管理程序的角色是向虚拟服务器呈现虚拟机,其中包括虚拟I/O端口。虚拟端口用于防止在一台物理机上运行的多个虚拟服务器相互干扰。然......