每周一文(十五)谷歌MMOE模型

核心思想

多目标推荐领域中落地较好的模型,利用不同的expert对多目标进行打分。

模型结构

在这里插入图片描述
传统多任务模型(a)通过shared bottom的方式先inference出高维emb,之后将该高维emb输入到不同的塔完成不同的任务。上述模型进一步进化得到模型(b),该模型包含N个expert,每个expert会输出各自的高维emb,之后通过一个gate来决定输出到不同的塔的不同高维emb的组合。再进一步进化后得到模型©,即通过多个gate来决定多个高维emb的组合,这也是MMOE的主要思想。

代码实现

代码整体比较简单,但需要注意有些地方需要stop_gradient,因为如果不设置stop_gradient,则会导致计算重复。实例代码如下:

for i in range(self.expert_num):
    expert = feas
    for n in [256, 128, 64]:
        expert = tf.layers.dense(expert, units=n, kernel_initializer=tf.truncated_normal_initializer(stddev=0.1), bias_initializer=tf.constant_initializer(0.1), activation=tf.nn.relu)
    expert = tf.layers.dense(expert, units=1, kernel_initializer=tf.truncated_normal_initializer(stddev=0.1), bias_initializer=tf.constant_initializer(0.1))
    expert_list.append(expert)

tbtj_expert = tf.nn.sigmoid(expert_list[0])
fz_expert = tf.nn.sigmoid(expert_list[1])
all_expert = tf.nn.sigmoid(expert_list[5])

stop_tbtj = tf.stop_gradient(expert_list[0])
stop_fz = tf.stop_gradient(expert_list[1])
stop_all = tf.stop_gradient(expert_list[5])

gate_list = []
for i in range(self.target_num):
    gate_net = meta_input
    for n in [16, 16]:
        gate_net = tf.layers.dense(gate_net, units=n, kernel_initializer=tf.truncated_normal_initializer(stddev=0.1), bias_initializer=tf.constant_initializer(0.1), activation=tf.nn.relu)
    gate_net = tf.nn.softmax(tf.layers.dense(gate_net, self.attention_num, kernel_initializer=tf.truncated_normal_initializer(stddev=0.1), bias_initializer=tf.constant_initializer(0.1)))
    gate_list.append(gate_net)

tbtj_score = tf.nn.sigmoid(tf.reduce_sum(gate_list[0]*tf.concat([stop_tbtj, stop_all], 1), axis=1, keepdims=True))
fz_score = tf.nn.sigmoid(tf.reduce_sum(gate_list[1]*tf.concat([stop_fz, stop_all], 1), axis=1, keepdims=True))

参考

  1. MMOE讲解
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值