1. MMoE

1.1 MMoE模型框架

  1. 模型输入会通过映射到,所有task共享的多个Expert, 一个Expert就是RELU激活函数的全连接层,称为Mixture-of-Experts
n_expert = 20 # 定义Expert个数
expert_dim = 32 # 每个Expert隐藏结点个数(全连接层)
self.expert_layer = [Dense(expert_dim,activation='relu')for i in range(n_expert)]#多个专家网络
E_net = [expert(x) for expert in self.expert_layer]  #n_expert个(bs,expert_dim)
E_net = Concatenate(axis=1)([e[:,tf.newaxis,:] for e in E_net]) #(bs,n_expert,expert_dim)
  1. 模型输入还会映射到多个Gate,一个task独立拥有一个Gate,论文中Gate就是一个没有bias和激活函数的全连接层,然后接softmax,称为Multi-gate。
n_expert = 20
n_task = 4  # 表示四个任务类似["read_comment","like","click_avatar","forward"]
self.gate_layers = [Dense(n_expert,activation='softmax') for i in range(n_task)]#多个⻔网络
gate_net = [gate(x) for gate in self.gate_layers] # n_task个(bs,n_expert)
  1. 每个Gate与共享的多个Expert相乘,Gate是一个概率分布,控制每个Expert对task的贡献程度,比如taskA的gate为(0.1,0.2,0.7),则代表Expert0、Expert1、Expert2对taskA的贡献程度分别为0.1、0.2和0.7.
# 每个towers等于,对应的⻔网络乘上所有的专家网络。
towers=[]
for i in range(self.n_task):g=tf.expand_dims(gate_net[i],axis=-1)  #(bs,n_expert,1)_tower=tf.matmul(E_net,g,transpose_a=True) #(bs,expert_dim,1)towers.append(Flatten()(_tower)) #(bs,expert_dim)return towers #(n_task,bs,expert_dim)
  1. 通过task对应的Gate来得到多个Expert的加权平均,然后输入到task对应的Tower层(MLP网络层);
towers = MmoeLayer(expert_dim,n_expert,n_task)(input_embed)
outputs = [Dense(1,activation='sigmoid',kernel_regularizer = regularizers.l2(dnn_reg_l2),name=f,use_bias=True)(_t) for _t,f in zip(towers,target)]

这里MLP就直接了一层dense(),由于有多个任务,最后outputs=[task1,task2,task3,task4]。每个task==Dense()。

  • 最后,通过对应task的Tower层输出,计算得到task的预测值。
target = ["read_comment","like","click_avatar","forward"]
train_labels = [train[y].values for y in target]history = model.fit(train_model_input,train_labels,validation_data=
(val_model_input,val_labels),batch_size=10240,epochs=4,verbose=1)

Tf, Dense: Dense 详解

tf.keras.layers.Dense(units,activation=None,use_bias=True,kernel_initializer='glorot_uniform',bias_initializer='zeros',kernel_regularizer=None,bias_regularizer=None,activity_regularizer=None,kernel_constraint=None,bias_constraint=None,**kwargs
)

2. PLE

论文:

《Progressive Layered Extraction (PLE): A Novel Multi-Task Learning (MTL) Model for Personalized Recommendations》

在Mmoe中会出现的问题,:

Mmoe在弱相关性task中表现地相对比较稳定,但由于底层的Expert仍然是共享的,虽然引入了Gate 来让task 选择 Expert, 所以还是会存在 “不均衡”的现状,一个task的效果提升,会伴随着另一个task的效果降低。

2.1 CGC

CGC网络中相比MMoE的一个差别就在于:除了共享的Expert之外,还加入了每个task自己的Specific Expert。

  1. 所有task共享的expert(如上图Experts Shared)、每个task自己的expert(如上图task A的Experts A),跟MMoE一样,Expert也是模型输入Input映射而来:ReLU激活函数的全连接层;

参数定义:

'''
n_experts:  list, 每个任务使用几个expert。[2,3]第一个任务使用2个expert,第二个任务使用3个expert。
n_expert_share:  int, 共享的部分设置的expert个数。
expert_dim:  int, 每个专家网络输出的向量维度。
n_task:  int, 任务个数。
'''

ExpertsShared的结构

self.share_layer = [Dense(expert_dim,activation='relu')for j in range(n_expert_share)]

每个task自己的expert个数不一样:n_experts : list

# 生成多个任务task网络
self.E_layer = []
for i in range(n_task):sub_exp = [Dense(expert_dim,activation='relu') for j in range(n_experts[i])]self.E_layer.append(sub_exp)
  1. 每个task通过Input映射为自己的Gate:一个没有bias和激活函数的全连接层,然后接softmax,即图中的Gating Network;
# 定义⻔控网络
self.gate_layers = [Dense(n_expert_share + n_experts[i], kernel_regularizer = regularizers.l2(dnn_reg_l2), activation='softmax')for i in range(n_task)]
  1. 每个task选择共享的Experts和task自己的Experts,通过task自己的Gate来得到多个Expert的加权平均。
# tasks网络和共享网络
x = inputs
E_net = [[expert(x) for expert in sub_expert] for sub_expert in self.E_layer]
share_net = [expert(x) for expert in self.share_layer]# ⻔的权重乘上,指定任务和共享任务的输出。
towers=[]
for i in range(self.n_task):g = self.gate_layers[i](x)g = tf.expand_dims(g,axis=-1)  # (bs,n_expert_share+n_experts[i],1)_e = share_net + E_net[i]_e = Concatenate(axis=1)([expert[:,tf.newaxis,:] for expert in _e]) #(bs,n_expert_share+n_experts[i],expert_dim)_tower = tf.matmul(_e,g,transpose_a=True)towers.append(Flatten()(_tower)) #(bs,expert_dim)
return towers
  1. 然后输入到task对应的Tower层(MLP网络层)
    这里只进行了 一层 dense层
# Ple网络层
towers = PleLayer(n_task,n_experts,expert_dim,n_expert_share)(input_embed)
outputs = [Dense(1,activation='sigmoid',kernel_regularizer=regularizers.l2(dnn_reg_l2),name=f,use_bias=True)(_t) for f,_t in zip(targets,towers)]

2.2 PLE

PLE由多个Extraction Network组成,每个Extraction Network就是CGC网络层,做法与CGC一致;第一层Extraction Network的输入是原生模型输入Input;但后面的Extraction Network,输入就不再是

Input,而是所有Gate与Experts的加权平均的融合,这里的融合一般做法包括:拼接、加法融合、乘法融合,或者这三种的组合;最后一层Extraction Network中gate的数量等于task的数量,对应每个task的gate;而前面层的Extraction Network中gate的数量是task的数量+1,这里其实就是对应每个task的gate,加上共享expert的gate。

参考:
在定义了一层 CGC 时,PLE 会遍历多层num_levels CGC 网络结构。

ple_outputs=[] # PLE结构由多层CGC组成
for i in range(num_levels):if i == num_levels-1: # the last levelple_outputs = cgc_net(inputs=ple_inputs,level_name='level_'+str(i)+'_',is_last=True)else:ple_outputs = cgc_net(inputs=ple_inputs,level_name='level_'+str(i)+'_',is_last=False)ple_inputs = ple_outputs

参考文章:
【1】https://zhuanlan.zhihu.com/p/425209494
【2】https://github.com/ShowMeAI-Hub/multi-task-learning
【3】https://github.com/shenweichen/DeepCTR/tree/master/deepctr/models/multitask

[推荐系统] - 多目标排序 MMoE、PLE相关推荐

  1. 多目标学习(MMOE/ESMM/PLE)在推荐系统的实战经验分享

    作者 | 绝密伏击 知乎 | https://zhuanlan.zhihu.com/p/291406172 整理 | 深度传送门 一.前言 最近搞了一个月的视频多目标优化,同时优化点击率和衍生率(ys ...

  2. Google最新论文:Youtube视频推荐如何做多目标排序

    作者 | 深度传送门 来源 | 深度传送门(ID:deep_deliver) 导读:本文是"深度推荐系统"专栏的第十五篇文章,这个系列将介绍在深度学习的强力驱动下,给推荐系统工业界 ...

  3. 百度短视频推荐系统的目标设计

    导读:短视频产品最近两年蓬勃发展,百度旗下的短视频品牌-好看视频,人均使用时长70分钟,短视频播放量已超30亿,从推荐系统的角度考虑,如何设计一个推荐系统的目标,以及短视频迭代过程中沉淀的思考. 全文 ...

  4. 【推荐系统】推荐系统中的排序学习

    " 本文首先介绍排序学习的三种主要类别,然后详细介绍推荐领域最常用的两种高层排序学习算法框架:BPR和LambdaMART.因为排序学习的算法和实践大都来源于信息检索,一些理论也必须从信息检 ...

  5. 推荐系统中的排序学习

    " 本文首先介绍排序学习的三种主要类别,然后详细介绍推荐领域最常用的两种高层排序学习算法框架:BPR和LambdaMART.因为排序学习的算法和实践大都来源于信息检索,一些理论也必须从信息检 ...

  6. 一矢多穿:多目标排序在爱奇艺短视频推荐中的应用

    短视频具有内容丰富.信息集中.用户粘性大的特点,如何提高短视频分发的效率和推荐精准度,有效提升消费时长.留存等关键业务指标,是推荐系统的核心能力和建模目标. 本文主要分享在短视频推荐场景下,爱奇艺基础 ...

  7. 多目标排序在快手短视频推荐中的实践

    分享嘉宾:郑东博士 快手 推荐算法技术总监 编辑整理:于洋 出品平台:DataFunTalk 导读:快手是中国领先的短视频和直播社区,拥有超过3亿的DAU和丰富的社交数据.快手秉承的价值观是真实.多元 ...

  8. 【2022研电赛】商业计划书赛道上海市一等奖:基于多目标排序预测控制的SL-qZSI光伏储能系统

    本文为2022年第十七届中国研究生电子设计竞赛商业计划赛道上海赛区一等奖作品兼全国三等奖分享,参加极术社区的[有奖活动]分享2022研电赛作品扩大影响力,更有丰富电子礼品等你来领! 团队介绍 参赛单位 ...

  9. MMoE PLE:推荐系统多任务学习(multitask)的实战总结和常见问题(三)

    多任务学习算法系列的主要内容是回顾和总结自己2019-2021间在深度学习多任务学习算法(multitask)的工业实践和遇到的常见问题,欢迎更多同学讨论和指正,同时也宣传一波我们组在推荐方向的工作成 ...

最新文章

  1. 【Qt】Qt Creator中文输入设置
  2. 混淆工具Dotfuscator基本使用
  3. OSMboxPost()
  4. Data Lake Analytics: 使用DataWorks来调度DLA任务
  5. adf盖怎么打开_罐头好吃盖难开,学会这几招,再不靠蛮力了,女生也轻松拧开...
  6. AUTOSAR从入门到精通100讲(二十四)-AUTOSAR通信篇—AUTOSAR COM模块
  7. NginxJava笔记-Webservice使用HTTPS协议及Spring Boot配置tomcat
  8. clickhouse 复杂查询时嵌套连接join可能存在的异常解决(xjl456852原创)
  9. 快速入手光学字符识别控件Aspose.OCR!学会使用C#以编程方式对图像执行OCR
  10. 高一计算机课期中考试总结反思,高一期中考试总结反思
  11. 奇虎360 replugin 插件化框架集成
  12. webStrom找回删除的文件
  13. Ubuntu解决文件带锁问题
  14. 1024勋章 拿来吧你
  15. 文件上传,出现400 的错误问题
  16. 小米air2se耳机只有一边有声音怎么办_169元,性价比超高,小米蓝牙耳机Air2 SE,C位出道...
  17. PE、PM、PD、PR分别是什么岗位?
  18. DIV+CSS中标签dl dt dd常用的用法
  19. oracle和勇士,坑与“借鉴”,都是KPI逼的?
  20. Content-Type 类型浅析汇总

热门文章

  1. CodeMirror 如何调整高度与宽度?
  2. FFplay文档解读-3-表达评估
  3. 关于程序员的笑话(士七)
  4. Python GUI库Tkinter的使用
  5. mac下tomcat启用APR模式
  6. 【mysql】解决数据库断连
  7. 安卓eclipse 的ndk开发
  8. ioctl函数详细说明
  9. 利用fastjson美化json串的方法
  10. 数据库查询、删除某个字段的重复数据