CMU 10423 Generative AI:lec14(Vision Language Model:CLIP、VQ-VAE)

文章目录

  • 1 概述
  • 2 CLIP (Used in GPT-V)
  • 3 VQ-VAE (Used in Gemini)
      • **VQ-VAE 详细笔记**
        • **VQ-VAE 的模块组成与数据流**
      • **1. 输入数据**
      • **2. 编码器(Encoder)**
        • **2.1 编码器的作用**
        • **2.2 数据流与维度变化**
        • **2.3 编码器输出**
      • **3. 量化器(Quantizer)**
        • **3.1 代码本体(Codebook)是什么?**
        • **3.2 向量量化的过程**
        • **3.3 输出维度**
        • **3.4 q(z|x) 的作用**
      • **4. 解码器(Decoder)**
        • **4.1 解码器的作用**
        • **4.2 数据流与维度变化**
      • **5. 损失函数**
        • **5.1 重构损失(Reconstruction Loss)**
        • **5.2 代码本体损失(Codebook Loss)**
        • **5.3 承诺损失(Commitment Loss)**
        • **5.4 最终损失函数**
      • **6. 训练过程**
      • **总结**

1 概述

这份讲义主要讲解了Vision-Language Models (VLM) 的核心概念及其应用,涉及人工智能系统如何处理图像和文本输入并生成输出。以下是内容的主要概要:

  1. AGI 与 VLM:
  • 人工通用智能 (AGI) 应该能够处理多种形式的输入与输出,包括音频、视频、图像、文本等。
  • VLM 是专注于图像和文本混合输入,输出主要是文本,但也有可能生成图像。
  1. VLM 的基本原理:
  • 标准文本转换器通过将输入的文本转化为一系列的 tokens,然后使用 Transformer 模型处理这些 tokens。
  • VLM 的不同之处在于它不仅能处理文本,还可以处理图像。通过特定的图像编码器,图像也会被转化为可以输入 Transformer 的 tokens。
  1. VLM 编码器:
  • 两种主要的 VLM 编码器:
    • 基于 CLIP 的编码器:将图像映射为向量序列,适用于 OpenAI 的模型。
    • 基于 VQ-VAE 的编码器:将图像编码为离散的 token 序列,更适合生成图像的任务。
  1. VQ-VAE 详细解释:
  • VQ-VAE 是一种自编码器,负责将图像编码为 token 序列,并通过解码器恢复图像。
  • 训练目标是通过量化 VAE 的输出,使得离散的 token 序列能够保留原始图像的信息。
  1. CLIP 的训练目标:
  • CLIP 的目的是通过图像和对应文本的相似性最大化以及与不相关文本的区分来进行训练,从而保持图像的详细信息。
  1. VLM 的训练数据和基准测试:
  • VLM 使用的数据包括图像和文本配对的数据集(如 Google Images、Bing Images),以及合成的 ChartQA、Document layout 等数据。
  • 常见的基准测试包括文档理解(DocVQA)、数学推理(MathVista)等。
  1. VLM 的训练技巧:
  • 训练通常分为预训练和指令微调两个阶段,前者使用图文交织数据,后者采用类似问答的数据。
  • 细节如分辨率和图像的原生长宽比对模型效果有重要影响。

2 CLIP (Used in GPT-V)

见lec13笔记。

3 VQ-VAE (Used in Gemini)

2017.11。deepmind 3人

https://arxiv.org/pdf/1711.00937

在这里插入图片描述


VQ-VAE 详细笔记

VQ-VAE(Vector Quantized Variational AutoEncoder)是一种生成模型,结合了自编码器和向量量化技术,旨在学习图像、音频等数据的离散化表示,常用于生成任务和特征压缩。VQ-VAE 的主要创新点是将连续的潜在表示离散化,使模型能够在离散空间中学习数据特征。

VQ-VAE 的模块组成与数据流

VQ-VAE 主要由三个模块构成:编码器(Encoder)量化器(Quantizer)解码器(Decoder),每个模块在模型的训练和推理过程中都扮演了关键角色。


1. 输入数据

假设我们有一张 32 × 32 32 \times 32 32×32 的 RGB 图像,其输入维度是 32 × 32 × 3 32 \times 32 \times 3 32×32×3,表示图像的宽度、高度和三个颜色通道。


2. 编码器(Encoder)

2.1 编码器的作用

编码器的任务是将高维度的输入图像映射为低维度的潜在特征表示。它通过卷积神经网络(CNN)提取输入图像的特征,并将这些特征压缩到较低维度。

2.2 数据流与维度变化

32 × 32 × 3 32 \times 32 \times 3 32×32×3 的输入图像为例,经过几层卷积操作,编码器将其压缩成一个特征图(Feature Map)。假设经过 CNN 编码后,特征图的输出维度为 8 × 8 × 64 8 \times 8 \times 64 8×8×64,即:

  • 8 × 8 8 \times 8 8×8 的空间分辨率
  • 64 个特征通道,表示不同的特征。
2.3 编码器输出

编码器输出的这个 8 × 8 × 64 8 \times 8 \times 64 8×8×64 特征图是连续的,即每个像素位置的特征表示为 64 维的向量。这时的输出记作 z e ( x ) z_e(x) ze(x)


3. 量化器(Quantizer)

量化器是 VQ-VAE 的关键组件,它负责将编码器输出的连续表示离散化。这个过程称为向量量化(Vector Quantization),具体使用了一个 代码本体(Codebook)

3.1 代码本体(Codebook)是什么?

代码本体 是一个预定义的向量集合,存储了所有可能的离散表示。这些向量就像是一个词汇表,用来代替连续的特征向量。

  • 初始化:代码本体中的向量通常是随机初始化的,经过训练逐步调整。这些向量的个数(即词汇表大小)是超参数,假设代码本体的大小为 512 512 512,即有 512 个不同的向量。
  • 每个向量的维度与编码器输出的维度一致,例如每个向量的大小为 64 维。所以,代码本体的维度为 512 × 64 512 \times 64 512×64,表示有 512 个 64 维向量。
3.2 向量量化的过程

量化器的任务是将编码器输出的每个连续特征向量映射为代码本体中的一个离散向量。

  • 量化过程:对编码器输出的每个 8 × 8 8 \times 8 8×8 空间位置中的 64 维特征向量,量化器会从代码本体中找到最接近的向量,并将其替代。
  • 最近邻搜索:量化器计算编码器输出 z e ( x ) z_e(x) ze(x) 与代码本体中每个向量的距离,选择最相似的向量 e i e_i ei 替代原始的连续向量。这一过程记作 z q ( x ) z_q(x) zq(x),即量化后的表示。

公式表示

z q ( x ) = argmin e i ∈ E ∣ ∣ z e ( x ) − e i ∣ ∣ 2 z_q(x) = \text{argmin}_{e_i \in E} || z_e(x) - e_i ||_2 zq(x)=argmineiE∣∣ze(x)ei2

其中, E E E 是代码本体的所有向量集合, e i e_i ei 表示某个代码向量。

3.3 输出维度

量化后的输出维度保持不变,仍然是 8 × 8 × 64 8 \times 8 \times 64 8×8×64,但每个 64 维的向量现在是代码本体中某个离散的向量,而不再是连续的编码器输出。

3.4 q(z|x) 的作用

q ( z ∣ x ) q(z|x) q(zx) 是量化器的概率分布,它表示给定输入 x x x 时,选择哪个离散代码向量 z z z。在实际中,这个选择过程可以视为一个非参数化的过程,通过最近邻搜索选择最接近的代码本体向量。


4. 解码器(Decoder)

4.1 解码器的作用

解码器负责将量化后的离散向量表示 z q ( x ) z_q(x) zq(x) 转换回原始图像空间。解码器通常也是一个 CNN,它通过反卷积操作(up-sampling),将低维度的离散表示恢复为原始数据的高分辨率表示。

4.2 数据流与维度变化

解码器接收量化后的 8 × 8 × 64 8 \times 8 \times 64 8×8×64 的张量,通过多层反卷积操作,将其逐步恢复为原始分辨率的图像。最终,解码器输出的图像维度为 32 × 32 × 3 32 \times 32 \times 3 32×32×3,即重建的图像。


5. 损失函数

VQ-VAE 的训练过程中使用了三个主要的损失函数,分别负责不同的目标:

5.1 重构损失(Reconstruction Loss)

重构损失衡量解码器生成的图像与输入图像之间的差异。这个损失通常使用均方误差(MSE),用于优化解码器,使生成的图像与输入尽可能相似。

L rec = ∣ ∣ x − x ^ ∣ ∣ 2 2 L_{\text{rec}} = ||x - \hat{x}||_2^2 Lrec=∣∣xx^22

其中, x x x 是原始图像, x ^ \hat{x} x^ 是解码器生成的图像。

5.2 代码本体损失(Codebook Loss)

为了确保编码器的输出 z e ( x ) z_e(x) ze(x) 可以被量化为代码本体中的向量,模型需要一个损失项来鼓励编码器输出接近这些离散代码。这通过一个距离度量来实现。

L vq = ∣ ∣ sg [ z e ( x ) ] − e ∣ ∣ 2 2 L_{\text{vq}} = || \text{sg}[z_e(x)] - e ||_2^2 Lvq=∣∣sg[ze(x)]e22

其中, sg \text{sg} sg 表示“停止梯度”,即该项在反向传播时不会更新代码本体中的向量。

5.3 承诺损失(Commitment Loss)

承诺损失是为了约束编码器输出,使其尽量保持在代码本体的离散空间附近。该项损失防止编码器在连续空间中生成与代码本体相距过远的特征向量。

L com = ∣ ∣ z e ( x ) − sg [ e ] ∣ ∣ 2 2 L_{\text{com}} = ||z_e(x) - \text{sg}[e]||_2^2 Lcom=∣∣ze(x)sg[e]22

5.4 最终损失函数

最终的损失函数是上述三个损失的加权和,模型通过最小化该损失来优化编码器、量化器和解码器的参数。

L = L rec + L vq + β L com L = L_{\text{rec}} + L_{\text{vq}} + \beta L_{\text{com}} L=Lrec+Lvq+βLcom

其中, β \beta β 是控制承诺损失强度的超参数。


6. 训练过程

  • 代码本体的初始化:代码本体中的向量初始为随机向量,并且在训练过程中逐渐调整。
  • 梯度传播:由于量化器的选择是一个离散过程,无法直接对量化器的选择进行反向传播,因此使用了直通估计器(Straight-Through Estimator) 技术。这一技术跳过不可导的量化步骤,使得梯度能够从解码器通过量化器回传到编码器。

总结

VQ-VAE 是一种基于向量量化的自编码器,通过将连续潜在空间表示离散化,利用代码本体存储离散的表示向量。其训练过程通过优化重构损失、代码本体损失和承诺损失,最终生成高质量的重建图像。通过这种离散化的表示,VQ-VAE 在生成任务和特征压缩等方面具有独特的优势。

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

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

相关文章

IP 数据包分包组包

为什么要分包 由于数据链路层MTU的限制,对于较⼤的IP数据包要进⾏分包. 什么是MTU MTU相当于发快递时对包裹尺⼨的限制.这个限制是不同的数据链路对应的物理层,产⽣的限制. • 以太⽹帧中的数据⻓度规定最⼩46字节,最⼤1500字节,ARP数据包的⻓度不够46字节,要在后⾯补填 充…

云栖实录 | 开源大数据全面升级:Native 核心引擎、Serverless 化、湖仓架构引领云上大数据发展

本文根据2024云栖大会实录整理而成,演讲信息如下: 演讲人: 王 峰 | 阿里云智能集团研究员、开源大数据平台负责人 李 钰|阿里云智能集团资深技术专家 范 振|阿里云智能集团高级技术专家 李劲松|阿里云…

MongoDB聚合操作及索引底层原理

目录 链接:https://note.youdao.com/ynoteshare/index.html?id=50fdb657a9b06950fa255a82555b44a6&type=note&_time=1727951783296 本节课的内容: 聚合操作: 聚合管道操作: ​编辑 $match 进行文档筛选 ​编辑 将筛选和投影结合使用: ​编辑 多条件匹配: …

【AI】AIOT简介

随着技术的快速发展,人工智能AI和物联网IoT已经成为当今最热门的技术领域。AIOT是人工智能和物联网的结合,使物联网设备更加智能化,能够进行自主决策和学习的技术。 通过物联网产生、收集来自不同维度的、海量的数据存储于云端、边缘端&#…

数据治理006-数据标准的管理

元数据的分类和标准有哪些? 一、元数据的分类 元数据可以根据其描述的对象和属性不同,被分为不同的类型。以下是几种常见的元数据分类方法: 基于数据的类型:根据数据的类型,元数据可以被分为结构化元数据、非结构化元…

SQL连接Python

对于运营部门的Yoyo来说,她想要知道夜曲优选的订单都来自哪些省份,每个省份的总订单数以及总订单金额分别是多少。 这时小鹿就会通过SQL对连接的数据库进行查询,再将结果传递给Python处理,并帮助Yoyo生成可视化图表。 我们先来快…

拆解维修飞科剃须刀

原因 用了好几年的剃须刀,经过一次更换电池。后来上面的盖帽松动,无法合盖,经过把弹片矫正后修复。最近一次”大力出奇迹“的操作直接断送了这个老伤员最后的可能性。最终只能花了将近十块大洋买了一套盖着和中间座。简单更换了一下。 记录…

目前最好用的爬虫软件是那个?

作为一名数据工程师,三天两头要采集数据,用过十几种爬虫软件,也用过Python爬虫库,还是建议新手使用现成的软件比较方便。 这里推荐3款不错的自动化爬虫工具,八爪鱼、亮数据、Web Scraper 1. 八爪鱼爬虫 八爪鱼爬虫是一…

Linux:深入理解冯诺依曼结构与操作系统

目录 1. 冯诺依曼体系结构 1.1 结构分析 1.2 存储结构分布图 2. 操作系统 2.1 概念 2.2 如何管理 2.3 什么是系统调用和库函数 1. 冯诺依曼体系结构 1.1 结构分析 不管是何种计算机,如个人笔记本电脑,服务器,都是遵循冯诺依曼结构。…

可视化图表与源代码显示配置项及页面的动态调整功能分析

可视化图表与源代码显示配置项及页面的动态调整功能分析 文章目录 可视化图表与源代码显示配置项及页面的动态调整功能分析1.分析图表源代码2.分析源代码显示功能**完整代码参考:** 3.分析源代码显示及动态调整**完整代码参考:** 4.分析代码编辑器及运行…

华为云LTS日志上报至观测云最佳实践

华为云LTS简介 华为云云日志服务(Log Tank Service,简称 LTS),用于收集来自主机和云服务的日志数据,通过海量日志数据的分析与处理,可以将云服务和应用程序的可用性和性能最大化,为您提供实时、…

基于SSM的爱心慈善公益网站的设计与实现

文未可获取一份本项目的java源码和数据库参考。 选题意义 随着经济的不断进步,发展各种进行公益事业的渠道不断的出现,作为一个礼仪之邦,中华民族一直秉承先人的团结与友善精神,对社会和他人给予帮助关怀。但中国的公益事业相对…

【AIGC】2022-CVPR-利用潜在扩散模型进行高分辨率图像合成

2022-CVPR-High-Resolution Image Synthesis with Latent Diffusion Models 利用潜在扩散模型进行高分辨率图像合成摘要1. 引言2. 相关工作3. 方法3.1. 感知图像压缩3.2. 潜在扩散模型3.3. 调节机制 4. 实验4.1. 关于感知压缩权衡4.2. 利用潜在扩散生成图像4.3. 条件潜在扩散4.…

防sql注入的网站登录系统设计与实现

课程名称 网络安全 大作业名称 防sql注入的网站登录系统设计与实现 姓名 学号 班级 大 作 业 要 求 结合mysql数据库设计一个web登录页面密码需密文存放(可以采用hash方式,建议用sha1或md5加盐)采用服务器端的验证码&#…

基于Hive和Hadoop的招聘分析系统

本项目是一个基于大数据技术的招聘分析系统,旨在为用户提供全面的招聘信息和深入的职位市场分析。系统采用 Hadoop 平台进行大规模数据存储和处理,利用 MapReduce 进行数据分析和处理,通过 Sqoop 实现数据的导入导出,以 Spark 为核…

英集芯IP5911:集成锂电池充电管理和检测唤醒功能的低功耗8位MCU芯片

英集芯IP5911是一款集成锂电池充电管理、咪头检测唤醒、负载电阻插拔和阻值检测等功能的8bit MCU芯片。其封装采用QFN16,应用时仅需极少的外围器件,就能够有效减小整体方案的尺寸,降低BOM成本,为小型电子设备提供高集成度的解决方…

【常读常悟】《大数据之路-阿里巴巴大数据实践》一书读书摘要

【常读常悟】《大数据之路-阿里巴巴大数据实践》一书读书摘要 1、背景2、目录结构3、数据加工链路4、章节摘要4.1 第2章 日志采集4.1.1 日志采集方案4.1.2 采集指标 4.2 第3章 数据同步4.2.1 数据的特点4.2.2 数据同步的三种方式4.2.3 数据同步的最佳实践 4.3 第4章 离线数据开…

以太网交换安全:端口安全

一、端口安全介绍 端口安全是一种网络设备防护措施,通过将接口学习到的动态MAC地址转换为安全MAC地址(包括安全动态MAC和Sticky MAC),阻止除安全MAC和静态MAC之外的主机通过本接口和设备通信,从而增强设备的安全性。以…

基于muduo库函数实现protobuf协议的通信

文章目录 先定义具体的业务请求类型2. 实现服务端提供的服务protobuf_server.cppprotobuf_client.cpp 建议先去了解muduo库和protobuf协议: Protobuf库的使用Muduo库介绍及使用 先定义具体的业务请求类型 先使用protobuf库创建我们所要完成的业务请求类型&#xf…

YOLOv11改进 | 主干篇 | YOLOv11引入MobileNetV4

1. MobileNetV4介绍 1.1 摘要: 我们推出了最新一代的 MobileNet,称为 MobileNetV4 (MNv4),具有适用于移动设备的通用高效架构设计。 在其核心,我们引入了通用倒瓶颈(UIB)搜索块,这是一种统一且…