深入解析多模态大模型的主要技术和最新发展

作者:北方的郎
原文:https://zhuanlan.zhihu.com/p/15941853186

刚刚看到一篇很不错的,关于多模态大模型的综述:“Understanding Multimodal LLMs”。

在本文中,我旨在解释多模态 LLM 的工作原理。此外,我将回顾和总结最近几周发表的大约十几篇其他多模态论文和模型(包括 Llama 3.2)以比较它们的方法。

图片

多模态 LLM 的图示,它可以接受不同的输入模态(音频、文本、图像和视频)并返回文本作为输出模态。

1. 多模态 LLM 的用例(Use cases of multimodal LLMs)

什么是多模态 LLM?正如简介中所暗示的那样,多模态 LLM 是能够处理多种类型输入的大型语言模型,其中每个“模态”都是指一种特定类型的数据,例如文本(如传统 LLM)、声音、图像、视频等。为简单起见,我们将主要关注图像模态和文本输入。

多模态 LLM 的一个经典而直观的应用是图像字幕:您提供输入图像,模型会生成图像的描述,如下图所示。

图片

解释模因的多模态 LLM 的示例使用。

当然,还有许多其他用例。例如,我最喜欢的一个是从 PDF 表格中提取信息并将其转换为 LaTeX 或 Markdown。

2. 构建多模态 LLM 的常见方法(Common approaches to building multimodal LLMs)

构建多模态 LLM 有两种主要方法:

  • • 方法 A:统一嵌入解码器架构方法;(Unified Embedding Decoder Architecture approach;)

  • • 方法 B:跨模态注意力架构方法。(Cross-modality Attention Architecture approach.)

(顺便说一句,我不相信这些技术的官方术语存在,但如果你遇到过任何术语,请告诉我。例如,更简短的描述可能是 “decoder-only” 和 “cross-attention-based” 方法。

图片

开发多模态 LLM 架构的两种主要方法。

如上图所示,统一嵌入-解码器架构使用单个解码器模型,很像 GPT-2 或 Llama 3.2 等未经修改的 LLM 架构。在这种方法中,图像被转换为与原始文本token具有相同嵌入大小的token,从而允许 LLM 在连接后同时处理文本和图像输入token。

跨模态注意力架构采用交叉注意力机制,将图像和文本嵌入直接集成到注意力层中。

在以下部分中,我们将在概念层面上探讨这些方法的工作原理。然后,我们将查看最近关于多模态 LLM 的研究论文,以了解它们如何在实践中应用。

2.1 方法 A:统一嵌入解码器架构(Unified Embedding Decoder Architecture)

让我们从统一嵌入解码器架构开始,如下图所示。

图片

统一嵌入解码器架构的图示,它是一个未经修改的解码器风格的 LLM(如 GPT-2、Phi-3、Gemma 或 Llama 3.2),它接收由图像标记和文本标记嵌入组成的输入。

在统一的嵌入-解码器架构中,图像被转换为嵌入向量,类似于在标准纯文本 LLM 中将输入文本转换为嵌入的方式。

对于处理文本的典型纯文本 LLM,文本输入通常是标记化的(例如,使用字节对编码),然后通过嵌入层传递,如下图所示。

图片

对文本进行标记化并将其转换为标记嵌入向量的标准过程的图示,这些向量随后在训练和推理期间传递给 LLM。

2.1.1 了解图像编码器(Understanding Image encoders)

与文本的分词和嵌入类似,图像嵌入是使用图像编码器模块(而不是分词器(tokenizer))生成的,如下图所示。

图片

将图像编码为图像块嵌入的过程图示。

经典视觉Transformer (ViT) 设置的插图,类似于 An Image is Worth 16x16 Words:Transformers for Image Recognition at Scale (2020) 中提出的模型。iT:vision transformer) 编码,如下图所示。

图片

经典视觉Transformer (ViT) 设置的插图,类似于 An Image is Worth 16x16 Words:Transformers for Image Recognition at Scale (2020) 中提出的模型。

请注意,ViT 通常用于分类任务,因此我在上图中加入了分类头(classification head)。但是,在这种情况下,我们只需要图像编码器部分。

2.1.2 线性投影模块的作用(The role of the linear projection module)

上图所示的 “线性投影” 由单个线性层(即全连接层)组成。此层的目的是将图像块(展平为矢量)投影为与 transformer 编码器兼容的嵌入大小。此线性投影如下图所示。展平为 256 维向量的图像块将向上投影到 768 维向量。

图片

线性投影图层的图示,该图层将拼合的图像图块从 256 维投影到 768 维嵌入空间。

对于那些喜欢看代码示例的人,在 PyTorch 代码中,我们可以实现图像patch的线性投影,如下所示:

import torch


classPatchProjectionLayer(torch.nn.Module):

    def __init__(self, patch_size, num_channels, embedding_dim):
        super().__init__()
        self.patch_size = patch_size
        self.num_channels = num_channels
        self.embedding_dim = embedding_dim
        self.pr
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值