论文阅读:Modeling Task Relationships

论文阅读:Modeling Task Relationships

论文阅读:《Modeling Task Relationships in Multi-task Learning with Multi-gate Mixture-of-Experts》

最近在做英文字检测,中文字检测等算法,考虑到这几个任务之间的相关性,大佬推荐阅读这篇论文,仔细阅读论文后发现,该论文不错,值得一试。

论文亮点

这是一篇来自推荐领域的论文,作者提出了一种新的多任务学习方法MMoE,显式学习多任务数据之间的相关性。提升单任务的performance。

具体介绍

这里介绍常见的两种做法,以及作者提出的新方法MMoE。三种做法的总概图如下所示:

  1. 方法(a)的做法最为常见,两个任务直接共享模型的bottom部分,只在最后处理时做区分,图(a)中使用了Tower A和Tower B,然后分别接损失函数。比如,两种分类任务,一种任务为猫和狗的分类任务,一种任务为鸟和鸡的分类任务。那么Shared Bottom为多层感知机网路,输出feature map给Tower A和Tower B。Tower A和Tower B分别是多个fc层的组合,接上Softmax层后,分别输出每个类别的概率分给Output A和Output B。
  2. 方法(b)是常见的多任务学习模型。过程如下,将input分别输入给三个Expert,Expert可以是方法(a)种的bottom部分,但是着三个Expert并不共享参数。同时将input输出给Gate,Gate输出每个Expert被选择的概率,然后将三个Expert的输出加权求和,输出给Tower。

y=\sum_{i=1}^{n}{g(x)_{i}f_{i}(x)}

其中, \sum_{i=1}^{n}{g(x)_{i}}=1g(x)n 维的向量, 表示的 f_{i} 概率,n 为类别数。

3. 方法(c)是作者新提出的方法,关键在于他认为对于不同任务来说,模型的权重选择是不同的,所以作者为每个任务都配备一个Gate模型。对于不同的任务,特定的Gate k的输出表示不同的Expert被选择的概率,将多个Expert加权求和,得到 f^{k}(x) ,并输出给特定的Tower模型,用于最终的输出。

f^{k}(x)=\sum_{i=1}^{n}{g^{k}(x)_{i}f_{i}(x)}

这里Gate模型经常为多层感知机模型,就简单的线性变换,加softmax层的输出。Expert模型经常为多层感知机网络。

g^{k}(x)=softmax(W_{gk}x)

论文亮点

论文的亮点在于人工生成了数据,用于判定任务之间的相关性。

假设输入的feature vector为d维的,那么生成正交单位矩阵, u_{1}u_{2}

若给定常数标量 c ,以及任务相关性系数 p,-1 \leq p \leq 1 ,可以得到两个任务分别的权重矩阵 w_{1},w_{2}

统计任务的相关性,其实就是统计模型训练出来的权重矩阵的相关性,这里使用cos相关性公式。继而可以得到上式的 w_{1},w_{2}

这里假设推荐任务是个简单的回归模型,就可以人工生成样本 (x_{i},y_{i}) 了。 \epsilon_{1},\epsilon_{2} 分别表示误差。

无需训练,可以改变相关性值 p ,看观察label之间的相关性,相关性计算使用的是统计学中常用的皮尔森相关性系数。

根据人工生成的数据,训练方法(a)的模型,观察相关性值 p 的变化对Loss值变化的影响。可以发现模型越相关,Loss值越容易收敛。

实验

多任务比如:

任务1:预测收入是否超过5万美元; 任务2:预测此人的婚姻状况是否永远不会结婚

比如:任务1:预测教育水平是否至少是大学; 任务2:预测此人的婚姻状况是否从未结婚。

比如:任务1:预测用户参与相关行为; 任务2:预测用户满意度相关行为。

总结

效果就不贴了,总的来说,MMoE会比常见的方法效果好。不过,在使用MMoE之前,需要使用分析多个任务之间的相关性,论文种使用的是统计学中常见的皮尔森相关性系数。

并且github上有开源的keras版本的代码,有兴趣的小伙伴可以自行阅读源码。

github.com/drawbridge/k

编辑于 2019-06-28