LLM - 理解 多模态大语言模型 (MLLM) 的预训练与相关技术 (三)

news2024/11/8 9:07:09

欢迎关注我的CSDN:https://spike.blog.csdn.net/
本文地址:https://spike.blog.csdn.net/article/details/142063880

免责声明:本文来源于个人知识与公开资料,仅用于学术交流,欢迎讨论,不支持转载。


完备(Full-Fledged) 的 多模态大语言模型(MLLM) 经历 3 个阶段的训练,即 预训练(Pre-training)、指令微调(Instruction-Tuning) 和 对齐调优(Alignment Tuning)。每个训练阶段都需要不同类型的数据,并且实现不同的目标。本篇介绍,预训练(Pre-training) 部分。

1. 预训练(Pre-training)

预训练 (Pre-training) 的目的是对齐不同的模态,学习多模态的知识,核心是训练 连接器(Connector),模态编码器与 LLM 都是已训练的。预训练的数据,是大量的图像文本对数据,预训练的 损失(Loss) 是 交叉熵(Cross-Entropy)。图像文本对的示例,文本描述计算 Loss,即:

 Input: <image> 
 Response: {caption}

在 MLLM 中 连接器(Connector) 类型主要包括 3 类,即 基于映射(Projection-Based)、基于查询特征(Query- Based),基于融合特征(Fusion-Based),即:

Connector

在 MLLM 的训练过程中,一般而言,冻结 模态编码器 与 LLM,因为这些大模型已经进行大量数据的预训练,因此,只训练连接器的 可学习接口(Learnable Interface) 即可。注意 Qwen-VL 的训练方式有所不同,不同阶段,模态编码器与 LLM 也会参与训练。训练策略是与训练数据相关的,当数据质量较低时,使用低分辨率(224x224)训练,而数据质量较高,使用高分辨率(448x448)训练。

在预训练阶段,数据集的作用主要是 (1)对齐不同模态,和 (2)提供更充分的世界知识。常用的数据集,包括 粗粒度(Coarse-grained) 数据和 细粒度(Fine-grained) 数据 两类,即:

  • 粗粒度数据集:数据量大,样本通常来源于互联网,由于是从网络上抓取的,标题通常较短,且带有噪声,因为描述文本来源于网页图片的 替代文本(alt-text, alternative text),再使用预训练的图像模型 CLIP 进行清洗。
  • 细粒度数据集:通常包含更长、更准确的图像描述,从而,实现图像与文本模态之间,更细粒度的对齐。

主要的数据集,包括:

Dataset

通过 提示能力强大的多模态语言模型(例如GPT-4V) 可以生成高质量的细粒度数据,与粗粒度数据相比,这些数据通常包含更长、更准确的图像描述,从而,实现图像与文本模态之间,更细粒度的对齐。然而,由于这种方法,通常需要调用商业用途的机器学习语言模型,成本较高,数据量相对较小。解决方式是,先标注小批量的数据集,训练 Caption 模型,再进行更大规模的标注。

参考论文:

  • Qwen-VL: A Versatile Vision-Language Model for Understanding, Localization, Text Reading, and Beyond,2023.8
  • ShareGPT4V: Improving Large Multi-Modal Models with Better Captions,2023.11
  • LLaVA-1.5 - Improved Baselines with Visual Instruction Tuning,2023.10
  • CC-3M - Conceptual Captions: A Cleaned, Hypernymed, Image Alt-text Dataset For Automatic Image Captioning,2020
  • CC-12M - Conceptual 12M: Pushing Web-Scale Image-Text Pre-Training To Recognize Long-Tail Visual Concepts,2021,CVPR,Google AI
  • SBU Captions 1M - Im2text: Describing images using 1 million captioned photographs,2011,NIPS
  • Laion-5b: An open large-scale dataset for training next generation image-text models,2022,NIPS
  • Laion coco: 600m synthetic captions from laion2b-en,Web,2022
  • Coyo-700m: Image-text pair dataset,Web,2022

2. Qwen-VL 的全训练

Qwen-VL:训练主要包括 3 个阶段:预训练(Pretraining)、多任务预训练(Multi-Task Pretraining)、有监督微调(Supervised Finetuning),即:

  1. 预训练(Pretraining) 阶段:冻结大语言模型,只优化视觉编码器和视觉语言适配器。输入图像调整至 224×224,训练目标是最小化文本标记的交叉熵。
  2. 多任务预训练(Multi-Task Pretraining) 阶段:将视觉编码器的输入,分辨率从 224×224 提高至 448×448,减少图像下采样造成的信息损失,同时,解锁大语言模型,这样就是对于整个模型进行训练,训练目标与预训练阶段相同。
  3. 监督微调(Supervised Finetuning) 阶段:通过 指令微调(Instruction Fine-tuning) 来对 Qwen-VL 预训练模型进行微调,以增强其遵循指令和对话能力,从而产生交互式的 Qwen-VL-Chat 模型。在训练期间,混合多模态和纯文本的对话数据,确保模型在对话能力上的通用性。在这个阶段,冻结视觉编码器,优化大语言模型和适配器模块。

也就是说,每一阶段都训练适 配器(Adapter) 模块,第一阶段额外增加训练视觉编码器,第二阶段是全部训练,第三阶段额外增加训练大语言模型。

如图:

Qwen-VL

Qwen2-VL (2024.8.29) 的动态分辨率,与之前不同,Qwen2-VL 能够处理任意图像分辨率,映射到动态数量的视觉 Token 中,不同尺寸的图像,使用不同数量的 Token,提供更加类似人类的视觉效果体验,框架如下:

Qwen2-VL

Qwen2-VL 的多模态旋转位置编码(M-RoPE):将位置嵌入分解成多块,用于捕捉一维文本、二维视觉和三维视频的位置信息,增强其多模态处理能力,参考:

M-RoPE

3. ShareGPT4V - 细粒度(Fine-grained) 数据集

ShareGPT4V:构建高质量的 ShareGPT4V 数据集,包括世界知识(World Knowledge)、目标属性(Object Properties)、空间关系(Spatial Relationships)、美学评估(Aesthetic Evaluations)等,图像描述来源于 GPT-4V。在 监督微调(Supervised Finetuning) 阶段中,使用高质量数据,可以有效的提升模型性能。模型架构与 LLaVA 1.5 类似,模态编码器是 CLIP-Large、映射器(Projector) 是两层的 MLP、LLM 是 Vicuna-v1.5,多模态训练只训练映射器 MLP。

效果如图:

SharedGPT4V

LLaVA-1.5 的架构,视觉编码器使用 CLIP ViT-L/336px,视觉-语言连接器使用简单的 MLP,大语言模型使用 Vicuna v1.5 13B。如下:

LLaVA-1.5

LLaVA-1.5-HD 的架构,将 LLaVA-1.5 扩展至更高分辨率,将图像分割成网格,独立编码。这使得模型能够扩展到任何分辨率,而无需为 ViTs 执行位置嵌入插值,同时,还会额外连接一个降采样图像的特征,以提供给 大语言模型(LLM) 全局上下文。如图:

LLaVA-1.5-HD

4. 粗粒度(Coarse-grained) 数据集

CC-3M 数据集:Conceptual Captions,概念描述,数据处理流程:

  1. 对于图像,过滤掉含有不适当内容或长宽比不当的图像。
  2. 对于文本,使用 自然语言处理(NLP) 工具获取文本注释,根据设计的启发式规则过滤样本。
  3. 对于图像-文本对,通过分类器为图像分配标签。如果文本注释与图像标签不重叠,相应的样本将被丢弃。

数据样例如下:

CC-3M

CC-12M 数据集:即使 替换文字(alt-texts) 不完全精确地描述网络图像,这些数据仍然增加,例如相扑、山竹和水母,这样的长尾视觉概念,提供丰富的资源。通过放宽概念描述 (Conceptual Captions) 中过于严格的过滤器,将视觉和语言预训练数据,扩展至 12M (1200万)。通过,CC-12M 包括长尾数据进行微调,显著降低模型的幻觉,即:

CC-12M

SBU Captions 1M 数据集:SBU,Stony Brook University (美国纽约州立大学石溪分校),来源于 Flickr 网站,带标题照片集合的、带有用户相关标题的照片,并且通过筛选,制作一个包含超过 1M(100万) 张良好标题图片的数据集。具体来说,通过使用大量查询词在 Flickr 网站上查询,初步获取一组图像,这些图像附带的描述作为标题,然后,为确保描述与图像相关,保留的图像满足以下要求:

  1. 图像的描述,长度,令人满意,这是通过观察决定的。
  2. 图像的描述,至少包含两个预定义词汇表中的词汇和一个表征性词汇 (例如on、under等),通常表示空间关系。

具体的系统流程:

  1. 输入查询图像;
  2. 使用全局图像表示,从带标题集合中检索候选匹配图像;
  3. 提取关于图像内容的高级信息,包括目标、属性、动作、人物、物品、场景以及 TF-IDF 加权;
  4. 通过结合所有内容估计重新对于图像进行排名;
  5. 得出前 4 个结果标题。

即:

SBU-1M

LIAON-5B:这个数据集是 多语言(Multilingual) 版本,英文数据集是 2B,大型的 网络规模 (Web-Scale) 数据集,包含从互联网上抓取的图像,以及与之相关的 替代文本(alt-text) 作为标题。为了筛选图像-文本对,执行了以下步骤:

  1. 丢弃 文本长度过短或图像尺寸过小或过大 的图像-文本对。
  2. 基于 URL 进行图像去重。
  3. 提取 CLIP 嵌入向量用于图像和文本,并且使用这些嵌入向量,来丢弃可能的非法内容,以及嵌入向量之间,余弦相似度低的图像-文本对。

如图:

LIAON-5B

样本示例:

LAION-5B

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

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

相关文章

基于锂电池的多路直流电源模块设计

本实物模块从实物外观、接口介绍及功能说明三部分来介绍这款基于锂电池的多路直流电源模块。 1、实物外观 2、接口介绍 本模块的3D外观图如下图所示&#xff0c;整体尺寸为6*8cm。H1为单节锂电池接口&#xff0c;H2为5V输出接口&#xff0c;H3为12V输出接口&#xff0c;H4为-…

【开源免费】基于SpringBoot+Vue.JS房产销售系统(JAVA毕业设计)

本文项目编号 T 028 &#xff0c;文末自助获取源码 \color{red}{T028&#xff0c;文末自助获取源码} T028&#xff0c;文末自助获取源码 目录 一、系统介绍二、演示录屏三、启动教程四、功能截图五、文案资料5.1 选题背景5.2 国内外研究现状5.3 可行性分析 六、核心代码6.1 销…

​​​​​​​Oracle11 分析函数等高级函数使用说明

1、Group by 与GROUP BY 一起使用的关建字 GROUPING , ROLLUP,CUBE,结合这些特性的函数可以实现SQL的明细分组统计 GROUPING 记录是对哪个字段进行统计 select deptno,job,sum(sal),grouping(deptno),grouping(job) from emp group by rollup( deptno,job); 等价于 selec…

并发编程 - GCD信号量

引言 在现代应用开发中&#xff0c;处理并发任务已经成了不可避免的挑战。在这种情况下&#xff0c;如何有效地管理多个线程对共享资源的访问&#xff0c;避免资源竞争和数据不一致的问题&#xff0c;成为了我们必须面对的难题。在NSOperation&NSOperationQueue中系统为我…

OpenCV结构分析与形状描述符(21)计算包围给定点集的最小面积三角形函数minEnclosingTriangle()的使用

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 找到一个包围二维点集的最小面积三角形&#xff0c;并返回其面积。 该函数找到一个包围给定的二维点集的最小面积三角形&#xff0c;并返回其面…

【HarmonyOS】云开发-云数据库(二)

背景 书接上回&#xff0c;实现了云侧和端侧的云数据库创建、更新、修改等操作。这篇文章实现调用云函数对云数据库进行增删改查。 CloudProgram 项目配置 新建函数 在cloudfunctions目录下点击右键&#xff0c;选择新建Cloud Function&#xff0c;输入query-student-functi…

使用OpenCV进行模糊检测(拉普拉斯算子)

参考&#xff1a; 使用OpenCV进行模糊检测&#xff08;拉普拉斯算子&#xff09; 代码&#xff1a; # import the necessary packages from imutils import paths import argparse import cv2 import osdef variance_of_laplacian(image):# compute the Laplacian of the ima…

聚观早报 | 极越07正式上市;宝骏云海正式上市

聚观早报每日整理最值得关注的行业重点事件&#xff0c;帮助大家及时了解最新行业动态&#xff0c;每日读报&#xff0c;就读聚观365资讯简报。 整理丨Cutie 9月12日消息 极越07正式上市 宝骏云海正式上市 滴滴包车全国上线 淘宝Apple Vision Pro版重大更新 OpenAI将发布…

【中秋月饼系列】2024年立体月饼新鲜出炉----python画月饼(1)附完整代码

【中秋月饼系列】2024年立体月饼新鲜出炉 ----python画月饼&#xff08;1&#xff09;附完整代码 本文目录&#xff1a; 零、时光宝盒 一、2024年中秋节立体逼真月饼&#xff08;效果展示&#xff09; 二、Python 海龟画图主要方法 &#xff08;1&#xff09;海龟画图的主…

【Linux】:信号的保存和信号处理

朋友们、伙计们&#xff0c;我们又见面了&#xff0c;本期来给大家带来信号的保存和信号处理相关代码和知识点&#xff0c;如果看完之后对你有一定的启发&#xff0c;那么请留下你的三连&#xff0c;祝大家心想事成&#xff01; C 语 言 专 栏&#xff1a;C语言&#xff1a;从入…

SpringBoot + MySQL + MyBatis 实操示例教学

一、准备工作 1.导入相关依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.mybatis.spring.boot</groupId><…

网络安全实训十(Windows提权、UAC绕过、Linux利用suid提权)

一、Windows提权 1 手动查找系统存在漏洞 使用命令查看安装的补丁信息 systeminfo wmic qfe get caption,description,hotfixid,installedon 2 自动查找系统存在漏洞 2.1 Windows Exploit Suggester 2.1.1 下载脚本 下载地址&#xff1a;https://github.com/AonCyberLabs/Wi…

【有啥问啥】深入解析3A算法:自动对焦、自动曝光与自动白平衡的原理、实现与应用

深入解析3A算法&#xff1a;自动对焦、自动曝光与自动白平衡的原理、实现与应用 在现代图像处理技术中&#xff0c;3A算法&#xff08;自动对焦、自动曝光、自动白平衡&#xff09;是数码摄像设备核心的成像控制系统&#xff0c;负责调节图像的清晰度、亮度和色彩平衡。这些算…

《深度学习》—— 神经网络基本结构

前言 深度学习是一种基于神经网络的机器学习算法&#xff0c;其核心在于构建由多层神经元组成的人工神经网络&#xff0c;这些层次能够捕捉数据中的复杂结构和抽象特征。神经网络通过调整连接各层的权重&#xff0c;从大量数据中自动学习并提取特征&#xff0c;进而实现预测或…

Aigtek功率放大器的工作状态和技术指标有哪些

功率放大器是电子电路中的重要组成部分&#xff0c;用于放大电信号的功率&#xff0c;以便驱动负载&#xff0c;如扬声器、天线或电动机。它在各种应用中都起到至关重要的作用&#xff0c;从音响系统到通信设备&#xff0c;以下是功率放大器的工作状态和技术指标的详细介绍。 工…

利用zabbix监控ogg进程(Windows平台)

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:Linux运维老纪的首页…

Boost.pyhon 使用方法

哈哈,又是一个相当nice的技巧 boost 在使用时定义使用静态库 很完整的功能 方法实现如上,很多时候写python脚本直接执行还是最容易的,编译打包还是比较麻烦,内置解释器到QT C的代码中 加载python脚本时,从python 脚本中获取值&#xff0c;在C 中进行计算使用 在python 和 C 的交…

OLED显示屏应用(STM32)

一、接线 OLED的四针脚对应接法如下图 GND——GND 3.3V——3.3V SCL——PB8 SDA——PB9 二、OLED.c代码介绍 #include "stm32f10x.h" #include "OLED_Font.h"/*引脚配置*/ //OLED时钟线 //GPIOB8接时钟线接口 //定义一个函数&#xff0c;函数的参数为…

【JavaScript】LeetCode:31-35

文章目录 31 反转链表32 回文链表33 环形链表34 环形链表Ⅱ35 合并两个有序链表 31 反转链表 初始化&#xff1a;cur head&#xff0c;pre null。pre和cur一起向前移。由于反转链表时&#xff0c;cur.next指向pre&#xff0c;导致cur在下次循环中就找不到了原来的cur.next&am…

牛客思维题———进制(简单)

C-小红的双好数&#xff08;easy&#xff09;_牛客周赛 Round 57 (nowcoder.com) 思路&#xff1a; 任何一个数n可以表示为n进制&#xff0c;且值为1 特判1 2 即可 代码&#xff1a; #include<bits/stdc.h> #define int long long using namespace std;#define IOS i…