多模态基础篇VLMo详解,非常详细收藏我这一篇就好了

该模型提出了一种统一的视觉-语言预训练模型VLMO(Vision-Language Mixture-of-Experts),其核心创新在于引入了 Mixture-of-Modality-Experts(MOME)Transformer 架构,使得一个模型既能作为双编码器(dual encoder)用于高效的图文检索任务,又能作为融合编码器(fusion encoder)用于需要深度跨模态交互的视觉-语言分类任务,如视觉问答(VQA)和视觉推理。

1, 背景

在视觉-语言预训练模型中,有两种主要架构:

1.1 双编码器(Dual Encoder)

  • 如 CLIP、ALIGN
  • 图像和文本分别通过独立的编码器处理。
  • 模态间交互由最终的相似度计算(如点积或余弦相似)实现。
  • 优点:速度快、适合大规模检索任务(可预先编码所有图像/文本)。
  • 缺点:模态间交互浅,不适合复杂的推理任务。

1.2. 融合编码器(Fusion Encoder)

  • 如 ViLT、ALBEF、UNITER
  • 将图像与文本拼接后,通过跨模态注意力机制进行联合编码。
  • 优点:模态间交互深,性能好,适用于 VQA 等复杂任务。
  • 缺点:每个图文对都需要联合编码,推理速度慢(时间复杂度为 ),不适用于大规模检索。

1.3. VLMO 的目标

是否可以设计一个模型,既能做高效检索(像双编码器),又能做复杂推理(像融合编码器)?

答案是:可以统一在一个架构中实现。

  1. 核心设计
    =======

VLMO 的核心是Mixture-of-Modality-Experts(MOME)Transformer,它基于标准 Transformer 的结构,但改进了前馈网络部分(FFN),引入“模态专家”机制。

2.1. MOME 的三大专家

每个 Transformer 块包含三个“专家”:

  • 视觉专家(Vision Expert, V-FFN):专门处理图像块(patch embeds)
  • 语言专家(Language Expert, L-FFN):专门处理文本 token
  • 视觉-语言专家(Vision-Language Expert, VL-FFN):处理图文融合时的表示 这类似于 MoE(Mixture of Experts)结构,但不是在模型层面稀疏激活,而是根据输入的模态自动路由到对应的专家。

2.2 共享的多头自注意力(Shared Self-Attention)

  • 所有模态都共享同一个自注意力层(Multi-Head Self-Attention)。
  • 这保证了图像与文本的信息能在早期就开始对齐。
  • 重要性体现在:无论单模态还是多模态输入,模型都使用同样的注意力参数来融合信息。
  1. 模型详细讲解
    =========

3.1 输入表示(Input Representations)

1. 图像表示(Image Representations)

输入图像是一个 2D 矩阵 ,即高度 、宽度 、通道数 (通常是 RGB 3 通道)。 步骤如下(详见ViT部分内容):

  1. 分块(Patch Partitioning): 图像被均匀划分为 个大小为 的小块(patches)。
  • 例如:输入图像 ,块大小 ,则得到 个 patch。 这些 patch 被展平为一维向量: 。
  1. 线性投影(Linear Projection): 每个 patch 向量通过一个可学习的线性层 投影到维度为 (模型隐藏层大小,如 768)的向量,成为patch embeddings。
  2. **加入特殊标记[I_CLS]:**像 BERT 中有[CLS]标记一样,这里为图像序列也添加一个可学习的特殊标记[I_CLS],它用于最终图像表示的聚合。
  3. 加入位置和类型嵌入(Position & Type Embeddings):
  • 位置嵌入 :学习 patch 在图像中的 1D 顺序位置(共 个: 个 patch + 1 个 [I_CLS]),尺寸为 。
  • 类型嵌入 :因为图文对中需区分图像和文本 tokens,这里为所有 image tokens 添加一个可学习的类型向量 (类似于 BERT 的 segment embedding)。

最终图像输入表示为:

  • 表示拼接。
  • 是线性投影参数 。
  • 是图像的初始输入矩阵,尺寸 。

2. 文本表示(Text Representations)

文本处理方式基本遵循 BERT。

  1. 分词(Tokenization): 使用 WordPiece 算法将句子划分为 subword tokens。
  • 长度记为 。
  1. 添加特殊标记
  • 添加[T_CLS]:用于文本最终表示。
  • 添加[T_SEP]:用于分隔文本中的多个部分(通常是单句,只有一个)。
  1. 嵌入
  • 每个 token 有对应的 word embedding(查表获得)。
  • 加上 1D 位置嵌入 和 文本类型嵌入 。

最终文本输入表示为:

  • 是第 个 token 的 word embedding。
  • 尺寸为 。

3. 图文对表示(Image-Text Representations)

当我们要建模图像和文本的联合关系时(如 VQA、图文匹配),需要将两者表示拼接。

具体操作:

  • 将文本序列 放在前面。
  • 将图像序列 拼接在其后。

得到:

  • 表示矩阵拼接(按行或 token 维度拼接)。
  • 整个输入序列长度为 。

⚠️ 注意:

  • 仅当执行“融合编码”任务(如 VQA)时,才使用 进行联合编码。
  • 若执行“双编码”(如图文检索),图像和文本是分开编码的,不进行这类拼接。

3.2 MOME Transformer

这是 VLMO 的核心创新,Mixture-of-Modality-Experts Transformer。

3.2.1. 总体结构

每个 MOME Transformer 块由两个主要部分组成:

  1. 多头自注意力层(MSA):

公式

  • 是 Layer Normalization。
  • 是多头自注意力机制。
  • 是第 层的输出。
  • 是注意力输出 + 残差连接。
  • 关键点:这个 MSA 层的参数在所有模态输入中是共享的。这是实现跨模态对齐的重要设计。

3.2.2. MOME 前馈网络(MoME-FFN):

公式

  • 这是标准 FFN 的升级替代。
  • MoME-FFN 不是一个固定的函数,而是一个可以根据输入模态“切换”的专家网络池。

3.2.3. MoME-FFN:如何根据模态切换?

MoME-FFN 包含三个专家(Expert 是指一个前馈网络,即两层全连接 + 激活):

  • 视觉专家(V-FFN)
  • 语言专家(L-FFN)
  • 视觉-语言专家(VL-FFN)

路由(Switching)策略如下:

  • 输入是图像-only( ):
  • 所有 token(包括[I_CLS]和 patches)都由 V-FFN 处理。
  • 输入是文本-only( ):
  • 所有 token 都由 L-FFN 处理。
  • 输入是图文对( ):
  • 所有 tokens(无论图文)都由 VL-FFN 处理。

  • 这使得 VL-FFN 可以建模图文之间的深度交互。

  • 文本 tokens:由 L-FFN 处理。

  • 图像 tokens:由 V-FFN 处理。

  • 底层(Bottom)Transformer 层:

  • 顶层(Top)Transformer 层:

为什么顶层用 VL-FFN?

  • 底层关注模态内特征提取(用各自专属专家)。
  • 顶层是建模跨模态交互的关键,需要一个特化的、能理解图文联合语义的专家(VL-FFN)。

3.3 预训练任务

VLMO 同时优化三个任务:

3.3.1 图文对比学习(ITC)

🎯 **目标:让匹配的图文对表示靠近,不匹配的远离。**给定一个 batch 的 个图文对:

1. 提取[CLS]表示:
  • 图像编码器输出的[I_CLS]向量记为 。
  • 文本编码器输出的[T_CLS]向量记为 。
  • 经过独立的线性投影层 + L2 归一化,得到单位向量:
2. 计算相似度矩阵(N×N):

公式

  • :第 个图像 和 第 个文本 的相似度。
  • 这是 Image-to-Text 相似度矩阵。
  • 类似地, 是 Text-to-Image 相似度。
3. 计算预测概率:

公式

  • :模型预测 “第 个图像” 与 batch 中 “第 个文本” 匹配的 softmax 概率。
  • 只有 时为正样本,其余 是负样本。
  • 是一个可学习的温度参数,控制分布的“锐利度”。 小,正样本得分更突出。
4. 损失函数(交叉熵):
  • 目标:最大化 和 (即正确匹配的概率)。
  • 使用 cross-entropy 损失:

3.3.2 文本掩码建模(MLM)

🎯 目标:根据上下文(图像 + 文本)预测被 [MASK] 掉的词。

  • 随机对文本中 15% 的 tokens 做掩码(如 “A baseball [MASK] throwing [MASK] ball .”)。
  • 模型输入是图文拼接序列( )。
  • 用最顶层的[T_CLS]的输出 (或所有 masked token 的表示)送入一个分类器(线性层 + Softmax)预测原始词。
  • 使用 交叉熵损失。

✅ 意义:强制模型利用图像信息帮助恢复文本语义,实现图文对齐。

3.3.3. 图文匹配 (ITM)

🎯 目标:判断一对图文是否真的匹配(二分类任务)。

方法:

  • 拼接图文序列 ,走完整的 Transformer 编码路径。
  • 使用最终编码的[T_CLS]token 表示 。
  • 送入一个分类头(如一个线性层 + sigmoid),预测“是否匹配”:
  • 使用 二元交叉熵损失(Binary Cross-Entropy)。

3.5 微调

1. 视觉-语言分类任务(如 VQA, NLVR2)

  • 使用 MOME 的融合路径。
  • 输入:图文拼接。
  • [T_CLS]的最终向量作为联合表示,加一个分类头。

2. 视觉-语言检索任务

  • 只使用双编码路径:
  • 图像:用 V-FFN 路径编码,提取[I_CLS]向量。
  • 文本:用 L-FFN 路径编码,提取[T_CLS]向量。
  • 相似度:计算两个向量的点乘。
  • 无需联合编码,速度极快。
  1. 训练策略:分阶段预训练
    ==============

为了充分利用非配对数据(单一图像或文本),VLMO采用三阶段训练策略:

4.1. 阶段 1:视觉预训练(Vision Pre-training)

  • 仅使用图像数据(如 ImageNet、BEIT 使用的数据)。
  • 训练 V-FFN 和 共享的自注意力层。
  • 任务:掩码图像建模(Masked Image Modeling, MIM)——类似 BEIT。

4.2. 阶段 2:语言预训练(Language Pre-training)

  • 冻结视觉模块参数(V-FFN 和自注意力),仅训练 L-FFN。
  • 使用大规模文本语料(Wikipedia + BookCorpus),任务为掩码语言建模(MLM)。

4.3. 阶段 3:视觉-语言联合预训练(Vision-Language Pre-training)

  • 使用图文对数据(如 COCO、SBU-Captions 等)。
  • 解冻所有参数,联合优化三大目标:
  1. 图文对比学习(Image-Text Contrastive Learning)——学习整体对齐
  2. 图文匹配(Image-Text Matching)——二分类判断是否配对
  3. 掩码语言建模(Masked Language Modeling)——进一步对齐局部语义

特别地,图文匹配引入了全局硬负采样(Global Hard Negative Mining),即从整个batch(跨 GPU)中挑选最相似但错误匹配的图文对作为难负样本,比局部采样更有效。

如何学习AI大模型?

如果你对AI大模型入门感兴趣,那么你需要的话可以点击这里大模型重磅福利:入门进阶全套104G学习资源包免费分享!

这份完整版的大模型 AI 学习和面试资料已经上传CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费】

这是一份大模型从零基础到进阶的学习路线大纲全览,小伙伴们记得点个收藏!


第一阶段:从大模型系统设计入手,讲解大模型的主要方法;

第二阶段:在通过大模型提示词工程从Prompts角度入手更好发挥模型的作用;

第三阶段:大模型平台应用开发借助阿里云PAI平台构建电商领域虚拟试衣系统;

第四阶段:大模型知识库应用开发以LangChain框架为例,构建物流行业咨询智能问答系统;

第五阶段:大模型微调开发借助以大健康、新零售、新媒体领域构建适合当前领域大模型;

第六阶段:以SD多模态大模型为主,搭建了文生图小程序案例;

第七阶段:以大模型平台应用与开发为主,通过星火大模型,文心大模型等成熟大模型构建大模型行业应用。

100套AI大模型商业化落地方案

大模型全套视频教程

200本大模型PDF书籍

👉学会后的收获:👈

• 基于大模型全栈工程实现(前端、后端、产品经理、设计、数据分析等),通过这门课可获得不同能力;

• 能够利用大模型解决相关实际项目需求: 大数据时代,越来越多的企业和机构需要处理海量数据,利用大模型技术可以更好地处理这些数据,提高数据分析和决策的准确性。因此,掌握大模型应用开发技能,可以让程序员更好地应对实际项目需求;

• 基于大模型和企业数据AI应用开发,实现大模型理论、掌握GPU算力、硬件、LangChain开发框架和项目实战技能, 学会Fine-tuning垂直训练大模型(数据准备、数据蒸馏、大模型部署)一站式掌握;

• 能够完成时下热门大模型垂直领域模型训练能力,提高程序员的编码能力: 大模型应用开发需要掌握机器学习算法、深度学习框架等技术,这些技术的掌握可以提高程序员的编码能力和分析能力,让程序员更加熟练地编写高质量的代码。

LLM面试题合集

大模型产品经理资源合集

大模型项目实战合集

👉获取方式:
😝有需要的小伙伴,可以保存图片到wx扫描二v码免费领取【保证100%免费】🆓

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/1125398.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

docker设置redis密码

docker设置redis密码 方法一:创建redis容器并设置密码 docker run -itd --name redis-6379 -p 6379:6379 redis --requirepass 123456说明: --name (启动容器的名称) -p 映射端口:redis启动端口 redis --requirepass 启动密码方法二:为现有的redis创建…

Go-Gin Web 框架完整教程

1. 环境准备 1.1 Go 环境安装 Go 语言(或称 Golang)是一个开源的编程语言,由 Google 开发。在开始使用 Gin 框架之前,我们需要先安装 Go 环境。 安装步骤: 访问 Go 官网下载页面:https://golang.org/dl/根据…

FlinkCDC实战:将 MySQL 数据同步至 ES

?? 当前需要处理的业务场景: 将订单表和相关联的表(比如: 商品表、子订单表、物流信息表)组织成宽表, 放入到 ES 中, 加速订单数据的查询. 同步数据到 es. 概述 1. 什么是 CDC 2. 什么是 Flink CDC 3. Flink CDC Connectors 和 Flink 的版本映射 实战 1. 宽表查询 1.1 …

从原理切入,看大模型的未来,非常详细收藏我这一篇就够了

相信大家都接触过大模型,比如 DeepSeek、豆包、ChatGPT 等生成式 AI 应用,当用户输入相关信息后,大模型就会快速输出相应的结果:文字、图片,甚至是视频。这是大家对大模型最常见的认识——效率工具。可当笔者看到25年底…

DBeaver连接本地MySQL、创建数据库表的基础操作

一、连接本地MySQL 1、新建连接 打开DBeaver,点击左上角的文件或者点击箭头所指的连接按钮。新建数据库连接-选择数据库(mysql),点击“下一步”输入服务器地址、端口、用户名、密码(数据库自己选填,不填则连接所有数据库&#xff…

docker网络模式及配置

一、Docker网络模式 docker run 创建docker容器时,可以用-net选项指定容器的网络模式,docker有以下4种网络模式: host 模式,使用-nethost指定。container模式,使用-netcontainer:NAME_or_ID指定。none模式&#xff0…

docker中配置redis

1、常规操作 docker pull redis(默认你的docker中没有redis) 2、查看redis是否拉取成功 docker images redis 3、创建目录,在你的宿主机,(我是在虚机中建的centos7)为了给redis配置文件使用 4、下载redis…

error @achrinzanode-ipc@9.2.5 The engine “node“ is incompatible with this module. 解决node.js版本不兼容问题

目录 很多人运行项目的时候会出现报错信息: 解决方案 然后再次运行就好了: 此时,我点击链接就可以看到了: 很多人运行项目的时候会出现报错信息: 这个错误是因为你的项目中使用了一个模块 achrinza/node-ipc&#…

ERROR 1524 (HY000) Plugin ‘mysql_native_password‘ is not loaded

你遇到的错误是由于 MySQL 版本不再默认支持 mysql_native_password 认证插件导致的。从 MySQL 8.0 开始,默认的认证插件是 caching_sha2_password,而不是 mysql_native_password。 解释: 错误 ERROR 1524 (HY000): Plugin mysql_native_pass…

docker下搭建redis集群

1. 环境准备 准备好Linux系统机器,并安装好docker,阅读这篇文章前请先了解清楚docker的基本知识并且会熟悉运用docker的常用命令。学习docker基础知识可以参考这篇博文 安装好并启动docker后就可以开始搭建redis了 2. docker容器下安装redis 本篇文章…

深度解析:为什么传统操作系统的最小权限原则在智能体世界失灵?

前言 如果我们把“AgentOS”理解为一种为智能体长期运行、持续决策、主动调用资源而设计的操作系统,那么它会暴露出一个根本性矛盾:我们正在用为“被动程序”设计的安全模型,去约束“主动行为体”。 传统操作系统的安全模型,无论是 Unix 时代的“用户-组-其他”,还是后来…

交通仿真软件:Aimsun_(1).Aimsun概述v1

Aimsun概述 1. Aimsun的基本功能 Aimsun是一款功能强大的交通仿真软件,广泛应用于交通规划、交通管理和交通研究等领域。它能够模拟从微观到宏观的交通流,提供详细的交通分析和优化建议。Aimsun的基本功能包括: 1.1 交通网络建模 Aimsun允许用…

ChatGLM2-6B模型推理流程和模型架构详解

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言1 ChatGLM是什么?2 一代GLM 2.1 大模型架构2.2 GLM特点 2 二代GLM:ChatGLM2-6B为例拆解 2.1 ChatGLM2-6B模型推理架构和流程2.2 细节详…

go桌面框架Fyne最全api文档

Fyne 是一个 Go 语言的跨平台 GUI 库 相关命令 //全局安装fyne打包工具 go install fyne.io/fyne/v2/cmd/fynelatest// 引入fyne库 go get fyne.io/fyne/v2latest go mod tidy//以窗口形式启动 go run main.go //以手机模拟器形式启动 go run -tags mobile main.go//打包 //桌面…

基于微信小程序的新能源汽车租赁换电管理系统(毕设源码+文档)

课题说明本课题聚焦基于微信小程序的新能源汽车租赁换电管理系统的设计与实现,核心目标是解决传统新能源汽车租赁及换电服务中流程繁琐、车辆与换电站信息不透明、租赁订单管理混乱、换电预约低效、电池状态监控缺失及服务进度追踪困难等痛点问题。系统深度依托微信…

交通仿真软件:Aimsun_(3).Aimsun基本操作

Aimsun基本操作 创建和配置仿真网络 在Aimsun中,创建和配置仿真网络是仿真过程的第一步。仿真网络是交通仿真的基础,它包括道路网络、交叉口、交通信号、交通流等基本元素。本节将详细介绍如何在Aimsun中创建和配置仿真网络,以及如何导入和导…

代码随想录刷题——二叉树篇(十二)

112. 路径总和 递归法: class Solution{ public:bool sumPath(TreeNode* node,int count){# 如果该节点是叶子节点且count被减到0了,那么就返回trueif(!node->left&&!node->right&&count0) return true;# 如果该节点是叶子节点且c…

代码随想录刷题——二叉树篇(十二)

112. 路径总和 递归法: class Solution{ public:bool sumPath(TreeNode* node,int count){# 如果该节点是叶子节点且count被减到0了,那么就返回trueif(!node->left&&!node->right&&count0) return true;# 如果该节点是叶子节点且c…

eclipse配置Spring

1、从eclipse下载Spring工具 进入 help – install new software… ,如下图: 点击 add ,按以下方式输入: Name : Spring Location : http://dist.springsource.com/release/TOOLS/update/e4.10/ 之后点击 add ,等待…

Go基础之环境搭建

文章目录 1 Go 1.1 简介 1.1.1 定义1.1.2 特点用途 1.2 环境配置 1.2.1 下载安装1.2.2 环境配置 1.2.2.1 添加环境变量1.2.2.2 各个环境变量理解 1.2.3 验证环境变量 1.3 包管理工具 Go Modules 1.3.1 开启使用1.3.2 添加依赖包1.3.3 配置国内包源 1.3.3.1 通过 go env 配置1.…