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

第五章:计算机视觉-项目实战之推荐/广告系统

第二部分:粗排算法

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


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

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

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

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

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

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

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

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

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

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


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

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

模型结构 优点 缺点 是否适合粗排
Hard Sharing 简单、快、参数最少 易梯度干扰,多个任务互相拖累 一般不推荐
ESMM CTR & 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)------粗排最后的关键一公里

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

  • ( )

  • ( )

  • ( gmv )

  • ( stay_score )

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

方式一:线性加权 (经典 & 工业可控)

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


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

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

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


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

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

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


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

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

python 复制代码
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 是最佳选择

一句话总结本节:

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

相关推荐
NAGNIP6 小时前
一文搞懂深度学习中的通用逼近定理!
人工智能·算法·面试
冬奇Lab7 小时前
一天一个开源项目(第36篇):EverMemOS - 跨 LLM 与平台的长时记忆 OS,让 Agent 会记忆更会推理
人工智能·开源·资讯
冬奇Lab7 小时前
OpenClaw 源码深度解析(一):Gateway——为什么需要一个"中枢"
人工智能·开源·源码阅读
AngelPP11 小时前
OpenClaw 架构深度解析:如何把 AI 助手搬到你的个人设备上
人工智能
宅小年11 小时前
Claude Code 换成了Kimi K2.5后,我再也回不去了
人工智能·ai编程·claude
九狼11 小时前
Flutter URL Scheme 跨平台跳转
人工智能·flutter·github
ZFSS11 小时前
Kimi Chat Completion API 申请及使用
前端·人工智能
天翼云开发者社区13 小时前
春节复工福利就位!天翼云息壤2500万Tokens免费送,全品类大模型一键畅玩!
人工智能·算力服务·息壤
知识浅谈13 小时前
教你如何用 Gemini 将课本图片一键转为精美 PPT
人工智能
Ray Liang13 小时前
被低估的量化版模型,小身材也能干大事
人工智能·ai·ai助手·mindx