-
2021年5月24日举办了华为云AI论文精读会2021 第五期:基于迁移学习的语义分割算法分享嘉宾是来自电子科技大学的刘亚豪~论文领域是迁移学习领域哦~来不及等待!感兴趣的小伙伴快点击下方链接!观看地址:https://res-static.hc-cdn.cn/cloudbu-site/china/zh-cn/competition/1621818551519065248.mp4
-
本文是FAIR的何恺明团队关于ViT在COCO检测任务上的迁移学习性能研究。它以Mask R-CNN作为基线框架,以ViT作为骨干网络,探索了不同初始化策略对于模型性能的影响。实验表明:masking机制的无监督学习机制(如MAE、BEiT)首次在COCO检测任务迁移学习中取得了令人信服的性能提升 。论文链接:https://arxiv.org/abs/2111.11429本文是FAIR的何恺明团队关于ViT在COCO检测任务上的迁移学习性能研究。它以Mask R-CNN作为基线框架,以ViT作为骨干网络,探索了不同初始化策略对于模型性能的影响;与此同时,为尽可能保证对比的公平性,还对不同超参数进行了大量的实验;此外,为将ViT作为多尺度模式,参考XCiT对ViT不同部分的特征进行尺度调整以达成多尺度特征输出;为使得ViT模型能处理大分辨率图像,还对ViT的架构进行了改进,引入了全局与局部自注意力机制,进一步提升了模型性能取得了更佳的均衡。该文的一系列实验表明:masking机制的无监督学习机制(如MAE、BEiT)首次在COCO检测任务迁移学习中取得了令人信服的性能提升 。Abstract为测试预训练模型能否带来性能增益(准确率提升或者训练速度提升),目标检测是一个常用的且非常重要的下游任务。面对新的ViT模型时,目标检测的复杂性使得该基线变得尤为重要(non-trivial )。然而架构不一致、缓慢训练、高内存占用以及未知训练机制等困难阻碍了标准ViT在目标检测任务上的迁移学习。本文提出了训练技术以克服上述挑战,并采用标准ViT作为Mask R-CNN的骨干。这些工具构成了本文的主要目标:我们比较了五种ViT初始化,包含SOTA自监督学习方法、监督初始化、强随机初始化基线。结果表明:近期提出的Masking无监督学习方法首次提供令人信服的迁移学习性能改善 。相比监督与其他自监督预训练方法,它可以提升 指标高达4% ;此外masking初始化具有更好的扩展性,能够随模型尺寸提升进一步提升其性能。Method因其在目标检测与迁移学习领域的无处不在性,我们采用Mask R-CNN作为基线方案。该选择也旨在对简洁性与复杂性进行均衡,同时提供具有竞争力(也许并非SOTA)的结果。相比原始版本,我们为Mask R-CNN提供了不同的改进模块与训练方案。ViT Backbone接下来,我们将解决如下两个ViT作为Mask R-CNN骨干的技术障碍如何与FPN适配;如何降低内存占用与推理耗时。FPN Compatibility Mask R-CNN可以与输出单尺度特征的骨干,也可与输出多尺度特征(多尺度特征将被送入FPN处理)的骨干协同工作。由于FPN能够提供更好的检测结果,故我们采用了FPN方案。然而,采用FPN存在这样一个问题:ViT仅输出单尺度特征,而非CNN的多尺度特征 。为解决该问题,我们采用了XCiT中的技术对ViT中间特征进行上/下采样以提供四种不同分辨率的特征(可参见上面图示绿框部分)。第一个模块采用两个stride=2的转置卷积进行4倍上采样;第二个模块采用一个stride=2的转置卷积进行2倍上采样;第三个模块不做任何处理;最后一个模块采用stride=2的MaxPool进行下采样。假设块尺寸为16,这些模块将输出stride分别为4、8、16、32的特征并被送入到FPN中。注:Swin与MViT通过修改VIT架构解决了ViT无法输出多尺度特征的问题。这种处理方式也是一个重要的研究方向,但它与ViT的简单设计相悖,会阻碍新的无监督学习(如MAE)探索。因此,本文仅聚焦于上述生成多尺度特征的改动方式。Reducing Memory and Time Complexity 采用ViT作为Mask R-CNN的骨干会导致内存与耗时挑战。ViT中的每个自注意力操作会占用空间。在预训练过程中,该复杂度是可控的()。而在目标检测中,标准图像尺寸为,这就需要近21倍多的像素和图像块,这种高分辨率用于检测小目标。由于自注意力的复杂度,哪怕基线ViT-B也需要占用20-30G GPU显存(batch=1,FP16) 。为降低空间与时间复杂度,我们采用Windowed Self-attention,即局部自注意力,而非全局自注意力。我们将图像块拆分为非重叠窗口并在每个窗口独立计算自注意力。这种处理方式可以大幅降低空间复杂度与时间复杂度,我们默认设置。Windowed Self-attention的一个缺陷在于:骨干不能跨窗口聚合信息。针对此,我们每 隔模块添加一个全局自注意力模块 。Upgraded Modules相比原始Mask R-CNN,我们对其内置模块进行了如下改动:FPN中的卷积后接BN;RPN中采用两个卷积,而非一个卷积;RoI分类与Box回归头采用四个卷积(带BN)并后接一个全连接,而非原始的两层MLP(无BN);Mask头中的卷积后接BNTraining Formula相比原始训练机制,我们采用了从头开始训练+更长训练周期的训练机制(如400epoch)。我们希望让超参尽可能的少,同时抵制采用额外的数据增广与正则技术。然而,我们发现:DropPath对于ViT骨干非常有效(性能提升达2),故我们采用了该技术。总而言之,训练机制如下:LSJ数据增广(分辨率,尺度范围[0.1,2.0]);AdamW+Cosine学习率衰减+linear warmupDropPath正则技术;batch=64,混合精度训练。当采用预训练初始时,微调100epoch;当从头开始训练时,训练400epoch。Hyperparameter Tuning Protocol为使上述训练机制适用于同模型,我对学习率lr、权值wd衰减以及drop path rate三个超参进行微调,同时保持其他不变。我们采用ViT-B+MoCoV3进行了大量实验以估计合理的超参范围,基于所得估计我们构建了如下调节机制:对每个初始化,我们固定dp=0.0,对lr与wd采用grid搜索,固定搜索中心为,以此为中心搜索;对于ViT-B,我们从中选择dp(预训练参数时,训练50epoch;从头开始时,则训练100epoch),dp=0.1为最优选择;对于ViT-L,我们采用了ViT-B的最后lr与wd,并发现dp=0.3是最佳选择。注:在训练与推理过程中,图像将padding到尺寸。Initialization Methods在骨干初始化方面,我们比较了以下五种:Random:即所有参数均随机初始化,无预训练;Supervised:即ViT骨干在ImageNet上通过监督方式预训练,分别为300和200epoch;MoCoV3:即在ImageNet上采用无监督方式预训练ViT-B与ViT-L,300epoch;BEiT:即采用BEiT方式对ViT-B与ViT-L预训练,800epoch;MAE:即采用MAE对ViT-B与ViT-L预训练,1600eoch;Nuisance Factors in Pre-training尽管我们尽可能进行公平比较,但仍存一些“令人讨厌”的不公因子:不同的预训练方法采用了不同的epoch;BEiT采用可学习相对位置偏置,而非其他方法中的绝对位置嵌入;BEiT在预训练过程中采用了layer scale,而其他方法没采用;我们尝试对与训练数据标准化,而BEiT额外采用了dVAE。Experiments&Analysis上表比较了不同初始化方案的性能,从中可以看到:无论何种初始化,采用ViT-B/L作为骨干的Mask R-CNN训练比较平滑,并无不稳定因素,也不需要额外的类似梯度裁剪的稳定技术 ;相比监督训练,从头开始训练具有1.4指标提升(ViT-L)。也即是说:监督预训练并不一定比随机初始化更强;MoCoV3具有与监督预训练相当的性能;对于ViT-B,BEiT与MAE均优于随机初始化与监督预训练;对于ViT-L,BEiT与MAE带来的性能提升进一步扩大,比监督预训练高达4.0.上图给出了预训练是如何影响微调收敛的,可以看到:相比随机初始化,预训练初始化可以显著加速收敛过程,大约加速4倍 。Discussion对于迁移学习来说,COCO数据集极具挑战性。由于较大的训练集(约118K+0.9M标准目标),当随机初始化训练时可以取得非常好的结果。我们发现:现有的方法(如监督预训练、MoCoV3无监督预训练)的性能反而会弱于随机初始化基线方案 。已有的无监督迁移学习改进对比的均为监督预训练,并不包含随机初始化方案;此外,他们采用了较弱的模型,具有更低的结果(约40),这就导致:不确定如何将已有方法迁移到SOTA模型中。我们发现:MAE与BEiT提供了首个令人信服的COCO数据集上的指标提升 。更重要的是:这些masking方案具有随模型大小提升进一步改善检测迁移学习能力的潜力 ,而监督预训练与MoCoV3等初始化方式并无该能力。Ablations and Analysis上表对比了单尺度与多尺度版本Mask R-CNN的性能,从中可以看到:多尺度FPN设计可以带来1.3-1.7指标提升 ,而耗时仅提升5-10%,多尺度内存占用提升小于1%。上表对比了降低显存与时间复杂度的不同策略,可以看到:局部+全局的组合方式(即第二种)具有最佳的内存占用与耗时均衡;比纯局部自注意力方式,全局自注意力可以带来2.6指标提升。上表比较了不同位置信息的性能对比,从中可以看到:对于仅使用绝对位置嵌入的预训练模型,在微调阶段引入相对位置偏置可以带来0.2-0.3指标提升;预训练相对位置偏置可以带来0.1-0.3指标增益;相对位置偏置会引入额外的负载:训练与推理耗时分别增加25%和15%,内存占用提升15%。上图对比了预训练周期对于性能的影响,可以看到:在100-800epoch预训练周期下,越多的预训练周期带来越高的迁移学习性能;在800-1600epoch下,仍可带来0.2指标的性能增益。上图给出了TIDE工具生成的误差分析,可以看到:对于正确定位的目标,所有的初始化可以得到相似的分类性能;相比其他初始化,MAE与BEiT可以改善定位性能。上表给出了不同骨干的复杂度对比(ViT-B与ResNet-101具有相同的性能:48.9),可以看到:在推理耗时方面,ResNet-101骨干更快;在训练方面,ViT-B仅需200epoch即可达到峰值性能,而ResNet-101需要400epoch。
-
--- 本文转载自 新智元 > 程序员的工作就是取代重复、算法可替代的工作,而他们自己也在研究如何取代自己。Facebook新发表的代码补全模型准确率超50%,动动手指就能写几百行代码! 代码补全(code AutoCompletion)就是在写代码的时候,IDE能够预测出下一段要写的代码,也是写代码时候选择使用IDE的重要原因。 最近的相关研究表明,自动补全可以通过深度学习来实现,使软件语言模型能够通过对从程序员的 IDE 活动中收集的真实世界数据集进行训练,来实现显著的准确性提高。 不过,对于那些没多少人用的编程语言来说,一个常见问题是,可用的 IDE 数据集可能不足以进行训练。 对于这个问题,Facebook的研究人员最近在arxiv上公开了自己在代码补全上的工作。  他们在文中展示了迁移学习是如何能够在微调之前完成自动补全任务的,这种训练不局限于 ide和特定语言,能够针对各种各样的示例代码序列进行预训练。 该方法在非常小的微调数据集上提高了50% 以上的模型精度,在50k 个带标签样例的数据集上提高了10% 以上的精度。 在软件社区中,所有主要编程语言的大量开源代码提交都可以在 GitHub 上找到。 毫无疑问,这些代码的提交和开发人员在 IDE 上的活动有着直接的联系,例如vscode, intellij等会有不同的补全方式,也会直接体现在代码中。  因此,如果能够在建模代码编写行为时使用这些commit中的知识,那对于自动补全任务来说是有益的。 由于在所有编程语言中都存在一些共享概念和结构,例如数据类型、面向对象等思想设计,所以研究人员建议将这些语言知识从使用人数更多的编程语言(如Python, Java)转移到标记数据不足的其他小众语言中。  这项研究中的数据集来自 Facebook 的一些开发者活动,主要关注流行的编程语言 Python 和不太流行的语言 Hack。 该团队首先训练了来自 Hack 或 Python 的各种单语模型,以及来自两种语言的多语模型。为了从开放词汇表中有效地识别和预测很少被使用的关键词和两种语言之间不同的关键词,他们采用了两种标记方法: 字节对编码(Byte-pair encoding,BPE)和 Bigram 编码。 为了测试迁移学习的效果,他们使用了两个文本生成模型GPT-2和 PLBART-并评估了两个在线和离线模型的性能。  最后论文中总结了他们的贡献和实验结果: 1、对从git提交获得的源代码文件预先训练两个 transformer语言模型 GPT-2和 BART,结果显示它们在自动补全预测方面的性能,比直接使用实际 IDE 代码序列的微调提高了2.18%。也就是说迁移模型取得了更好的效果。 2、GPT-2模型是在两个真实世界的数据集上训练的: 在 IDE 上写的和代码补全选择期间记录的代码序列。预训练和特定任务的微调相结合能够产生一个更好的模型,比基本模型的性能高出3.29%。 3、文中展示了使用不同的编程语言进行预训练,在比较使用 Hack 示例进行预训练和使用10k Python 示例进行微调的模型与只使用 Python 示例进行训练的模型时,可以提高13.1% 的准确性 4、通过在线 a/b 测试比较,证明在任务、领域和语言这三个迁移学习维度上的改进分别使自动完成工具的使用率提高了3.86% 、6.63% 和4.64%  总体而言,研究表明,在不使用 ide数据和不同语言示例代码序列上的预训练代码补全模型,使用迁移学习可以显著提高模型的准确性,表明迁移学习有可能推进较不流行的编程语言的代码自动补全,并改善使用它们的开发人员的编码经验。 ## 代码预测工具 Kite是一个著名的代码补全工具。  Kite 基于 AI 的代码补全功能现在支持Python, JavaScript, TypeScript、 Java、 HTML、 CSS、 Go、 C、 C # 、C + + 、 Objective C、 Kotlin 和 Scala。  Kite 于2016年4月首次亮相,在17年3月又公开发布了一个基于云计算的版本。该公司在19年1月筹集了1700万美元,放弃了云计算,转而在本地运行免费服务。 在编写过程中Kite可以极大减少敲键盘的次数。在Kite的帮助下,活跃开发者甚至每天只需编写由大约 175 个单词组成的代码。  各种开发人员也是对Kite十分赞赏,甚至还包括了Python之父 Guido van Rossum  Kite的 Python 机器学习模型是在2500万个开源代码文件上训练的,它的 JavaScript 机器模型是在3000万个文件上训练的。 除了越来越多的编程语言,Kite也可在更多的开发环境中工作,目前已支持在16个编辑器上使用,包括 Android Studio、 Atom、 JupyterLab、 Spyder、 Sublime Text、 VS Code 和 Vim等。 此外Kite还与 IntelliJ 家族合作:,支持 IntelliJ、 PyCharm、 WebStorm、 Goland、 CLion、 PHPStorm、 Rider、 RubyMine 和 AppCode。 由此可见,公司的愿景是允许尽可能多的开发人员利用 Kite,而不管他们的语言或 IDE 是什么,最终实现各个场景下代码补全的「大一统」。  Kite 公司的首席执行官史密斯之前还创立了 Xobni,这是一个于07年9月推出的电子邮件服务,雅虎在13年7月将其收购。 史密斯在接受访问时说到,当我们构建对 JavaScript 的支持时,我们致力于创建一种可伸缩的方式来添加更多的编程语言,从那时起,我们一直在迭代我们的 JavaScript 模型和排序算法。这种学习使我们能够相对容易地发布每一种新语言,具有与 JavaScript 相同的准确性和智能性。 19年,正值GPT-2火热时,一名滑铁卢大学大四学生Jacob Jackson也开发了一款自动补全工具tabnine,支持23种编程语言和5种代码编辑器,几乎不需要配置安装即可使用。 Deep TabNine会根据你以前的编码习惯自动补全,还会在后面给出几个选项的概率。如果之前项目出现过类似代码,还能在补全候选框中直接给出地址,方便用户点击进去查阅!  VSCode下,直接打开插件市场搜索TabNine,点击安装即可。Sublime Text下调出Install Package Control安装即可。Atom也可以直接安装。EMACS和Vim稍微复杂一些。 Deep TabNine通过对GitHub大约200万个文件进行训练。训练期间,模型学习了例如动态类型语言中的类型推断等复杂行为,用这样的训练方式预测token。  TabNine可以使用传统工具难以获取的琐碎的线索。当线索不够的时候TabNine可能会胡言乱语,然而一旦拥有足够的线索,就能准确预测出代码,甚至还可以给出匹配的概率。 如今深度学习浪潮来了,程序员连自己也不放过,也要取缔自己的工作,生于忧患!
上滑加载中
推荐直播
-
华为云码道-玩转OpenClaw,在线养虾2026/03/11 周三 19:00-21:00
刘昱,华为云高级工程师/谈心,华为云技术专家/李海仑,上海圭卓智能科技有限公司CEO
OpenClaw 火爆开发者圈,华为云码道最新推出 Skill ——开发者只需输入一句口令,即可部署一个功能完整的「小龙虾」智能体。直播带你玩转华为云码道,玩转OpenClaw
回顾中 -
华为云码道-AI时代应用开发利器2026/03/18 周三 19:00-20:00
童得力,华为云开发者生态运营总监/姚圣伟,华为云HCDE开发者专家
本次直播由华为专家带你实战应用开发,看华为云码道(CodeArts)代码智能体如何在AI时代让你的创意应用快速落地。更有华为云HCDE开发者专家带你用码道玩转JiuwenClaw,让小艺成为你的AI助理。
回顾中 -
Skill 构建 × 智能创作:基于华为云码道的 AI 内容生产提效方案2026/03/25 周三 19:00-20:00
余伟,华为云软件研发工程师/万邵业(万少),华为云HCDE开发者专家
本次直播带来两大实战:华为云码道 Skill-Creator 手把手搭建专属知识库 Skill;如何用码道提效 OpenClaw 小说文本,打造从大纲到成稿的 AI 原创小说全链路。技术干货 + OPC创作思路,一次讲透!
回顾中
热门标签