大模型 Dalle2 学习三部曲(二)clip学习

clip论文比较长48页,但是clip模型本身又比较简单,效果又奇好,正所谓大道至简,我们来学习一下clip论文中的一些技巧,可以让我们快速加深对clip模型的理解,以及大模型对推荐带来革命性的变化。


clip结构

首选我们来看看clip的结构,如图clip结构比较直观,训练的时候把文本描述和图像分别过一个encoder。生成对应的向量,然后向量两两组对,对角线上的都为正样本,不在对角线上的为负样本。然后用个对比学习loss进行训练。

预测:

预测和训练的不同之处,把每个分类结合promote组成句子,然后和训练一样分别过encode,再求出图像和分类相似度最高的一个。后面我们再介绍一下promote 是如何制作的。

论文摘要,引言 要点

1,利用自然语言作为监督来源,提升了模型的通用性和可用性。

clip认为目前需要额外标记数据的监督形式限制了它们的通用性和可用性,因此直接从关于图像的原始文本中学习是一种有前途的替代方法。clip证明,预测标题与哪个图像相配的简单预训练任务是一种高效且可扩展的方式。

2,该模型在大多数任务上都能进行高效的迁移,clip在预训练之后,用于对下游任务的零样本迁移。clip通过在30多个不同的计算机视觉数据集上进行基准测试来研究对比这种方法的性能,涵盖了OCR、视频中的动作识别、地理定位和许多类型的细粒度对象分类等任务。发现通常无需进行任何特定数据集的训练,就能与完全监督的基准模型竞争

3,强调数据的规模的重要性。

clip指出弱监督模型与最近直接从自然语言中学习图像表示的探索之间的关键区别在于规模。在这项工作中,clip弥合了过去模型数据量不足的差距,通过利用互联网上大量可用的这种形式的数据,创建了一个包含4亿(图像,文本)对的新数据集。从而达到了一个从所未有的效果高度。

4, 发现数据规模和迁移能力成平滑正比

clip还通过训练一系列8个模型来验证CLIP的可扩展性,跨越近2个数量级的计算和观察,发现迁移能力和规模成平滑正比

这点非常重要,从而我们可以根据自己模型的大小大致判断迁移后的效果,而不是在等待模型能力的涌现

clip方法和技巧

2.1. 自然语言监督,zero-shot 带来的能力提升

clip方法的核心理念是从自然语言中获得的监督中学习感知。与其他训练方法相比,从自然语言中学习具有几个潜在优势。与标准的基于众包的图像分类标签相比,扩展自然语言监督要容易得多,因为它不需要将精力放在“机器学习兼容格式”中,如规范的1-of-N多数投票“标签”。相反,可以在互联网上大量存在的文本中被动地学习使用自然语言的方法。从自然语言中学习还具有一个重要的优势,即它不仅可以学习表示,而且还可以将该表示与语言联系起来,从而实现灵活的零样本迁移。

2.2. 创建足够大的数据集

clip认为之前类似模型结构之所以没取得效果,主要是因为数据集的规模,所以clip构建了一个新的大数据集,包括从互联网上各种公开来源收集的4亿个(图像,文本)对。为了尝试尽可能涵盖广泛的视觉概念,在构建过程中搜索包含500,000个查询之一的文本的(图像,文本)对通过每个查询包含多达20,000个(图像,文本)对来平衡结果。生成的数据集与用于训练GPT-2的WebText数据集具有相似的总词数。clip将此数据集称为WIT,代表WebImageText。

2.3. 选择高效的预训练方法

  • clip发现训练效率是成功扩展自然语言监督的关键。 为了解决训练效率,clip做了以下优化
  • clip探索了仅预测哪个文本作为一个整体与哪个图像配对,而不是预测该文本的确切单词。效率提升了三倍
  • chip将预测目标替换为对比目标,并观察到在零样本迁移到ImageNet的速率上进一步提高了4倍的效率

  • clip还删除了文本转换函数tu,该函数从文本中均匀抽取一个句子,因为CLIP的预训练数据集中的许多(图像,文本)对只有一个句子。
  • clip还简化了图像变换函数tv。在训练期间使用的唯一数据增强是从调整大小的图像中随机裁剪一个正方形。
  • 最后,控制softmax中logits范围的温度参数τ,作为对数参数化的乘法标量直接在训练过程中进行优化,以避免将其作为超参数调整。

下图是效率提升对比图(橙色为使用了整体文本,绿色为使用了对比学习loss)

prompt 工程

使用prompt的动机

1,解决问题多义性。

当类别的名称是提供给CLIP文本编码器的唯一信息时,由于缺乏上下文,它无法区分是指哪个词义。在某些情况下,同一个词的多个意义可能被包含在同一个数据集的不同类别中!比如在ImageNet数据集中,其中既包含建筑起重机,也包含飞行的鹤。另一个例子是在Oxford-IIIT Pet数据集的类别中,其中单词"boxer"从上下文来看,明显是指一种狗的品种,但对于缺乏上下文的文本编码器来说,它同样可能指的是一种运动员类型。

2,训练和预测一致性,

训练和预测都是一个完整句子。clip遇到的另一个问题是,在clip的预训练数据集中,图像配对的文本通常不只是一个单词,而是一个描述图像的完整句子。为了弥补这种分布差异,clip发现使用提示模板"A photo of a {label}."作为默认值是一个很好的选择,它有助于指定文本与图像内容相关。这通常比仅使用标签文本的基准性能更好。例如,仅使用这个提示,在ImageNet上的准确率提高了1.3%。

使用prompt的一些技巧

1,指定分类。

clip发现,在几个细粒度图像分类数据集上,指定类别有助于提供上下文。例如,在Oxford-IIIT Pets数据集上,使用"A photo of a {label}, a type of pet."来提供上下文效果很好。同样,在Food101上指定一种食物,在FGVC Aircraft上指定一种飞机也有帮助。

2,添加引号。

对于OCR数据集,clip发现在要识别的文本或数字周围加上引号可以提高性能。最后,clip发现在卫星图像分类数据集上,指定图像的形式有所帮助,clip使用了类似于"a satellite photo of a {label}."的变体。

3,使用多个零样本分类器进行集成的方法来提高性能。

这些分类器使用不同的上下文提示,例如"A photo of a big {label}"和"A photo of a small {label}"。clip在嵌入空间而不是概率空间上构建集成。这样,clip可以缓存一组平均的文本嵌入,使得集成的计算成本与使用单个分类器时相同,当在许多预测上进行摊销时。clip观察到,通过对许多生成的零样本分类器进行集成,可以可靠地提高性能,并且在大多数数据集上使用这种方法。在ImageNet上,clip集成了80个不同的上下文提示,这使性能比上面讨论的单个默认提示额外提高了3.5%。综合考虑提示工程和集成,ImageNet的准确率提高了近5%。

添加prompt如下图示意

效果

接下来论文大幅的篇幅就是效果对比,clip通过在30多个不同的计算机视觉数据集上进行基准测试来研究对比这种方法的性能,涵盖了OCR、视频中的动作识别、地理定位和许多类型的细粒度对象分类等任务。发现通常无需进行任何特定数据集的训练,就能与完全监督的基准模型竞争,这里就不复述了,反正就是很强很牛逼非常牛逼。下步看看能不能复现一下代码和实现。

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

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

相关文章

Python+Selenium4环境搭建

很久没有了解自动化了,最近发现项目中沉淀了很多东西,回归测试效率很低,所以必须要考虑构建自动化来提供各个环节的小效率。由于忙于需求以及产品的流程规范,现在对于测试技术方面的研究也相对少了很多。不过不管做什么&#xff0…

Arduino驱动LX1972传感器(光照传感器篇)

LX1972环境光(可见光)传感器,对可见光照度的反应特性与人眼的特性类似,可以模拟人对环境光线的强度的判断,从而方便做出与人友好互动的应用,可应用于照明控制、屏幕背光控制等。 1、传感器特性 传感器技术指标如下: 工作温度: -40~80C照度范围: 1 – 800Lux输出信号:…

CSS中如何实现文字描边效果(Text Stroke)?

聚沙成塔每天进步一点点 ⭐ 专栏简介⭐ 文字描边效果(Text Stroke)⭐ 示例⭐ 写在最后 ⭐ 专栏简介 前端入门之旅:探索Web开发的奇妙世界 记得点击上方或者右侧链接订阅本专栏哦 几何带你启航前端之旅 欢迎来到前端入门之旅!这个…

nas汇编程序的调试排错方法

nas汇编程序的调试排错方法: 1、查找是哪一步错了 2、查看对应的*.lst文件,本例中是"asmhead.lst" 3、根据*.lst文件的[ERROR #002]提示查看源码,改错。 4、重新运行编译,OK 1、查找是哪一步错了: nask.ex…

黑盒测试方法论—边界值

边界值分析法是一种很实用的黑盒测试用例方法,它具有很强的发现故障的能力。边界值分析法也是作为对等价类划分法的补充,测试用例来自等价类的边界。 这个方法其实是在测试实践当中发现,Bug 往往出现在定义域或值域的边界上,而不…

结构体(个人学习笔记黑马学习)

1、结构体的定义和使用 #include <iostream> using namespace std; #include <string>struct Student {string name;int age;int score; }s3;int main() {//1、struct Student s1;s1.name "张三";s1.age 18;s1.score 100;cout << "姓名&a…

css 选择器

<!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Document</title><style>/* ~ 表示的h…

FPGA输出lvds信号点亮液晶屏

1 概述 该方案用于生成RGB信号&#xff0c;通过lvds接口驱动逻辑输出&#xff0c;点亮并驱动BP101WX-206液晶屏幕。 参考&#xff1a;下面为参考文章&#xff0c;内容非常详细。Xilinx LVDS Output——原语调用_vivado原语_ShareWow丶的博客http://t.csdn.cn/Zy37p 2 功能描述 …

如何在你的Android工程中启用K2编译器?

如何在你的Android工程中启用K2编译器&#xff1f; K2编译器是用于Kotlin代码编译的最新、高效编译器&#xff0c;你现在可以尝试使用了。 Kotlin编译器正在为Kotlin 2.0进行重写&#xff0c;新的编译器实现&#xff08;代号K2&#xff09;带来了显著的构建速度改进&#xff…

10 mysql tiny/small/medium/big int 的数据存储

前言 这里主要是 由于之前的一个 datetime 存储的时间 导致的问题的衍生出来的探究 探究的主要内容为 int 类类型的存储, 浮点类类型的存储, char 类类型的存储, blob 类类型的存储, enum/json/set/bit 类类型的存储 本文主要 的相关内容是 int 类类型的相关数据的存储 …

Vue3 学习 组合式API setup语法糖 响应式 指令 DIFF(一)

文章目录 前言一、Composition Api二、setup语法糖三、响应式refreactive 四、其他一些关键点v-prev-oncev-memov-cloak 五、虚拟Dom五、diff算法 前言 本文用于记录学习Vue3的过程 一、Composition Api 我觉得首先VUE3最大的改变就是对于代码书写的改变&#xff0c;从原来选择…

购物商场项目实践

1.项目开始 1&#xff09;此项目为在线电商项目 2&#xff09;包含首页&#xff0c;搜索列表&#xff0c;商品详情&#xff0c;购物车&#xff0c;订单&#xff0c;支付&#xff0c;用户登录/注册等多个子模块 3&#xff09;使用Vue全家桶ES6webpackAxios等前端技术 4&…

MySQL主从复制与读写分离 及其实例

目录 主从复制与读写分离 1、MySQL主从复制原理 1.1、MySQL的复制类型 1.2、MySQL主从复制的工作过程 1.3、mysq支持的复制类型 1.4、 数据流向 1.5、主从复制的工作过程 2、读写分离 2.1、什么是读写分离&#xff1f; 2.2、为什么要读写分离呢&#xff1f; 2.3、什么…

如何快速搭建母婴行业的微信小程序?

如果你想为你的母婴行业打造一个独特的小程序&#xff0c;但没有任何编程经验&#xff0c;别担心&#xff01;现在有许多小程序制作平台提供了简单易用的工具&#xff0c;让你可以轻松地建立自己的小程序。接下来&#xff0c;我将为你详细介绍搭建母婴行业小程序的步骤。 首先&…

MySQL——MySQL的基础操作部分

使用命令行登录 mysql -u root -p 直接敲击回车后输入密码即可&#xff1a; 当看到出现“mysql>“的符号之后&#xff0c;就表示已经进入到了&#xff2d;&#xff59;&#xff33;&#xff31;&#xff2c;系统中&#xff0c;就可以输入&#xff2d;&#xff59;&#xf…

Android学习之路(13) Handler详解

1. 简介 Handler是一套 Android 消息传递机制,主要用于线程间通信。 用最简单的话描述&#xff1a; handler其实就是主线程在起了一个子线程&#xff0c;子线程运行并生成Message&#xff0c;Looper获取message并传递给Handler&#xff0c;Handler逐个获取子线程中的Message.…

【python爬虫】15.Scrapy框架实战(热门职位爬取)

文章目录 前言明确目标分析过程企业排行榜的公司信息公司详情页面的招聘信息 代码实现创建项目定义item 创建和编写爬虫文件存储文件修改设置 代码实操总结 前言 上一关&#xff0c;我们学习了Scrapy框架&#xff0c;知道了Scrapy爬虫公司的结构和工作原理。 在Scrapy爬虫公司…

漏洞发现-web应用发现探针类型利用(43)

关于在真实环境下面&#xff0c;这个漏洞该如何发现 这里老师把它分成了三块第一类是 #已知cms 如常见的dedecms&#xff0c;discuz&#xff0c;wordpress等源码结构&#xff0c;这些都是网上比较知名的php源码的cms的名称&#xff0c;这是我们在国内常见的几个程序&#xf…

Java中的网络编程------基于Socket的TCP编程和基于UDP的网络编程,netstat指令

Socket 在Java中&#xff0c;Socket是一种用于网络通信的编程接口&#xff0c;它允许不同计算机之间的程序进行数据交换和通信。Socket使得网络应用程序能够通过TCP或UDP协议在不同主机之间建立连接、发送数据和接收数据。以下是Socket的基本介绍&#xff1a; Socket类型&…

后端笔试题(2)分频器波形图

我正在「拾陆楼」和朋友们讨论有趣的话题&#xff0c;你⼀起来吧&#xff1f; 拾陆楼知识星球入口