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中的国际化日期格式化操作
对于国际化功能来说,日期相关的格式化操作也是一块重头戏,毕竟不同的时区,不同的国家对于日期的表示方式都会有些不同.今天我们主要来学习的就是国际化地表示日期相关的信息内容. 日期格式化 首先就是最直接的 ...
随机推荐
- Dapper查询返回Datatable
dapper封装的扩展方法中,没有直接返回datatable的方法,项目中有些时候需要用到这样的返回格式,而为了项目数据框架的统一性, 不好直接用其他框架,如果直接将查询出来的泛型集合转datatab ...
- Linux yum源
(一)yum源概述 yum需要一个yum库,也就是yum源.默认情况下,CentOS就有一个yum源.在/etc/yum.repos.d/目录下有一些默认的配置文件(可以将这些文件移到/opt下,或者 ...
- PhoenixFD插件流体模拟——UI布局【Splash | Mist】详解
液体飞溅 | 水雾 本文主要讲解Splash | Mist折叠栏中的内容.原文地址:https://docs.chaosgroup.com/display/PHX3MAX/Liquid+Splash+ ...
- Linux - 常用 Linux 命令的基本使用
常用 Linux 命令的基本使用 目标 理解学习 Linux 终端命令的原因 常用 Linux 命令体验 01. 学习 Linux 终端命令的原因 Linux 刚面世时并没有图形界面,所有的操作全靠命 ...
- MongoDB - 1
MongoDB - 1 一.初识MongoDB 之 什么东西都得先从理论入手,你说是不是啊? MongoDB 是一个基于分布式文件存储的数据库.由 C++ 语言编写.旨在为 WEB 应用提供可扩展 ...
- mysql内容总体回顾
数据类型: 数值类型: 整形 浮点型 字符串: char(定长)\varchar(不定长) char(定长):插入数据或查询数据都快,因为char在磁盘上插入数据时的存储空间是固定的,简单粗暴,直接就 ...
- js给页面添加回车监测事件,实现回车登录功能
document.body.addEventListener('keyup', function (e) { ') { $("#btn_login").click(); } }) ...
- 记一次win10+oracle11.2安装
下载安装文件,地址:链接:https://pan.baidu.com/s/1gObmWv5_w2Y4Jlf2-RkBYA 密码:1rx9 安装手册参考:链接:https://pan.baidu.com ...
- 天坑!c++调用python,遭遇R6034问题
起源: AllMyTube下载核心,是c#组件调用c++dll,在dll中初始化Python运行环境.在工作目录有msvcr90.dll文件时,程序运行会弹出如下错误: R6034. -------- ...
- Python基础-python流程控制之循环结构(五)
循环结构 循环结构可以减少源程序重复书写的代码量,用来描述重复执行某段算法的问题. Python中循环结构分为两类,分别是 while 和 for .. in. 一.while循环 格式1: whil ...