上文: 【大模型】萌新也能一文弄懂!! -- 连接图像文本的大模型CLIP的前世今生【二】
因工作比较忙,终于有空写完这一篇最后的 CLIP系列分享 博文, 这个坑没有也在春节前填完。 这一CLIP系列 只是单纯的科普,让大家能简明扼要的明白CLIP的原理&前世今生。萌新也能一文弄懂。
更复杂的细节, 以及 后续的研究发展,会以其他博文的形式展示给大家, 大家一同进步学习。
下面是 CLIP [Contrastive Language-Image Pretraining]- 多模态大模型介绍分享的 第二篇博文。
【1】CLIP (本文) 大模型的综述 & 产生的时代背景。
【2】CLIP 模型的结构,以及 相关的前置知识 (Transformer & Attention & ViT等)
【3】CLIP 的效果 & 展望,以及相关的一些衍生和学术工作等。
上篇博文我们已经了解了 CLIP 的 具体结构,了解了 CLIP 是一个双塔模型,由 文本塔的 Bert,和 图片塔的 ViT 构成。 原理都是基于传统的 Transformer 做到。
这篇论文将大概介绍一下CLIP的实际训练方法 & 效果。 以及未来的展望,和部分后续工作,方便大家去了解。
1. CLIP 训练
我们现在已经知道了 CLIP 的结构 还有它的工作原理, 现在来看看 OpenAI 的人员是 怎么进行训练和调参的。
1.1 训练数据
用于CLIP 训练的数据如下:
数据名称 | 数据量 | 介绍 |
MS-COCO | 10万 | Microsoft Common Objects in Context, 之前的分享有具体介绍【大模型】萌新也能一文弄懂!! -- 连接图像文本的大模型CLIP的前世今生【一】-CSDN博客 |
YFCC | 1200万 | Yahoo Flickr Creative Commons 100 Million, 之前的分享有具体介绍 |
WIT | 4亿 | Web Inventory of Text, 论文原创,OpenAI从自互联网上收集的大量文本数据,涵盖了各种不同的主题和领域。它是一个广泛的、多样化的文本数据集,对于训练一个能够理解各种类型文本的模型非常重要 |
[其中YFCC 虽然 有 1亿的数据量, 但是由于图片是来自于 Flickr 图像分享网站,爬取的数据。大量的图文对中 文本是图片的分辨率 以及 图片的拍摄设备。对于实际训练没有任何意义。因此实际清洗完之后只有1200万数据可以用了]
1.2 训练资源
OpenAI 团队在训练CLIP时也是耗费了很多的资源, 在训练 图片塔为ResNet的时候, 在 592块 V100 上,训练了 18天。而在 图片塔是 ViT-L/14 的时候。训练则在 256块 V100 上跑了 12天。
OpenAI 在训练 & 耗时上的统计,虽然消耗也是普通公司难以承受的住的,但是相对 GPT 这种大模型来说,已经大为缩短了。
1.3 损失函数
最终 CLIP 利用 交叉熵的形式 来计算损失函数。 在 文本对经过 图像塔 和 文本塔后, 对最终的损失函数进行 加权-平均
官方伪代码,整体CLIP思路 并没有绕开 类似 检索 DSSM & DPAM 等任务的 双塔模型结构,只是因为是多模态空间下 做了一个 空间维度映射 归一化后再计算相似度分数。
# extract feature representations of each modality
I_f = image_encoder(I) #[n, d_i] // 原始图片 映射为 图片向量
T_f = text_encoder(T) #[n, d_t] // 原始文本 映射为 文本向量
# joint multimodal embedding [n, d_e]
I_e = l2_normalize(np.dot(I_f, W_i), axis=1) // 论文原创,因是多模态任务,作者认为图片&文本
T_e = l2_normalize(np.dot(T_f, W_t), axis=1) // 的向量需要映射到共同的多维空间,能更好进行对
// 比更好的 对比学习
# scaled pairwise cosine similarities [n, n]
logits = np.dot(I_e, T_e.T) * np.exp(t) // 计算相似度分数,温度系数加入让置信度可控[trick]
# symmetric loss function
labels = np.arange(n)
loss_i = cross_entropy_loss(logits, labels, axis=0)
loss_t = cross_entropy_loss(logits, labels, axis=1)
loss = (loss_i + loss_t)/2 // 损失函数计算
2. CLIP 效果
最终的 CLIP 模型 也不负众望, 在各种维度上来带来了 令人吃惊的效果。
2.1 强大的拟合能力[Linear Probe]
首先在基础的数据集中, OpenAI 在 12个 数据集中对 CLIP的效果进行测试,以达到最 Solid 的结论:
CLIP 在12个标准数据集上,Linear Probe 的效果 [Linear Probe 是指冻结本身模型参数,只在最后图片 & 文本的输出头种 连接一个全连接层 ,去输出 和 数据集对应的类别的值, 以达到 标签分类的效果], 可以看到 不管是 CLIP-ViT 还是 CLIP-ResNet, CLIP 的效果都要大大好于目前 多模态学术界 各种 SOTA 模型.
2.1 强大的鲁棒性,小样本学习[Zero Shot]
其次 CLIP 对于图片识别的 高度泛化性,极强的鲁棒性。 ResNet 以 ImageNet 为例 ,具体证明了这一件事, 且抽象出 CLIP 类似于大模型, 独有的能力: 小样本学习 [Zero Shot] , 指代 对于一个全新的数据集, CLIP 完全不对这部分数据集进行训练 & 微调, 直接 利用原始 CLIP 在这个数据集中进行预测和推理。
由于传统模型[ResNet101] 只是学习了 ImageNet 中 标准的 香蕉造型。 对于其他数据集风格不同的香蕉 [手绘&卡通化],准确率大大降低。 然而 CLIP 却有着极强的鲁棒性。在零样本学习中, 即使 香蕉的风格千奇百怪. CLIP 都能很好的 抽象出 其为香蕉的本质。 获得 令人惊叹的鲁棒性。
同时 OpenAI 为了延续于在GPT 大模型思路中经典的 与人比较, 他们还做了一个非常有趣儿的实验,证明了 CLIP 获得了 与人相同的能力: 在识别图片 & 物体的多模态领域的 广域知识 (Meta Knowledge):
论文还列了经典的用 人类作为对比的实验。 让人类在 零样本 和 小样本学习,去 学习预测 狗狗品种的 实验[拉布拉多 ;吉娃娃...] 结果发现 人类本身 也会在 小样本学习中 明显好于 零样本。 这个与 模型本身性质一样。 实验说明 人类 会基于自己的认知经验,快速领悟到类别的特点,然后服务于 后续的识别中。 CLIP 亦学习到了这种 通识的认知经验, 且与人类做的一样好。
3. CLIP 展望 & 后续工作:
3.1 训练更大模型, 解决 AIGC 问题
由于之前博客所提到的客观事实一样: 多模态领域由于 [1] 高质量图文数据少,[2] 图片 - 文本的映射难度非常高。 的客观原因。 OpenAI只采用了 对比式学习 这种 折衷权衡的方法,与 GPT, LLAMA 这种 生成式 的大模型相比, 她的 经验性 和 天花板 是远远没有达到。
模型选型 | 总参数量 | 文本侧 | 参数量 | 图像侧 | 参数量 |
CLIP | 7700万 | RBT3 | 3900万 | ResNet50 | 3800万 |
1.88 亿 | RoBerta | 1.02 亿 | ViT-B/16 | 1.88 亿 | |
4.06 亿 | RoBerta | 1.02 亿 | ViT-L/14 | 4.06 亿 | |
4.07 亿 | RoBerta | 1.02 亿 | ViT-L/14-336px | 4.70 亿 | |
GPT | 1.17 亿 | GPT - 1 | NONE | ||
15 亿 | GPT - 2 | ||||
1750 亿 | GPT - 3 | ||||
18000 亿 [预估] | GPT - 4 |
官方论文对于 CLIP 的参数量并没有在论文中单独指明,这边以 Chinese-CLIP 提供的数据为例, 上表中之列出来和论文所提及的 相关模型选型。
虽然都称之为 大模型。 但 多模态CLIP这条分支,在参数和训练规模落后生成式大模型 两代。 CLIP 的参数量 之维持在 GPT-1 的规模上,对于目前大流行的 GPT-3, 模型参数量 只有后者约 1/40 . 预估的 GPT-4 模型的 1/400。 训练的数据量也较少。
因此基于 多模态的 AIGC, 生成式学习的工作,仍然是重点的发展工作。[后续也衍生出了例如 BLIP & Stable- Diffusion 等 文转图 & 图转文的工作] ,
BLIP 和 Stable-Diffusion 的实现 & 细节后续会呈现给大家
3.2 因地制宜, 训练适合的中文CLIP模型
由于 OpenAI 的CLIP 数据来源是 英文网页 & Flickr 图像等, 因此其对 英文语料的 拟合能力会更好一些, 虽然说 文本塔 [Bert] 对于 语言的 拟合能力 已经非常强了, 但是对于我们实际使用的语言: 中文, 仍然有很大的空间提升。
因此 阿里达摩院 也因地制宜, 以中文语料为基础, 优化了部分CLIP 的训练逻辑, 发布了 其基于中文的 大模型: Chinese-CLIP。 在中文数据集中获得了令人难以置信的效果,
他们的工作也开源于 GitHub 中: https://github.com/OFA-Sys/Chinese-CLIP
Chinese-CLIP 的实际细节 & 实现 后续会呈现给大家
3.3 各种其他领域的发展
除此之外, 由于 CLIP 的 极强泛化性, 因此其进行稍加修改就能在其他领域上带来很不错的效果:
[1] 对于 视频检索领域, 基于 CLIP 的修改模型: CLIP4CLIP。 被提出来,并且在视频检索领域中 带来了令人吃惊的效果。
[2] 对于 刚刚提到的 图片描述领域, 基于CLIP 的原理,将 图片塔稍作修改,从编码器 修改为添置 解码器 Decoder,并且与 文本塔相关。 另一个 效果经验的工作: BLIP 便产生, 将CLIP 的思想 扩展到 图片描绘 领域中。
[3] CLIP 优化上,对于 Zero-Shot 领域, 有大量的基于 CLIP 的 prompt 工程 工作被陆陆续续提出。 其中最引人注目的为 自适应Prompt学习: CoOp & CoCoOp, 只要每一个标签 最多只要 16个数据, 极少量的资源,便可以自适应地 学习到 最好地 Prompt 词。 在指定数据集中 带来比 CLIP 更好地效果。