多场景多任务建模(三): M2M(Multi-Scenario Multi-Task Meta Learning)
多场景建模: STAR(Star Topology Adaptive Recommender)
多场景建模(二): SAR-Net(Scenario-Aware Ranking Network)
前面两篇文章,讲述了关于多场景的建模方案,其中可以看到很多关于多任务学习的影子,我们也介绍了两者的区别:
- 多任务学习通常是聚焦于单独一个domain(场景、领域)内的不同任务的处理,即不同任务的label空间是不同的;
- 而多场景建模则是关注于多个domain的同一个任务的建模,比如CTR,即不同场景的label空间是一样的,但数据分布是不同的。
然后,这两种在生产环境中其实是经常一起出现的,比如下面的场景,一个广告主可能会在多个场景下操作,并且会在这些场景下产生不同的行为,而模型便需要去预测广告主在对应场景下的多种行为,然后根据不同的行为去给他们提供不同的工具。
那么,今天这篇文章就在前面多场景建模的基础上,开启关于多场景多任务学习的扩展系列。
概述
Leaving No One Behind: A Multi-Scenario Multi-Task Meta Learning Approach for Advertiser Modeling
CIKM’22:https://arxiv.org/abs/2201.06814
这篇论文的业务场景与平常的用户点击率预估不同,不是针对用户建模,而是聚焦于广告主,目标在于理解广告主的需要和效果(performance),并且task是属于回归问题,但其实这两者的很多实践是互通,可以互相借鉴。
广告主建模通常涉及多种任务,比如预测广告主的消耗、活跃率和促销产品的曝光等等,并且电子商务平台往往提供多种营销场景,比如赞助搜索、展示广告和直播广告等,同时广告主在这些场景的行为是分散的。
这便催生了综合考虑多场景和多任务的广告主建模的必要性,但同时考虑多场景和多任务存在着一些挑战:
- 老生常谈的问题,每一个场景或者每一种任务单独建模,成本很高,难以扩展。即使是使用前面的多场景建模或者多任务学习,同样是存在这个问题的,因为仍然需要一个场景建模去一个多任务模型,或者一种任务去建模一个多场景模型
- 新的场景或者样本很少的小场景建模难度较高。对于小场景,样本数量很少很分散,难以训练一个可靠的模型,对新场景的预测存在更大的精度问题,因此如何迁移不同场景之间的信息,同时保持场景自己的特性便成了问题所在
- 场景间的多任务相关性是复杂的,难以精确捕获。给定一个任务,比如不同场景下的广告主的消耗,场景间的关联可能是正向、负向的,或者是没有关联的,更进一步,这些相关性还涉及多种任务,可能还会演变和变化。如下图:
为了克服这些挑战,论文提出了M2M,一种多场景多任务的元学习模型,它的整体结构如下图所示:
- backbone network是来学习广告主相关的特征和任务特征的表征;
- 元学习机制包括一个元注意力层和一个元残差网络,分别来捕获复杂多样的场景间相关性和增强场景特定特征的表征能力
- 最后,还在多任务上使用了一种联合泊松损失(joint Poisson loss)来优化模型
这里的骨干网络(backbone network)是采用MTL的基础结构,多专家的门控/注意力机制,也就是M2M在MTL的基础下引入了元学习单元,如下图所示:
符号定义
- 场景属性集合: S = { s 1 , s 2 , . . . , s l } S=\{s_1,s_2,...,s_l\} S={s1,s2,...,sl},广告主在不同营销场景的场景相关信息
- 广告主画像集合: A = { a 1 , a 2 , . . . , a m } A=\{a_1,a_2,...,a_m\} A={a1,a2,...,am}
- 多类型的行为序列: X b = { X b t } t = 1 T X_b=\{X_b^t\}^T_{t=1} Xb={Xbt}t=1T,表示在一段时间T内的多种类型的行为信息, X b t = { x b 1 t , x b 2 t , . . . , x b m t } X_b^t=\{x^t_{b1},x^t_{b2},...,x^t_{bm}\} Xbt={xb1t,xb2t,...,xbmt} 表示在时间t广告主的特征
- 多类型的效果(performance)序列: X p = { X p t } t = 1 T X_p=\{X_p^t\}^T_{t=1} Xp={Xpt}t=1T,表示在一段时间T内的多种类型的执行信息, X p t = { x p 1 t , x p 2 t , . . . , x p m t } X_p^t=\{x^t_{p1},x^t_{p2},...,x^t_{pm}\} Xpt={xp1t,xp2t,...,xpmt} 表示在时间t广告主的特征
具体地可以参照下图:
1. Backbone Network
1.1 Shared Bottom Embedding.
这里还是常规做法,因为 { X b , X p } \{X_b,X_p\} {Xb,Xp} 包含连续值的特征,比如页面浏览、点击、消耗,第一步便是将这些连续值特征进行离散化,然后转化为高维的one-hot向量,接着使用embedding layer映射为低维的密集表征。
这样,每一个时间序列即每一个行为就对应得到了固定大小的低维向量,同时还加入位置embedding来捕获历史执行和行为序列的顺序或时间信息,但论文是将特征embedding与位置embedding进行拼接,而不是相加。
1.2 Transformer Layer.
上一步对特征映射到低维表征后,便使用transformer layer来学习每一个时间序列的更加深层次的表征,来捕获与其他时间序列的相关性,众所周知,相比于RNN和LSTM,transformer更高效和有效。
transformer layer仍然是常规的做法,由多个Self-attention Layer组成的multi-head self-attention。(论文的公式写错了,V是在softmax之后的)
- Q,K,V分别表示输入embedding的query、key和value
- d为K的维度的缩放因子
- Q,K,V这三个矩阵是时间序列特征embedding的同等维度下的线性映射,如下式 h e a d i head_i headi
-
h是注意力头的数量
-
X为输入的时间序列特征embedding
-
W i Q , W i K , W i V W^Q_i,W^K_i,W^V_i WiQ,WiK,WiV 为上述提到的 h e a d i head_i headi 的Q,K,V线性映射的参数矩阵
-
并且,由于存在后面的Expert View Representation,transformer layer不加入额外的非线性单元
最后,将学习到行为序列和效果序列特征的表征进行拼接:
1.3 Expert View Representation.
经过transformer layer之后得到的序列特征表征会与其他特征表征进行拼接,然后输入到MMoE网络,构建拥有不同的共享表征的混合专家层:
E i E_i Ei 是第i个专家的输出,k为专家的数量
1.4 Task View Representation.
除了embedding特征之外,论文还将所有task嵌入到相同的空间,扮演task的“锚点”来引入task的先验知识来影响特征信息的权重。由于没有在测试集中加入任何特定的label信息,因此提取的task表征是全局而非局部的。
具体地,将task信息的one-hot转换到低维的密集表征,然后输入到一个带有LeakyReLU激活函数的feed-forward layer:
T t T_t Tt 是第t个task的锚点embedding,m是task的数量
1.5 Scenario Knowledge Representation.
场景知识表征是广告主的广告场景的知识表征,论文在这里不单使用广告主营销场景的属性,还加入广告主的画像信息,来更好地学习多任务,其表征层仍然是feed-forward layer:
2. Meta Learning Mechanism
为了更好地从不同的序列特征中刻画场景特定的表征,论文提出了一种元学习机制,包含两个组件:
- 元注意力模块:meta attention module,放置在底层,来捕获多样的场景之间的关联
- 元残差塔模块:meta residual tower module,放置在上层,来增强捕获场景表征的能力
具体地,整个元学习机制架构如下图:
2.1 Meta Unit
在元学习机制中,Meta Unit是一个基础组件,充斥着整个元学习模块。
Meta Unit的作用是显式建模不同场景的相关信息。如上图[Meta Learning Mechanism]所示,使用场景知识 S ~ \tilde{S} S~作为输入,来更好地捕获场景间的关联。meta unit会将场景知识转换为动态的权重和偏置参数,用于后续的meta attention和meta tower,具体如下式:
-
h i n p u t h_{input} hinput是d维的输入向量, σ \sigma σ是非线性激活函数,K是meta unit的层数
-
W ( i ) ∈ R d × d , b ( i ) ∈ R d W^{(i)} \in \mathcal{R}^{d \times d},b^{(i)} \in \mathcal{R}^d W(i)∈Rd×d,b(i)∈Rd 是projection参数,由场景知识生成,经过一层全连接网络,然后reshape改变维度得到,如下式:
最后,meta unit的输出可以使用 M e t a Meta Meta 函数来表示:
不同于常规的实现:将场景相关信息作为输入去建模,meta unit结合场景知识来为每个特定场景生成动态的参数权重,通过获得场景特定的表征,这种显式的建模方式,可以显著提升新场景或者小场景的表现。
2.2 Meta Attention Module
Meta Attention在元学习机制的底部,其目的在于为backbone network生成的多个专家特征学习不同的贡献权重。
直觉上来看,每一种task依赖于共享特征的不同部分,但是忽视场景因素,直接计算注意力分数是不准确的,因为不同场景的训练样本数量是不同的,并且对于某种特定的task,不同场景的数据分布可能是动态的,然而传统的注意力模块能够建模task和特征之间的关联,而场景特定的差异是被忽略的。
论文提出的meta attention致力于计算注意力分数的同时,能够捕获场景的信号,帮助注意力模块学习为不同的场景产生动态的注意力权重。
具体地,为了根据给定的场景相关信息来建模注意力分数的不同模式,论文在attention模块中加入了上一小节的meta unit:
- E i , T t E_i,T_t Ei,Tt 分别是上一节中backbone network产出的专家特征表征向量和task锚点embedding,它们的维度分别是 d 1 d_1 d1和 d 2 d_2 d2
- 隐藏层向量 v ∈ R d 1 + d 2 v \in \mathcal{R}^{d_1+d_2} v∈Rd1+d2 将隐藏层向量映射为权重标量
最终的第t个task的表征 R t R_t Rt 便是由多个专家特征表征向量通过它们对应的注意力权重进行加权求和:
由于提取了场景知识,并且使用了这些信息去生成权重和偏置,因此meta attention模块不仅能够建模task和特征之间的相关性,也是具备捕获复杂的场景之间的关联的能力的。
2.3 Meta Tower Module
经过元注意力模块之后,获得聚合后的隐表征,M2M接着使用一个meta residual tower module来区分不同的场景,这个模块同样有着meta unit。
因为对于一个特定的task,特征模式会因场景而异,一个简单的共享feed-forward网络是无法有效捕获不同的场景信息,因此论文才引入了meta residual tower module:
- R t R_t Rt 是上一个小节中第t个task的attention输出
- σ \sigma σ 是一个非线性激活函数
- L是残差网络的层数
3. Optimization
3.1 损失函数
M2M的损失函数包括两部分:
- 第一部分是每个task的loss乘以权重 λ t \lambda_t λt,然后求和。loss使用了适用于labels服从泊松分布的Poisson Loss
- 第二部分是对 W 1 , W 2 W_1,W_2 W1,W2 的正则惩罚项, W 1 , W 2 W_1,W_2 W1,W2 分别指meta unit和其他网络的参数, α \alpha α 则表示正则惩罚项的权重
3.2 超参数
- 底层共享的embedding layer使用的维度为16
- transformer模块使用了2个注意力头
- feature views和task views表征的维度为256
- 全部激活函数都使用了LeakyReLU
- batch size为256,学习率为 2 × 1 0 − 3 2 \times 10^{-3} 2×10−3,Adam作为优化器,Adam的参数分别为: β 1 = 0.9 , β 2 = 0.998 , ε = 1 × 1 0 − 9 \beta_1=0.9,\beta_2=0.998,\varepsilon=1 \times 10^{-9} β1=0.9,β2=0.998,ε=1×10−9
- 梯度裁剪范围为:[3, -3],训练了10轮
3.3 metrics
常规的回归问题通常使用MAPE (Mean Absolute Percentage Error)来评估微观的平均效果,NMAE (Normalized Mean Absolute Error)来评估宏观的平均效果,但是部分task,比如曝光和点击等,会出现不可计算的MAPE,因此使用SMAPE (Symmetric Mean Absolute Percentage Error)来代替MAPE:
- N是广告主的数量, y ^ i , y i \hat{y}_i,y_i y^i,yi分别是第i个广告主的预估和真实标签。
实验结果
总结
M2M是针对多任务多场景业务而提出的框架,能够建模不同task与特征的关联的同时,引入场景知识来捕获场景间的关联:
1、底层的backbone network采用MTL结构+transformer layer
2、M2M提出了应对多任务多场景的高效的元学习机制:
- meta unit作为其中的基础组件,为不同场景产生动态的参数
- meta attention模块注入场景知识(meta unit)来为task计算不同场景下的多个experts的注意力分数
- meta tower模块为特定task进一步特征交叉的同时加入场景知识(meta unit)
3、可以应用于存在多种不同类型行为序列的场景,如论文中针对广告主的两种序列:登录、投标等行为序列以及GMV、RIO等效果序列
4、另外,发现论文对transformer layer后的序列embeddings聚合方式没有提及;并且在meta unit中,为了计算场景动态权重 W ( i ) ∈ R d × d W^{(i)} \in \mathcal{R}^{d \times d} W(i)∈Rd×d,需要的参数矩阵 V w V_w Vw 是 O ( N 3 ) O(N^3) O(N3) 级别的: d S ~ × ( d E × d E ) d^{\tilde{S}} \times (d^{E} \times d^{E}) dS~×(dE×dE),参数量是比较大的。
代码实现
transformer layer后的序列embeddings聚合方式:使用 S ~ \tilde{S} S~ 去做一个target attention,即 S ~ \tilde{S} S~作为Q,序列embeddings作为K和V。
recommendation/multidomain/m2m.py
相关文章:

多场景多任务建模(三): M2M(Multi-Scenario Multi-Task Meta Learning)
多场景建模: STAR(Star Topology Adaptive Recommender) 多场景建模(二): SAR-Net(Scenario-Aware Ranking Network) 前面两篇文章,讲述了关于多场景的建模方案,其中可以看到很多关于多任务学习的影子&…...
Day31 || 122.买卖股票的最佳时机 II、55. 跳跃游戏、 45.跳跃游戏II 、1005.K次取反后最大化的数组和
122.买卖股票的最佳时机 II 题目链接:力扣题目链接 思路:因为是求虽大利润完全可以假设知道第二天涨前一天买入即可,就是求两天只差大于0 的和。 55. 跳跃游戏 题目链接:力扣题目链接 思路:应该从后往前循环判断&…...

【uniapp】打包成H5并发布
目录 1、设置配置mainifest.sjon 1.1 页面标题 1.2 路由模式 1.3 运行的基础路径 2、打包 2.1 打包入口 2.2 打包成功 2.3 依据目录找到web目录 3、 将web目录整体拷贝出来 4、上传 4.1 登录uniapp官网注册免费空间 4.2 上传拷贝的目录 4.3 检查上传是否正确 5、…...

Position Embedding总结和Pytorch实现
文章目录 出现背景PE位置编码公式思路code 出现背景 自注意力机制处理数据,并不是采用类似RNN或者LSTM那种递归的结构,这使得模型虽然能够同时查看输入序列中的所有元素(即并行运算),但是也导致了没办法获取当前word在…...

【AIF-C01认证】亚马逊云科技生成式 AI 认证正式上线啦
文章目录 一、AIF-C01简介二、考试概览三、考试知识点3.1 AI 和 ML 基础知识3.2 生成式人工智能基础3.3 基础模型的应用3.4 负责任 AI 准则3.5 AI 解决方案的安全性、合规性和监管 四、备考课程4.1 「备考训练营」 在线直播课4.2 「SkillBuilder」学习课程 五、常见问题六、参考…...
C++ 素数的筛选法与穷举法
题目:素数大酬宾: 【问题描述】 某商场的仓库中有 n 种商品,每件商品按 1~n 依次编号。现在商场经理突发奇想,决定将编号为素数(质数)的所有商品拿出来搞优惠酬宾活动。请编程帮助仓库管理员将编号为素数的商品选出来…...
Spring Boot异步任务、任务调度与异步请求线程池的使用及原理
Spring Boot异步任务、任务调度与异步请求线程池的使用及原理 在Spring Boot应用程序中,异步任务、任务调度和异步请求线程池是提高系统性能和响应速度的重要工具。本文将详细讲解这些概念的使用及原理。 一、异步任务 异步任务是指可以在后台线程上执行的任务&a…...

Java爬虫之使用Selenium WebDriver 爬取数据
这里写自定义目录标题 Selenium WebDriver简介一、安装部署二、Java项目中使用1.引入依赖2.示例代码 三、WebDriver使用说明1.WebDriver定位器2.常用操作3.使用 cookie4.键盘与鼠标操作 Selenium WebDriver简介 Selenium WebDriver 是一种用于自动化测试 Web 应用程序的工具。…...
MyBatis 中updateByPrimaryKey和updateByPrimaryKeySelective区别
在 MyBatis 中,updateByPrimaryKey和updateByPrimaryKeySelective主要有以下区别: 一、功能 updateByPrimaryKey: 会根据传入的实体对象,将数据库表中对应主键的记录所有字段全部更新为实体对象中的值。即使实体对象中的某些字段…...

JavaScript下载文件(简单模式、跨域问题、文件压缩)
文章目录 简介简单文件下载通过模拟form表单提交通过XMLHttpRequest方式 跨域(oss)下载并压缩文件完整示例文件压缩跨域设置 简介 相信各位开发朋友都遇到过下载的文件的需求,有的非常简单,基本链接的形式就可以。 有的就比较复杂,涉及跨域…...

Django 定义使用模型,并添加数据
教材: Python web企业级项目开发教程(黑马程序员)第三章 模型 实验步骤: 1.创建项目和应用 前置步骤可看前文,进入到指定文件位置后创建 django-admin startproject mysite python manage.py startapp app01 2.注册…...

联名物料常泄漏?一端叠满“安全buff”
前段时间,一则关于爆火影视剧与知名茶饮品牌联名的消息在社交平台上迅速传播,宣传物料的照片也随之曝光——门店尚未上新,“小道消息”便已被疯传。但这种情况并非首次发生,让众多网友不禁猜想:这究竟是一场精心策划的…...

Flutter UI组件库(JUI)
Flutter UI组件库 (JUI) 介绍 您是否正在寻找一种方法来简化Flutter开发过程,并创建美观、一致的用户界面?您的搜索到此为止!我们的Flutter UI组件库(JUI)提供了广泛的预构建、可自定义组件,帮助您快速构建…...

国外电商系统开发-运维系统远程文件
设计初衷是为了让所有人都能方便的打开网页,就能查看Linux系统文件内容,而不再用cat、vim、more等命令去打开文件,这对于我们一个普通的研发或者是财务人员来说,显得太繁琐,因为他们很可能不会这些命令,其次…...
4. Node.js Path模块
2.3Path模块 2.3.1获取js文件的绝对路径 console.log(__dirname) //js文件所在的文件夹的绝对路径 console.log(__filename) //js文件的绝对路径输出: G:\py_project\nodejs_study G:\py_project\nodejs_study\file.js2.3.2拼接规范的绝对路径path.r…...
重构长方法之分解条件表达式
分解条件表达式 是一种重构长方法中常用的技术,它适用于复杂的条件逻辑。在方法中,条件分支(if-else 或 switch)有时会变得条件非常多,非常复杂,难以理解和维护。通过分解条件逻辑,可以让代码更…...

蚁群算法养老服务人员智能调度系统
养老行业近年来越发热门,如何有效调配服务人员成为许多机构的痛点。我们结合智能算法技术,开发出了一款专为养老行业量身打造的“蚁群算法养老服务人员调度系统”,能够精准、高效地为机构分配人员,从此告别人力资源调度难题。 系…...
java使用 IDEA自动补全功能 AI 插件
国内插件: CodeGeeX: 功能特性: 由国内团队开发,是一款智能编程助手插件。它集成了多种人工智能技术,能够在多个编程语言中提供智能代码补全、代码生成、代码优化和注释生成等功能。该插件特别适用于常见的编程任务…...
【ShuQiHere】 AI与自我意识:能否创造真正的自觉机器人?
🤖【ShuQiHere】 📜 目录 引言人类意识的探索机器意识的五大理论 功能主义(Functionalism)信息整合(Information Integration)体现主义(Embodiment)行动主义(Enaction&…...
【Linux 从基础到进阶】CPU性能调优与监控
CPU性能调优与监控 1. 引言 在计算机系统中,CPU是核心组件之一,其性能直接影响系统的整体表现和响应速度。无论是在企业服务器环境、虚拟化环境,还是大数据计算场景,优化和监控CPU性能都至关重要。通过合理的调优策略和监控工具…...
【网络】每天掌握一个Linux命令 - iftop
在Linux系统中,iftop是网络管理的得力助手,能实时监控网络流量、连接情况等,帮助排查网络异常。接下来从多方面详细介绍它。 目录 【网络】每天掌握一个Linux命令 - iftop工具概述安装方式核心功能基础用法进阶操作实战案例面试题场景生产场景…...

【OSG学习笔记】Day 18: 碰撞检测与物理交互
物理引擎(Physics Engine) 物理引擎 是一种通过计算机模拟物理规律(如力学、碰撞、重力、流体动力学等)的软件工具或库。 它的核心目标是在虚拟环境中逼真地模拟物体的运动和交互,广泛应用于 游戏开发、动画制作、虚…...
模型参数、模型存储精度、参数与显存
模型参数量衡量单位 M:百万(Million) B:十亿(Billion) 1 B 1000 M 1B 1000M 1B1000M 参数存储精度 模型参数是固定的,但是一个参数所表示多少字节不一定,需要看这个参数以什么…...
解锁数据库简洁之道:FastAPI与SQLModel实战指南
在构建现代Web应用程序时,与数据库的交互无疑是核心环节。虽然传统的数据库操作方式(如直接编写SQL语句与psycopg2交互)赋予了我们精细的控制权,但在面对日益复杂的业务逻辑和快速迭代的需求时,这种方式的开发效率和可…...
基于Uniapp开发HarmonyOS 5.0旅游应用技术实践
一、技术选型背景 1.跨平台优势 Uniapp采用Vue.js框架,支持"一次开发,多端部署",可同步生成HarmonyOS、iOS、Android等多平台应用。 2.鸿蒙特性融合 HarmonyOS 5.0的分布式能力与原子化服务,为旅游应用带来…...
什么是EULA和DPA
文章目录 EULA(End User License Agreement)DPA(Data Protection Agreement)一、定义与背景二、核心内容三、法律效力与责任四、实际应用与意义 EULA(End User License Agreement) 定义: EULA即…...

PL0语法,分析器实现!
简介 PL/0 是一种简单的编程语言,通常用于教学编译原理。它的语法结构清晰,功能包括常量定义、变量声明、过程(子程序)定义以及基本的控制结构(如条件语句和循环语句)。 PL/0 语法规范 PL/0 是一种教学用的小型编程语言,由 Niklaus Wirth 设计,用于展示编译原理的核…...
鸿蒙DevEco Studio HarmonyOS 5跑酷小游戏实现指南
1. 项目概述 本跑酷小游戏基于鸿蒙HarmonyOS 5开发,使用DevEco Studio作为开发工具,采用Java语言实现,包含角色控制、障碍物生成和分数计算系统。 2. 项目结构 /src/main/java/com/example/runner/├── MainAbilitySlice.java // 主界…...

C# 求圆面积的程序(Program to find area of a circle)
给定半径r,求圆的面积。圆的面积应精确到小数点后5位。 例子: 输入:r 5 输出:78.53982 解释:由于面积 PI * r * r 3.14159265358979323846 * 5 * 5 78.53982,因为我们只保留小数点后 5 位数字。 输…...

【笔记】WSL 中 Rust 安装与测试完整记录
#工作记录 WSL 中 Rust 安装与测试完整记录 1. 运行环境 系统:Ubuntu 24.04 LTS (WSL2)架构:x86_64 (GNU/Linux)Rust 版本:rustc 1.87.0 (2025-05-09)Cargo 版本:cargo 1.87.0 (2025-05-06) 2. 安装 Rust 2.1 使用 Rust 官方安…...