一文读懂OpenGVLab带来的最新视觉预训练框架

大模型技术论文不断,每个月总会新增上千篇。本专栏精选论文重点解读,主题还是围绕着行业实践和工程量产。若在某个环节出现卡点,可以回到大模型必备腔调或者LLM背后的基础模型重新阅读。而最新科技(Mamba,xLSTM,KAN)则提供了大模型领域最新技术跟踪。若对于具身智能感兴趣的请移步具身智能专栏。技术宅麻烦死磕AI架构设计。

在过去的十年中,ImageNet预训练的视觉模型显著提高了计算机视觉水平,在各种视觉任务中不断取得突破。ImageNet的成功激发了人们进一步探索从头开始预训练视觉模型的更好方法。最近,预训练的重点已从手动注释数据转移到大规模的网络爬虫图像文本数据。这一转变的一个关键里程碑是CLIP,它利用的图像-文本对的数据比ImageNet大数百倍,在各种任务中提供卓越的性能,并逐渐成为视觉模型预训练的主流方法。

基于这一趋势,人们对探索图像-文本交错的数据的兴趣越来越大,这在互联网上更为普遍。与CLIP中使用的结构化图像-文本对不同,这种交错数据是自由格式和非配对的,规模更大,文本信息更丰富。充分利用这些图像-文本交错的数据对于进一步大规模改进视觉模型预训练是必要的。

一图读懂

这张图片完整的对比了新模型与CLIP的差异。(a)展示了来自CLIP的对比学习框架,而(b)展示了新颖的LCL预训练框架。整体而言,与CLIP相比,LCL可以在训练视觉编码器的时候使用图像和文本交叉的训练数据。值得注意的是这两个框架在训练完毕的时候,可以将其中的text-encoder或者使用的大模型丢弃。

(c)则是展示了多模态的增量训练过程,将训练好的视觉编码器有选择地冻结或微调,然后按照传统的训练模型进行。当然这个过程也是支持图像-文本的交错训练数据。但是,其主要目标是使预训练的视觉编码器和大语言模型保持一致。

研究人员提出这种训练框架的思路在于自然语言处理最近一项研究表明,现代语言模型的成功源于将训练数据集压缩为模型参数。这种压缩学习也适用于多模态领域,只是要压缩的数据从结构化纯文本扩展到图像-文本交错的数据。因为图像是原始像素和非结构化的,通常包含不必要和不可预测的细节。这些细节与高级语义任务无关,应该在压缩学习中丢弃。所以应该调整这种压缩算法,以便于能够适应图像数据的加入。另外文本-图像交错的学习数据的将会更好的提取语义抽象。

整体而言,Latent Compression Learning是一个新的视觉预训练框架,旨在通过最大化因果注意模型输出和输入之间的互信息来进行有效的潜在压缩学习。

两个随机变量的互信息(mutual Information,MI)度量了两个变量之间相互依赖的程度。具体来说,对于两个随机变量,MI是一个随机变量由于已知另一个随机变量而减少的“信息量”(单位通常为比特)。互信息的概念与随机变量的熵紧密相关,熵是信息论中的基本概念,它量化的是随机变量中所包含的“信息量”。

框架的核心思想是通过因果注意模型来实现潜在的信息压缩学习。

因果注意模型通常用于序列预测或生成任务,确保每个输出仅依赖于前面的输入

LCL 时的模型架构概览如上图所示。在交错的图像文本输入序列中,引入特殊标记 <BoI> 和 <EoI>,分别作为图像中视觉嵌入的开始和结束的特殊标记。原文采用 Vision Transformer (ViT) 作为视觉编码器,它输入一系列图像块并输出一系列潜在表示。这最为关键的是损失函数,也就是训练目标的设定。

目前优化目标可以分解为两部分:第一部分为对比学习,就是上图最上面的那根线,对比视觉“潜变量”和先前上下文的语义一致性(对比的对象是<BOI>标识的输出)。第二部分为自回归预测:就是传统文本生成的对比,大白话就是将生成的字符和预期的字符比较。综合两者的差异,反向的微调和训练模型。

这两个训练目标相互补充,学习到的视觉潜变量既保留了可以从先前上下文中预测的信息,又包含了预测后续上下文所需的信息,从而实现了有效的视觉预训练。

潜在压缩学习

自回归语言建模等同于压缩学习。假设 𝑔𝜙 是一个具有可学习参数 𝜙 的语言模型 (LM)。给定一个输入文本序列 𝑥=(</s>,𝑥1,𝑥2,…,𝑥𝑁) ,其中</s>是一个指示文本开头的特殊标记,模型根据前面的上下文输出 𝑦=𝑔𝜙⁢(𝑥)=(𝑦1,𝑦2,…,𝑦𝑁) 预测下一个标记:

而其中x的概率为:

该模型使用NLL损失进行优化,这等于最小化数据分布 𝑝 和模型分布 𝑞 之间的交叉熵:

然而在训练的过程中,却出现了塌方。研究人员发现将潜在压缩和最大熵约束相结合,完全等同于最大化模型输入和输出之间的互信息。

因此, 将𝐼使用作为优化目标可以实现潜在压缩,同时通过最大的熵约束避免视觉z的坍缩。压缩𝑧使模型提取有用的信息并丢弃图像的不可预测信息。同时,最大化𝐼⁢要求每个𝑦𝑘能从先前的潜伏𝑧中获得足够的信息来预测 𝑧𝑘 。每个 𝑧𝑘 都应该携带可预测的信息。

这保证了图像表示能够将丰富的语义信息编码,当然这些编码和文本对齐。假设通过图像表示学习到的上述属性是视觉语言预训练所需要的,因此使用方程该方程作为我们的预训练目标。参数 𝜙 和 𝜃 在此目标下共同优化。直观地,视觉编码器 𝑓𝜃 学习通过高级抽象来表示图像,而因果注意力模型 𝑔𝜙 学习压缩数据集的高级抽象。

最终的效果

LCL首次探索了使用交错图像文本数据,进行视觉模型预训练。这篇文章从理论上证明了latent compression等价于最大化因果模型的输入和输出之间的相互信息,并将该目标进一步分解为两个基本的训练任务(对比学习+生成任务),最终得到了更鲁棒的视觉表征。

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

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

相关文章

.NET周刊【6月第3期 2024-06-18】

国内文章 记一次 .NET某游戏币自助机后端 内存暴涨分析 https://www.cnblogs.com/huangxincheng/p/18243233 文章讨论了程序中非托管内存暴涨的问题。作者描述了友人发现内存问题并请他帮助分析的背景&#xff0c;利用WinDbg工具分析Linux平台上的内存泄漏情况。文章介绍了如…

潮玩宇宙大逃杀APP系统开发成品案例分享指南

这是一款多人游戏&#xff0c;玩家需要选择一个房间躲避杀手。满足人数后&#xff0c;杀手会随机挑选一个房间杀掉里面所有的参与者&#xff0c;其他房间的幸存者将平均瓜分被杀房间的元宝。玩家在选中房间后&#xff0c;倒计时结束前可以自由切换不同房间。 软件项目开发成品…

LabVIEW开发为什么沟通需求非常重要

在LabVIEW开发项目中&#xff0c;需求沟通是项目成功的基石。以下是需求沟通的重要性及其原因&#xff1a; 明确项目目标&#xff1a; 定义清晰的目标&#xff1a;通过与用户的沟通&#xff0c;可以明确项目的目标和范围&#xff0c;确保开发团队理解用户的实际需求&#xff0c…

【Android-Compose】流式布局FlowRow 不能居中对齐的一种解决办法

问题描述&#xff1a; 在安卓Compose 开发中使用LazyColumn 流式布局 FlowRow 有时候比延迟网格布局更灵活&#xff0c;但是也可能出现自动流向下一行之后&#xff0c;末尾处留下一些小空白。如图&#xff1a; 问题解决&#xff1a; 为了尽可能居中对齐&#xff0c;我们可…

专业技能篇---计算机网络篇

文章目录 前言计算机网络基础一、网络分层模型 HTTP一、从输入URL到页面显示发生了什么&#xff1f;二、Http的状态码有哪些&#xff1f;三、 HTTP与HTTPS有什么区别&#xff1f;四、URI 和 URL 的区别是什么?五、Cookie和Session有什么区别&#xff1f;六、GET与POST 前言 主…

dmhs同步因目的端表自增列报错解决方法

dmhs同步因目的端表自增列报错解决方法 1 dmhs copy 装载数据时报错 HY000 CODE:-27232 配置源端捕获器cpt 1 dmhs copy 装载数据时报错 HY000 CODE:-2723 ERR:Only if specified in the column list and SET IDENTITY INSERT is ON, then identity column could be assigned …

洛谷 P3379:最近公共祖先(LCA)← RMQ+欧拉序

【题目来源】https://www.luogu.com.cn/problem/P3379【题目描述】 如题&#xff0c;给定一棵有根多叉树&#xff0c;请求出指定两个点直接最近的公共祖先。【输入格式】 第一行包含三个正整数 N,M,S&#xff0c;分别表示树的结点个数、询问的个数和树根结点的序号。 接下来 N−…

AI大模型的战场:通用大模型VS垂直大模型,谁会赢?

人不走空 &#x1f308;个人主页&#xff1a;人不走空 &#x1f496;系列专栏&#xff1a;算法专题 ⏰诗词歌赋&#xff1a;斯是陋室&#xff0c;惟吾德馨 目录 &#x1f308;个人主页&#xff1a;人不走空 &#x1f496;系列专栏&#xff1a;算法专题 ⏰诗词歌…

二、利用YOLOv8解决现实世界的问题

Ultralytics Solutions提供顶尖的YOLO模型应用&#xff0c;提供现实世界的解决方案如&#xff1a;目标记数&#xff0c;模糊和安全系统&#xff0c;提升效率和准确率在各种工业中。探索YOLOv8在实用性和有效性上的强大功能。 解决方案&#xff1a; 下面展示利用Ultralytics So…

使用vscode插件du-i18n处理前端项目国际化翻译多语言

前段时间我写了一篇关于项目国际化使用I18n组件的文章&#xff0c;Vue3 TS 使用国际化组件I18n&#xff0c;那个时候还没真正在项目中使用&#xff0c;需求排期还没有定&#xff0c;相当于是预研。 当时就看了一下大概怎么用&#xff0c;改了一个简单的页面&#xff0c;最近需…

【Python系列】Python 中的日期和时间处理

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

Vue3模拟国足18强赛抽签

Vue3国足18强赛抽签 国足遇到这个对阵&#xff0c;能顺利出现吗&#xff1f; 1、系统演示 Vue3模拟国足18强赛抽签 2、关键代码 开始抽签 <script setup> import FenDang from "/components/chouqian/FenDang.vue"; import {ref} from "vue";le…

看完轻松解决家里灰尘毛絮多难题?除粉尘的空气净化器品牌分享

家里的空气中弥漫着灰尘和毛絮&#xff0c;让人呼吸不畅&#xff0c;也影响着家人的健康。灰尘中含有各种有害物质&#xff0c;如细菌、病毒、花粉等&#xff0c;长期吸入会导致呼吸道疾病、皮肤过敏等问题。尤其是对于有宠物、孩子、过敏人群来说&#xff0c;空气质量更是至关…

关于办公软件的使用

第一部分&#xff1a; 常用函数的使用 在使用的地方&#xff0c;输入SUM(B2:F2)回车 第二部分&#xff1a; 自定义函数的使用 1、打开 宏编辑 2、 自定义函数方法 3、自定义函数的使用和常用函数一样&#xff1a; 在使用的地方&#xff0c;输入计算面积(A3&#xff0c;B3)…

游戏试玩站打码zq平台系统可运营的任务网源码

安装说明 1.恢复数据&#xff1b; 2.数据连接库配置路径&#xff1a;protected\config\mail.php 文件中修改第60行 &#xff08;记得不要用记事本修改&#xff0c;否则可能会出现验证码显示不了问题&#xff0c;建议用Notepad&#xff09; 3.浏览器访问输入 127.0.0.2 显示界…

Hype4.0 for Mac软件下载-Hype for Mac HTML5 创作工具下载附加详细安装步骤

Hype 4 Pro Mac正式版是款功能实用的动画创作工具。Hype 4 Pro Mac最新版可以帮您轻松创建令人惊叹的动画和交互式网页内容。并且Hype 4 Pro Mac还可被设计师用来创建动画&#xff0c;为网页、信息图形、演示文稿、数字杂志、广告、iBooks、教育内容、应用程序原型、作品集、动…

Flume基础教程

Apache Flume教程 资料来源&#xff1a;Apache Flume - Introduction (tutorialspoint.com) Flume是一个标准的、简单的、健壮的、灵活的、可扩展的工具&#xff0c;用于将从各种数据生产者(web服务器)中所产生的数据抽取到Hadoop中。在本教程中&#xff0c;我们将使用简单的…

软件测试技术(一):软件测试流程

软件测试流程 软件测试流程如下&#xff1a; 测试计划测试设计测试执行 单元测试集成测试确认测试系统测试验收测试回归测试验证活动 测试计划 测试计划由测试负责人来编写&#xff0c;用于确定各个测试阶段的目标和策略。这个过程将输出测试计划&#xff0c;明确要完成的测…

ch552g使用torch-pad测试触摸按键遇到的问题

基本工作原理 通过设置好功能在寄存器和控制寄存器检测引脚输入的值。 实际检测阶段分为3个步骤&#xff1a;第一阶段&#xff1a;选择需要检测的阶段&#xff0c;选择扫描周期1或2ms&#xff0c;开启触摸按键中断&#xff0c;然后在87us内为充电准备阶段&#xff0c;87us内数…

Matplotlib(小案例)

1、3D表面形状的绘制 from mpl_toolkits.mplot3d import Axes3D import matplotlib.pyplot as plt import numpy as np import matplotlib as mplfigplt.figure() axfig.add_subplot(111,projection3d)unp.linspace(0,2*np.pi,100) vnp.linspace(0,np.pi,100) x10*np.outer(n…