为什么大公司搜索推荐都用CTR/CVR Cotrain的框架?

一元@炼丹笔记

我们平时做项目/竞赛的时候,一般都是单指标优化的问题,很多时候我们模型的评估指标也是单个指标,例如AUC, GAUC, FP等等。而我们在做此类问题的时候都是尽可能去直接优化这些指标,如果不行就会尝试着看能不能设计某种近似的优化函数来对其优化,最后再使用一堆模型的集成来达到我们的目的,一般这么做就可以带来非常好的效果。

但是很奇怪的是,我进入公司做搜索推荐时,和很多大厂搞搜索推荐的朋友交流发现,阿里,头条,腾讯,百度,京东的朋友很多情况下都是用的CTR/CVR的Cotrain的深度大模型,而不会单独去直接优化某个指标。举个简单的例子来说,

有个任务的优化指标是提升曝光到购买的预测准确性,如果没有任何参考,我们一般就会直接用购买的标签作为1,未被购买的标签作为0,然后做二分类。

但是很多时候大家并不会这么做,大多数时候都会设计一个CTR和CVR进行Cotrain的模型进行模型的训练与预测,而且最终的效果往往也会比上面的效果要好很多。这个时候,很多朋友和我一样都会十分好奇,究竟为什么这么做的效果会更好呢?

二分类的做法本身没有任何问题,但这么做我们会忽略很多可能给我们模型带来进一步提升的信息。这些信息很多来自于相关的任务,通过共享相关任务的表示,我们可以使我们的模型在原始任务上做的更好,这种方法我们称之为多任务学习(MTL),除了上面说的搜索推荐领域,多任务学习还经常出现在自然语言处理,计算机视觉等领域。

Rich Caruana把MTL描述为:MTL improves generalization by leveraging the domain-specific information contained in the training signals of related tasks.

动机:启发式理解

为多任务学习的动机是什么呢?

  • 生物上:我们可以把MTL是由人类学习启发的,对于学习新的任务时,我们通过学习相关任务获得的知识来辅助我们进行新任务的学习。
  • 教育学上:我们先学习一些任务然后获得必要的技能来掌握更多复杂的技术。

所以我们可以把多任务学习看作是归纳式迁移。归纳式迁移通过引入一个归纳式的bias来提升我们模型的效果。例如我们最常见的L1正则,可以使我们获得一个系数的解。在MTL中, 归纳式的bias是由辅助任务提供的。

两种经典MTL学习方式

到目前为止,Deep Learning中最常见的两种MTL方法是Hard parameter sharing 和Soft parameter sharing。

Hard parameter sharing

Hard parameter sharing是最常见的,它对所有的任务都共享某些隐藏层,比如ESMM算法中共享Embedding层等。Hard parameter sharing可以大大降低过拟合的风险,实际上,共享参数的过拟合风险是order N的。其中N是任务的个数。这也较易理解,因为我们的任务越多,我们模型就需要寻找到某一种表示能尽可能捕捉所有任务的信息, 所以学习到的信息会更加通用,从而降低我们模型过拟合的风险。

Soft parameter sharing

在Soft parameter sharing中,每个任务都有自己对应的参数,模型参数之间的距离被用来鼓励不同任务之间参数是相似的,例如,我们可以加入范数用于L2正则。DNN中的Soft parameter sharing的很多约束都受正则技术的启发。

为什么MTL是有效的呢?

在上面我们给出了MTL的启发式解释,但是还是不够解释MTL的有效性。此处我们更加深入的分析潜在的机制。我们先假设我们有两个相关的任务A和B,他们共享一个相同的浅层表示F。下面我们再给出几种解释。

隐式数据扩充(Implicit data augmentation)

MTL很高效的增加我们用于模型训练的样本的大小,因为所有的任务都是带有一些噪音的,所以如果我们只在单个任务上进行训练,那么我们的模型会带有较大的噪音,尤其是当数据较脏的时候;而我们如果是在多个任务上进行学习训练,我们最终学出来的中间表示将会具有更好的泛化性。

注意力集中(Attention focusing)

如果一个任务是非常noisy的或者数据是高维并且受限的,那么模型对于模型区分相关和不相关的特征将会较为困难。MTL可以利用多个任务提供的额外的信息找出相关和不相关的特征。

窃取(Eavesdropping)

一些特征G对于某些特定任务是非常易于学习的,但是对于另外一个任务A可能却很难学,而这种难学可能是由于特征和任务A的关系较为复杂等原因造成的,通过多任务学习,我们可以令任务B去学习,而最简单的方式就是通过hints去做这件事。

偏差(Bias)表示

MTL使模型偏向于其他任务也喜欢的表示。这也将有助于模型在未来推广到新的任务,因为假设空间在足够多的训练任务中表现良好,只要它们来自相同的环境,对于学习新任务也会有很好的效果。

正则

MTL通过引入一个归纳偏差起到正则的作用。因此,它降低了过拟合的风险以及模型的Rademacher复杂性,即其拟合随机噪声的能力。

非神经网络中的MTL

为了更好地理解MTL在DNN中的任务,我们看看MTL在现有工作中的情况,特殊地,此处主要讨论MTL两种流行性的说法:

  • 通过范数正则化实现任务间的稀疏性;
  • 对任务之间的关系进行建模;

文献中的许多MTL方法处理都是同质的(homogenous)设定:它们假设所有任务都与单个输出相关联,例如,多个类的MNIST数据集通常被转换为10个二进制分类任务。最近的方法处理更现实的、异构的环境,其中每个任务对应于一组唯一的输出。

Block稀疏正则化(Block-sparse regularization)

许多模型关于参数做了一些稀疏的假设,很多工作假设所有的模型共享一个小的特征集合,也就是说只有部分特征是被所有任务使用,所以有些工作将L1范数用于MTL设定里面,当然也可以施加其他的约束。

学习任务之间的关系

在多任务学习(MTL)中,因为共享的特征层是在多个任务中共享的,所以这些特征需要尽可能在多个任务中都有效。之前有很多多任务学习都假设这些任务之间是非常相关的。但是,我们并不能保证每个任务都强相关,而这种情况下, 在无关的任务中共享信息可能会对我们模型的性能带来不必要的影响,这也称之为negative transfer。

所以我们需要利用先验知识来辅助我们判断任务之间是否相关。这个时候最简单的可以想到的就是对各个任务进行聚类,而聚类的任务约束最简单的就是类间与类内距离的计算等,有兴趣的可以阅读相关的论文。

模型中应该共享什么?

在上面的分析中,我们从启发式的角度(动机),机器学习的角度(正则)以及一些经验中分析来了模型共享的问题。那么我们改在模型中共享什么呢?

在之前Deep Learning的MTL工作中,我们都是预先定义哪些层用作共享,这么做经常会导致模型没法泛化到其他的任务中。Hard parameter共享是1996年Caruana提出的,一种沿用了20多年,这种方法确实在很多任务中取得了非常好的效果,但是如果任务之间的关系不强,效果往往不尽如人意。因此,最近的方法着眼于学习共享什么,并且通常优于硬参数共享。此外,赋予我们的模型学习任务层次结构的能力是有帮助的,特别是在需要不同粒度的情况下。如何学习任务之间的交互也是非常有价值的。

辅助任务

除了共享层的设计,MTL还需要设计Cotrain使用的损失函数。MTL如果是在本身需求就是多任务的问题中没有任何问题,但如果我们的原先的任务就是单任务的,那么我们如何寻找一个合适的辅助任务并利用多任务学习来从中获益呢?

一些案例

下面的案例大多是成功的,所以可以从中窥探一些辅助任务设计的方式技巧。

1. Related task

将相关任务作为MTL的辅助任务。Caruana(1998)将预测不同道路特征的任务作为辅助任务,用于预测自动驾驶汽车的转向方向;使用头部姿势估计和面部属性推断作为面部路标检测的辅助任务;联合学习查询分类和web搜索;Girshick(2015)联合预测图像中对象的类别和坐标等等都是经典的案例。

2. Hints

MTL可以用来学习原始任务并不能非常好学习的特征,一种有效的方案就是使用hints,也就是说,使用辅助任务来对该特征进行预测。这种策略的成功案例有:在NLP中,预测一个输入的句子是否包含有正或者负的语义单词来作为语义分析任务的辅助任务。

3. Representation learning

MTL中辅助任务的目标是使模型能够学习对主任务共享或有帮助的表示。到目前为止讨论的所有辅助任务都是隐式的:它们与主任务密切相关,学习它们可能会使模型学习有益的表示。更明确的建模是可能的,例如,通过使用已知的任务,使模型能够学习可迁移的表示。Cheng等人采用的语言建模目标。

4. Focusing Attention

同样,辅助任务可以用于将注意力集中在网络通常忽略的图像的部分上。例如,对于学习驾驶(Caruana,1998),单个任务模型通常会忽略车道标记,因为这些标记仅构成图像的一小部分,并不总是存在的。然而,作为辅助任务的车道标线预测,迫使模型学习表示它们;然后,该知识也可以用于主要任务。类似地,对于人脸识别,人们可能会学习预测面部标志点的位置作为辅助任务,因为这些通常是与众不同的。

5. 使用未来预测现在

在许多情况下,有些功能只有在预测完成后才可用。例如,对于自动驾驶汽车,一旦汽车经过障碍物和车道标线,就可以进行更精确的测量。Caruana(1998)也给出了肺炎预测的例子,之后将获得更多的医学试验结果。对于这些示例,附加数据不能用作特性,因为它在运行时不能作为输入使用。然而,它也可以作为辅助任务,在训练期间向模型传授附加知识。

6. Adversarial

通常,相关任务的标记数据不可用。然而,在某些情况下,我们可以获得一个与我们想要实现的相反的任务。这些数据可以利用对抗性损失,它不寻求最小化,而是最大化使用梯度反转层的训练误差。这种设置最近在域适应(domain adaptation)方面取得了成功。在这种情况下,对抗性任务是预测输入的域;通过反转对抗性任务的梯度,对抗性任务的损失最大化,这对主任务是有利的,因为它迫使模型学习无法区分域的表示。

什么辅助任务是有帮助的?

在实践中,我们很难判定什么辅助任务可以带来帮助。寻找一个合理的有帮助的辅助任务往往需要基于假设:我们的辅助任务和我们的主要任务在某种程度上是相关的,它对于我们对主要任务的预测是有帮助的。

可是两个任务怎么算是相似的或者相关的呢?到目前为止还没有一个十分明确的定义。

  • Caruana(1998)将两个任务定义为相似,如果它们使用相同的特征来做出决策。
  • Baxter(2000)仅从理论上论证了相关任务共享一个共同的最优假设类,即具有相同的归纳偏差。
  • Xue等人(2007)指出,如果两个任务的分类边界,即参数向量接近,则两个任务是相似的。
  • ...

尽管在理解任务相关性方面取得了早期的理论进展,但在这一目标方面并没有取得太大进展。任务相似性不是二分类问题,而是存在于一个频谱上。相似的任务越多,对MTL的帮助就越大,而相似性越小的任务对MTL的帮助就越小。

允许我们的模型学习每个任务共享什么可以让我们暂时避免理论的缺乏,甚至可以更好地利用相关性较低的任务。然而,我们还需要在多任务学习方面发展一个更原则性的任务相似性概念,以便知道我们应该选择哪些任务。

一些研究也发现,对于NLP中的序列标记问题,具有紧凑和均匀的标签分布的辅助任务更加好,这一点我们已在实验中证实。此外,研究发现,对于那些在辅助任务不稳定的情况下快速稳定下来的主要任务,收益更大。

然而,到目前为止,这些实验的范围是有限的,而最近的研究结果只是为深入理解神经网络中的多任务学习提供了一条线索。

小结

因为多任务学习(MTL)目前越加流行, 那么为什么多任务学习是有效的?本文从启发式的角度以及5种不同的角度对其进行来分析。而MTL在Deep的框架种核心需要考虑两点,一个是共享层的设计,一个是辅助loss的设计,而上面也给出了6种不同的成功案例,都非常值得建议。

虽然我们说了这么多,但其实我们对于任务的理解,包括相似性,关系,层次以及MTL的益处仍然是受限的,更多的是基于一种启发式的理解,我们还需要更为深刻的理解。

参考文献

  1. ruder.io/multi-task/
  2. An Overview of Multi-Task Learning in Deep Neural Networks
  3. 揭秘为什么大公司搜索推荐都用CTR/CVR Cotrain的框架
更多干货,请关注公众号:炼丹笔记

DNN中多任务学习概述相关推荐

  1. Multi-task Learning(Review)多任务学习概述

    https://www.toutiao.com/a6707402838705701383/ 背景:只专注于单个模型可能会忽略一些相关任务中可能提升目标任务的潜在信息,通过进行一定程度的共享不同任务之间 ...

  2. CTR/推荐系统中多任务/多目标学习应用概述文章汇总

    来源:CTR/推荐系统中多任务/多目标学习应用概述文章汇总 - 知乎 1.文章 吴海波:电商多目标优化小结 (2019.8-267) SunSuc:推荐系统中如何做多目标优化 (2019.12-163 ...

  3. 我们如何在Pinterest Ads中使用AutoML,多任务学习和多塔模型

    Ernest Wang | Software Engineer, Ads Ranking 欧内斯特·王| 软件工程师,广告排名 People come to Pinterest in an explo ...

  4. RS Meet DL(68)-建模多任务学习中任务相关性的模型MMoE

    本文介绍的论文题目是:<Modeling Task Relationships in Multi-task Learning with Multi-gate Mixture-of-Experts ...

  5. 深度学习-多任务学习总结

    深度学习中多任务学习的方法和问题总结 为什么要做多任务学习 多任务学习的实现方法 介绍下ESSM 介绍下PLE 为什么要做多任务学习 多任务算法的应用场景还是很广泛的,只要是推荐技术涉及的业务,比如搜 ...

  6. 综述翻译:多任务学习-An Overview of Multi-Task Learning in Deep Neural Networks

    An Overview of Multi-Task Learning in Deep Neural Networks 文章目录 An Overview of Multi-Task Learning i ...

  7. 深度学习之----多任务学习

    介绍 在机器学习(ML)中,通常的关注点是对特定度量进行优化,度量有很多种,例如特定基准或商业 KPI 的分数.为了做到这一点,我们通常训练一个模型或模型组合来执行目标任务.然后,我们微调这些模型,直 ...

  8. 多任务学习 (Multitask Learning) 汇总

    1 前言 多任务学习(Multi-task learning)是和单任务学习(single-task learning)相对的一种机器学习方法.在机器学习领域,标准的算法理论是一次学习一个任务,也就是 ...

  9. 多任务学习优化总结 Multi-task learning(附代码)

    目录 一.多重梯度下降multiple gradient descent algorithm (MGDA) 二.Gradient Normalization (GradNorm) 三.Uncertai ...

最新文章

  1. fedora java 开发环境_Linux(Fedora 14)下 java开发环境配置 ——jdk的安装与配置
  2. spring roo_使用Spring Roo进行快速云开发–第1部分:Google App Engine(GAE)
  3. 如何快速弄懂一个新模型_如何评估创业项目是否靠谱?一个新的模型 | 创创锦囊...
  4. mac npm command not found
  5. 《编程之美》1.3一摞烙饼的排序
  6. linux下c语言版线程池
  7. Android之实现 A/B分区更新固件
  8. Windows自动关机命令
  9. mysql同步 触发器_MySQL触发器运用于迁移和同步数据的实例教程
  10. 密度聚类算法python详解_密度聚类python
  11. Modbus转Profinet网关与ARX-MA100微型空气质量监测系统配置案例
  12. kafka consumer 如何设置每次重启时从最新数据开始读取
  13. 专业图形卡测试软件,专业卡能玩游戏么?实测很是意外
  14. Conda更新或安装包时出现Verifying transaction: failed+RemoveError的解决方法
  15. 【MicroPython ESP32】手动配网和wifi信息保存示例
  16. [rust-003] rust by example学习过程点点滴滴杂记
  17. 智深与智清:一个馒头所诱发的华山论剑
  18. UWB技术是如何做到室内精准定位的?
  19. 【定时同步系列10】16QAM基带调制+Gardener定时误差检测+解调误码率曲线之MATLAB仿真
  20. 基于C#的SW二次开发

热门文章

  1. 洛谷P1057传球游戏题解
  2. gimp and screenshot
  3. Error when loading the SDK:发现了含有元素 'd:skin' 开头的无效内容
  4. LeetCode——Pascal#39;s Triangle
  5. 【java/C# 服务器】IOS 配置推送证书 p12文件流程 - 勿以己悲
  6. JAVA集合迭代遍历和特性介绍
  7. pku 1573 Robot Motion 第一周训练——模拟
  8. 提高计算机系统性能的方法或者技术,互联网内容审计系统性能优化方法的研究-计算机科学与技术专业论文.docx...
  9. scrapy-redis mysql_Scrapy-redis 分布式
  10. 主线程如何等待多线程完成 返回数据_多线程基础体系知识清单