【第六章:项目实战之推荐/广告系统】2.粗排算法-(4)粗排算法模型多目标算法(Multi Task Learning)及目标融合

部署运行你感兴趣的模型镜像

第六章:项目实战之推荐/广告系统

第二部分:粗排算法

第四节:粗排算法模型多目标算法(Multi Task Learning)及目标融合


一、为什么粗排必须是多目标模型?——动机与问题本质

粗排(Coarse Ranking)是推荐广告系统中承前启后的关键一环。它位于:

召回之后、精排之前,用较轻量模型在较大候选集合上筛掉价值不高的样本

然而,粗排与召回不同,它不能只追求“召回兴趣一致的物品”。粗排阶段引入多目标学习(Multi-Task Learning,MTL)是由业务必然性决定的,因为:

业务目标意义
CTR(点击率)衡量用户兴趣强度
CVR(转化率)衡量商业变现能力
GMV / 收益衡量整体推荐价值
停留时长 / 活跃度衡量用户长期留存
生态/内容多样性衡量推荐系统健康度

粗排不能只追求 CTR,否则系统会变成:

“骗点击”模型 → 短期数据漂亮 → 长期留存下降 → GMV、体验、DAU 变差

因此粗排多目标的核心任务是:

在可接受计算资源下,用一个共享模型同时优化多个业务目标,并最终形成统一排序分数

这就是多任务学习在粗排中的根本定位。


二、粗排阶段常见多任务结构对比

粗排的 MTL 模型常用 4 种结构:

模型结构优点缺点是否适合粗排
Hard Sharing简单、快、参数最少易梯度干扰,多个任务互相拖累一般不推荐
ESMMCTR & CVR 链路建模能力强不适用于多任务扩展有用但不够
MMoE任务间竞争+共享最平衡参数中等,结构略复杂✅ 粗排首选
PLE更精细任务隔离、效果更强训练略慢✅ 更高效果方案

粗排业界默认最佳选择:

MMoE(主流) → PLE(效果更极致)


三、多任务学习中的三大核心技术难点

难点现象MTL中的表现
梯度冲突Loss A 降 → Loss B 升CTR 和 GMV 互相“抢特征”
数据分布差异任务样本不均衡CVR 天然 1:2000,CTR 1:50
优化目标博弈短期 vs 长期目标矛盾点击爽 vs 留存差

MMoE/PLE 结构的存在,就是为了解决梯度冲突 + 特征共享失衡这两个本质问题。


四、目标融合(Multi-Objective Fusion)——粗排最后的关键一公里

多个任务得到多个输出,如:

  • ( p_{ctr} )

  • ( p_{cvr} )

  • ( gmv )

  • ( stay_score )

最终粗排必须融合为一个分数用于排序,核心融合方式:

方式一:线性加权 (经典 & 工业可控)
score = w_1 \cdot p_{ctr} + w_2 \cdot (p_{ctr} \cdot p_{cvr}) + w_3 \cdot gmv

优点稳定,缺点需要人工调参


方式二:基于收益的动态加权(效果更好)

根据实时 ROI / GMV 截断动态调整权重

适合广告粗排,收益最大化能力强


方式三:自适应融合(最智能)

利用权重网络(Gating Fusion)由模型学习权重,而不是人工设置

适用于推荐粗排,能够兼顾业务全面目标


五、TensorFlow 2.x + Keras 实战:MMoE 粗排多任务模型

以下为可直接训练的粗排多目标 MMoE Keras 代码(可运行 & 可扩展)

import tensorflow as tf
from tensorflow.keras import layers, Model

class MMoE(layers.Layer):
    def __init__(self, units, num_experts, num_tasks):
        super().__init__()
        self.experts = [layers.Dense(units, activation="relu") for _ in range(num_experts)]
        self.gates = [layers.Dense(num_experts, activation="softmax") for _ in range(num_tasks)]

    def call(self, inputs):
        expert_outputs = tf.stack([expert(inputs) for expert in self.experts], axis=1)
        task_outputs = []
        for gate in self.gates:
            gate_weights = tf.expand_dims(gate(inputs), axis=-1)
            task_output = tf.reduce_sum(expert_outputs * gate_weights, axis=1)
            task_outputs.append(task_output)
        return task_outputs

# 构建粗排模型
inputs = layers.Input(shape=(128,))
mmoe_outputs = MMoE(units=64, num_experts=8, num_tasks=2)(inputs)

ctr_output = layers.Dense(1, activation="sigmoid", name="ctr")(mmoe_outputs[0])
cvr_output = layers.Dense(1, activation="sigmoid", name="cvr")(mmoe_outputs[1])

model = Model(inputs=inputs, outputs=[ctr_output, cvr_output])
model.compile(
    optimizer="adam",
    loss={"ctr": "binary_crossentropy", "cvr": "binary_crossentropy"},
    loss_weights={"ctr": 1.0, "cvr": 2.0}
)
model.summary()

你会看到几个关键点:

✔ Experts 共享
✔ Gates 控制任务分离
✔ Loss 加权影响业务重点
✔ 结构轻 → 适合粗排


六、线上粗排架构与多任务融合的工程落地

部署到粗排线上,一般遵循:

特征服务 → 粗排模型(MTL) → 得分融合 → TopN → 精排 → 召回补充 → 重排序 → 展示

监控指标必须包含:

  • AUC(CTR/CVR)

  • GMV / ROI

  • 分层曝光比例

  • 长短期目标平衡度


七、本节总结(写在节尾的小结)

粗排阶段真正任务对应 MTL 作用
平衡点击与收益CTR + CVR + GMV 多目标
在有限曝光中控权分数融合策略
保证结构健康多任务避免“骗点击”
追求轻量高效MMoE / PLE 是最佳选择

一句话总结本节:

粗排不是优化单一目标,而是通过多任务学习最大化整体系统价值,而目标融合是粗排能否真正跑起来的决定性步骤。

您可能感兴趣的与本文相关的镜像

TensorFlow-v2.15

TensorFlow-v2.15

TensorFlow

TensorFlow 是由Google Brain 团队开发的开源机器学习框架,广泛应用于深度学习研究和生产环境。 它提供了一个灵活的平台,用于构建和训练各种机器学习模型

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值