Paper | 学习多任务中的最佳分/ 合结构(十字绣结构)
论文:Cross-stitch Networks for Multi-task Learning
Misra, Ishan, et al. "Cross-stitch networks for multi-task learning." Proceedings of the IEEE Conference on Computer Vision and Pattern Recognition. 2016.
Over 160 citations (2019).
1. 问题
假设我们有任务A和B,并且这两个任务存在一定的关联性。最常见的做法是:对相同的输入,A和B共享同一个输入特征提取网络,然后在同样的特征上,各自单独训练,得到最终结果。
至于在哪里分开(独立),我们可以做遍历实验,尝试所有可能的网络结构,如图:

显然,这种暴力穷举法非常笨拙,并且找到的最佳结构也不是通用的。尽管我们缺乏理论指导,但有没有更好的实验方法?
有的!下面介绍的这篇文章Cross-stitch Networks for Multi-task Learning,来自卡耐基梅隆机器人所,是CVPR2016高引论文。
首先,作者选择了两对关联任务:语义分割(Semantic segmentation)和曲面法线预测(Surface normal prediction),以及物体检测(Object detection)和属性预测(Attribute prediction)。根据上图的分、合模式,我们可以得到对应的实验结果:

图中的数据,是与task-specific网络(即上上图最右)比较的结果。作者总结出两点:
- 多任务相较于单任务,有一定的优势;
- 最佳分、合结构因任务而异。
接下来才是我们的重点。
2. 十字绣结构(Cross-stitch architecture)
看图秒懂:

啥?不知道怎么分合?让它变成超参数!
是的,十字绣结构就这么简单。在每一层的输出后,增加这样的分、合结构,然后再接入下一层的输入。
为了保证可导(可反向传播),这里的分合不是开关结构,而是由超参数加权控制。
图中的\(\alpha_S\)意为the same-task values,\(\alpha_D\)意为the different-task values。\(\alpha_S=1\)就是task-spec结构,\(\alpha_D\)越大共享程度越高。
但在引入新结构以后,出现了以下问题:
这些超参数怎么初始化?
为了保证十字绣结构前后数据量级不变,很自然地,我们最好规定初始状态下超参数之和\(\alpha_S+\alpha_D=1\)。
但注意,这只是初始化的规定,在训练过程中超参数可以自由发展。
其次,具体怎么设置,还得靠实验,所以是因任务而异的:

由于这些超参数的初始值是网络中一般参数的一到二倍大,因此在实验中发现,这些超参数调整过慢。
为了加快收敛,这些超参数的学习率被直接乘以10的若干次方。
通过实验发现,10的2到3次方最佳,此时收敛速度更快,实验结果也更好。

- A和B网络如何初始化?统一还是各自初始化?
还是实验解答。
- 在ImageNet特征上,分别进行20K次迭代,得到one-task initialized的两个网络;再进行10K次统一迭代。
- 直接在ImageNet特征上进行30K次迭代。
结果是前者更好:

因此推荐分别各自初始化。
- Det+Attr实验中发现,如果十字绣结构连接每一层的对应channel,会导致学习不稳定。
因此这一对任务的十字绣结构,在每一层之间只用一个。
3. 实验设计
实验关注以下几点:
在4个任务的实验中,使用cross-stitch都达到了对比算法中的最佳效果,个别除外。
一些对比算法的参数规模是本方法的2倍。
对比算法中包括当时最好的结构穷举方法。
在语义分割任务中,不同类别的数据量不同。实验发现,数据量越少的分类,其准确率上升大致上反而越多(十字绣帮助越大):

对于SS和SN组合,它们的最优分、合模式不完全一样(下图横坐标是通道index):

Paper | 学习多任务中的最佳分/ 合结构(十字绣结构)的更多相关文章
- Java学习——方法中传递参数分简单类型与复杂类型(引用类型)编程计算100+98+96+。。。+4+2+1的值,用递归方法实现
package hello; public class digui { public static void main(String[] args) { // TODO Auto-generated ...
- C#中??和?分别是什么意思? 在ASP.NET开发中一些单词的标准缩写 C#SESSION丢失问题的解决办法 在C#中INTERFACE与ABSTRACT CLASS的区别 SQL命令语句小技巧 JQUERY判断CHECKBOX是否选中三种方法 JS中!=、==、!==、===的用法和区别 在对象比较中,对象相等和对象一致分别指的是什么?
C#中??和?分别是什么意思? 在C#中??和?分别是什么意思? 1. 可空类型修饰符(?):引用类型可以使用空引用表示一个不存在的值,而值类型通常不能表示为空.例如:string str=null; ...
- 10 个学习iOS开发的最佳网站(转)
10 个学习iOS开发的最佳网站 作者 jopen 2012-09-26 08:59:56 1) Apple Learning Objective C Objective-C,通常写作ObjC和较少用 ...
- Python之路【第二十四篇】:Python学习路径及练手项目合集
Python学习路径及练手项目合集 Wayne Shi· 2 个月前 参照:https://zhuanlan.zhihu.com/p/23561159 更多文章欢迎关注专栏:学习编程. 本系列Py ...
- 【转】C# Async/Await 异步编程中的最佳做法
Async/Await 异步编程中的最佳做法 Stephen Cleary 近日来,涌现了许多关于 Microsoft .NET Framework 4.5 中新增了对 async 和 await 支 ...
- Flink 从0到1学习 —— Flink 中如何管理配置?
前言 如果你了解 Apache Flink 的话,那么你应该熟悉该如何像 Flink 发送数据或者如何从 Flink 获取数据.但是在某些情况下,我们需要将配置数据发送到 Flink 集群并从中接收一 ...
- C#异步编程中的最佳实践(做法)
原文地址Stephen Cleary 写得很详细,尤其讲到了 GUI 上下文调用,在APS.NET中它会阻塞 GUI 线程,从而导致死锁.而控制台中却不存在这个问题. 比如开发过程中本地写控制台程序测 ...
- Zookeeper学习笔记(中)
Zookeeper学习笔记(中) Zookeeper的基本原理和基本实现 深入了解ZK的基本原理 ZK的一致性: ZAB 协议: Zookeeper 原子消息广播协议 ZK通过选举保证 leader ...
- 学习PHP中的国际化日期格式化操作
对于国际化功能来说,日期相关的格式化操作也是一块重头戏,毕竟不同的时区,不同的国家对于日期的表示方式都会有些不同.今天我们主要来学习的就是国际化地表示日期相关的信息内容. 日期格式化 首先就是最直接的 ...
随机推荐
- jQuery之遍历索引相关方法
遍历索引相关方法: .each(),补充.children() .index() 1 .each() 2..children() .index()
- IIS的UrlRewrite模块
以前在webform中重写URL是在Global.asax中的Addplication_BeginRequest事件中写代码进行跳转 今天介绍使用IIS提供的UrlRewrite模块实现URL重写 首 ...
- 音视频处理概要 markdown
最近要想办法把录制的音视频进行拼接. 比方说此次录制的视频有三段,通过高清直播编码器录制,录制下的标准为h.264 直接用ffmpeg简单拼接,音频会丢失,所以有了此次解决方案(有可能会繁琐,简单方案 ...
- 《Orange‘s》FAT12文件系统
FAT12 层次 扇区(Sector):磁盘上的最小数据单元 簇(Cluster):一个或多个扇区 分区(Partition):通常指整个文件系统 引导扇区 引导扇区是整块软盘的第0个扇区,在这个扇区 ...
- python之字典及其方法---整理集
字典 特点: 使用逗号分隔的key:value形式: 使用大括号括起来: key-value的键值对中,value部分可以是任意类型: 列表.字典不能做为字典的key: 字典是无序的,哪个key-va ...
- linux学习笔记:linux常用的命令
2018-11-19 常见命令快速查询一览表 命令 功能 ls 列出目录内容 cat 链接文件并打印到标准输出设备上(通常用来 ...
- NetCore+MySql+EF 数据库生成实体模型
NetCore版本 2.1 1.点击“工具”->“NuGet包管理器”->“程序包管理器控制台” 分别安装以下几个包 Mysql 版本: MySql.Data.EntityFrame ...
- Java8-函数式接口理解及测试
1. 函数式接口的理解 根据重构的思想,需要把容易变化的模块进行抽象并封装起来,从这个点来看,Java8新引入的函数式接口就是基于这个思想进行设计的. 2. 函数式接口定义 2.1 自定义如下 需要 ...
- 总结一下我的dmp第一个版本 也是最后一个版本
刚刚接手了一个新项目-DMP,目前已经开发联调完成,等待测试上线,所以现在来总结一下. 本来是一个前辈在负责,四月底离职了,他离职前我花了一周把这个项目交接了过来,大致熟悉了项目的业务流程以及代码 ...
- .net framework , code first
1. 创建一个控制台应用程序, 并添加引用 2 创建 一个类 public class New { [Key] public string NewId { get; set; } public str ...