【第五章:计算机视觉-项目实战之推荐/广告系统】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 是最佳选择

一句话总结本节:

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

相关推荐
那个村的李富贵5 小时前
光影魔术师:CANN加速实时图像风格迁移,让每张照片秒变大师画作
人工智能·aigc·cann
腾讯云开发者6 小时前
“痛点”到“通点”!一份让 AI 真正落地产生真金白银的实战指南
人工智能
CareyWYR6 小时前
每周AI论文速递(260202-260206)
人工智能
hopsky7 小时前
大模型生成PPT的技术原理
人工智能
禁默8 小时前
打通 AI 与信号处理的“任督二脉”:Ascend SIP Boost 加速库深度实战
人工智能·信号处理·cann
心疼你的一切8 小时前
昇腾CANN实战落地:从智慧城市到AIGC,解锁五大行业AI应用的算力密码
数据仓库·人工智能·深度学习·aigc·智慧城市·cann
AI绘画哇哒哒8 小时前
【干货收藏】深度解析AI Agent框架:设计原理+主流选型+项目实操,一站式学习指南
人工智能·学习·ai·程序员·大模型·产品经理·转行
数据分析能量站8 小时前
Clawdbot(现名Moltbot)-现状分析
人工智能
那个村的李富贵8 小时前
CANN加速下的AIGC“即时翻译”:AI语音克隆与实时变声实战
人工智能·算法·aigc·cann
二十雨辰8 小时前
[python]-AI大模型
开发语言·人工智能·python