苏剑林“闭门造车”之多模态思路浅谈思考
原文来自科学空间苏剑林 “闭门造车”之多模态思路浅谈(一):无损输入和“闭门造车”之多模态思路浅谈(二):自回归,学习后总结。
文章目录
- “闭门造车”之多模态思路浅谈(一):无损输入
- 文本和图像生成的区别
- 图像离散化,套文本生成框架
- 压缩序列造成信息损失
- 将图像视为连续型向量无损压缩
- Patch输入后的操作
- “闭门造车”之多模态思路浅谈(二):自回归
- 图像生成中的“无损”是什么要求
- 图像自回归生成(AutoRegressive)
- 加入噪声让 p ( x t ∣ x < t ) p(x_{t}|x_{<t}) p(xt∣x<t)接近高斯分布
- 加噪后的效率问题和解决思路
- 分patch排序方便自回归学习
“闭门造车”之多模态思路浅谈(一):无损输入
文本和图像生成的区别
文本生成的研究方向是设计语言模型,建模条件概率 p ( x t ∣ x 1 , . . . , x t − 1 ) p(x_{t}|x_{1},...,x_{t-1}) p(xt∣x1,...,xt−1)。不同的语言模型都是为了与该条件概率近似。对于离散的句子 ( x 1 , x 2 , . . . , x l ) (x_{1}, x_{2},..., x_{l}) (x1,x2,...,xl)每个 x t x_{t} xt都来自有限词表,条件概率本质是分类,在神经网络拟合之下,任何分类任务都能精确建模。
词表(Vocabulary):有限的集合,包含了所有可能的token,词表将文本中token映射到唯一的索引
码本(codebook):有限的集合,包含了所有可能的向量,码本将连续的潜在表示映射到离散的向量索引
图像生成并无清晰的研究方向,不同的模型建模理论也并不相同。造成图像生成手段多样化的根本原因,是对连续变量进行概率建模的困难性。若以文本的思路对图像进行建模,图像可看作连续型向量 ( x 1 , x 2 , . . . , x l ) (x_{1}, x_{2},..., x_{l}) (x1,x2,...,xl),概率密度必要条件是非负且 ∫ p ( x t ∣ x 1 , . . . , x t − 1 ) d x t = 1 \int p(x_{t}|x_{1},...,x_{t-1})dx_{t}=1 ∫p(xt∣x1,...,xt−1)dxt=1。神经网络可以拟合函数,但不能拟合概率密度。
图像离散化,套文本生成框架
图像在像素空间上可以看作离散的, n × n n\times n n×n的图像可以看作长度 3 n 2 3n^{2} 3n2,vocab_size是256的句子,套用文本生成框架能work,比如PixelRNN、PixelCNN和Sparse Transformer。
在像素空间操作序列长生成慢,考虑“先压缩,后生成”。利用AutoEncoder压缩序列长度,同时要保证离散性就不能用VAE而要用VQ-VAE、VQ-GAN等。VQ-VAE/GAN就相当于“图像Tokenizer”的角色,压缩后可通过Decode恢复原始图片,比如LWM和AnyGPT。
VAE压缩序列:潜在空间是连续的,使用正态分布的推断来生成潜在变量。
VQ-VAE压缩序列:潜在空间是离散的,使用向量量化来替代VAE中的连续潜在表示,避免了VAE中可能存在的潜在空间重参数化问题。文本tokenizer将连续文本转换为离散的符号序列,图像tokenizer将连续的像素空间映射到离散的符号空间。
压缩序列造成信息损失
对于 64 × 64 64\times 64 64×64的ImageNet图像,平均总信息熵 64 × 64 × 3 × 3 64\times64\times3\times3 64×64×3×3bit,对于vocab_size为V的词表,想要将编码长度压缩为L,实现无损压缩至少满足 L × l o g 2 V ≥ 64 × 64 × 3 × 3 L \times log_{2}V \ge 64\times64\times3\times3 L×log2V≥64×64×3×3,在实际应用中,若压缩到 16 × 16 16\times16 16×16那么V至少是 1 0 43 10^{43} 1043量级,必然会产生信息损失。
无损压缩必然是需要精益探索的。
将图像视为连续型向量无损压缩
离散型和连续型生成有所不同,离散型自回归生成的熵源是seq_len和vocab_size,而vocab_size的贡献是对数增长的(贡献小)所以主要靠seq_len,但是seq_len等价于成本(序列越长熵越大,计算步骤和推理时间更多),所以离散型的熵源是昂贵的;基于变换的连续型生成的熵源是高斯噪声,原则上可以无穷无尽,是廉价且可并行的。因此,扩散模型导出可逆ODE方程将标准高斯分布映射为目标分布可获取等多熵源。
高斯噪声从正态分布中采样的随机数,连续分布有无穷多的取值
任何编码手段都可能会造成失真,因此将原始图像切成patch输入是较为稳妥的方法(输入原图才能保证信息的完整)。要让模型具备图像生成能力,还需考虑到语义一致下细节差异,通过加噪和去噪调节。

Patch输入后的操作
直接用原始patch作为输入
保留更多信息。避免特征间的孤立。
用预训练的编码器特征作为输入
在LDM的自编码器降维后的特征空间进行扩散
“闭门造车”之多模态思路浅谈(二):自回归
根据(一)可知离散化有严重的信息损失,输入连续性特征是更有前景的方案,但是连续性输入会增加图像生成的难度。只有离散化才能套用文本的自回归框架。
目标:1. 寻找更好的离散化方式(信息损失少) 2. 设计适合图像连续型输入的自回归框架
图像生成中的“无损”是什么要求
不同的Patchify可能会有不同程度的信息损失,其中VQ的信息损失往往是最严重且最明确的。如果图像在输入模型之前就有明显信息损失,那么必然会限制模型的图像理解能力。所以,为了更好地适应各种图像理解任务,多模态模型理想的图像输入方式应该就是尽可能无损的连续型特征,由模型自己在计算过程中根据上下文决定要损失什么。自适应、动态地选择
图像自回归生成(AutoRegressive)
DDPM本质是自回归模型,将单个图像设定为 x T , x T − 1 , . . . , x 1 , x 0 x_{T},x_{T-1},...,x_{1},x_{0} xT,xT−1,...,x1,x0,建模 p ( x t − 1 ∣ x t ) p(x_{t-1}|x_{t}) p(xt−1∣xt),这一过程本质上也是Teacher Forcing,所以也有Exposure Bias问题。
可能解决Exposure Bias的方法:Scheduled Sampling、Curriculum Learning、Reinforcement Learning和Beam Search
为什么Teacher Forcing存在Exposure Bias问题?Teacher Forcing模式在训练过程中输入是真实的前 t−1个元素(来自训练数据)预测第t个数据,与真实值计算损失。但在推理时,需要根据生成的内容逐步预测下一个元素。导致训练和推理的输入分布不一致,推理时受生成的低质量内容干扰,导致错误累积生成效果变差,这就是Exposure Bias。
因此,对于图像来说,问题并不是该不该做自回归,而是以何种方式来更好地去做自回归。它的作用不仅是为多模态模型赋予图像生成能力,而且还是一个重要的无监督学习途径。
加入噪声让 p ( x t ∣ x < t ) p(x_{t}|x_{<t}) p(xt∣x<t)接近高斯分布
扩散模型的核心思想正是“通过渐进式加噪让平方误差成为合理的损失函数”,对整张图片加噪,当然,也有对patch加噪的。

加噪后的效率问题和解决思路
学习效率这种t−1时刻的加噪图预测t时刻的加噪图的训练目标,需要对噪声进行双重采样,这会导致更大的训练方差,需要更多的训练步数才能把这个方差降下来,经过一系列降方差技巧后,更高效的方式是直接预测原图。
计算效率假如每个Patch通过加噪变成T个Patch,那么序列长度就变为原来的T倍,这样一来训练成本和推理成本都会显著增加。
1、扩散模型的理论和实践告诉我们,要预测xt的话只用xt−1就够了,可以忽略更早的输入,这意味同一个Patch的不同加噪结果之间不需要相互Attend;2、出于减少冗余的考虑,对于不同Patch之间的预测以及后面文本Token的预测,我们只需要Attend到没加噪的Patch。

如果允许两个不同的模型串联(但仍然可以端到端训练),那么我们还可以把扩散模型单独分离出来,Transformer只负责处理没有噪声的Patch,Transformer的输出则作为扩散模型的条件,如下图所示:

分patch排序方便自回归学习
大部份Patchify方法的输出特征依然保留了这个二维性质,而自回归生成则是单向的,所以需要指定一个生成顺序。常见的顺序比如 1)从左往右再从上往下 2)从中心到四周螺旋 3)从左上角出发走“Z”字 等等。“分Patch排序”是将图像解构为一个可供自回归学习的一维序列的过程,更通俗点就是将图像从二维序列转成一维序列。
相关文章:
苏剑林“闭门造车”之多模态思路浅谈思考
原文来自科学空间苏剑林 “闭门造车”之多模态思路浅谈(一):无损输入和“闭门造车”之多模态思路浅谈(二):自回归,学习后总结。 文章目录 “闭门造车”之多模态思路浅谈(一ÿ…...
绿联nas docker 安装 rocketmq 队列。亲测可用
首先拉取docker 镜像,所需镜像如下: 安装 nameserver docker run -d -p 9876:9876 \ -v ${HOME}/docker/software/rocketmq/data/namesrv/logs:/opt/logs \ -v ${HOME}/docker/software/rocketmq/data/namesrv/store:/opt/store \ --name rmqnamesrv \ …...
C++(23):unreachable
C++23在头文件 "><utility>定义了std::unreachable(),用于指示编译器,该段代码不应该被允许,因此编译器可以对该位置进行优化,如果一旦允许了该位置的代码,行为未定义: #include <utility> #include <iostream>using namespace std;int func(…...
初等数论--欧几里得算法
1. 定义 u 0 u 1 ∈ Z , u 1 ≠ 0 , u 1 ∤ u 0 u_0\ u_1\in Z,u_1 \ne0,u_1 \nmid u_0 u0 u1∈Z,u10,u1∤u0 根据带余除法可得下面一系列等式 u 0 q 0 u 1 u 2 0 < u 2 < ∣ u 1 ∣ u 1 q 0 u 2 u 3 0 < u 3 < u 2 ⋯ u k − 1 q k − 1 u k …...
阿里云前端自动化部署流程指南
本文详细介绍从前端代码开发到阿里云 OSS/CDN 自动化部署的完整流程。 一、流程概览 © ivwdcwso (ID: u012172506) 1.1 部署流程图 #mermaid-svg-H1LBBmwTHAAF3QTL {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermai…...
EXCEL解决IF函数“您已为此函数输入太多个参数”的报错
IF函数的基本结构是IF(条件, 值为真时的结果, 值为假时的结果),所以标准的IF函数最多只能有三个参数。当用户输入的参数超过三个时,Excel就会报这个错误。比如多个IF语句叠加,但可能在嵌套的过程中没有正确关闭每个IF函数的括号,导…...
CAS单点登录(第7版)18.日志和审计
如有疑问,请看视频:CAS单点登录(第7版) 日志和审计 Logging 概述 Logging CAS 提供了一个日志记录工具,用于记录重要信息事件,如身份验证成功和失败;可以对其进行自定义以生成用于故障排除的其他信息。…...
2025年软件测试面试题大全(附答案+文档)
🍅 点击文末小卡片,免费获取软件测试全套资料,资料在手,涨薪更快 一、测试基础 1、测试策略或测试包括哪些,测试要覆盖哪些方面 UI、功能、性能、可靠性、易用性、兼容性、安全性、安装卸载 2、设计测试用例的办法 …...
太空飞船任务,生成一个地球发射、火星着陆以及下一次发射窗口返回地球的动画3D代码
import numpy as np import matplotlib.pyplot as plt from matplotlib.animation import FuncAnimation from mpl_toolkits.mplot3d import Axes3D# 天体参数设置(简化模型) AU 1.5e8 # 天文单位(公里) earth_orbital_radius …...
IDEA——Mac版快捷键
目录 按键含义常用组合代码生成快捷键:代码追踪快捷键:高效编辑快捷键:代码重构快捷键:工具类快捷键:常规文件操作快捷键: 按键含义 ⌘ command Command键(⌘)相当于Windows中的Con…...
智能体系统(AI Agent System)是什么?——从概念解析到企业数字化转型的全景落地及投资视角
文章目录 一、 前言1.1 背景介绍1.2 写作目的 二、 智能体系统及相关概念解析2.1 智能体系统定义2.2 关键概念区分2.2.1 自主代理(Autonomous Agent)2.2.2 多智能体系统(MAS)2.2.3 人工智能/机器学习(AI/ML)…...
Vue 前端开发中的路由知识:从入门到精通
文章目录 引言1. Vue Router 简介1.1 安装 Vue Router1.2 配置 Vue Router1.3 在 Vue 实例中使用 Vue Router 2. 路由的基本用法2.1 路由映射2.2 路由视图2.3 路由链接 3. 动态路由3.1 动态路径参数3.2 访问动态参数3.3 响应路由参数的变化 4. 嵌套路由4.1 定义嵌套路由4.2 渲染…...
前端VUE+后端uwsgi 环境搭建
1整体架构 请求流程the web clinet--the web server->the socket->uwsgi--django 第一级的nginx并不是必须的,uwsgi完全可以完成整个的和浏览器交互的流程;在nginx上加上安全性或其他的限制,可以达到保护程序的作用;uWSGI本…...
I2C实践开发 ---【STM32-I2C-HDC1080温湿度采集系统】
I2C实践开发 — STM32-I2C-HDC1080温湿度采集系统 目录 I2C实践开发 --- STM32-I2C-HDC1080温湿度采集系统1. 引言2. 系统架构2.1 硬件架构2.2 软件架构 3. 代码分析3.1 I2C驱动文件 (i2c.h 和 i2c.c)3.2 HDC1080传感器驱动文件 (hdc1080.h 和 hdc1080.c) 4. 功能总结【HDC1080…...
【个人开发】deepspeed+Llama-factory 本地数据多卡Lora微调【完整教程】
文章目录 1.背景2.微调方式2.1 关键环境版本信息2.2 步骤2.2.1 下载llama-factory2.2.2 准备数据集2.2.3 微调模式2.2.3.1 zero-1微调2.2.3.2 zero-2微调2.2.3.3 zero-3微调2.2.3.4 单卡Lora微调 2.2.4 实验2.2.4.1 实验1:多GPU微调-zero12.2.4.2 实验2:…...
浏览器报错:无法访问此网站 无法找到xxx.xxx.net的DNS地址。正在诊断该问题。尝试运行Windows网络诊断。DNS_PROBE_STARTED
🤟致敬读者 🟩感谢阅读🟦希望我的文章能帮到您🟪如有兴趣可点关注了解更多内容 📘博主信息 点击标题👆有惊喜 📃文章前言 🔷文章均为学习和工作中整理的笔记,分享记录…...
【设计模式】 代理模式(静态代理、动态代理{JDK动态代理、JDK动态代理与CGLIB动态代理的区别})
代理模式 代理模式是一种结构型设计模式,它提供了一种替代访问的方法,即通过代理对象来间接访问目标对象。代理模式可以在不改变原始类代码的情况下,增加额外的功能,如权限控制、日志记录等。 静态代理 静态代理是指创建的或特…...
网络安全-攻击流程-用户层
用户层攻击主要针对操作系统中的用户空间应用程序及用户权限,利用软件漏洞、配置错误或用户行为弱点进行攻击。以下是常见的用户层攻击类型及其流程,以及防御措施: 1. 缓冲区溢出攻击 攻击流程: 目标识别:确定存在漏…...
网络安全等级保护测评(等保测评):全面指南与准备要点
等保测评,全称为“网络安全等级保护测评”,是根据《网络安全法》及《网络安全等级保护条例》等法律法规,对信息系统进行安全等级划分,并依据不同等级的安全保护要求,采用科学方法和技术手段,全面评估信息系…...
具身导航赋能智能物流!OpenBench:智能物流最后一公里语义导航新基准
作者:Junhui Wang, Dongjie Huo, Zehui Xu, Yongliang Shi, Yimin Yan, Yuanxin Wang, Chao Gao, Yan Qiao, Guyue Zhou 单位:澳门科技大学系统工程与协作实验室、智能科学与系统联合实验室,清华大学人工智能产业研究院(AIR&…...
Flask RESTful 示例
目录 1. 环境准备2. 安装依赖3. 修改main.py4. 运行应用5. API使用示例获取所有任务获取单个任务创建新任务更新任务删除任务 中文乱码问题: 下面创建一个简单的Flask RESTful API示例。首先,我们需要创建环境,安装必要的依赖,然后…...
C++:std::is_convertible
C++标志库中提供is_convertible,可以测试一种类型是否可以转换为另一只类型: template <class From, class To> struct is_convertible; 使用举例: #include <iostream> #include <string>using namespace std;struct A { }; struct B : A { };int main…...
基于uniapp+WebSocket实现聊天对话、消息监听、消息推送、聊天室等功能,多端兼容
基于 UniApp + WebSocket实现多端兼容的实时通讯系统,涵盖WebSocket连接建立、消息收发机制、多端兼容性配置、消息实时监听等功能,适配微信小程序、H5、Android、iOS等终端 目录 技术选型分析WebSocket协议优势UniApp跨平台特性WebSocket 基础实现连接管理消息收发连接…...
C++ 基础特性深度解析
目录 引言 一、命名空间(namespace) C 中的命名空间 与 C 语言的对比 二、缺省参数 C 中的缺省参数 与 C 语言的对比 三、引用(reference) C 中的引用 与 C 语言的对比 四、inline(内联函数…...
python如何将word的doc另存为docx
将 DOCX 文件另存为 DOCX 格式(Python 实现) 在 Python 中,你可以使用 python-docx 库来操作 Word 文档。不过需要注意的是,.doc 是旧的 Word 格式,而 .docx 是新的基于 XML 的格式。python-docx 只能处理 .docx 格式…...
【HarmonyOS 5 开发速记】如何获取用户信息(头像/昵称/手机号)
1.获取 authorizationCode: 2.利用 authorizationCode 获取 accessToken:文档中心 3.获取手机:文档中心 4.获取昵称头像:文档中心 首先创建 request 若要获取手机号,scope必填 phone,permissions 必填 …...
项目部署到Linux上时遇到的错误(Redis,MySQL,无法正确连接,地址占用问题)
Redis无法正确连接 在运行jar包时出现了这样的错误 查询得知问题核心在于Redis连接失败,具体原因是客户端发送了密码认证请求,但Redis服务器未设置密码 1.为Redis设置密码(匹配客户端配置) 步骤: 1).修…...
DingDing机器人群消息推送
文章目录 1 新建机器人2 API文档说明3 代码编写 1 新建机器人 点击群设置 下滑到群管理的机器人,点击进入 添加机器人 选择自定义Webhook服务 点击添加 设置安全设置,详见说明文档 成功后,记录Webhook 2 API文档说明 点击设置说明 查看自…...
django blank 与 null的区别
1.blank blank控制表单验证时是否允许字段为空 2.null null控制数据库层面是否为空 但是,要注意以下几点: Django的表单验证与null无关:null参数控制的是数据库层面字段是否可以为NULL,而blank参数控制的是Django表单验证时字…...
Python 训练营打卡 Day 47
注意力热力图可视化 在day 46代码的基础上,对比不同卷积层热力图可视化的结果 import torch import torch.nn as nn import torch.optim as optim from torchvision import datasets, transforms from torch.utils.data import DataLoader import matplotlib.pypl…...
