论文原文开头:

Scaling Language-Image Pre-training via Masking

We present Fast Language-Image Pre-training (FLIP), a simple and more efficient method for training CLIP [52]. Our method randomly masks out and removes a large portion of image patches during training. Masking allows us to learn from more image-text pairs given the same wall-clock time and contrast more samples per iteration with similar memory footprint. It leads to a favorable trade-off between accuracy and training time. In our experiments on 400 million image-text pairs, FLIP improves both accuracy and speed over the no-masking baseline. On a large diversity of downstream tasks, FLIP dominantly outperforms the CLIP counterparts trained on the same data. Facilitated by the speedup, we explore the scaling behavior of increasing the model size, data size, or training length, and report encouraging results and comparisons. We hope that our work will foster future research on scaling vision-language learning.

Yuxin-CV回答:

最近自己也学习、参与并踩坑了大clip的训练,所以看kaiming团队的这篇工作还是多少有些感触的。以下只是一些个人的理解,多少会有些偏颇,不妥之处还请大家指正。

首先flip是用float32精度train出来的。文末附录说硬件不支持float16,我觉得这多少有些遗憾。因为当你决定用float32的时候,你就注定不会比一个float16(或者混合精度)的模型更scalable。换个角度,一个混合精度不丢patch的clip,和一个丢了patch但用float32的clip,不好说后者就一定比前者省了很多budget。如果硬件条件允许并给我相同的算力或者预算,我会选择用float16精度train更大(更好)的vanilla clip。

其次就是,这种丢patch的方式在采用float16的前提下是否能稳住大clip的训练,也是一个实际问题,文章似乎也没有直接回答。clip从方法上看似简单直接,但从实操的角度而言,从头开始训练大clip是存在着很多优化问题的。open clip的实验表明,用pytorch amp fp16从头开始训练clip huge是无法顺利完成训练的(最终他们转成bfloat16精度缓解了这个问题,而且发现用bfloat16即更好的数值精度相比普通的混合精度fp16会带来额外的gain,所以float32更应如是。reference: doc, wandb)。我觉得丢patch应该不会让优化变得更容易(这里有一些比较间接的证据吧: 我们试过在mae official的codebase上用pytorch fp16训练1b的mae,中间会崩掉。clip huge也是1b的参数量。vanilla clip本身就比mim难train的多,而丢patch只会让data变得更noisy,更难train)。据我所知,大部分使用GPU的研究者是不会用float32训练clip的,最早OpenAI的clip也是混合精度跑出来的,open clip也只是在不得已的情况下才会上bf16。flip这一套丢patch的方案能不能采用float16顺利完成训练,并真正被广大使用GPU的研究者用起来,我觉得还有待后续的实验。这点也是这个方法是不是真正scalable的关键。

另外就是实验上的一些问题,flip有精度gain的前提是自己丢50%的patch开32k的bsz,而baseline是不丢patch开16k的bsz。16k的bsz对于clip而言可能有点小了,最早OpenAI的clip就是32k的bsz,开源的open clip也是至少32k的bsz。应注意到clip从16k到32k可能是存在phase transition的。文中说实验是拉满256 tpu核心做的,可能预算有限吧,有点遗憾了(作者表示就是不用 activation checkpointing..)。

理想情况下,我比较期待50%的patch开64k的bsz,和不丢patch开32k的bsz的baseline的比较。起码这样的baseline是挑不出什么毛病的,也是clip的一个common setting,不过分。

另一方面,在laion400m上如果训练足够充分,我的经验是bsz从32k到64k没太多gain。而大于64k的bsz就没gain了,反而会招致额外的优化问题(flip文章中报丢50%的patch,bsz从32k开到64k在laion400m上6.4ep的训练涨0.8,6.4ep也太少了,openai的clip和open clip都是在400m的数据集上跑32ep的。Table 2里面看似32ep满血版的对比,也没明确说明不丢patch repro的bsz。我觉得baseline的bsz恰恰是需要highlight出来的)。一言以蔽之,我是不太信服在相同在training steps & bsz下,丢patch能比不patch的baseline要好的。更关键的问题在于,bsz并不是一个真正scalable的维度,通过scale up bsz拿gain很容易饱和。而通过trade off(用丢patch换大bsz)拿gain的策略是迟早会被scale up其他真正scalable的维度干掉的(比如model size和dataset size)。而对float32的使用又会限制model size scaling的上限,所以就仿佛陷入了怪圈...

当然,如果是训练相同的epoch,丢patch确实是省时间的(前提是采用相同的数值精度哈,丢patch+float32能不能比common的不丢patch+混合精度训练省时间还不清楚..)。但是大家都是做pre-train的,you only pre-train once。反正一个月内的pt我都能接受,省时没有省出一个数量级是没有什么吸引力的。从evaluation的角度出发,用的时候大家也不会去丢patch。最近清华的GLM-130B也提供了超大模型模型轻量化一个很好的解。所以在train大model的时候,还是要更关注精度本身。performance先要上去,后面总有办法用起来的。

就大clip训练这个问题本身,我觉得也没必要执着于从头开始训练。至少我们通过实验发现,clip和其他很多任务一样,也是可以从适当的预训练中获益的(更快的收敛速度,更高的精度,更高的sample efficiency,etc)。同时,好的初始表征也能很好的解决大clip训练中的优化问题,这也使我们能用更低的数值精度,训练更大的clip或者开更大的batch size,拿到更多的gain。因为clip是scalable的,它值得我们这样做。

文章中一个亮点是在附录提及了数值精度。我觉得我们在后续研究中也应该都highlight一下这个,因为参数量和数值精度共同决定了模型的真实大小(容量)。当大家采用不同的数值精度时,直接比较模型参数量是不妥的。从这个角度出发,flip在进行system level比较的时候,应该去比使用fp16的、参数量更多的模型会更妥当一些(但是具体怎么比也是个麻烦事儿...所以最好还是相同参数量&数值精度的模型一起比较)。另外,float32对clip精度的提升幅度,目前也还不是很清楚。

抛开flip文章本身,个人认为目前clip有两个关键问题,一是怎么scale up,在拉满硬件和预算的情况下拿到最多的gain。二是在scale up的过程中怎么稳住大clip的训练。这也是任何一个真正scalable的算法/模型需要面临的永恒的问题,因为真正scalable的算法/模型总能通过scale up特定维度拿到performance gain,而在scale up的过程中就会面临上述两个问题。另一方面,一个真正scalable的算法/模型也是不会在乎一时的trade off的,因为trade off带来的gain总会在特定的phase过后消失。

这篇文章应该会吸引一部分cv研究者关注clip,我觉得这是个好事情。clip是面向未来的一种视觉感知模型(可以参考flip intro的第一段,写的很精炼)。视觉研究发展到现如今,亟待出现能scale up的in-context / few-shot learning和zero-shot learning的算法/模型。而clip是后者的一个非常promising的candidate(实现前者要难得多)。但遗憾的是clip也不是一般玩家可以上手的模型。我觉得如果有足够的budget,做clip以及其周边要比辛辛苦苦刷det seg那零点几个点什么的更有意义。

train一个大clip真的挺不容易的,大多数从业者也没办法自己完成clip的训练。目前想要train出不错的clip,基本都要用开源的laion400m甚至laion2b。目前开源社区的clip(GitHub - mlfoundations/open_clip: An open source implementation of CLIP.)虽然已经比初代openai的clip要好了,但是和真正的sota还是有很大差距的(参考Google家in house的BASIC)。所以大的、好的clip最好还是要尽量开源出来,反哺社区,惠及大家。

信息门上飞二哈回答:

第一个呢,不是kaiming一作的一般不是kaiming的最高水准;

第二个呢,openai这两年在vision方向已经打破了kaiming和fair在20年之前主导的范式了。我觉得那种原封不动训练数据,照搬任务设定和评价标准,在既有框架下修改某些模块或者改变训练方法看数值涨落的模式已经不是最先进的了。openai那种对整个pipeline大刀阔斧地反思改革才是真正值得关注评价的。

这回答不会得罪知乎上一大票喜欢那种小幅修改就能提点的kaiming粉丝吧。。。。

Openmmlab回答:

太长不看系列

Masking Image + CLIP 在海量数据(LAION-400M/2B)上预训练,性能相当,训练算力大幅减少

图一:核心思路

整体思路

本文是简单有效风格的又一次体现,Masking Image 在 VLP 预训练已经不是新思路了,但是大家都是把模型和结构都是往更复杂的做,比如 reconstruction loss和 contrastive loss 多个任务一起用,FLIP做了一个很简单的事儿,就是在 CLIP 的极简结构上,使用了类似 MAE 的 Mask 方案,显著地减少 Image Encoder 部分的计算量。画图风格依旧是 MoCo 的味道。

图二:速度-零样本分类性能比较

不同于 NLP 模型,由于图像往往尺寸比较大,视觉模型对算力需求也会非常大,目前视觉模型的参数也才刚刚到 1B,直接 scale up 模型参数和数据规模的红利还在,目前的瓶颈可能在于硬件(算力)限制(老黄继续冲啊)。

即使是大厂,算力也是会受到单个显卡性能的影响的,假设在相对较大的算力限制的情况下(如 256 张 A100 GPU),目前继续去摘取这个红利的方式一种思路是从偏工程角度优化,使得已有的硬件能训练更大的模型和更多的数据(如 AMP)。另一种思路是,通过预训练算法层面的优化,提升能训练的模型上限。

模型 Scale-up 的方向探索

FLIP 就属于在算法层面继续去优化,使得我们可能可以继续去做 scale-up。这个工作里,在模型尺寸,数据尺寸和训练时长进行了探索。这让我想到了另一篇 ECCV 2022 的工作 ZeroVL [1],也是在探索如何提升 CLIP 训练的效率,不同点是它从数据采样和 batch size角度出发,在中小数据规模下做的探索。

图三:模型尺寸、数据尺寸和训练时长的分析

几个结论:

  • FLIP增大模型尺寸继续涨点

  • FLIP增大数据规模继续涨点

  • FLIP增大训练时长几乎没什么涨点

大家可以继续去探索如何增大模型尺寸和数据规模了。

展望与思考

今年涌现了一批做大模型的工作,如 BEiT-3, EVA 等等,大家都还是在继续去挖掘增大模型尺寸和数据尺寸的红利,无论是直接用 LAION-400M 去训练,还是用 CLIP 模型来蒸馏,基本都是大模型+大数据的核心思路。期待各家大厂继续在 Bigger and Larger 上为学界提供更强的模型。
这里提几个个人感觉有趣的问题和方向:

  • VLP 对于广泛的视觉下游任务(检测,分割等)真的是必须的的么?只用 Vision SSL 在这么大的数据量上来做,会不会对视觉下游任务也同样有效甚至更好?(这里不讨论 zero-shot和多模下游任务)

  • 模型架构真的重要么?1B 的参数 +400M 的数据是不是无论 CNN 还是 ViT 都是差不多的性能?

  • 如何将海量数据和大模型的知识迁移至轻量级模型?

  • One-for-all 的预训练模型真的万金油和灵丹妙药么?如果不是,知识驱动的 VLP 或者 Downstream Task-related Pre-training 可能还可以卷一卷。基于 CLIP 的模型在 retrieval 等任务上表现不错,但对于 relation 的建模能力不足,更多类似 bag-of-words, 在relation-aware的多模任务上表现一般,如 [2] 的分析。

    文章转载自知乎,著作权归属原作者,侵删

END

分享

收藏

点赞

在看

如何评价何恺明团队的研究工作:FLIP?相关推荐

  1. 【前沿】如何评价何恺明团队的最新工作RegNet?

    来自 | 知乎 链接 | https://www.zhihu.com/question/384255803 编辑 | 深度学习这件小事公众号 本文仅作学术交流,如有侵权,请联系删除    提问 如何评 ...

  2. 何恺明团队最新研究:3D目标检测新框架VoteNet,两大数据集刷新最高精度

    [导读]FAIR何恺明等人团队提出3D目标检测新框架VoteNet,直接处理原始数据,不依赖任何2D检测器.该模型设计简单,模型紧凑,效率高,在两大真实3D扫描数据集上实现了最先进的3D检测精度. 当 ...

  3. 何恺明团队最新力作:超越EfficientNet,GPU上提速5倍|CVPR 2020

    2020-04-01 12:43:32 鱼羊 十三 发自 凹非寺 量子位 报道 | 公众号 QbitAI 大神(组团)出奇招,踢馆各路神经网络. 还是熟悉的团队,还是熟悉的署名,Facebook AI ...

  4. 何恺明团队最新力作RegNet:超越EfficientNet,GPU上提速5倍,这是网络设计新范式 | CVPR 2020...

    鱼羊 十三 发自 凹非寺 量子位 报道 | 公众号 QbitAI 大神(组团)出奇招,踢馆各路神经网络. 还是熟悉的团队,还是熟悉的署名,Facebook AI实验室,推陈出新挑战新的网络设计范式. ...

  5. Paper:2020年3月30日何恺明团队最新算法RegNet—来自Facebook AI研究院《Designing Network Design Spaces》的翻译与解读

    Paper:2020年3月30日何恺明团队最新算法RegNet-来自Facebook AI研究院<Designing Network Design Spaces>的翻译与解读 导读: 卧槽 ...

  6. Paper之RegNet:《Designing Network Design Spaces》的翻译与解读—2020年3月30日来自Facebook AI研究院何恺明团队最新算法RegNet

    Paper之RegNet:<Designing Network Design Spaces>的翻译与解读-2020年3月30日来自Facebook AI研究院何恺明团队最新算法RegNet ...

  7. 何恺明团队推出Mask^X R-CNN,将实例分割扩展到3000类

    翻译 | AI科技大本营(ID:rgznai100) 参与 | shawn,刘畅 今年10月,何恺明的论文"Mask R-CNN"摘下ICCV 2017的最佳论文奖(Best Pa ...

  8. 何恺明团队新作:只用普通ViT,不做分层设计也能搞定目标检测

    点击上方"视学算法",选择加"星标"或"置顶" 重磅干货,第一时间送达 鱼羊 发自 凹非寺 量子位 | 公众号 QbitAI 微软的Swin ...

  9. 解决训练不稳定性,何恺明团队新作来了!自监督学习+Transformer=MoCoV3

    本文是FAIR的恺明团队针对自监督学习+Transformer的一篇实证研究.针对Transformer在自监督学习框架中存在的训练不稳定问题,提出了一种简单而有效的技巧:Random Patch P ...

最新文章

  1. bat面试题 python 单链表反转排序
  2. python序列类型-python序列类型有哪些
  3. 使用tomcat8下的websocket进行web前后端通信
  4. 前端:CSS/14/综合案例:传智首页
  5. 给GridView分页
  6. 虚拟机Linux----Ubuntu1204----root登录设置
  7. Linux之web服务
  8. 读《人月神话》的感想(一)——关于组织结构沟通能力优劣的量化
  9. 耗时两周,纯手敲python入门级基础笔记
  10. 固态硬盘是什么接口_了解移动固态硬盘接口知识,告诉你PSSD到底能多快
  11. 稳住不慌:运维职业成长路线规划
  12. 仿淘宝客户端电商平台android初级速成-张勇-专题视频课程
  13. 广州医保个账支付接口开发 微信医保支付
  14. demo1:番茄时钟
  15. [BZOJ1038][ZJOI2008]瞭望塔(半平面交)
  16. TextView文本尾部添加标签,支持自动换行
  17. HBuilderX 的安装步骤
  18. 吕鑫MFC学习系列七
  19. SpringBoot 打成jar包供第三方引用自动装配方案实现
  20. 2022年前端Vue常见面试题大全(三万长文)持续更新...

热门文章

  1. dell 笔记本 n卡 deepin驱动
  2. HijackThis 扫描日志完全分析(二)
  3. Backtrader-Date Feeds之如何加载数据
  4. 爬虫之基本原理及简单使用、请求库之requests库及小案例
  5. Mybaits中association的用法详解
  6. 聊聊火出圈的ChatGPT
  7. 云服务器 ECS,RDS,Redis,SLB服务器建站流程
  8. 【华人学者风采】蔡登 浙江大学
  9. 瑞芯微RK3399芯片开发板香橙派4的HDMI音频播放功能测试(Linux系统)
  10. 九、委派模式与模板模式详解