精通推荐算法7:多任务学习 -- 总体架构

1 多任务学习的总体架构

目前的互联网主流推荐场景在大多数情况下需要优化多个业务目标。例如在淘宝商品推荐中,需要兼顾点击率和转化率。在抖音短视频推荐中,需要考虑完播率、播放时长、点赞率、评论率、关注率等目标。为了提升各项业务目标,并降低维护成本,它们大多采用了多任务学习(Multi-Task Learning,MTL),并取得了非常不错的业务效果。

推荐算法多任务学习主要包括多任务建模多任务融合两部分。多任务建模主要解决如何同时学习多个任务的表征的问题,其核心在于需要平衡任务间的相关性和差异性,从而提升整体性能。多任务融合则主要解决如何利用多个预估值进行最终排序的问题,通常有融合公式排序模型强化学习等解决方案。推荐算法多任务学习的知识框架如图1所示。

图1 多任务学习知识框架

多任务学习在我的新书《精通推荐算法:核心模块+经典模型+代码详解》第7章中有详细讲解。包括ESSM、MMOE和PLE等面试常考的模型。详细请参见

《精通推荐算法:核心模块+经典模型+代码详解》(谢杨易)【摘要 书评 试读】- 京东图书

2 为什么需要多任务学习

多任务学习目前被广泛应用于搜索、推荐和广告等场景中。相比单任务学习,它的优点主要如下。

  • 降低训练、部署和维护成本。多任务学习利用一个模型联合训练和优化多个业务目标,进行模型训练、部署和维护。同时,任务间共享一部分参数,缩小了模型整体体积,并降低了内存开销。特别是Embedding层,拥有模型绝大部分参数。多任务学习通过共享Embedding的方式,可以显著缩小模型体积,节省离线和在线资源。
  • 数据增强。在某些情况下,一些任务的数据较难获得,例如电商中的购买行为,单独训练模型容易欠拟合,影响表达能力和业务效果。通过共享参数的方式,可以让模型学习到其他任务的特征和数据,例如电商中的点击行为,从而缓解该任务的数据稀疏问题,相当于一定程度的数据增强。
  • 减少过拟合。多任务模型需要同时优化所有子任务,尽量让它们都达到最优。对于某个特定子任务,其他任务相当于它的正则项,有利于降低过拟合风险。
  • 提升泛化能力。多任务学习可以让模型学到更多的任务和知识,在各个子任务上均表现良好。这有利于提升模型泛化能力,在处理新的子任务时鲁棒性更好。

3 多任务学习的基本框架

多任务学习主要有硬参数共享(Hard Parameter Sharing)和软参数共享(Soft Parameter Sharing)两大类。硬参数共享直接让多个子任务共享某些模型结构和参数,目前仍然是主流方法。最常见的硬参数共享方法是共享底层(Share Bottom),它让子任务共享模型底层,例如Embedding层和前几层DNN。而模型上层,例如后几层DNN和输出层,则是相互独立的。硬参数共享的模型结构如图2所示。

图2 硬参数共享的模型结构

软参数共享的每个任务都拥有独立的模型,通过在各子任务模型参数的距离中加入正则化约束来保证任务间的相关性和模型间的相似性。常用的正则化方法有L1正则和L2正则等。软参数共享的模型结构如图3所示。

图3 软参数共享的模型结构

相比于软参数共享,硬参数共享模型的参数更少,结构更为紧凑和简单,训练和维护成本更低,是目前推荐算法多任务学习的主流范式。ESMMMMOEPLE等经典多任务模型,均属于硬参数共享模型。ESMM利用用户行为顺序关系,建立了曝光、点击、转化三者之间的关联,有效解决了传统CVR任务的样本选择偏差和数据稀疏问题,取得了非常不错的效果。其模型结构如图4所示。

图4 ESSM的模型结构

MMOE 构建了多个底层专家(Experts)网络,可以抽取不同信息。每个子任务有一个独立门控(Gate)单元,将多个专家的输出融合到该子任务中。得益于采用了多个专家网络和门控单元,MMOE建模子任务差别较大的场景时,仍能取得不错的效果。目前它已被广泛应用于搜索、推荐和广告的各大业务场景中。MMOE模型结构如图5所示。

图5 MMOE的模型结构

PLE将由所有子任务共享的底层网络,拆解成共享部分和独立部分,从而平衡任务间的相关性和差异性。同时通过堆叠多层底层网络,渐进式分离出各子任务的深层语义信息。PLE在子任务相关性高和相关性低的场景,均表现良好,并成功应用在腾讯视频推荐场景,取得了非常不错的业务效果。PLE模型结构如图6所示。

图6 PLE的模型结构

4 多任务学习的难点和挑战

多任务学习具有维护成本低、数据增强、减少过拟合和提升泛化能力等优点,可以提升各项业务水平。多任务学习要解决的主要问题如下。

1)如何平衡子任务间的相关性和差异性。子任务间有一定的相似性和相关性,同时具备一定的差异性,甚至冲突。例如,淘宝商品推荐中的点击率和转化率。通过共享底层等硬参数共享方法,可以学习到各子任务间的相关性,但也容易带来信息串扰,导致子任务间差异较大时效果不佳,某些子任务的执行效果甚至不如单任务建模,这就是负迁移现象。MMOE模型在底层构建了多个专家(Experts)网络,用来提取多种不同信息,同时利用每个子任务独有的门控(Gate)单元,融合多个专家的输出,兼顾子任务间的相关性和差异性。PLE模型则更进一步,将专家网络拆分为子任务共享的和独占的,进一步缓解了负迁移问题。

2)如何融合子任务的损失。一般采用加权求和方式,如式(1)所示。

其中,L为模型总损失,是多任务学习的最终优化目标。w为融合权重,用来平衡各个子任务的影响,防止总损失被某些任务主导。 n 为子任务个数。损失函数融合的难点在于难以确定合适的融合权重,而且在训练过程中可能还需要动态调节。

3)如何融合子任务的输出。多任务模型的每个子任务均会有一个输出,需要将它们融合成一个输出,作为最终的排序分数。最为简便的方法是使用融合公式,PLE便采用了这一方法。但融合公式缺点明显,一方面基于非监督学习,难以获得准确的权重;另一方面难以随着数据分布的变化而动态更新。网格搜索、排序模型和强化学习等多种方案可以对其进行优化。其中BatchRL-MTF模型利用强化学习,将多模型融合看作一个马尔科夫决策过程,并在推荐会话中提出了一种基于批量强化学习的多任务融合框架。并通过对用户行为的全面研究,从用户粘性和用户活跃度两个方面,运用启发式算法对用户满意度反馈进行了建模。

6 作者新书推荐

历经两年多,花费不少心血,终于撰写完成了这部新书。

购书方式:新书发布,京东限时15天内5折优惠。原价89,现价44.5,一杯咖啡的价钱。

发货速度:京东自营,半天即可送到。

源代码:扫描图书封底二维码,进入读者群,群公告中有代码下载方式

微信群:图书封底有读者微信群,作者也在群里,任何技术、offer选择和职业规划的问题,都可以咨询

售后:支持京东七天无理由退货,售后无忧。

详细介绍和全书目录,详见

《精通推荐算法:核心模块+经典模型+代码详解》(谢杨易)【摘要 书评 试读】- 京东图书

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/663023.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

光栅幅值细分原理与实现

本文介绍光栅幅值细分原理与实现。 光栅是工业测量领域中常见的传感器,如下图。主要厂家有雷尼绍,海德汉,配套的光栅读数头有模拟信号的,也有直接细分输出数字脉冲的,本文的细分针对模拟信号,即有正弦信号…

数字化业务流程升级再造,解困基本半导体的CRM应用5年之痒

在新能源汽车、工业互联、5G通信、消费电子等需求的强力拉动下,以碳化硅为代表的第三代半导体产业迎来爆发式增长。 深圳基本半导体有限公司(以下简称“基本半导体”)是中国第三代半导体创新企业,专业从事碳化硅功率器件的研发与…

NineData 联合创始人周振兴将参加开源数据库技术沙龙,并和 PolarDB 开源社区一起去娃哈哈带来主题分享!

5月31日(周五),PolarDB 开源社区将联合娃哈哈集团共同举办开源数据库技术沙龙!NineData 联合创始人周振兴受邀参加,并将分享《NineData,Any to Any 数据复制之路》的技术分享。 本次活动汇聚了 PolarDB 产品…

用于水利工程系统方面的传感器M-A542VR10

近几年快速发展的IC技术和计算机技术,为传感器的发展提供了良好与可靠的科学技术基础。使传感器的发展日新月益,且数字化、多功能与智能化是现代传感器发展的重要特征爱普生也在不断发展自己的传感器型号。随着水利工程技术的不断进步,传感器…

面向对象编程:坦克飞机大战游戏的重构之旅

新书上架~👇全国包邮奥~ python实用小工具开发教程http://pythontoolsteach.com/3 欢迎关注我👆,收藏下次不迷路┗|`O′|┛ 嗷~~ 目录 一、面向对象编程思想入门 坦克对象的定义 属性与行为方法的实现 二、面向过程与面向对象…

子网划分案例

4.2子网划分 “有类编址”的地址划分过于死板,划分的颗粒度太大,会有大量的主机号不能被充分利用,从而造成了大量的IP地址资源浪费。因此可以利用子网划分来减少地址浪费,即VLSM (Variable Length Subnet Mask),可变长…

python清洗苹果产量数据:从字符串到整型的转化

新书上架~👇全国包邮奥~ python实用小工具开发教程http://pythontoolsteach.com/3 欢迎关注我👆,收藏下次不迷路┗|`O′|┛ 嗷~~ 目录 一、引言 二、使用普通方法清洗数据 1. 创建字典并遍历 2. 示例代码 3. 结果展示 三、使…

WAMP无法启动mysql

一种原因是原来安装过mysql,mysql默认是自启动的,而WAMP内置mysql会发生冲突,所以 解决方法: winR 输入 services.msc 将mysql关闭,并设为手动模式

Java是长连接

Java是长连接,springboot进程被结束才断开 一个连接池有10个连接,2个并发会占用2个连接,用完之后归还给连接池 springboot服务用户的是线程池,返回结果之后,线程自动归还到线程池。跟php机制不一样 php是短链接&am…

【Leetcode 206】 反转链表——此递归相当妙啊

题目 给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。 示例 1: 输入:head [1,2,3,4,5] 输出:[5,4,3,2,1]示例 2: 输入:head [1,2] 输出:[2,1]示例 3: …

重学java 51.Collections集合工具类、泛型

"我已不在地坛&#xff0c;地坛在我" —— 《想念地坛》 24.5.28 一、Collections集合工具类 1.概述:集合工具类 2.特点: a.构造私有 b.方法都是静态的 3.使用:类名直接调用 4.方法: static <T> boolean addAll(collection<? super T>c,T... el…

.net JQ AJAX 请求 FromBody 接收格式

$.ajax({ url: “/api/banchang/EmpTble/Login2”, type: ‘Post’, data: JSON.stringify({ Emppassword: pass, EmpName: name }), contentType: ‘application/json’, beforeSend: function () { // 禁用按钮防止重复提交 /* $(“#create”).attr({ disabled: “disabled”…

同一个类中方法调用,导致@Transactional失效

1.背景 查了一下Spring文档&#xff0c;就是上面这段话所说的情况。 2.Spring官方文档有这么一段话 https://docs.spring.io/spring-framework/docs/current/reference/html/data-access.html#transaction-declarative In proxy mode (which is the default), only external …

经典获奖案例 | 度小满互联网金融开源软件治理解决方案

近日&#xff0c;广东省粤港澳合作促进会金融专业委员会和粤港澳大湾区金融创新研究院在广州联合举办“2024年粤港澳大湾区数智金融峰会暨第二届金融创新优秀应用案例与解决方案技术成果授牌仪式”。《度小满互联网金融开源软件治理解决方案》从数百个申报项目中脱颖而出&#…

基于心电疾病分类的深度学习模型部署应用于OrangePi Kunpeng Pro开发板

一、开发板资源介绍 该板具有4核心64位的处理器和8TOPS的AI算力&#xff0c;让我们验证一下&#xff0c;在该板上跑深度学习模型的效果如何&#xff1f; 二、配网及远程SSH登录访问系统 在通过microusb连接串口进入开发板调试&#xff0c;在命令行终端执行以下命令 1&#…

Docker安装MySQL的详细教程

1. 拉取MySQL镜像 拉取MySQL镜像。您可以指定版本号&#xff0c;例如5.7或8.0&#xff0c;如果不指定&#xff0c;默认会拉取最新稳定版。 docker pull mysql:5.7或者&#xff0c;使用最新版本&#xff1a; docker pull mysql:latest2. 运行MySQL容器 拉取镜像完成后&#…

C++ 进阶(3)虚函数表解析

个人主页&#xff1a;仍有未知等待探索-CSDN博客 专题分栏&#xff1a;C 请多多指教&#xff01; 目录 一、虚函数表 二、单继承&#xff08;无虚函数覆盖&#xff09; 继承关系表&#xff1a; 对于实例&#xff1a;derive d 的虚函数表&#xff1a; 对于实例&#xff1a;b…

《C语言深度解剖》(15):动态内存管理和柔性数组

&#x1f921;博客主页&#xff1a;醉竺 &#x1f970;本文专栏&#xff1a;《C语言深度解剖》 &#x1f63b;欢迎关注&#xff1a;感谢大家的点赞评论关注&#xff0c;祝您学有所成&#xff01; ✨✨&#x1f49c;&#x1f49b;想要学习更多C语言深度解剖点击专栏链接查看&…

后端企业级开发之yaml数据序列化格式文件详解2024

yaml格式 数据格式 yaml 是一种数据序列化的格式 容易阅读 容易与脚本语言交互 以数据为核心 重数据轻格式 我们要知道他怎么书写 大小写敏感 属性层级关系使用多行描述 每行结尾使用冒号结束 使用缩进表示层级关系 同层级左侧对其 只运行使用空格 属性前面添加空格 #表…

JAVA 大鱼吃小鱼小游戏

java实现大鱼吃小鱼&#xff0c;支持身份证防沉迷、账号密码、选择难度 放沉迷 登录 选择难度 游戏界面