精通推荐算法16:特征交叉之PNN

news2024/9/21 22:21:58

1 背景

Deep Crossing通过“Embedding + MLP”的范式,奠定了深度学习在推荐算法中的重要地位,引领了一股学术界和工业界不断应用和优化深度学习推荐算法的风潮。上海交通大学提出了PNN模型,通过在Embedding层之后引入一个Product层加强了二阶特征交叉能力,有利于捕捉特征之间相关性,从而提升模型整体表达能力。

PNN模型结构

PNN全称“Product-based Neural Networks for User Response Prediction[5],由上海交通大学2016年提出。跟Deep Crossing类似,它也是应用于点击率预估场景。模型结构同样遵循了“Embedding + MLP”的基本范式,与Deep Crossing类似。主要区别在于Stacking特征融合层

Deep Crossing的Stacking层,直接将特征拼接(Concat起来,表达能力偏弱。PNN认为进入MLP深度神经网络前,有必要先进行显式特征交叉,从而捕捉特征之间的相关性。它的Stacking特征融合层包括两部分。一部分与Deep Crossing相似,直接将Embedding层输出的特拼接起来另一部分则通过Product操作,将特征两两交叉后,再拼接起来。这一部分是PNN区别于Deep Crossing的关键所在,也是它最重要的创新点。Product操作有内积和外积两种方法,分别为IPNNOPNN

模型整体结构如图4-5所示。自下而上分为4层。

  1. Embedding层:将高维稀疏的输入特征,转变为低维稠密的输出特征。同时实现特征的语义化,提升整体泛化能力。
  2. Product层:一部分直接将Embedding层输出的特征,拼接成一个长向量,如图4-5中所示的z部分。另一部分将Embedding层输出的特征,两两进行Product操作,最后再拼接成一个长向量。Product操作又分为内积和外积两种,实际应用时可以灵活选用。
  3. 全连接层:分为两层,如图4-5中所示的l1和l2。先将Product层中的z向量和p向量分别进行全连接操作后,再相加并经过ReLU激活函数,得到l1层。然后将l1层的输出,全连接并经过ReLU激活函数,得到l2层。
  4. 输出层:将全连接l2层的输出,通过一个线性变换,然后经过Sigmoid函数处理,使之归一化为0到1之间的数值,即得到最终的CTR预估概率。目标函数采用LogLoss,建模CTR预估值和真实值之间的损失,利用梯度下降反向传播,不断更新模型参数,使损失降低。从而实现模型整体的监督学习。这部分与Deep Crossing基本相似。

PNN特征交叉实现方式

PNN整体模型结构与Deep Crossing比较像,主要区别在于Product层中加入了特征两两Product交叉的操作。Product操作可以分为内积和外积两种,使用内积操作的为IPNN( Inner Product-based Neural Network),使用外积操作的为OPNN( Outer Product-based Neural Network)。

所有特征向量求和池化,其实不那么合理。不同特征,其含义不同,经过Embedding编码后,向量空间也不一样。比如商品标题和商品价格,二者特征向量相加,不具备任何含义。通常只对同类特征进行池化操作。比如对物品标题的所有词向量,进行平均池化(mean-pooling),可以得到物品标题的句向量。另外,将用户点击过的多个物品的id的向量,进行平均池化,可以得到点击行为序列建模结果。池化操作简化了外积计算,但也损失了大量有用信息。对于OPNN,要谨慎使用

PNN总结

PNN的设计初衷十分纯粹。不同于将特征交叉全部交给深度神经网络,PNN还通过内积和外积操作,显式加强了特征两两间的相关性,从而提升模型表达能力。但同时也增加了计算复杂度。OPNN中的求和池化(sum-pooling),会损失大量有用信息。实际应用中,不必对所有特征进行两两Product操作。可以加入一定的人工先验知识,选取某些特征进行Product。在深度学习时代,推荐算法从业者对业务的理解同样十分重要。

另外,PNN作者认为,MLP层的全连接,本质上是线性加权求和,主要表征的是特征间“或”的关系。但在推荐系统中,特征间的共现关系,也就是“且”的关系,显然更为重要。比如对“小孩性别为男”且“小孩年龄低于1岁”的人群,推荐“一岁男童服装”,准确率会比较高。如果是“或”的关系,则不那么准确了。所以需要加入内积或外积这种基于乘法的操作,来增强“且”的关系的表达。这一点个人不敢苟同。单层全连接确实是基于加法操作的,但叠加多层全连接后,则可以表达乘法“且”的关系,从而实现自动特征交叉。深度神经网络具有拟合一切的能力,其上限远高于线性模型。

5 参考文献

  1. Yanru Qu, Han Cai, Kan Ren, et al. 2016. Product-based neural networks for user response prediction. In Data Mining (ICDM), 2016 IEEE 16th International Conference on. IEEE, 1149–1154.

6 作者新书推荐

历经两年多,花费不少心血,终于撰写完成了这部新书。本文在4.4节中重点阐述了

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

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

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

《精通推荐算法》,限时半价,半日达icon-default.png?t=N7T8https://u.jd.com/VbCJsCz

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

实战大数据:分布式大数据分析处理系统的开发与应用

💂 个人网站:【 摸鱼游戏】【网址导航】【神级代码资源网站】🤟 一站式轻松构建小程序、Web网站、移动应用:👉注册地址🤟 基于Web端打造的:👉轻量化工具创作平台💅 想寻找共同学习交…

对 Redis 的认识还停留在 4.x 版本?7.0 全新特性很惊艳!

我是码哥,可以叫我靓仔。我人生中的第一本书《Redis 高手心法》出版了! 作为当今广受欢迎的内存数据库,Redis 以其卓越的性能和广泛的应用场景著称。 掌握 Redis 技术几乎成为每位开发人员、测试人员和运维人员的看家本领! 大约…

查物流信息用什么软件

在电子商务日益繁荣的今天,快递物流信息的查询成为了我们日常生活中不可或缺的一部分。无论是网购达人还是商家,都需要随时掌握货物的物流动态。然而,如何快速、准确地查询物流信息却是一个令人头疼的问题。今天,我将为大家介绍一…

使用ASH诊断Oracle解析故障

英文原文在:Diagnosing Parsing Issue with ASH 解析,尤其是硬解析,是非生产性操作,会消耗大量系统资源,导致库缓存争用。ASH(Active Session History)可以通过其采样机制来诊断和分析过度的解…

MySQL--插入、更新与删除数据

前言:本博客仅作记录学习使用,部分图片出自网络,如有侵犯您的权益,请联系删除 一、插入数据 1、为表的所有字段插入数据 使用基本的INSERT语句插入数据要求指定表名称和插入到新记录中的值,其语法: inser…

Gradle 统一管理依赖

BOM 介绍 BOM 是 Bill of Material 的简写,表示物料清单。BOM 使我们在使用 Maven 或 Gradle 构建项目时对于依赖版本的统一变得更加规范,升级依赖版本更容易。 比如我们使用 SpringBoot 和 SpringCloud 做项目时,可以使用他们发布的 BOM …

CIFAR-10 数据集图像分类与可视化

数据准备 CIFAR-10 and CIFAR-100 datasets (toronto.edu)在上述网站中下载Python版本的CIFAR-10数据集。 下载后的压缩包解压后会得到几个文件如下: 对应的data_batch_1 ~ data_batch_5 是划分好的训练数据,每个文件里包含10000张图片,test…

基于SpringBoot + Vue的前后端分离项目-外包平台

项目名称:外包平台 作者的B站地址:程序员云翼的个人空间-程序员云翼个人主页-哔哩哔哩视频 csdn地址:程序员云翼-CSDN博客 1.项目技术栈: 前后端分离的项目 后端:Springboot MybatisPlus 前端:Vue …

达梦数据库安装(DM8)新版 windows11下安装及超详细使用教程

windows11下达梦数据库安装 1、安装参考链接2、存在问题2.1新建表空间失败,详情错误号: -70142.2创建表、视图等 1、安装参考链接 https://blog.csdn.net/u014096024/article/details/134722013 2、存在问题 2.1新建表空间失败,详情错误号: -7014 解决…

掌握 LINQ:通过示例解释 C# 中强大的 LINQ的集运算

文章目录 集运算符原理实战示例1. Union2. Intersect3. Except4. ExceptWith5. Concat6. Distinct 注意事项总结 在C#中,LINQ(Language Integrated Query)提供了丰富的集合操作功能,使得对集合数据进行查询、过滤、排序等操作变得…

从程序员视角浅入浅出了解计算机硬件——内存

前言 内存(Memory)是计算机的重要部件,用于存储数据和指令的重要组件,是冯诺依曼计算机中是的存储器部分。作为与CPU进行沟通的桥梁,内存用于临时存储计CPU中的运算数据,以及与硬盘、网卡等外部组件数据,以便CPU能够快…

STM32卡死、跑飞如何调试确定问题

目录 前言 一、程序跑飞原因 二、调试工具 2.1Registers工具 2.2 Memory工具 2.3 Disassembly工具 2.4 Call Stack工具 三、找到程序跑飞位置 方式一、 方式二、 前言 我们初学STM32的时候代码难免会出现疏忽,导致程序跑飞,不再正常运行&#…

电脑桌面便签软件哪个好,桌面便签如何显示在桌面?

在繁忙的工作日里,一款优秀的电脑桌面便签软件就像是一位贴心的小秘书,帮助你记录重要事项,提醒你不要错过任何细节。那么,哪个电脑桌面便签软件可以帮助我们更好地记录和管理日常工作和学习中的事项呢?又如何将桌面便…

16.搜索框滑块和简单验证

一、一些简单的验证 邮箱验证 <!-- 邮件验证 --><p>邮箱&#xff1a;<input type"email" name"email"></p>邮箱验证框的type是email&#xff0c;在框内&#xff0c;它会自动检测输入内容的格式 &#xff0c;若格式非邮箱格式&…

从分散到整合,细说比特币发展史

原文标题&#xff1a;《Layered Bitcoin》 撰文&#xff1a;Saurabh Deshpande 编译&#xff1a;Chris&#xff0c;Techub News 古往今来&#xff0c;货币在社会中都具有三个关键的功能&#xff1a;财富的储存手段、交换媒介和计量单位。虽然货币的形式在不断变化&#xff0c…

一文了解一下 MindSpeed,MindSpeed 是专为华为昇腾设备设计的大模型分布式加速套件。

https://gitee.com/ascend/MindSpeed Gitee Ascend/MindSpeed 项目&#xff0c;MindSpeed 是针对华为昇腾设备的大模型加速库。 MindSpeed 是专为华为昇腾设备设计的大模型加速库&#xff0c;旨在解决用户在大模型训练过程中遇到的显存资源不足等挑战。该库借鉴了 Megatron、D…

如何理解分布式光纤测温DTS的“实时在线监测”的概念?

实时在线监测是相对于非实时在线监测而言的一种高要求的监测方式。在非实时监测中&#xff0c;我们可以使用手持红外测温仪等设备&#xff0c;在需要时进行开机测量&#xff0c;而在不需要时则可以关机。然而&#xff0c;实时在线监测的目标是要求连续、全天候、每秒都不间断地…

检索增强生成RAG系列10--RAG的实际案例

讲了很多理论&#xff0c;最后来一篇实践作为结尾。本次案例根据阿里云的博金大模型挑战赛的题目以及数据集做一次实践。 完整代码地址&#xff1a;https://github.com/forever1986/finrag.git 本次实践代码有参考&#xff1a;https://github.com/Tongyi-EconML/FinQwen/ 目录 …

我的cesium for UE 踩坑之旅(一)

我的小小历程 创建过程场景搭建引入cesium for UE插件创建空白关卡并添加SunSky照明和FloatingPawn进行场景设置设置cesium token重设场景初始点位置顶层菜单窗口 —>打开cesium ion Assets &#xff0c;从而加入自己的资产 UI制作前端UI页面制作顶部菜单打开内容浏览器窗口…

第100+19步 ChatGPT学习:R实现朴素贝叶斯分类

基于R 4.2.2版本演示 一、写在前面 有不少大佬问做机器学习分类能不能用R语言&#xff0c;不想学Python咯。 答曰&#xff1a;可&#xff01;用GPT或者Kimi转一下就得了呗。 加上最近也没啥内容写了&#xff0c;就帮各位搬运一下吧。 二、R代码实现朴素贝叶斯分类 &#xf…