Clip介绍

发布时间 2023-12-21 08:52:39作者: 梅丹隆

一、Clip如何训练

那像CLIP这样的语言模型究竟是怎么训练出来的呢?它们是怎么样做到结合人类语言和计算机视觉的呢?

首先,要训练一个结合人类语言和计算机视觉的模型,我们就必须有一个结合人类语言和计算机视觉的数据集。CLIP就是在像下面这样的数据集上训练的,只不过图片数据达到了4亿张的量级。事实上,这些数据都是从网上爬取下来的,同时被爬取下来的还有它们的标签或者注释
image.png
CLIP模型包含一个图片Encoder和一个文字Encoder。训练过程可以这么理解:我们先从训练集中随机取出一张图片和一段文字。注意,文字和图片未必是匹配的,CLIP模型的任务就是预测图文是否匹配,从而展开训练
image.png
CLIP 包含一个图像编码器(Image Encoder)和一个文本编码器(Text Encoder)

  1. 我们分别用俩个编码器对图像和文本进行编码,输出结果是俩个embedding向量。
  2. 我们用余弦相似度来比较俩个embedding向量相似性,以判断我们随机抽取的文字和图片是否匹配。但最开始,由于两个编码器刚刚初始化,计算出来的相似度往往会接近于0。
  3. 这时候假设我们模型的预测是 Not similar 而标签为Similar ,那么我们的模型就会根据标签去反向更新俩个编码器。

不断地重复这个反向传播的过程,我们就能够训练好两个编码器,来识别图像和文本的匹配程度。

值得注意的是,就像经典的word2vec训练时一样,训练CLIP时不仅仅要选择匹配的图文来训练,还要适当选择完全不匹配的图文给机器识别,作为负样本来平衡正样本的数量

二、利用Clip

粉色的**Unet**中每个ResNet不再和相邻的ResNet直接连接,而是在中间新增了**Attention**的模块CLIP Encoder得到的语义embedding就用这个Attention模块来处理
image.png

整个Unet是由一系列Resnet构成的。每一层的输入都是上一层的输出
可参考Stable Diffusion组成

特点

  1. Clip标记器会统一将prompt转换为单词小写
  2. 丢弃开头和结尾的空格,以及词与词之间多余的空格
  3. 支持颜文字、emoji、unicode(日语字符等)
  4. 拼写错误和罕见词可能会被标记多次
  5. 词汇顺序、数量、位置的影响

词汇->语义向量->UNet->attention机制->添加到位置标记(a position embedding token)

  • 早期的标记更具有一致性的位置,神经网络更容易预测它们的相关性
  • 开始和结束的标记总会被attention。
  • 标记越多,单个标记被注意到的概率越低

小结:

  1. 开头和结尾的词往往作用性更强
  2. 提示词越多,单个提示词作用越低
  3. 开头的数个提示词作用较强,有更强的相关

宏观来看

图片信息生成器(Image Information Creator)中,有了初始的纯噪声【下图中左下透明4X4】+语义向量【下图左上蓝色3X5】后,Unet会结合语义向量不断的去除纯噪声隐变量中的噪声,重复50~100次左右就完全去除了噪声
image.png
得益于Clip的强大,我们可以不仅可以以类标签的文本生成图像,也能通过一些英语短句来生成图像