DIN特征加权、POSO特征增强、SENET特征选择

本文转自:DIN、POSO、SENet 聊聊推荐模型中常用的Attention-腾讯云开发者社区-腾讯云

一、前言

聊起模型结构的时候,经常听做推荐的同学说:

"这里加了个self-attention" "类似于一个SENet" "一个魔改的POSO" "DIN就是一个attention" ......

这些常见的模块、模型,听完之后很多时候还是一知半解,看了几篇模型的知乎,感觉长得都挺像的,为了把这些模型都摸清楚,还是把论文都翻出来读了一遍。本文将以推荐系统中的特征选择为例聊聊这几个模型怎么做到模块化使用,并加上一些自己个人的理解,如有不对欢迎评论区指正!

二、推荐系统例子

先举一个常见推荐的例子,做推荐模型的大家应该都熟悉,最简单的数据通常包括两方面:用户特征、物品特征,以MLP模型为例,下图展示了基本流程,从数据的角度简单说一下下图,主要分为4部分:

  1. 原始数据:这里就是我们最原始的数据,字符串形式。
  2. Embedding数据:通过把原始数据hash成key,再构建一个词典,一个key对应一个初始化的dim维度的向量。此时注意,像【兴趣】这种特征,由于这个用户有3种,这里需要embedding成3个独立的向量,也就是"王者"、"音乐"、"交友"各一个向量。
  3. 聚合后的Embedding数据:聚合通常使用sum pooling(对应元素相加),也可以使用avg pooling(对应元素取均值)。这么做默认就是每个特征同样重要,比如【兴趣】里面,"音乐"和"交友"是相同权重的。如果一个特征里只有一个key,比如【年龄】、【性别】,那聚合之后相当于没有任何变化;如果是多个key,比如【兴趣】,那就会将多个key的Embedding聚合。
  4. MLP模型的Input数据:将上一步获得的5个向量按"头接屁股"的方式拼成一个长长的向量。

通过上面一通操作可以把:年龄:20,性别:……的数据转换成模型所需要的tensor。此时通常是(batchsize, feature_num, dim)的形式:

  1. batchsize是批大小,比如512;
  2. feature_num是特征数量,在上图中就是5;
  3. dim是每一个特征的维度,比如16。

为啥要把最基础的数据输入说这么清楚呢,因为后面要说的POSO、SENet、DIN进行特征选择,本质上就是在这个基础上改变的,下面分别解释这些模型(模块)。

3. SENet

先说说SENet,最初提出是在CV领域,模型目的按照作者的原话是:

Our goal is to ensure that the network is able to increase its sensitivity to informative features so that they can be exploited by subsequent transformations, and to suppress less useful ones. (目的是希望提高网络对特征的敏感性,更好的利用特征并抑制不太有用的特征)

于是便提出了以上的模型,如果放在推荐系统里面呢,上图的一些概念应该被替换:

  1. H(高)、W(宽)应该被替换成dim
  2. C(Channel)应该被替换成feature_num

放在上面的例子里面,整个过程如下:

1. SENet就是把初始数据为(batchsize, feature_num, dim)的特征先压缩成(batchsize, feature_num, 1)接着拿着这个压缩的特征过一个两层MLP,最后用sigmoid输出,得到一个(batchsize, feature_num, 1)形式的权重。

2. 接着拿着这个权重分别乘回每一个聚合后的Embedding,得到新的聚合后的Embedding数据。

如果按照SENet的原文的理解,应当就是这么处理,不难看出来,其实就是给feature_num的每个特征不同的权重。因为在推荐系统中,feature_num可以类比成CV里面的Channel。其实到这里就有一些疑问了:

  1. 为什么SENet在论文中是压缩两个维度(H、W),而上面的流程只压缩了dim? 答:因为图片有长宽、相比于推荐系统多一个维度,所以原生的SENet需要压缩两个维度。并且由于是两个维度原文压缩使用是avg pooling,在推荐里面只有一个维度可以使用dense层代替。
  2. 为什么是给feature_num的每个特征不同的权重,而不是dim?不能做成给不同元素不同的权重吗? 答:原生SENet目的是“解决卷积神经网络在处理图像时对于通道相关特征的建模能力不强的问题”,因此照搬过来的话就是给feature_num不同的权重。如果非要做成给不同元素不同的权重,即压缩成(batchsize, 1, dim)的形式,再做加权,个人认为也可以完全没有问题的。相当于是给不同的元素不同的权重。当然如果想做成gate net的形式也可以,那就是生成(batchsize, feature_num, dim)的tensor再做加权。
  3. 既然只加权不求和,理论上是不是可以在MLP里面就学习到这个信息,这么做会不会多余? 答:理论上来说确实可以在MLP里面学习到这个权重信息。就像万能近似定理一样,你不能说MLP理论上什么都能做我就只用MLP,别的啥都不加。毕竟在有限的数据情况下,人为先验增加一些复杂的模型结构可以帮助模型更好的拟合。所以这么做多不多余,还得试了看有没有效果再说。不排除在某些场景下加了跟没加一样,没有什么区别(狗头)。

最后总结一下,SENet的样式可以加在任何一个网络里面,只要你想给某一个维度下不同元素不同的权重。值得注意的是这里只加权,不求和。至于选哪个维度(feature_num还是dim)下的元素给不同权重,根据具体的业务理解来选择。

4. DIN

DIN是阿里针对用户行为特征所构建的模型。即当用户的的行为序列(比如点击序列)有多个itemid的时候,如果直接用sum pooling聚合,则默认这几个点击的item的权重是一样的。类比在第二章的图可以看出来,当一个特征域(比如【兴趣】)有多个特征的时候,常规的做法是sum pooling或者avg pooling。这样就会默认这几个特征的权重是一样的,DIN便是针对此问题,认为不同的特征应该有不同的权重,而这个权重就是用户的兴趣。

因此将DIN套在我们的例子上,过程如下:

  1. 选择一个有多个特征的特征域,比如【兴趣】,在选择一个与之对应或关联的特征,比如【物品类型】。接着用游戏的embedding(batchsize, 1, dim),和每一个兴趣的embedding(batchsize, 3, dim)进“激活单元”得到一个权重值(batchsize, 3, 1),代表Attention权重。至于“激活单元”是啥,可以参考DIN的论文,就是一个小门控网络,当然思路打开这里具体怎么实现激活单元可以各种尝试,论文的结构也不是一定的。

2. 接着把得到的权重替换之前的sum pooling,改成加权求和生成聚合Embedding,放回整个框架里面大致如下图所示。如果用算式表示大概就是: a+b+c升级成了(0.7×a)+(0.05×b)+(0.25×c) 相比之下后者显然优雅一些,而且这些权重是模型自动计算获得。

最后总结一下,简单的说完DIN的结构可以发现,和SENet比,DIN的Attention作用于“Embedding数据”这一层,也就是图中从下往上的第二层。所以从业务理解上面来说,DIN的Attention不是在做“特征选择”,而是对sum pooling的一个小小的升级,让特征表达的更准确。这里是加权、求和

5. POSO

最后说一下POSO的结构,相比于前面两个,POSO的出名程度可能要低一些。《POSO: Personalized Cold Start Modules for Large-scale Recommender Systems》,是快手在21年提出的论文,其主要是针对冷启动中的特征淹没的问题而在模型层面上提出的改进。以MLP为例,若MLP的尺寸是512 * 256 * 256的。即选一个人为认为比较重要的特征xpc去生成512、256、256三种不同的权值去乘进MLP网络内。

若放在我们的例子里,大致如下图所示,若MLP的尺寸是512 * 256 * 128的。取一个我认为比较重要的特征,比如【兴趣】作为xpc,然后过3个门控网络生成3个tensor,分别是(batchsize, 512, 1)(batchsize, 256, 1)(batchsize, 128, 1)。这里的门控网络可以是MLP+sigmoid的形式。当然也可以自己发挥魔改。最后将得到的三个tensor以乘法的形式乘进MLP网络里面,以实现对不同神经元的attention。

最后总结一下,POSO虽然看起来也是在做一种attention,但是它是对神经元来做,和以上两种又有所不同。POSO严格意义上来说不算一种特征选择,而是一种特征增强的策略。因此只要你觉得某个特征很重要,就把他拎出来整一下,说不定就有提升了呢~

6. 总结

以上三种模型结构都用到了类似attention的思想,所以attention是个啥呢?引用SENet原文的一句话:

Attention can be viewed, broadly, as a tool to bias the allocation of available processing resources towards the most informative components of an input signal. (从广义上讲,注意力可以看作是一种工具,用于将可用处理资源的分配偏向于输入信号信息量最大的组件。)

我个人理解就是“物尽其用”。网上也就很多说法,比如一种常见的说法就是attention就是加权求和的行业黑话,这么理解也未尝不可。至于怎么说,怎么做,无论学术界还是工业界都倾向于结果导向,有了好效果才是王道!

参考文献

SENet:http://dx.doi.org/10.1109/tpami.2019.2913372

DIN:http://dx.doi.org/10.1145/3219819.3219823

POSO:https://readpaper.com/paper/3190143440

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

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

相关文章

[Visual Studio 报错] error 找不到指定的 SDK“Microsoft

[Visual Studio 2022 报错] error : 找不到指定的 SDK“Microsoft.NET.Sdk.Web” 问题描述: 在新电脑上安装了VS2022,打开现有项目的解决方案后的时候报了这个错,所有projet文件都加载失败,如图所示: 报错分析及解决 打开项目配…

经验丰富也被裁了,失业快2年找不到工作?

前几天徐工说,他有个邻居,最近逮到他总是要跟他扯上几句。 原因是徐工一直是做嵌入式开发,而他一直做纯软件开发,具体不知道做后端还是前端。 他说,他至少有半年没上班了,之前在一家龙头物流公司上班。 碰上…

STM32 HAL库F103系列之DAC实验(二)

DAC输出正弦波实验 实验简要 1,功能描述 通过DAC1通道1(PA4)输出正弦波,然后通过DS100示波器查看波形 2,使用定时器7 TRGO事件触发转换 TEN1位置1、TSEL1[2:0]010 3,关闭输出缓冲 BOFF1位置1 4,使用DMA模式 DMAE…

SLMs之Phi-3:Phi-3的简介、安装和使用方法、案例应用之详细攻略

SLMs之Phi-3:Phi-3的简介、安装和使用方法、案例应用之详细攻略 导读:2024年4月23日,微软发布Phi-3,这是微软推出的一款新的开源AI模型家族Phi-3。背景痛点:小语言模型(SLM)尽管规模不大,但在语言理解、代码…

盲盒商城小程序(有米就出)

一款前端采用uniapp,后端采用Django框架开发的小程序,包含后台管理,如有人需要可联系演示功能(个人开发,可商用/学习)。 部分截图如下:

文件摆渡:安全、高效的摆渡系统助力提升效率

很多组织和企业都会通过网络隔离的方式来保护内部的数据,网络隔离可以是物理隔离,也可以是逻辑隔离,如使用防火墙、VPN、DMZ等技术手段来实现,隔离之后还会去寻找文件摆渡方式,来保障日常的业务和经营需求。 进行网络隔…

数据库变更时,OceanBase如何自动生成回滚 SQL

背景 在开发中,数据的变更与维护工作一般较频繁。当我们执行数据库的DML操作时,必须谨慎考虑变更对数据可能产生的后果,以及变更是否能够顺利执行。若出现意外数据丢失、操作失误或语法错误等情况,我们必须迅速将数据库恢复到变更…

jsp+springboot+java二手车交易管理系统258u6

设计而成的系统要有以下目标:管理员和用户能够跳转到不同的页面当中。因此要把系统的目标设置为如下几项: (1) 系统在操作上不能过于复杂。 (2) 用户对应着不同的角色 (3) 设计完成的数据库要有能够处理并发和安全的作用 (4) 设计完成的管理…

亚马逊云科技提高企业生产力神器Amazon Q评测分析

一年一度的全球云计算春晚,亚马逊云科技Re:invent在2023年11月27于Vegas震撼来袭,其中最令人关注的就是CEO Adam在Keynote中分享的内容。其中一个新内容就是提升生产力神器: Amazon Q,可以说它重新定义了企业的工作模式。那具体它神在哪里呢&…

Python构建学生信息管理系统:网站路由补充和首次运行

在之前的内容中,我们已经完成了学生信息管理系统(Student Information Management System, SIMS)的需求分析、环境搭建、数据库创建、项目结构的初始化,以及运行。正常做下来的朋友,会发现项目运行后输入http://127.0.…

vulfocus靶场thinkphp命令执行cve-2018-1002015

thinkPHP 5.0.x版本和5.1.x版本中存在远程代码执行漏洞,该漏洞源于ThinkPHP在获取控制器名时未对用户提交的参数进行严格的过滤。远程攻击者可通过输入‘\’字符的方式调用任意方法利用该漏洞执行代码 开启靶场: 使用工具: think…

使用微软Phi-3-mini模型快速创建生成式AI应用

微软Phi-3大语言模型是微软研究院推出的新一代系列先进的小语言模型。Phi-3系列包括phi-3-mini、phi-3-small和phi-3-medium三个不同规模的版本。这些模型在保持较小的参数规模的同时,通过精心设计的训练数据集和优化的算法,实现了与大型模型相媲美的语言…

Edge下载文件提示无法安全下载的解决方法

问题描述:最近Edge在下载文件时总是提示:无法安全下载,本文记录一下解决方法。 提示截图: 解决方式一: 1. 点击下图红框的三个点,选择保留 2. 选择仍然保留 解决方式二: 第一种方式每下载一次…

✅为什么MySQL默认使用RR隔离级别?

对于数据库的默认隔离级别,Oracle默认的隔离级别是 RC,而MySQL默认的隔离级别是 RR。 那么,你知道为什么Oracle选择RC作为默认级别,而MySQL要选择RR作为默认的隔离级别吗? Oracle的隔离级别 Oracle支持ANSI/ISO SQL…

HTB靶场 Perfection

端口 打开了ssh和http服务 访问 Perfection靶机的网站 是一个根据权重计算总成绩的网站 Wappalyzer查看网页用的什么编写搭建的 抓包看一下是怎么工作的 发送,,返回的结果 如果我在 类别 后面多加一句命令 就会出现提示 恶意输入阻止 大概率有命令注入 通过插件…

2024最新版JavaScript逆向爬虫教程-------基础篇之JavaScript密码学以及CryptoJS各种常用算法的实现

目录 一、密码学介绍1.1 为什么要学密码学?1.2 密码学里面学哪一些 二、字符编码三、位运算四、Hex 编码与 Base64 编码4.1 Hex 编码4.2 Base64 编码 五、消息摘要算法5.1 简介5.2 JS中的MD5、SHA、HMAC、SM3 六、对称加密算法6.1 介绍6.2 加密模式和填充方式6.3 CryptoJS 中D…

元宇宙虚拟空间的角色状态更新(七)

前言 该文章主要讲元宇宙虚拟空间的角色状态更新,基本核心技术点 角色状态更新 对角色设置一个位置判断(从中心点向下投射一射线确定角色的位置) character.feetRaycast(); feetRaycast的start获取碰撞体的位置,end射线结束的…

Linux驱动开发:掌握SPI通信机制

目录标题 1、SPI简介2、SPI通信机制3、Linux内核中的SPI支持4、SPI核心API5、SPI控制器驱动6、SPI设备驱动 7、编写SPI设备驱动8、调试SPI驱动 在Linux驱动开发中,串行外设接口(SPI)是一种常见的高速全双工通信协议,用于连接处理器和各种外设。本文将深入…

QFD赋能人工智能:打造智能化需求分析与优化新纪元

在科技飞速发展的今天,人工智能(AI)已经渗透到我们生活的方方面面。然而,如何让AI更加贴合用户需求,提供更加精准和个性化的服务?这成为了一个亟待解决的问题。质量功能展开(Quality Function Deployment,简…

Linux的FTP服务

目录 1.什么是FTP服务? 2.FTP的工作原理和流程 1 主动模式 2 被动模式 3.搭建和配置FTP服务 1 下载服务包、备份配置文件 2 修改配置文件​编辑 3 匿名访问测试 4 设置黑白命令 1.什么是FTP服务? FTP(file Transfer Protocol&#…