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

2024-04-25 14:28

本文主要是介绍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

这篇关于DIN特征加权、POSO特征增强、SENET特征选择的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/934935

相关文章

AI学习指南机器学习篇-朴素贝叶斯处理连续特征和离散特征

AI学习指南机器学习篇-朴素贝叶斯处理连续特征和离散特征 在机器学习领域,朴素贝叶斯是一种常用的分类算法,它的简单性和高效性使得它在实际应用中得到了广泛的应用。然而,在使用朴素贝叶斯算法进行分类时,我们通常会面临一个重要的问题,就是如何处理连续特征和离散特征。因为朴素贝叶斯算法基于特征的条件独立性假设,所以对于不同类型的特征,我们需要采取不同的处理方式。 在本篇博客中,我们将探讨如何有效地处理

常用上网增强类Chrome扩展

Chrome是个非常好用的浏览器,拥有丰富的扩展资源库,能够满足网民各种各样的需求,对于网民来说,通过Chrome扩展来增强上网体验是一个基本需求,但是安装过多的扩展有容易耗费大量系统资源,今天就给大量挑选一些常用的上网增强类Chrome扩展,供大家参考。   LastPass:用于管理大量网站的密码,给不同网站设置不同的密码,支持自动登录,支持手机两步验证。建议在普通和隐身模式下都启用这个扩展

Adaboost集成学习 | Adaboost集成学习特征重要性分析(Python)

目录 效果一览基本介绍模型设计程序设计参考资料 效果一览 基本介绍 Adaboost集成学习特征重要性分析(Python)Adaboost(自适应增强)是一种常用的集成学习方法,用于提高机器学习算法的准确性。它通过组合多个弱分类器来构建一个强分类器。在Adaboost中,每个弱分类器都被赋予一个权重,这些权重根据其在训练过程中的表现进行调整。因此,Adaboost可以通

机器学习算法(二):1 逻辑回归的从零实现(普通实现+多项式特征实现非线性分类+正则化实现三个版本)

文章目录 前言一、普通实现1 数据集准备2 逻辑回归模型3 损失函数4 计算损失函数的梯度5 梯度下降算法6 训练模型 二、多项式特征实现非线性分类1 数据准备与多项式特征构造2 逻辑回归模型 三、逻辑回归 --- 正则化实现1 数据准备2 逻辑回归模型3 正则化损失函数4 计算损失函数的梯度5 梯度下降6 训练模型 总结 前言 今天我们开始介绍逻辑回归的从零开始实现代码了,

python实现技术指标(简单移动平均,加权移动平均线,指数移动平均线)

移动平均线是最常见的技术指标,它能够去除时间序列的短期波动,使得数据变得平滑,从而可以方便看出序列的趋势特征。常见的移动平均线有简单移动平均线,加权移动平均线,指数移动平均线。 一. 简单移动平均(SMA) 简单移动平均线(Simple Moving Average),很好理解,就是将过去n个窗口内的价格进行算术平均 S M A t ( n ) = 1 n ( X t − n + 1 + X

首次使用回声状态网络 (ESN) 和语音特征进行帕金森病 (PD) 预测

帕金森病(Parkinson's disease, PD)是一种使人衰弱的神经退行性疾病,它需要进行精确和早期的诊断,以便为患者提供有效的治疗和护理。这种疾病是由James Parkinson在1817年首次确定的,其特征是多巴胺生成神经元的退化。多巴胺的不足导致了一系列症状,包括静止性震颤、肌肉僵硬、运动迟缓(姿势不稳定)、以及其他重要特征,如睡眠障碍、心律失常、便秘和语音变化,这

MATLAB-SSA-CNN-SVM,基于SSA麻雀优化算法优化卷积神经网络CNN结合支持向量机SVM数据分类(多特征输入多分类)

MATLAB-SSA-CNN-SVM,基于SSA麻雀优化算法优化卷积神经网络CNN结合支持向量机SVM数据分类(多特征输入多分类) 1.数据均为Excel数据,直接替换数据就可以运行程序。 2.所有程序都经过验证,保证程序可以运行。 3.具有良好的编程习惯,程序均包含简要注释。 结果展示 获取方式 https://mbd.pub/o/bread/mbd-ZpeYkpZw

Eclipse,Myeclipse增强代码提示功能

一般默认情况下, Eclipse , MyEclipse 的代码提示功能是比 Microsoft Visual Studio 的差很多的,主要是 Eclipse , MyEclipse 本身有很多选项是默认关闭的,要开发者自己去手动配置。如果开发者不清楚的话,就不知道 Eclipse , MyEclipse 的代码提示功能一样能像 Microsoft Visual Studio 的代码提示功能一样

Eclipse,MyEclipse增强html代码提示功能

以下方法针对的是MyEclipse10 的版本,Eclipse类似,具体操作可参考我写的关于MyEclipse增强java代码提示的博客。 图1:导出配置文件 (1)File --> Export --> General --> Preferences点击下一步,将这个配置文件导出到桌面上,我的命名为test.epf。 (2)使用文本编辑器打开test.epf文件,在里面添加如下的一

迈巴赫S480升级增强现实AR抬头显示hud比普通抬头显示HUD更好用吗

增强AR实景抬头显示HUD(Augmented Reality Head-Up Display)是一种更高级的驾驶辅助技术,相比于普通抬头显示HUD,它提供了更丰富、更具沉浸感的驾驶体验。以下是它比普通抬头显示HUD多的一些功能: • 信息呈现方式:普通抬头显示HUD通常只能显示简单的文字和图标,而增强AR实景抬头显示HUD可以在驾驶员的视线范围内呈现更多的信息,并将其与实际道路场景进行融合