AutoInt:使用Multi-head Self-Attention进行自动特征学习的CTR模型

AutoInt模型利用多头自注意力机制进行特征交互学习,提升点击率预测任务的准确性。在交互层,特征通过线性变换进入注意力空间,计算相似度并形成注意力分布,进而加权求和生成新特征表示。该模型适用于深度学习和机器学习的CTR任务。

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

本文首发于知乎专栏 https://zhuanlan.zhihu.com/p/53462648

简介

这篇论文提出使用multi-head self attention(类似Transformer里的那个) 机制来进行自动特征交叉学习以提升CTR预测任务的精度。
废话不多说,先看下主要结构。典型的四段式深度学习CTR模型结构:输入,嵌入,特征提取,输出。这里我们重点看下嵌入和特征提取部分
在这里插入图片描述

核心结构

输入和嵌入

在这里插入图片描述
针对类别特征,通过embedding方式转换为低维稠密向量
e i = V i x i e_i=V_ix_i ei=Vixi
其中, V i V_i Vi是特征组 i i i对应的嵌入字典(嵌入矩阵), x i x_i xi是特征组特征的独热编码表示向量(通常处于节省空间的考虑,只存储非零特征对应的索引)

对于连续特征有,
e m = v m x m e_m=v_mx_m em=vmxm
其中 v m v_m vm是嵌入向量, x m x_m xm是一个标量值

通常在CTR任务中我们对连续值特征对处理方式有三种:

  1. 进行归一化处理拼接到embedding向量侧
  2. 进行离散化处理作为类别特征
  3. 赋予其一个embedding向量,每次用特征值与embedding向量的乘积作为其最终表示

本文采取的是第三种方式,具体这三种方式孰优孰劣,要在具体场景具体任务下大家自己去验证了~

从实现的角度看第三种是比较便捷的。

InteractingLayer(交互层)

交互层使用多头注意力机制将特征投射到多个子空间中,在不同的子空间中可以捕获不同的特征交互模式。通过交互层的堆叠,可以捕获更高阶的交互模式。

下面展示在特定子空间 h h h下,对于特征组 m m m下的特征 e m e_m em,交互层是如何计算与其相关的交互特征 e ~ m ( h ) \tilde{e}^{(h)}_m e~m(h)
在这里插入图片描述

  1. 首先输入特征通过矩阵乘法线性变换为在注意力空间下的向量表示,对于每个特征 e m e_m em在特定的注意力空间 h h h中,都有三个表示向量 E m h : Q u e r y = W Q u e r y ( h ) e m E^{h:Query}_m=W^{(h)}_{Query}e_m Em

### 注意力机制在北京的应用与研究 #### 背景概述 注意力机制是一种模拟人类视觉和认知过程的技术,在深度学习领域得到了广泛应用。它能够帮助模型聚焦于输入数据的重要部分,从而提升性能[^2]。 #### 北京的研究机构及其贡献 北京作为中国的科技中心之一,拥有众多顶尖高校和科研机构,这些地方在注意力机制的研究上取得了显著成果: 1. **清华大学** 清华大学的人工智能实验室深入探索了注意力机制在网络架构中的优化方法,特别是在自然语言处理(NLP)领域。他们提出了改进版的Transformer结构,进一步提升了机器翻译的效果[^3]。 2. **北京大学** 北大团队专注于视觉注意力机制的实际应用场景开发,例如基于SENet的城市交通监控系统设计。这类系统可以有效检测并分析复杂场景下的车辆行为模式[^1]。 3. **中科院自动化研究所** 中科院在此方向上的工作集中在时间序列数据分析方面,比如金融预测、气象预报等领域。其提出的LSTM+Attention组合方案已被证明能更好地捕捉长期依赖关系以及短期波动特征。 4. **字节跳动AI Lab** 字节跳动位于北京的研发部门则更多关注个性化推荐系统的构建。通过引入多头自注意机制(Multi-head Self-Attention),大幅提高了用户兴趣建模精度,进而改善广告点击率CTR预估准确性。 #### 实际案例分享 以下是几个具体实例说明如何将上述理论应用于实际问题解决当中: - 在智慧医疗项目里, 使用CBAM (Convolutional Block Attention Module)增强医学影像诊断工具的能力, 达到更精准病变区域定位目的. - 针对大规模电商网站商品搜索功能升级需求, 开发人员采用SKNet策略动态调整通道间关联程度, 显著缩短查询响应时间. ```python import torch.nn as nn class SKUnit(nn.Module): def __init__(self, in_features, out_features, M=3, r=16, L=32): super(SKUnit, self).__init__() d = max(int(out_features / r), L) self.fc = nn.Linear(out_features, d) ... def forward(self, x): ... ``` 以上代码片段展示了SKNet核心组件定义方式的一部分逻辑实现细节. ---
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值