zoukankan      html  css  js  c++  java
  • 多目标优化概论及基础算法ESMM与MMOE对比(二)

    承接上文: 链接:多目标优化概论及基础算法ESMM与MMOE对比 这次这篇文章写点实用的。可以当做推荐算法工程师面试的考前突击,也可以当做面试官的面试题库。ESSM和MMOE都是最基本的算法,相当于多目标优化的入门级的读物。越经典越需要细嚼,温故而知新嘛。 这些题目和答案都是我自己在看论文过程中自我提问和自我回答总结出来的。如果有不同看法和答案,欢迎留言交流,互为增长,互相启发。 细节篇:
    第一问题集:
        ESSM提出他解决了两个核心问题:1、样本选择偏差,训练的CVR的时候是点转数据集,但线上推理的时候是曝转数据;2、数据稀疏问题,转化数据比点击数据少10倍以上,模型训练是欠拟合的。问题:ESSM是怎么解决这两个问题的,例如数据稀疏问题的,如果说他直接对曝点数据建模,数据是非常稀疏的,再上深度学习模型,肯定欠拟合,训练好的模型很多模型参数都是原始随机初始化的数,怎么处理?
        答案:    这个问题就是ESSM全部内容的实质。 

    图片



        如图所示,我们来回答问题。第一,防止欠拟合,导致训练好的模型参数中太多初始化随机数的方法是:他训练一个CTR模型,用训练好的CTR模型结构的参数共享给CVR模型,不准确一点说,就是在训练好的CTR模型上,finetune一下来训练CVR,当然,finetune后的模型也要满足CTR的loss要求。第二,接下来是最核心的东西了。这个图其实是一个网络结构,输出两个分支,logit_CTR,logit_CVR,然后,点击再转化是p(CTCVR),按照物理意义,点击再转化就是条件概率,值等于p(CTR)*p(CVR)。训练:CTR数据集是完备的,在这个数据集上,将label从点击换成转化,就是转化训练集,直接对爆转建模,但转化数据是点击后才能转化,因而模型的pred=logit_CTR * logit_CVR。Loss = pred-label_cvr。在线预测:由于预测是直接预测转化的概率,跟点击没有关系,因而,预测拿来排序的预测值是logit_CVR,而不是p(CTCVR)。这样训练和预测巧妙腾挪,对真实的曝转建模了。        第二问题集
        MMOE一个模型有几个Loss?他跟多标签分类学习有什么区别?既然是多目标,多个专家网络,直接多个模型不是更好的解决问了吗?           答案:

         搞清这些问题,需要从多目标优化的业务需求和真实数据场景讲起。所谓的多目标优化,是指真实业务场景中,一次排序展示,需要得到多个结果。例如电商的相关推荐,希望一次推荐排序好的商品,既能让用户点击,也能让用户下单,甚至还能让用户满意(好评)。又如一次新闻(视频)推荐,如果光考虑点击,可能一些猎奇的标题党更抢流量;我们希望点击,希望用户浏览时间长;并且还希望用户喜欢这个内容,转发或者收藏就更牛了。     理解了这个点,就不会考虑多个目标用多个模型了,首先,线上实时排序,不可能多个模型部署,这样耗时太高;其次训练管理多个模型的数据集,也是在工业界的最大成本。大数据集存储多份,不合适。当然,最重要的不是这个,而是核心的算法精度诉求:多个模型,每个模型预测一个值,拿来综合排序,由于每个模型是单独训练的,因而他们的排序序列是互斥的,容易顾此失彼,专注点击的模型+专注转化的模型<max(CTR,CVR)是有可能存在的。即1+1< 大1,因此,多目标优化就是要解决这个顾此失彼的问题,让一个模型成为多面手。     跟多标签学习的关系:其实本质是相同的,只是多标签学习更多是分类,多目标学习你可以是分类,也可以是回归。       MMOE的loss个数,就跟目标个数是一样的,然后加一起训练。    宏观层面
     第三问题集
          这两个方法有什么异同?我现在既要点击好,又要转化多,还要成交金额高,怎么选?我如果就CTR和CVR两个目标,哪个方法效果更好?            MMOE在ESSM之后出来,本质解决的问题是ESSM解决不了的问题,就是现在这个需求:三个目标怎么学。ESSM是学CTR和CVR的,CTR和CVR是紧相连的,但GMV不太一样,跟商品单价相关,跟买家下单量有关。跟CTR和CVR的相关性有但小不少。           因此,如果目标相差迥异,只能用MMOE,ESSM是专门解决CTR和CVR两个目标联合训练的。这个是他们两个方法的核心不同点。           如果你的目标就是CTR和CVR,那么MMOE训练CVR时,是会出现欠拟合的,因为他没有共享模型参数,因此,这个时候ESSM比MMOE效果好不少。

  • 相关阅读:
    RabbitMQ source was instantiated with usesCorrelationId set to true but a message was received with correlation id set to null
    【Ubuntu】运行命令如何免输入YES和回车?
    运营的本质
    什么???前端页面统计停留时间你不会???那可得好好看看这个文章了
    使用el-switch实现开关(更改状态后展示状态)
    Linux编译安装时常见错误解决办法
    SignalR前后端通信
    声音类型识别库运行环境搭建
    uniapp使用axios(亲测可用)
    background + gradient 使用技巧
  • 原文地址:https://www.cnblogs.com/whu-zeng/p/14111889.html
Copyright © 2011-2022 走看看