zoukankan      html  css  js  c++  java
  • 多目标优化(三)recsys2020最佳长论文奖Progressive Layered Extraction (PLE)

    论文:Progressive Layered Extraction (PLE): A Novel Multi-TaskLearning (MTL) Model for Personalized Recommendations 会议:RecSys2020最佳长论文奖        这篇文章其实就是MMOE的改进版。解决了一个问题,做了两件事情。
           一个问题:任务不相关时,多个专家网络联结在一起容易导致多个任务此消彼长现象(Seesaw Phenomenon),例如优化CTR和GMV两个任务,结果GMV涨了,CTR跌了。MMOE对不相关任务的优化效果比ESSM强不少,但还是不够强,PLE就让他更强了。多个目标可以同时增长。比帕累托最优化这种方法训练model方便多了。这个我觉得是得最佳论文奖的主要看点。       两件事情:一个是提出了一个改进的网络结构版本,一个是提出了一种多loss融合训练的方法。后面细讲。
     一、motivation 我们来看MMOE的网络结构。 

     A任务和B任务两个loss相加,是总的loss。如果A任务的loss是B任务的2倍,则三个专家网络的参数会往A任务loss梯度下降的方向优化,这样学会的专家网络A任务的提升较高(从而总loss降低),但B任务由于在总loss中占比较低,提升有限,甚至会降低B任务的精度。 

         作者做了实验,在VTR和CVR两个任务中,MMOE比单任务模型(single-Task)只在VTR任务上有较大提升,在VCR任务上只提升了0.0001。其他多任务学习模型基本上都是此消彼长类型,而PLE在两个坐标轴上都有较大幅度提升。  很自然的就会有这样的想法:一,如果解耦这些专家网络。二、如何优化loss的融合逻辑。让每个任务的loss都能下降,每个任务的业务目标都能得到优化。这就是本论文的精髓。 二、网络结构:     文章中有两个网络结构,一个是单层多任务网络结构(CGC),一个是多层多任务网络结构(PLE)。
         单层的多任务网络结构中,每个任务有一个独立的专家网络,然后每个任务也都从共享专家网络里面提取特征信号,这样保证了单任务有两个特征信号来源:独有信号和糅合共享信号。这样做到了专家网络解耦,同时能利用多任务辅助训练单任务。 

           多层多任务网络结构中,底层特征抽取结构中,给上层A任务提供的独有专家网络的信号来自于A专家网络和共享网络,但给上层结构提供共享专家网络的信号来源于A+B+共享网络。然后最后一层连接多塔的结构跟CGC是一样的。  

    三、LOSS函数优化 1、训练集归一化。每个任务的样本空间是不一样的。如果样本空间一样,即:    Key:features:label统一的样本对,key可以是userID+videoId,每个任务有每个任务的label,那么直接把各任务的Loss相加即可。      事实上,这些多个任务的样本空间是不一样的,主要是特征features不一样。例如:视频的评论CMR任务,视频可以有被评论次数这个特征,但如果这个特征拿去做CTR任务,那只要这个特征有值就百分之百是有点击的,因而每个任务的样本空间是不一样的。 

     
           图中展示了各个任务的样本空间的包含关系。那么这些任务的不同样本空间和不同特征空间的联合训练,文章采取的方法是逐个样本计算loss:      

     
           i代表的是每个样本,k代表的是任务K,δik代表的是第i个样本属于第K个任务的关系,属于则为1,不是则为0,对i进行求和就是整个样本空间中K任务的样本数对应的loss值。        2、让每个任务loss权重动态变化。这个方法其实比较浅逻辑。就是设定一个任务的初始权重值,然后让这个权重值随着训练的epoch数不断变化,这样可以尝试很多组权重,可以找到最优的范式。也算是一种解法,因而每个任务的loss是相差比较大的,例如回归任务的loss一般比二分类的loss大不少。需要平衡这两者。  四、总结     文章通过构建一个解耦的MMOE网络,加上loss权重的动态变化,成功的让多任务模型可以在每个任务上都有最优表现。非常不错的做法,比帕累托这种action非常繁琐的做法好了不少。比较接地气,容易action。确实是一篇佳作。 

  • 相关阅读:
    Boost Started on Windows
    7-Zip
    代码的命名规则
    基础扫盲:YEAR关键字 IN操作符
    基础扫盲:INSERT INTO 和 SELECT 结合使用
    知识盲点:存在外键的的表,在插入数据时应该如何操作?
    SQL Identity函数
    SQL 中DateName()函数及DatePart()函数
    OS开发多线程篇—GCD介绍
    经典SQL语句大全
  • 原文地址:https://www.cnblogs.com/whu-zeng/p/14111886.html
Copyright © 2011-2022 走看看