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

本文介绍了推荐系统中常用的Attention模块,如SENet、POSO和DIN,它们如何通过调整特征选择和权重分配来优化模型性能。作者详细解读了这些模型的工作原理,并强调了注意力机制在资源分配中的关键作用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本文转自: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

### 多视角特征建模的概念 多视角特征建模是指利用来自多个不同视角的数据或信息源来进行更全面和深入的特征表示的方法。这些不同的视角可以来自于同一对象的不同属性或者是在不同条件下观察到的结果,比如图像可以从颜色、纹理等多个方面来刻画;对于用户行为,则可以通过点击流数据、社交网络互动等多种途径获取。 在具体实现过程中,为了有效融合各个视角的信息并提升最终模型的表现力,研究者们提出了多种策略和技术手段[^2]。 ### 方法 一种常见的做法是从增强模型对特定场景的理解入手,即强化其捕捉各视角间关联性的能力。例如,Poso 和 Bias Tower 是两种旨在改善模型处理跨领域或多条件输入的有效方案。前者通过对齐相似实例以促进共享模式的学习,后者则引入偏置机制帮助区分不同情境下的特性差异。 此外,在实际应用中还涉及到如何高效地收集整理多维度资料以及设计相应的算法框架支持上述操作等问题。这通常意味着要综合考虑计算资源消耗、时间成本等因素,并不断优化整个流程直至达到预期效果。 ### 应用场景 多视角特征建模广泛应用于各类复杂的现实世界挑战之中: - **推荐系统**:结合用户的浏览历史、购买记录乃至社交媒体上的兴趣标签等多元信号,为用户提供个性化的产品建议; - **医疗诊断辅助工具开发**:整合病患生理参数变化趋势图谱、基因序列片段分析报告及其过往病例文档等内容,协助医生做出更为精准可靠的判断决策; - **自动驾驶汽车感知层建设**:借助摄像头拍摄画面解析、雷达回波数据分析及高精度地图匹配定位等多项传感技术成果,保障车辆行驶安全顺畅。 ```python def multi_view_feature_modeling(data_sources): """ A simplified function to demonstrate the concept of integrating multiple data sources. :param data_sources: List containing different types of input features from various perspectives :return: Integrated feature representation that captures information across all views """ integrated_features = sum([process_data(source) for source in data_sources], []) return integrate_and_optimize(integrated_features) def process_data(source): # Placeholder method representing processing each type of data pass def integrate_and_optimize(features): # Placeholder method indicating integration and optimization steps pass ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值