前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >注意力FM模型AFM

注意力FM模型AFM

作者头像
felixzhao
发布于 2023-02-02 03:25:02
发布于 2023-02-02 03:25:02
54800
代码可运行
举报
文章被收录于专栏:null的专栏null的专栏
运行总次数:0
代码可运行

1. 概述

在CTR预估任务中,对模型特征的探索是一个重要的分支方向,尤其是特征的交叉,从早起的线性模型Logistic Regression开始,研究者在其中加入了人工的交叉特征,对最终的预估效果起到了正向的效果,但是人工的方式毕竟需要大量的人力,能否自动挖掘出特征的交叉成了研究的重要方向,随着Factorization Machines[1]的提出,模型能够自动处理二阶的特征交叉,极大减轻了人工交叉的工作量。

但是在FM中,每一个交叉特征的权重是一致的,但是在实际的工作中,不同的交叉特征应该具备不同的权重,尤其是较少使用到的权重,对于统一的权重会影响到模型的最终效果。AFM(Attentional Factorization Machines)[2]模型在FM模型的基础上,引入了Attention机制,通过Attention的网络对FM模型中的交叉特征赋予不同的权重。

2. 算法原理

2.1. FM模型中的交叉特征

FM模型中包含了两个部分,一部分是线性部分,另一部分是二阶的交叉部分,其表达式如下所示:

\begin{matrix} \hat{y}_{FM}\left ( \mathbf{x} \right )= & \underbrace{w_0+\sum_{i=1}^{n}w_ix_i} & + & \underbrace{\sum_{i=1}^{n}\sum_{j=i+1}^{n}\hat{w}_{ij}x_ix_j} \\ & \textrm{linear\;regression} & & \textrm{pair-wise\;feature omteractions} \\ \end{matrix}

其中,

\hat{w}_{ij}

表示的是交叉特征

x_ix_j

的权重,在FM算法中,为了方便计算,为每一个特征赋予了一个

k

维的向量:

\mathbf{v}_i\in \mathbb{R}^k

,则

\hat{w}_{ij}

可以表示为:

\hat{w}_{ij}=\mathbf{v}_i^T\mathbf{v}_j

对于具体为甚么上述的这样的计算方式可以方便计算,可以参见参考[3]。既然上面说

\hat{w}_{ij}

表示的是交叉特征

x_ix_j

的权重,那么为什么还说在FM模型中的每个交叉特征的权重是一致的,这个怎么理解?如果将FM模型放入到神经网络的框架下,FM模型的结构可以由下图表示:

对于每一个特征都赋予一个

k

维的向量,如上图中的第二个特征

x_2

k

维向量为

\mathbf{v}_2

,同理,第四个特征

x_4

k

维向量为

\mathbf{v}_4

,这里类似于对原始特征的Embedding,最终

x_2

x_4

的交叉特征可以表示为:

\left ( \mathbf{v}_2\odot \mathbf{v}_4 \right )x_2x_4

,其中,

\odot

表示的是元素的乘积。最终,将所有的交叉特征相加便得到了交叉部分

y_2

y_2= \mathbf{p}^T\sum_{\left ( i,j \right )\in \mathfrak{R}_x}\left ( \mathbf{v}_i\odot \mathbf{v}_i \right )x_ix_j+b

其中,

\mathfrak{R}_x=\left\{\left ( i,j \right ) \right\}_{i\in \chi ,j\in \chi,j>i}

\mathbf{p}\in \mathbb{R}^k

b\in \mathbb{R}

,在上述的FM中,

\mathbf{p}=\mathbf{1}

b=0

。在相加的过程中,对于每一部分的交叉特征的权重都是一致的,这就会导致上面说的统一的权重会影响到模型的最终效果。我们希望对于每一部分的交叉特征能够有不同的权重,即:

y_2=\mathbf{p}^T\sum_{\left ( i,j \right )\in \mathfrak{R}_x}a_{i,j}\left ( \mathbf{v}_i\odot \mathbf{v}_i \right )x_ix_j+b

其中,

a_{i,j}

表示的是第

i

j

交叉特征部分的权重。

2.2. AFM的网络结构

在注意力FM模型AFM(Attentional Factorization Machines)中,是在FM的基础上引入了Attention机制,通过Attention网络学习到每个交叉特征的权重

a_{i,j}

,AFM的网络结构如下图所示:

上述在Pair-wise Interaction Layer和Prediction Score之间的SUM Pooling上增加了Attention的网络,具体的数学表达式如下所示:

\hat{y}_{AFM}\left ( \mathbf{x} \right )=w_0+\sum_{i=1}^{n}w_ix_i+\mathbf{p}^T\sum_{i=1}^{n}\sum_{j=i+1}^{n}a_{ij}\left ( \mathbf{v}_i\odot \mathbf{v}_j \right )x_ix_j

2.3. Attention网络

对于Attention网络部分,需要计算出对于不同的交叉特征部分的权重

a_{ij}

,其中,网络的输入为

\left ( \mathbf{v}_i\odot \mathbf{v}_j \right )x_ix_j

a_{ij}

的计算过程如下:

\begin{matrix} a^{'}_{ij}=\mathbf{h}^TReLU\left ( \mathbf{W}\left ( \mathbf{v}_i\odot \mathbf{v}_j \right )x_ix_j+\mathbf{b} \right ) \\ a_{ij}=\frac{exp\left ( a^{'}_{ij} \right )}{\sum_{\left ( i,j \right )\in \mathfrak{R}_x}exp\left ( a^{'}_{ij} \right )} \end{matrix}

参考[4]中给出了具体的AFM的实现,下面是Attention网络的具体实现方法:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
def call(self, inputs, training=None, **kwargs):
	if K.ndim(inputs[0]) != 3:
		raise ValueError(
			"Unexpected inputs dimensions %d, expect to be 3 dimensions" % (K.ndim(inputs)))

	embeds_vec_list = inputs # 交叉特征部分
	row = []
	col = []

	for r, c in itertools.combinations(embeds_vec_list, 2):
		row.append(r)
		col.append(c)

	p = tf.concat(row, axis=1)
	q = tf.concat(col, axis=1)
	inner_product = p * q

	bi_interaction = inner_product
	attention_temp = tf.nn.relu(tf.nn.bias_add(tf.tensordot(
		bi_interaction, self.attention_W, axes=(-1, 0)), self.attention_b)) # 计算网络输出,上述公式的第一部分
	#  Dense(self.attention_factor,'relu',kernel_regularizer=l2(self.l2_reg_w))(bi_interaction)
	self.normalized_att_score = softmax(tf.tensordot(
		attention_temp, self.projection_h, axes=(-1, 0)), dim=1) # 归一化,上述公式的第二部分
	attention_output = reduce_sum(
		self.normalized_att_score * bi_interaction, axis=1) # 加权求和

	attention_output = self.dropout(attention_output, training=training)  # training,防止过拟合

	afm_out = self.tensordot([attention_output, self.projection_p]) # 乘以向量,做最终的输出
	return afm_out

3. 总结

AFM模型在FM模型的基础上,引入了Attention机制,通过Attention的网络对FM模型中的交叉特征赋予不同的权重。

参考文献

[1] Rendle S. Factorization machines[C]//2010 IEEE International conference on data mining. IEEE, 2010: 995-1000.

[2] Xiao J, Ye H, He X, et al. Attentional factorization machines: Learning the weight of feature interactions via attention networks[J]. arXiv preprint arXiv:1708.04617, 2017.

[3] 简单易学的机器学习算法——因子分解机(Factorization Machine)

[4] DeepCTR

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2023-01-16,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
lnmp真实部署yii2高级版
1.首先把代码上传到linux配置的目录中(如:/www/你的站点目录(如: /www/wwwroot/my.com/))
botkenni
2019/09/02
1.6K0
yii2使用gii
到前台或者后台对应的conf.php文件进行配置allowedIPs,数组形式放允许gii访问
botkenni
2019/09/02
7150
yii2使用gii
从配置文件的角度去了解Yii2
Yii2是一个奇特的框架,其牺牲了现在盛行的解耦设计,用一个高度耦合的结构提供给开发者一个方便的几类抽象,Application,Module,Component,甚至是ServiceLocator.想让对象具备哪类特征就直接继承相应的对象,想要改变他就去复写父类的方法,虽然不符合开放封闭原则,单一职责原则,李氏替换原则等面向对象设计原则,但的确很方便.
botkenni
2019/09/02
1.6K0
YII2 advanced 高级版本项目搭建-添加API应用以及多应用
安裝yii可以用composer安裝,也可以在yii中文社区下载归档文件安装 composer安装就不介绍了,因为要安装composer,比较麻烦,当然安装了composer是最好的,以后安装yii的插件要用到composer的,可以去composer官网安装学习composer,这里就不介绍用composer安装yii,可以参考yii官网
botkenni
2019/09/03
1.5K0
YII2 advanced 高级版本项目搭建-添加API应用以及多应用
composer系列之五
是的,既然我们在使用一个composer扩展的时候根据一份composer.json来安装依赖包,那么我们发布扩展包的时候,也应该先有一份描述自己的清单 - composer.json。
botkenni
2019/09/03
8930
Yii2 redis同步数据到mysql
本次案例讲解将如何将商城中商品浏览次数通过缓存记录并写入mysql中 具体的redis安装过程暂且就省略了.....
botkenni
2019/09/02
2.6K0
yii2控制台执行
Text-to-speech function is limited to 200 characters
botkenni
2019/09/02
5000
安装yii2高级版
选择VPN或者设置composer的镜像服务器 镜像用法: 有两种方式启用本镜像服务: • 系统全局配置: 即将配置信息添加到 Composer 的全局配置文件 config.json 中。见“方法一” • 单个项目配置: 将配置信息添加到某个项目的 composer.json 文件中。见“方法二” 方法一: 修改 composer 的全局配置文件(推荐方式) 打开命令行窗口(windows用户)或控制台(Linux、Mac 用户)并执行如下命令: 复制
botkenni
2019/09/03
1.8K0
安装yii2高级版
yii2中ajax页面中a标签js跳转
Text-to-speech function is limited to 200 characters
botkenni
2019/09/02
4.4K0
composer系列之三
这个主要起到一个命名空间的作用,比如一个项目可以需要 abei2017/yii2-emoji 和 abei2017/yii2-cool-sms ,那么在vendor里可以将yii2-emoji和yii2-cool-sms都放到abei2017文件夹下。
botkenni
2019/09/02
1K0
yii2使用select2
Text-to-speech function is limited to 200 characters
botkenni
2019/09/02
9560
yii2使用select2
yii2改写activeform样式(lable改写)
Text-to-speech function is limited to 200 characters
botkenni
2019/09/02
7640
yii2改写activeform样式(lable改写)
phpmyadmin,访问主页报错: Error during session start; please check your PHP and/or webserver log file and c
部署完phpmyadmin,访问主页报错: Error during session start; please check your PHP and/or webserver log file and configure your PHP installation properly. Also ensure that cookies are enabled in your browser. 百度以后,修改php.ini,开启
botkenni
2019/09/02
3K0
phpmyadmin,访问主页报错: Error during session start; please check your PHP and/or webserver log file and c
lamp(centos7)安装lamp环境
wget https://dev.mysql.com/get/Downloads/MySQL-5.6/mysql-5.6.31.tar.gz
botkenni
2019/09/03
2.4K0
lamp(centos7)安装lamp环境
Yii2使用$this->context获取当前的Module/Controller/Action
使用Yii2的时候,在某些场景和环境下需要获得Yii2目前所处于的module(模型)、Controller(控制器)、Action(方法),以及会调用控制器里面已经定义过的一些公共的方法等.对于这些问题Yii2可以在视图层View中使用$this->context这个对象去获得。
botkenni
2019/09/03
9900
Yii2中关于组件的注册以及创建的方法详解
了解yii组件注册与创建的过程,并发现原来yii组件注册之后并不是马上就去创建的,而是待到实际需要使用某个组件的时候再去创建对应的组件实例的。本文大概记录一下这个探索的过程。
botkenni
2019/09/02
9060
Yii2中关于组件的注册以及创建的方法详解
Getting unknown property: yii\db\ActiveQuery::name 原
报错:Getting unknown property: yii\db\ActiveQuery::name Are you sure that you are getting field from A
botkenni
2019/09/02
7890
Composer系列之四
顾名思义,使用此命令可以编辑 Composer 的一些基本设置,无论是本地的 composer.json 或者全局的 config.json 文件。
botkenni
2019/09/02
6950
yii2的model数据库配置以及应用(主从数据库配置)
当然您也可以用gii进行创建,选择连接池处会出现你多数据库配置的相应db名称。如gdb、db
botkenni
2019/09/02
1.7K0
Composer系列之一
比如我在开发一个php网站,突然需要二维码生成功能,自己写太麻烦,这个时候我可以去composer的扩展列表里看一看,如果有直接下载下来用就可以了,当然可能这个扩展还需要另外一个扩展或库。
botkenni
2019/09/03
5040
推荐阅读
相关推荐
lnmp真实部署yii2高级版
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档