一、Clip如何训练
那像
CLIP
这样的语言模型究竟是怎么训练出来的呢?它们是怎么样做到结合人类语言和计算机视觉的呢?
首先,要训练一个结合人类语言和计算机视觉的模型,我们就必须有一个结合人类语言和计算机视觉的数据集。CLIP
就是在像下面这样的数据集上训练的,只不过图片数据达到了4亿张的量级。事实上,这些数据都是从网上爬取下来的,同时被爬取下来的还有它们的标签或者注释。 CLIP
模型包含一个图片Encoder
和一个文字Encoder
。训练过程可以这么理解:我们先从训练集中随机取出一张图片和一段文字。注意,文字和图片未必是匹配的,CLIP模型的任务就是预测图文是否匹配,从而展开训练 CLIP
包含一个图像编码器(Image Encoder
)和一个文本编码器(Text Encoder
)
- 我们分别用俩个编码器对图像和文本进行编码,输出结果是俩个embedding向量。
- 我们用余弦相似度来比较俩个embedding向量相似性,以判断我们随机抽取的文字和图片是否匹配。但最开始,由于两个编码器刚刚初始化,计算出来的相似度往往会接近于0。
- 这时候假设我们模型的预测是 Not similar 而标签为Similar ,那么我们的模型就会根据标签去反向更新俩个编码器。
不断地重复这个反向传播的过程,我们就能够训练好两个编码器,来识别图像和文本的匹配程度。
值得注意的是,就像经典的word2vec训练时一样,训练CLIP时不仅仅要选择匹配的图文来训练,还要适当选择完全不匹配的图文给机器识别,作为负样本来平衡正样本的数量
二、利用Clip
粉色的**Unet**
中每个ResNet
不再和相邻的ResNet
直接连接,而是在中间新增了**Attention**
的模块。CLIP Encoder
得到的语义embedding
就用这个Attention
模块来处理
整个Unet是由一系列Resnet构成的。每一层的输入都是上一层的输出
可参考Stable Diffusion组成
特点
Clip
标记器会统一将prompt
转换为单词小写- 丢弃开头和结尾的空格,以及词与词之间多余的空格
- 支持颜文字、emoji、unicode(日语字符等)
- 拼写错误和罕见词可能会被标记多次
- 词汇顺序、数量、位置的影响
词汇->语义向量->UNet->attention机制->添加到位置标记(a position embedding token)
- 早期的标记更具有一致性的位置,神经网络更容易预测它们的相关性
- 开始和结束的标记总会被attention。
- 标记越多,单个标记被注意到的概率越低
小结:
宏观来看
在图片信息生成器(Image Information Creator
)中,有了初始的纯噪声【下图中左下透明4X4】+语义向量【下图左上蓝色3X5】后,Unet会结合语义向量不断的去除纯噪声隐变量中的噪声,重复50~100次左右就完全去除了噪声
得益于Clip
的强大,我们可以不仅可以以类标签的文本生成图像,也能通过一些英语短句来生成图像