ICCV 2019 | 加一个任务路由让数百个任务同时跑起来,怎么做到?
作者 | Gjorgji Strezoski, Nanne van Noord, Marcel Worring
译者 | 中国海洋大学李杰
出品 | AI科技大本营(ID:rgznai100)
摘要
传统的多任务(MTL)学习方法依赖于架构调整和大型可训练参数集来联合优化多个任务。但是,随着任务数的增多,体系结构调整和资源需求的复杂性也随之增加。在本文中,作者引入了一种新方法,该方法在卷积激活层上应用条件特征的智能转换,使模型能够成功地执行多个任务。为了和常规的多任务学习做区分,本文引入了Many Task Learning (MaTL)作为特例。MaTL的特殊之处在于它指代一个模型能完成超过20个任务。伴随MaTL任务,作者引入了任务路由(TR)的方法并将其封装在一个称为任务路由层(TRL)的层中,使得一个模型能适合数百个分类任务。
引言
多任务的定义和利弊
不管是在我们日常生活还是计算机科学中,多任务是无处不在的。多任务有利于提升效率,促进资源的合理利用。在计算机科学中,MTL的定义是这样的:MTL是一种学习范式,它通过同时优化多个任务来提高机器学习模型的泛化性能。与多任务相对的,是单任务(STL),也就是一个模型只对应一种任务。为了获得更好的性能表现,STL通常包含大量的参数,这些参数其实是具有适用多个任务能力的,而MTL的任务,正是利用这种参数的额外能力。
多任务又是也是一柄双刃剑,同时执行的任务可以通过共享模型在训练期间产生针对子任务的知识,这种知识共享可能会帮助或阻碍其他任务的执行。举个例子,在一个鸟类数据集中,训练一个模型来识别白色的头部羽毛和白色的腹部有助于对海鸥的识别。但是我们不能指望鸟类大小探测器来帮助海鸥分类,因为这种鸟在自然界中有许多大小,所以大小与它的种类无关。
多任务中的组合问题
与其他组合问题一样,无法确认MTL中任务和资源的哪种组合方式是最优的。而寻找最优组合的过程是低效且繁琐的,尤其是随着神经网络的宽度,深度或者基数不断增加,直接导致了复杂度成比例增加。本文受随机搜索算法的启发,通过调整模型中每个子任务的数据流向,针对最优组合问题执行一个结构化的随机解决方案。如下图所示,通过将每个单元分配给可以使用它的子任务,为每个子任务创建专门的子网络。此外,作者还展示了通过参数空间为任务提供可选路由,增强了特性的健壮性和可伸缩性,同时提高了预测性能。
在训练过程中,每个任务的知识会对其他任务造成影响,这种影响可能是积极的,也可能是消极的。MTL中一个难题就是解决联合学习任务之间的负面影响。为了解决这个问题,当前大部分的方案是利用先验知识,但是先验知识通常存在获取困难的问题,作者通过引入任务路由机制,减轻了获取先验知识的问题。任务路由机制,是指允许任务具有独立于模型的数据流向。这样,通过执行一个结构化的随机解决方案,允许任务形成对自己有积极影响的共享方式。
在实验中,通过逐步增加单个模型所执行的任务数量,验证了路由机制的有效性。
背景知识
多任务学习( MTL)是一种旨在提高机器学习模型对多个任务进行优化的泛化性能的学习范式。还可以将MTL描述为一种利用相关任务的训练信号中包含的领域特定信息来改进泛化属性的机制。因此,在MTL中,我们的目标是联合执行多个任务,并改进每个任务的训练学习过程。MTL可以分为对称(symmetric)和非对称(asymmetric)两种。
非对称(asymmetric)的MTL有明确的主任务和辅助任务。依靠辅助任务提供的经验知识,帮助完成,提升主任务的性能。这种思想与迁移学习有相似之处,一个最显著的区别是,MTL中辅助任务和主任务是同时学习的,而在迁移学习中,不同任务的学习是独立的。
常见的辅助任务类型
对称(Symmetric)的MTL旨在同时提高多个任务的性能表现。这种方式也是MTL的主流,利用任务任务之间的关联性这一事实,在统一表示下联合学习,可以最大限度地利用任务之间的知识,使得所有任务都有所增益。但是它们很容易受到噪声和异常值的影响,一旦引入,性能会急剧下降。这是由于特征鲁棒性的欠缺。
在本文中,作者解决了特征健壮性问题,从训练过程开始就随机分配共享结构,并通过模型强制任务使用数据流的替代路径。
不论是对称还是非对称的MTL结构,都很依靠先验知识来进行架构设计,任务分组,特征共享选择等。如果这种先验知识是存在的,很明显对MTL是有益的,但如果这种先验知识不存在或者难以获得,对有些MTL性能是一个巨大打击,也会阻碍MTL在实际应用中的落地。因此,作者认为我们应该着眼于没有先验知识情况下的MTL模型。在这一方向的代表工作有几个,如自适应的多任务特征共享网络,捕获任务相关性并创建共享结构的进化算法等。但是这些方法在如何定义、构造或初始化模型方面,大多有严格的约束。本文提出了一种适用于任何深度MTL模型而不需要结构调整的方法,因为封装了分层参数空间。通过控制数据流而不是结构,可以不影响底层的模型行为,这提升了模型的可扩展性。
任务路由(Task Routing)
MTL中,硬参数共享是主流。硬参数共享是指,将MTL划分为特征共享部分(task-shared)和特定任务的特征(task-specific)两部分。其中,特征共享部分,是对所有任务共享的特征,特定任务特征部分是针对每个子任务,提取对自己有帮助的特征表示。
MTL中的硬参数共享
本文的方法使模型卷积层中的单元在训练和测试时具有一致的共享或特定于任务的角色。具体实现方式是通过在卷积激活层之前应用一个基于通道的,特定于某个子任务的二进制掩码(binary mask)来实现这一行为,并将下一层的输入限制为那些与mask相乘后非零的channel。
如下图所示,对一个卷积层(白色通道)的输出进行如下操作:当前激活的任务(task 3)用于选择mask(亮绿色为1,灰色为0),元素跨通道相乘后,剩下的元素为亮绿色,空通道为棕色透明。也就得到了基于某个子任务的特征。
因为激活流向并不遵循它的常规路线,即它已经被重新路由到另一个备选路线,所以将此方法称为任务路由(TR),对应的层命名为任务路由层(TRL)。通过将TRL应用于网络,能够在任务之间实现单元重用,并增加可以使用单个模型执行的任务的数量。
那么每个任务的mask是怎么生成的呢?实际上,mask是在模型实例化时随机生成的,并在训练过程中保持不变。这些mask需要使用一个超参数σ进行预先定义,σ的含义是一个共享参数比,它定义了有多少比例的单元是task-specific的,有多少比例的单元是任务间共享的。这个比例的倒数决定了有多少个单元是无效的。基于此,共享参数比能使我们探索完整的空间共享可能性,而调整的代价只是一个简单的超参数大小。如果σ是0,意味着共享参数的比是0,说明整个训练过程中没有共享单元,每个任务都有完全独立的网络;相反,如果σ是1,意味着所有的单元都是共享的,构成一个经典的全共享MTL结构。
任务路由中Mask的创建
通过上一节的介绍,我们知道任务路由是通过binary mask对卷积层中的单元激活进行特征转换来完成的。由于本文提出的模型没有任何先验知识加入,因此mask的创建是在模型实例化时随机产生的。在训练和测试期间,由于mask是固定的,不参与训练的,因此产生的随机结构是持久性的。这种不可变的mask是非常必要且有效的,随着任务数的增加,可能的共享策略空间非常大。通过从训练开始固定共享策略,该模型可以集中于训练健壮的,特定于子任务的共享单元。
任务路由层(TRL)
本文将任务路由封装到任务路由层中,在任务路由层中包含一个特定于子任务的二值mask。对于任务A,定义输入为 X->[CxHxW],其中,C为一个通道,也就是本文中的一个单元,H,W分别是单元的高和宽;定义它的二值mask MA,那么输入X经过TRL层后,会进行下式的计算:
其中,⊙表示element-wise multiplication accross channel(跨通道的元素相乘),通过公式(1)完成了一个特征转化过程,得到一个新的输出,然后将其传递到下一个卷积块。下图是传统卷积块和带有TRL的卷积块的比较,可以看到,TRL可以很简单的嵌入到现有卷积结构中。
在前向传递过程中,一个单一的专门的子网被激活,称为激活任务A的子网。这就是依赖为TRLs设置激活任务来实现的。在前向传播过程中,需要从任务池中随机抽样一个任务。由于遍历数据集所需的迭代次数通常远远高于任务的数量,因此在一个epoch内某个任务得不到优化的几率非常小。随着训练过程进行多个epoch,这种几率更会减少。即使我们认为某个任务在一个epoch中没有被优化过,这也很容易被部分共享单元的其他任务的优化所补偿。
训练流程
训练流程如下表所示,在训练过程中,每一个mini-batch,都会更换当前的激活任务。
我们可以把Xtrain看做是一个epoch中的训练数据,对于其中每一个batch的feature map X,从任务池中抽样出一个任务A,设置为当前激活任务,然后将X继续前向传递。设置当前激活任务是框架中的一个全局更改,因此任务路由工作流不会影响已有的的传递和训练。这个属性作为一个全局变量,激活任务影响模型中所有在TRL中应用的mask。
在输入的前向传递中,流程如下,首先对于选出的当前激活任务A,得到A的mask,应用上文中的公式1,将mask与X进行跨通道的元素相乘,得到新的输出。
相关实验
在模型中的每个卷积层之后附加TRL,并在模型实例化时随机初始化路由映射。
在不同分类数据集上的实验
如下表,在FashionMNIST, CIFAR-10, Zappos50K and CelebA (10 and 40 Tasks)五个数据集上进行分类任务实验。σ就是前文中介绍的共享参数比,范围为[0,1],当σ等于0时完全不共享,当σ等于1时,就是传统的硬参数共享。所有数据集的总体最佳执行方法以灰色突出显示,每个数据集的最佳方法以粗体显示。可以看到,σ的引入,确实提升了性能,而且是在不同数据集上都证明有效。
结论
本文提出了一种让单一模型有效的执行大量分类任务。这种可扩展的MTL技术,在不需要先验知识的情况下,利用任务间的知识可转移性,通过对卷积层的输出进行特征转化,使得单模型适应大量不同的分类任务。
本文提出的方法的核心是任务路由层(TRL),该层封装了任务路由,只需要很少的工作和计算开销,就能够很轻易的嵌入到当前的卷积结构中。TRL包含一个task specific mask,允许单个模型在其参数空间内适应多个任务,通过将输入进行TR操作,得到了针对每个子任务的输出,随后为每个子任务训练专门的子网络,子网络的维数由共享参数比决定。共享参数比作为一个超参数,提供了一种简单的方法来探索该模型所提供的所有共享可能性。
综上,本文的主要贡献在于:
(1)提出了一种可扩展的MTL技术,在不需要先验知识的情况下,利用不同任务间的知识可转移性,使单一模型同时适应大量不同分类任务。
(2)能够在单个MTL模型中对多个子架构进行结构化的确定性抽样。
(3)引入参数共享比σ,只需要很少的参数量和消耗,就能探索所有共享方式和组合。
(4)该方法不仅对传统的MTL有提升,对于任务数量特别多的分类,也有性能提升。本文将方法应用于总共15个数据集,以证明它的有效性和高效性。
Paper link:
https://arxiv.org/abs/1903.12117
Code link:
https://github.com/gstrezoski/TaskRouting
(*本文为AI科技大本营投稿文章,转载请微信联系 1092722531)
◆
精彩推荐
◆
2019 中国大数据技术大会(BDTC)再度来袭!豪华主席阵容及百位技术专家齐聚,15 场精选专题技术和行业论坛,超强干货+技术剖析+行业实践立体解读,深入解析热门技术在行业中的实践落地。6.6 折票限时特惠(立减1400元),学生票仅 599 元!
推荐阅读
相关文章:

DEV开发之控件NavBarControl
右键点击RunDesigner弹出如下界面鼠标先点击3或4,1,,然后点击1或2进行相应的新增或删除操作,3是分组,4是项目,4可以直接拖动到相应的分组3.属性caption:显示的名称4.NavBarControl 属性 PaintStyleName绘画风格&…

swift支持多线程操作数据库类库-CoreDataManager
类库方法 获取数据 executeFetchRequest(request:) 同步获取数据 var request: NSFetchRequest NSFetchRequest(entityName: "MonkeyEntity")var myMonkeys:NSArray? CoreDataManager.shared.executeFetchRequest(request)异步获取数据 executeFetchRequest(re…

目标检测(或分隔)算法Mask R-CNN简介
在博文https://blog.csdn.net/fengbingchun/article/details/87195597 中对Faster R-CNN进行了简单介绍,这里在Faster R-CNN的基础上简单介绍下Mask R-CNN。 Mask R-CNN是faster R-CNN的扩展形式,能够有效地检测图像中的目标,并且Mask R-CNN…

未来之城,管理者可能不是人......
大会官网 https://t.csdnimg.cn/KSTh2010 年,IBM 正式提出了“智慧地球”愿景。在 IBM 的设想中,智慧城市应该由六个核心系统组成:组织(人)、业务/政务、交通、通讯、水和能源。(图源 | IBM 官网࿰…

UVa 10701 - Pre, in and post
题目:已知树的前根序,中根序遍历转化成后根序遍历。 分析:递归,DS。依据定义递归求解就可以。 前根序:根,左子树,右子树; 中根序:左子树,根,右子树…

图像集存储成MNIST数据集格式实现
有时会用到将一组图像存放成MNIST中那样的数据格式,以便于用于网络的训练和测试,如MNSIT中的测试集标签t10k-labels.idx1-ubyte和测试集图像t10k-images.idx3-ubyte,各包含了10000个样本,这里以此两个测试集为例详细说明下实现过程…

ios9定位服务的app进入后台三分钟收不到经纬度,应用被挂起问题及解决方案
原来定位服务是10分钟收不到定位信息就挂起定位,现在变为最短3分钟,估计都是为了省电吧。只要你开启应用的后台定位,并且10分钟有一次定位,那么苹果就不会关闭你的线程,现在变成3分钟。若你的应用开启了后台定位&#…

程序员必知的20个Python技巧
作者 | Duomly 译者 | 弯月,编辑 | 郭芮 出品 | CSDN(ID:CSDNnews)Python是一门流行且应用广泛的通用编程语言,其应用包括数据科学、机器学习、科学计算等领域,以及后端Web开发、移动和桌面应用程序等方面。…

CSS float浮动的深入研究、详解及拓展(二)
为什么80%的码农都做不了架构师?>>> 接上回… 五、浮动的非本职工作 浮动的本职工作是让匿名inline boxes性质的文字环绕图片显示,而其他所有用浮动实现的效果都不是浮动应该做的事情,我称之为“非本职工作”。 或许我们并没有…

不需要显示地图 就获得用户当前经纬度 超简单的方法
1.遵循协议 CLLocationManagerDelegate,AMapSearchDelegate,AMapLocationManagerDelegate 2. API MAMapServices.sharedServices().apiKey APIKey AMapLocationServices.sharedServices().apiKey APIKey AMapSearchServices.sharedServices().apiKey APIKey AMapNaviService…

ELECTRA:超越BERT,2019年最佳NLP预训练模型
作者 | 李如来源 | NLPCAB(ID:rgznai100)【导读】BERT推出这一年来,除了XLNet,其他的改进都没带来太多惊喜,无非是越堆越大的模型和数据,以及动辄1024块TPU,让工程师们不知道如何落地。今天要介…

安装node和spm过程
2019独角兽企业重金招聘Python工程师标准>>> 安装nodejs 官网下载nodejs,我下的是v0.10.33版本,安装到d:\nodejs下。 1.新建目录d:\nodejs,在其中建立node_cache、node_global、node_modules三个目录。 2,将C:\Users…

经典网络LeNet-5介绍及代码测试(Caffe, MNIST, C++)
LeNet-5:包含7个层(layer),如下图所示:输入层没有计算在内,输入图像大小为32*32*1,是针对灰度图进行训练和预测的。论文名字为” Gradient-Based Learning Applied to Document Recognition”,可以直接从ht…

根据经纬度获取用户当前位置信息
根据上篇文章获取的经纬度获取用户当前的位置信息 //获取用户所在位置信息ADDRESS func getUserAddress() { let latitude : CLLocationDegrees LATITUDES! let longitude : CLLocationDegrees LONGITUDES! print("latitude:\(latitude)") print("longitude…

刷了几千道算法题,我私藏的刷题网站都在这里了
作者 | Rocky0429 来源 | Python空间(ID: Devtogether)遥想当年,机缘巧合入了 ACM 的坑,周边巨擘林立,从此过上了"天天被虐似死狗"的生活...然而我是谁,我可是死狗中的战斗鸡,智力不够…
js实现点击li标签弹出其索引值
据说这是一道笔试题,以下是代码,没什么要文字叙述的,就是点击哪个<li>弹出哪个<li>的索引值即可: <html> <head> <style> li{width:50px;height:30px;margin:5px;float:left;text-align: center;li…

定时器开启和关闭
写程序时遇见了定时器,需要写入数据库用户的经纬 ,还要读取,写好之后发现很费电 总结原因: 1:地图定位耗电(这个根据程序要求,不能关闭,需要实时定位,很无奈ÿ…

一览群智胡健:在中国完全照搬Palantir模式,这不现实
作者 | Just出品 | AI科技大本营(ID:rgznai100)神秘的硅谷大数据挖掘公司 Palantir 是国内众多创业公司看齐的标杆,其业务是为政府和金融领域的大客户提供数据分析服务,帮助客户作出判断,甚至“预知未来”,…

ImageNet图像数据集介绍
ImageNet图像数据集始于2009年,当时李飞飞教授等在CVPR2009上发表了一篇名为《ImageNet: A Large-Scale Hierarchical Image Database》的论文,之后就是基于ImageNet数据集的7届ImageNet挑战赛(2010年开始),2017年后,ImageNet由Ka…

cocos2dx 场景的切换
我们知道cocos2dx中可以由多个场景组成,那么我是如何来切换场景的呢首先我们先新建一个新的场景类,我推荐的方式是,在你工程的目录中找到一个classes的文件夹,里面有AppDelegate.cpp和AppDelegate.h还有HelloWorldScene.cpp和Hell…

IOS 后台挂起程序 当程序到后台后,继续完成定位任务
// 当应用程序掉到后台时,执行该方法 - (void)applicationDidEnterBackground:(UIApplication *)application { } 当一个 iOS 应用被送到后台,它的主线程会被暂停。你用 NSThread 的 detachNewThreadSelector:toTar get:withObject:类方法创建的线程也被挂起了。 我…

任正非:华为5G是瞎猫碰死老鼠
喜欢话糙理不糙的任正非,又飙金句。11月6日,在和彭博社记者对话时,谈到华为5G,他说:“回顾这个过程,我们也没有什么必胜的信心,有时候也是瞎猫碰上了死老鼠,刚好碰上世界是这个需求。…

网络文件系统(NFS)简介
网络文件系统(Network File System, NFS)是一种分布式文件系统协议,最初由Sun Microsystems公司开发,并于1984年发布。其功能旨在允许客户端主机可以像访问本地存储一样通过网络访问服务器端文件。NFS和其他许多协议一样,是基于开放网络运算远…

JAVA Static方法与单例模式的理解
最近用sonar测评代码质量的时候,发现一个问题,工程中一些util类,以前写的static方法都提示最好用单例的方式进行改正。为此,我仔细想了想,发现还是很有道理的。这里谈谈我个人对static方法与单例模式的理解。所谓单例模…

程序员的自我修养--链接、装载与库笔记:目标文件里有什么
编译器编译源代码后生成的文件叫做目标文件。目标文件从结构上讲,它是已经编译后的可执行文件格式,只是还没有经过链接的过程,其中可能有些符号或有些地址还没有被调整。其实它本身就是按照可执行文件格式存储的,只是跟真正的可执…

swift 中拨电话的实现
//MARK:_一键报警设置//MARK: - 弹出视图func createView() {var alertView : UIAlertView?alertView UIAlertView(title: "110", message: "", delegate: self, cancelButtonTitle: "取消", otherButtonTitles: "呼叫")alertView?…

T5,一个探索迁移学习边界的模型
作者 | Ajit Rajasekharan译者 | 夕颜出品 | AI科技大本营(ID:rgznai100)【导读】10月,Google 在《Exploring the Limits of Transfer Learning with a Unified Text-to-Text Transformer》这篇论文中提出了一个最新的预训练模型 T5ÿ…
【Chat】实验 -- 实现 C/C++下TCP, 服务器/客户端 多人聊天室
本次实验利用TCP/IP, 语言环境为 C/C 利用套接字Socket编程,以及线程处理, 实现Server/CLient 之间多人的聊天系统的基本功能。 结果大致如: 下面贴上代码(参考参考...) Server 部分: 1 /* TCPdtd.cpp - main, TCPdayt…

TeamViewer介绍:远程控制计算机
TeamViewer是一个可以远程控制计算机的程序,它也可以进行远程文件传输。TeamViewer支持的平台比较多,如Windows, Mac, Linux, ChromeOs, Android, iOS等,最新发布版本为14.x,它有个人免费和商业付费两种。只要对方告诉你他的TeamV…

PyTorch攻势凶猛,程序员正在抛弃TensorFlow?
来源 | The Gradient译者 | 夕颜出品 | AI科技大本营(ID:rgznai100)自 2012 年深度学习重新获得重视以来,许多机器学习框架便争相成为研究人员和行业从业人员的新宠。从早期的学术成果 Caffe 和 Theano ,到背靠庞大工业支持的 PyT…