一、EasyTransfer框架背景
什么是迁移学习?
迁移学习的核心的思路是把一个领域的知识迁移到其他的领域。
它主要能解决什么样的问题?
我们在真实业务应用的场景里面,虽然数据很多,但是通常标注会很少。然而深度学习的成功一般离不开海量的标注数据,所以这时候我们需要考虑迁移学习。它可以把相关领域的知识迁移到标注少的目标领域。特别是在自然语言处理领域,迁移学习有非常多的应用。目前比较流行的预训练的语言模型,像Bert和T5,就是利用海量的数据预训练了一个通用的模型,然后再把它的知识迁移到下游的场景。迁移学习会是驱动下一个工业应用成功的最主要的驱动力。
我们开发深度迁移学习框架主要是为了解决几个用户的痛点。
第一个是,超大规模预训练模型能效如何提升。
第二个是,业务场景多样化,如何做好迁移学习。最后,我们从算法的设计到开发落地其实是很长的一个过程。所以从训练到部署,如果我们能提供一体化的解决方案,在真实业务场景当中,会使用的非常方便。所以从这三个痛点和挑战出发,我们设计了这么一个深度迁移学习的框架PAI-EasyTransfer。
它主要有几个亮点:
第一,易用且高性能。模块化(IO, Layers, Models) 高效的分布式用户分层,提高用户体验。
第二,应用导向。预训练模型库ModelZoo,应用库AppZoo,支持五种迁移学习范 式,面向应用,零基础入门。
第三,产品化。无缝对接PAI生态产品:PAI Studio 组件,PAI DSW开发, PAI DLC云原 生训练平台,PAI EAS线上服务。如下图所示,和现有行业上的一些框架对比,我们的框架是有些优势的。
下面介绍一下我们的工具的整体的一个框架。大家可以看到,我们目前支持的主流的5种迁移学习方式,基本上涵盖了所有主流的方式。我们的框架搭建完的话,是可以无缝对接PAI的一些产品的,有PAI的组件,还有一些开发的模块,导出的模型,是直接可以对接我们的服务。从训练到部署,我们可以提供一站式的服务。下面会详细的介绍一下我们框架的4大类的核心的功能:
•易用且高性能的框架
•五大迁移学习范式
•丰富的AppZoo
•无缝对接PAI产品生态。
二、框架的易用性和高性能
首先在易用性上面,我们对深度学习常用的模块做了一些抽象。所以在我们这个框架里面,有Layers这么一个概念,我们把常用的这些模块都封装好了,你可以把相应的内容直接拿出来,跟搭积木一样的把这些内容都搭在一起。右图是我们常用的pipeline,*的构建相应的模块,这样就可以搭成相应的模型。这里给了一个自定义网络的示例,根据我们的框架你可以自己制定一个网络结构。另外,还给了一个模型训练示例。可以看到整个训练的形式也是比较简单的。除了制定自己的模型以外,还可以直接把modelzoo里面的模型直接拖出来使用。
同时,我们对分布式也做了一些优化。主要的成果有:
• 优化了LAMB+GA,采用自动混合精度训练,编译优化和高效的分布式策略,比社区版在运算速度上快4倍多
• 优化了参数配置:只需简单的参数,自动给出合理的配置,达到线性加速比(4倍卡数收敛仅需原来的1/4时间)。所以在分布式收敛这一块,我们公司是做的比较好的。
三、框架支持的算法
刚才说过了我们支持4类迁移学习的范式。我们可以根据应用场景的数据的情况来选择不同的迁移学习算法,来应用到具体场景里面去。
如下图所示,这里大概分了两块。如果要提升业务模型的效果,可以考虑前面这4种。在这个基础之上,如果要进一步提升模型的效率,可以考虑Model-based TL。我们在这5个方向的迁移学习范式沉淀了大概有10多种的创新算法,提升模型效果和效率,落地业务并沉淀到框架。后续我们会陆续把它都开源出来。目前框架已经在阿里巴巴内部使用,已经支持了20多个业务,同时我们也在阿里云上出一些解决方案。
首先是Model Fine-tuning,这个方向可以说是NLP上用的最多的一个迁移学习的范式。基本思路是说,高质量预训练模型让所 有下游应用场景收益,难点有:
• 超大规模的预训练模型支持
• 基于无监督数据构造预训练任务和Losses。
语言模型有:
• Ring All Reduce架构,128卡100倍数的加速
• 梳理海量弹内和弹外数据(150T数据)
• 设计不同的预训练loss以提升效果: SpanMask, WWM, Dynamic Mask, SOP等。
我们取得的成果有:
• 兼容主流预训练模型
• 产出PAI-ModelZoo,支持20+预训练模型
• 小蜜数据集取得第一的效果,业务上线
• 预训练的PAI-ALBERT++取得CLUE分类排行第一。
多模态模型包括:
• 图文搜索,图文质检,图文匹配等 (小蜜,淘宝直播,搜索)
• FashionBERT:电商领域图文预训练(Adaptive loss)。
取得的成果有:
• 效果超过SOTA,模型上线ICBU场景
• 创新工作录用SIGIR 2020文章一篇。
我们用的比较多的一个场景,是纯NLP的场景。我们有预训练很多语言模型,然后把相关的语言模型在下游场景里面直接进行Fine-tune。在真实应用中也会有一些挑战和难点:
• 数据差异:很多电商场 景直接用效果不理想
• 任务差异:Context-QA 里效果也不理想。下面介绍预训练模型在电商场景的应用。电商数据Continual Pretrain模型的特点:
• 小蜜多语言:俄语,西语
• 搜索:query和title点击数据
• 四大Finetune应用场景:MRC, Sequence Labeling,Sentence Pair Classification, Text Classification。
我们取得的成果有:
• 业务:AliExpress的多个场景落地
• 创新:录用会议文章SIGIR 2019一篇上下文感知的BERT Finetune
• 创新:改造预训练模型,加入任务相关信 息,提出BERT with History Answer Embeddings。
第二种范式是Feature-based TL。
它可以帮助优化标注数据较少的领域。难点包括:• 如何消除领域差异, 如何自动学习领域关 系来帮助迁移
• 多轮阅读理解数据不足,需要从单轮数据里迁移
• 小语种文本匹配数据 缺失,需要其他领域数据。
我们提出了特征迁移解决方案:自动学习领域关系(Domain Relationship Learning),迁移相关领域知识。它的核心点包括:
• 自动领域关系学习:相近领域输出模 型比较相似,不相近则不相似
• 对抗迁移:利用对抗学习,学到更好 的shared和specific特征
• 自研的HCNN模型:效果和效率兼优。我们取得的成果有:
• 提出CAT-BERT:公开多轮阅读理解榜第一,超过Google的BERT,AI2和科大讯飞 (2019.10)
• 提出DRSS-HCNN:上线多个业务场景,录用会议文章WSDM 2019一篇。
第三种范式是Instance-based TL。
样本迁移的难点是,如何选择合适样本,使源域和目标域分布一致,避免负迁移。我们提出自研的深度强化迁移学习算法:
• RL样本选择器:自动选择合适样本优化TL效果
• Wasserstein领域判别器:提供immediate rewards;提供state表征。取得的成果有:
• 在多个开源数据上取得SOTA效果,在小蜜QA场景和搜索排序场景落地
• 录用*数据挖掘会议KDD2019文章。
第四种范式是Model-based TL:
• 大模型效果好,但是无 法满足业务性能需求:BERT(3亿)
• 现有工作:知识蒸馏
• 出发点:设计学生网络 拟合大模型的表达能力,效果/效率兼优
• 难点:手动设计网络, 任务无关的蒸馏。我们提出了自适应知识蒸馏:
• 基于神经网络架构搜索技术自动搜索合适特定任务的架构。
取得的成果有:
• 基础知识蒸馏:小蜜三个QA场景落地
• 推理速度提升29倍,参数仅为原来 1/10,Avg精度损失在2%以内
• 录用IJCAI 2020文章一篇。
第五种范式是Meta Learning:Fine-tuning BERT for multidomains。
它的难点是,如何高效的学习元知识 (meta-knowledge)。
Meta Fine-Tuning的核心点包括:
• Learning from Typicality 对每个领域的样本计算权重,在训练 Meta-Leaner时重点学习典型样本
• Learning Domain-invariant Representations 附加学习Corrupted Domain Classifier,使BERT学习到的特征为领域无关的,即拥有跨领域迁移性。取得的成果有:
• 对BERT首先进行跨领域Meta Fine-tune,再针对每个领域Fine-tune,效果提升明显
• 录用IJCAI 2020文章一篇。
我们对目前的一些主流的NLP的应用做了一些抽象,方便用户直接能用相关的NLP应用。我们的APPZoo的特点有:
第一,易用性。支持Web组件/命令行,用户只需配置少 量参数;
第二,丰富性。支持NLP各类应用10+;
第三,灵活。组件间串联,灵活对接开源各个预训练语言模型库。
再举一个简单的例子,比方说文本匹配。这个任务上有三个真实场景当中用的比较多的。第一个是BERT。第二个是DAM。第三个是HCNN。如图所示,通过一个PAI命令,把数据整成相应的输入格式,选择相应的模型就可以了。所以我们应用的形式也是非常简单的。
四、框架的产品化
我们这个框架是可以跟PAI的生态无缝对接的。目前比较常用的是这三种情况。
第一个是PAI Web Studio。用户根本不需要知道算法的细节是什么,直接可以把相应的组件拖出来。然后我们会有些默认的参数,当然你可以改相应的参数设置就可以直接训练并且部署相应的服务。
PAI组件的特点包括:
• 拖拽式建模,简单直观支持的组件:
• 数据序列化
• 文本向量化
• 文本匹配、分类。
第二个是PAI DSW。如果是资深的用户,可以用PAI DSW开发者模式:
• 导入easytransfer库
• 复用layers
• 复用分布式
• 用户仅需自定义模型。
第三个是PAI CMD。在PAI命令里面的话,可以支持一些常用的应用。你可以通过我们的配置文件做少量的改动,去修改模型的架构。如果要做复杂的定制化开发的话,还是建议用DSW。