查看原文
其他

​微调神器 Finetuner,提升 CLIP 模型性能

Finetuner 工程师 Jina AI 2023-03-21

经证实,在海量的数据集上训练的大型神经网络模型可以完成一些之前被认为是AI领域亟待攻克的问题。例如,正确识别猫和袋鼠的图像一直都被看作非常困难的问题,但现在通过使用大型的神经网络模型已经可以很好地解决。

然而,这些模型都是在类别广泛的数据集上预训练得到的,因此在完成一些具体的实际任务时,表现却不尽人意。

Jina AI Finetuner 通过增加新的训练数据来提高预训练模型的性能,进而更好的应用到具体任务中。Finetuner 对微调过程进行精简,并通过简化工作流程和处理 Jina AI Cloud 中所有操作复杂性和物理基础设施,使其更加的快速、高效。


我们将 Finetuner 应用于 OpenAI 的 CLIP 模型,并使用 LAION AI 最近发布的 CLIP Benchmark 来评估其性能。结果表明,当 Finetuner 利用一些特定实例的数据时,它在文本到图像检索任务的性能比预训练的模型提高了 63%


用于图像检索的 CLIP 模型

CLIP 是 OpenAI 在 2021 年发布的用于将图像的特征表示与描述性文本的特征表示进行联合训练的网络模型。它由两个网络组成:图像编码器和文本编码器。它使用从互联网收集的 4 亿张带有描述文本的图像数据集中的图像-文本对模型进行预训练。文本编码器和图像编码器都是基于现有的网络架构,用于分别建模两种模态的特征。CLIP 的主要创新点在于训练时将这两个编码器连接在一起。

例如,当输入一张狗的图像时,图像编码器会生成一个特征向量,这个向量和文本编码器为文本输入“dog”生成的向量相似。这就意味着我们可以通过寻找相似的特征向量,检索到和文本“dog”匹配的图像。

上图是一个关于 CLIP 生成嵌入向量的图解示例。相较于猫的图像,我们更希望文本“photo of a dog”的嵌入向量和狗的图像特征有更高的余弦相似度。

由于用于训练 CLIP 模型的数据集规模很大且多样化,所以它在通用的文本到图像检索任务中表现良好,无需进一步训练。

使用 Finetuner 调优 CLIP 模型

我们使用三个模型完成基准测试,它们都可以在 Open CLIP 获得。https://github.com/mlfoundations/open_clip

我们选择这三个模型的原因在于,第一个模型是最原始也是应用最广泛的 CLIP 模型;第二个是 Open CLIP 推荐的模型,并且已经使用不同的数据集进行预训练;第三个模型的参数规模比其他的模型大,约大 38%。

CLIP Benchmark 使用了三个不同的来自于互联网的带有文本描述的图像数据集。这三个数据集在学术和商业研究中被广泛使用。

来自 Flickr8k 数据集的示例图

Flickr8k 数据集与上图相关的标题(即描述性文本)

使用 Jina AI Finetuner 进行微调非常简单。首先,你需要按照 Finetuner documentation 的描述将训练数据整理成 Jina DocumentArray。

然后,设置训练的超参,例如学习率、损失函数和 epoch。

使用 Fintuner 的 Python 接口提交 fine-tune 的任务到 Jina AI Cloud。

import finetuner
from docarray import DocumentArray

flickr8k_training_data = DocumentArray(...) # create training dataset

finetuner.login()

run = finetuner.fit(
    model='ViT-B-32#openai',
    train_data=flickr8k_training_data,
    run_name='my-clip-run',
    loss='CLIPLoss',
    epochs=5,
    learning_rate=1e-6,
)

微调可能需要一些时间,如 Finetuner 文档所述,你可以使用 finetuner.run 对象监控正在进行的任务并下载最新的微调模型。

结果

你可以使用 Google Colab Notebook 复现我们的结果,或者尝试使用你自己的数据进行微调。
使用 CLIP Benchmark,通过检测为给定的文本查询检索到的前五张图像是否包含匹配该文本的图像,可以计算得到图像的召回率。我们对预训练的 CLIP 模型、微调模型、三个 CLIP 模型以及三个数据集都计算了召回率。
🔗 Colab:https://colab.research.google.com/drive/1fHSUML3UmrRltzn7xjgl5Db6QOqXjNHa?usp=sharing

不同模型,不同数据集,同样显著提升

Finetuner 给那些使用 CLIP 模型预训练得到的图像召回率最差的数据集带来了最大的改进。对于 Flickr8k 数据集,微调前的召回率在 0.5 到 0.65 之间,微调后的召回率可以达到 0.85 或者更高,这代表通过微调,召回率增加了 36% 到 63%。

 Flickr8k 数据集

Flickr30k

对于 Flickr30k 数据集,相比于仅使用预训练的模型,使用微调后模型的召回率更高,但提升不明显:三个模型的召回率提升都在 10% 以下。这说明,当预训练模型的性能已经很好的情况下,微调模型的提升空间并不大。尽管 Finetuner 在提升 Flickr30k 数据集的召回率方面效果并不明显,但它仍然可以显著提高所有模型的性能。

 MS-COCO

对于 MS-COCO 数据集,虽然预训练模型的召回率略高于 Flickr8k 数据集,但微调后的提升比 Flickr8k 数据集小得多:从 7% 提升到 17%,具体取决于模型。由于 MS-COCO 是一个更大、更多样化的数据集,所以可以预知给定相同的训练超参数时,改进会更小,但这依然比 Flickr30k 数据集的提升大得多。

可以看到,Finetuner 对于 CLIP Benchmark 中的不同模型、不同数据集的召回率都有提升。这表明 Finetuner 对于不同模型和数据集都是鲁棒的,这与我们的假设相符。通过实验,我们可以看到 Finetuner 对于模型的性能提升带来了正面影响,对于检索任务来说,召回率从 0.55 提升到 0.87 十分可观。

总结

我们已经证明使用 Finetuner 会提升模型的性能,并且有时提升非常显著。

模型微调是一种很成熟的技术,它常常用于不同的任务中提升大规模神经网络的性能。由于微调操作本身的复杂性,对于不常使用这项技术的 IT 从业者来说,这可能是一项艰巨的任务。但是 Finetuner 通过其简单的操作界面,降低了模型微调的技术门槛。

Finetuner 不仅局限于 CLIP,还可以用于其他模型,包括 ResNetEfficientnet 以及语言模型 Bert。具体详见 Benchmark

更多信息请查阅 Finetuner 文档,https://finetuner.jina.ai/

Finetuner 资料

  • 💻 GitHub: https://github.com/jina-ai/finetuner

  • 📖 文档: https://finetuner.jina.ai/

  • 🔗 Colab:https://colab.research.google.com/drive/1fHSUML3UmrRltzn7xjgl5Db6QOqXjNHa?usp=sharing

    Jina AI 社区反馈


更多精彩内容(点击图片阅读)

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存