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.rhkb.cn/news/438454.html

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

相关文章

手机使用指南:如何在没有备份的情况下从 Android 设备恢复已删除的联系人

在本指南中,您将了解如何从 Android 手机内存中恢复已删除的联系人。Android 诞生、见证并征服了 80% 的智能手机行业。有些人可能将此称为“非常大胆的宣言”,但最近的统计数据完全支持我们的说法。灵活性、高度改进的可用性和快速性是 Android 操作系统…

Qt QWidget控件

目录 一、概述 二、Qwidget常用属性及函数介绍 2.1 enable 2.2 geometry 2.3 windowTitle 2.4 windowIcon 2.5 cursor 2.6 font 设置字体样式 2.7 toolTip 2.8 focusPolicy焦点策略 2.9 styleSheet 一、概述 widget翻译而来就是小控件,小部件。…

10.3作业

基于TCP的快查云词典 仿照有道云词典功能,实现一个自己的云词典功能,可以查询单词和发音。 服务器描述:服务器启动后,等待客户端连接,完成以下操作: 1.创建用户表、单词表、历史表 2.注册:接…

C++模拟实现vector容器【万字模拟✨】

更多精彩内容..... 🎉❤️播主の主页✨😘 Stark、-CSDN博客 本文所在专栏: 学习专栏C语言_Stark、的博客-CSDN博客 项目实战C系列_Stark、的博客-CSDN博客 数据结构与算法_Stark、的博客-CSDN博客 座右铭:梦想是一盏明灯&#xff…

mysql-索引笔记

索引 1、什么是索引 索引是对数据库中数据的一种结构化表示。它像一本书的目录,能够快速定位信息,而无需逐行扫描所有数据。 索引的出现其实就是为了提高数据查询的效率,就像书的目录一样。 2、索引的常见模型 2.1.哈希表 用一个哈希函…

828华为云征文|华为云 Flexus X 实例初体验

一直想有自己的一款的服务器,为了更好的进行家庭娱乐,甚至偶尔可以满足个人搭建开发环境的需求,直到接触到了华为云 Flexus X 云服务器。Flexus 云服务器 X 实例是面向中小企业和开发者打造的轻量级云服务器。提供快速应用部署和简易的管理能…

每日论文5—06TCAS2锁相环电流匹配的gain-boosting电荷泵

《Gain-Boosting Charge Pump for Current Matching in Phase-Locked Loop》 06TCAS2 本质上和cascode来增加输出电阻,从而减小电流变化的思路是一样的。这里用了放大器来增加输出电阻。具体做法如下图: 如图1(a),A3把Vb和Vx拉平&#xff0…

vscode安装及c++配置编译

1、VScode下载 VS Code官网下载地址:Visual Studio Code - Code Editing. Redefined。 2、安装中文插件 搜索chinese,点击install下载安装中文插件。 3、VS Code配置C/C开发环境 3.1、MinGW-w64下载 VS Code是一个高级的编辑器,只能用来写代…

基础算法--枚举

枚举算法是一种简单而有效的算法,它通过枚举所有可能的情况来解决问题。它通常用于解决问题规模比较小的问题,因为它的时间复杂度很高,随着问题的规模增加,算法的效率会急剧下降。 枚举算法的基本思路是通过循环遍历所有可能的情…

Rust和Go谁会更胜一筹

在国内,我认为Go语言会成为未来的主流,因为国内程序员号称码农,比较适合搬砖,而Rust对心智要求太高了,不适合搬砖。 就个人经验来看,Go语言简单,下限低,没有什么心智成本&#xff0c…

使用MTVerseXR SDK实现VR串流

1、概述​ MTVerseXR SDK 是摩尔线程GPU加速的虚拟现实(VR)流媒体平台,专门用于从远程服务器流式传输基于标准OpenXR的应用程序。MTVerseXR可以通过Wi-Fi和USB流式将VR内容从Windows服务器流式传输到XR客户端设备, 使相对性能低的VR客户端可…

【CSS in Depth 2 精译_043】6.5 CSS 中的粘性定位技术 + 本章小结

当前内容所在位置(可进入专栏查看其他译好的章节内容) 第一章 层叠、优先级与继承(已完结)第二章 相对单位(已完结)第三章 文档流与盒模型(已完结)第四章 Flexbox 布局(已…

【2022工业3D异常检测文献】AST: 基于归一化流的双射性产生不对称学生-教师异常检测方法

Asymmetric Student-Teacher Networks for Industrial Anomaly Detection 1、Background 所谓的学生-教师网络,首先,对教师进行训练,以学习语义嵌入的辅助性训练任务;其次,训练学生以匹配教师的输出。主要目的是让学生…

SpringBoot日志打印实践

背景 在项目当中,我们经常需要打印一些日志埋点信息,这些日志埋点信息,在后续软件的运维、稳定性建设中发挥了巨大的作用: 问题追踪:通过埋点日志中的关键信息,帮助定位系统异常原因系统监控:…

移动硬盘传输中断后无法识别:问题解析与数据恢复策略

一、移动硬盘传输中断后的无法识别现象 在日常的数据传输过程中,移动硬盘作为便携式的存储介质,扮演着举足轻重的角色。然而,当传输过程被意外中断,且移动硬盘随后无法被系统识别时,这无疑会给用户带来极大的困扰。你…

Stable Diffusion绘画 | 插件-Deforum:动态视频生成(上篇)

Deforum 与 AnimateDiff 不太一样, AnimateDiff 是生成丝滑变化视频的,而 Deforum 的丝滑程度远远没有 AnimateDiff 好。 它是根据对比前面一帧的画面,然后不断生成新的相似图片,来组合成一个完整的视频。 Deforum 的优点在于可…

Pikachu-Sql Inject-宽字节注入

基本概念 宽字节是相对于ascII这样单字节而言的;像 GB2312、GBK、GB18030、BIG5、Shift_JIS 等这些都是常说的宽字节,实际上只有两字节 GBK 是一种多字符的编码,通常来说,一个 gbk 编码汉字,占用2个字节。一个…

【一文理解】conda install pip install 区别

大部分情况下,conda install & pip install 二者安装的package都可以正常work,但是混装多种package后容易版本冲突,出现各种报错。 目录 检查机制 支持语言 库的位置 环境隔离 编译情况 检查机制 conda有严格的检查机制&#xff0c…

【C++】模拟实现红黑树

🦄个人主页:修修修也 🎏所属专栏:实战项目集 ⚙️操作环境:Visual Studio 2022 目录 一.了解项目功能 二.逐步实现项目功能模块及其逻辑详解 📌实现RBTreeNode类模板 🎏构造RBTreeNode类成员变量 🎏实现RBTreeNode类构…

图解C#高级教程(二):事件

在现实生活当中,有一些事情发生时,会连带另一些事情的发生。例如,当某国的总统发生换届时,不同党派会表现出不同的行为。两者构成了“因果”关系,因为发生了A,所以发生了B。在编程语言当中,具有…