大家好,今天选择的论文是一篇FM的升级论文,叫做Attentional Factorization Machines: Learning the Weight of Feature Interactions via Attention Networks。翻译过来叫做注意力FM:通过Attention网络学习特征交互的权重。
它是由浙大和新加坡国立大学的学生在2017年联合发表的,它是基于FM模型的一种优化,如果对FM模型不了解的同学,可以通过下方传送门回顾一下FM模型的相关内容:
FM是我们比较熟悉的模型,它引入所有特征的二阶交叉,通过向量内积的方式来计算所有二阶项的系数,来达到提升效果的目的。但是FM也有缺点,虽然我们通过一些数学的方式对它的效率进行了提升,但仍然有些问题没有解决。比如,对于一个固定的特征而言,它和其他特征交叉的向量都是一样的。再比如并不是所有特征的二阶交叉组合都是有用的,有些反而是干扰项。
在这篇paper当中我们通过消除不同特征组合之间的重要性来优化FM模型,我们把这种新的FM模型叫做AFM(Attentional Factorization Machine)。它最大的特性就是特征交叉的重要性是通过attention神经网络获得的。我们在两个实际的数据集上进行了完整的测试,测试结果显示AFM相比FM带来了8.6%的提升。和Wide & Deep以及Deep Cross相比,AFM的参数空间也更小,结构更加简单。并且paper作者提供了TensorFlow实现的github地址,大家对源码感兴趣可以点击阅读原文查看。
众所周知,在机器学习以及数据挖掘当中,监督学习占据了很大的比重。监督学习某种程度上可以看成是学习一个函数,让它的output越来越接近我们实际想要的值。如果我们想要的值是浮点数,那么这个就是回归模型,如果是一个类别,那么则是分类模型。在推荐系统、在线广告以及图片识别等方面,监督模型起到了举足轻重的作用。
当我们的特征以类别特征为主的时候,让模型学习特征之间的交叉信息会变得非常关键。我们举一个简单的例子,比如我们有职业和层级这两个不同的特征。职业有银行职员以及工程师,层级有初级和高级。其中初级的银行职员的收入要低于初级工程师,而高级的职员收入则要高于高级工程师。如果模型无法学习到交叉信息,是很难预测准确的。
以LR模型举例,LR模型本质上是各个变量的加权求和的结果。无论是初级还是高级,工程师和银行职员这两个职业对应的权重都是一样的。显然,这个时候,模型很难预测准确。
为了考虑特征之间的交叉信息,一种常用的方法是引入新的参数向量,通过向量的内积来计算出交叉的权重。比如polynomial regression(PR)模型,它所有交叉特征的权重都是通过学习得到的。然而这样的设计有一个比较大的问题,就是对于那些稀疏的数据集会有一些交叉特征的权重没有办法学习到。比如说如果是商品的类目和用户的职业交叉,对于某一个冷门的类目以及冷门的职业,我们很难保证训练集当中包含了足够的样本来训练这个权重。
FM模型的提出正是为了解决这个问题,这个大家应该也都很熟悉了,我就不多说了。简而言之就是通过给每一个特征赋予一个向量的方式,当两个特征交叉的时候,通过计算它们向量的内积来代表它们交叉特征的权重。因为这种创新设计,FM取得了巨大的成功,在推荐系统以及NLP领域都有应用。但是FM模型仍然也有缺陷,比如在现实世界当中,不同的特征往往起到的效力不同,并不是所有特征都适合用来进行特征的交叉。所以一个改进思路是对于那些效力不高的交叉项进行降权,对不同的交叉特征进行自动升权或降权。
在这篇paper当中我们通过对特征交叉的组合进行区别对待的方式来提升FM的效果,区别对待的方式就是引入Attention神经网络的机制。
FM模型的细节我们已经写过很多次了,这里不再重复了,需要回顾的小伙伴可以点击下方的传送门重温一下FM的细节。
下面我们直接进入本文的重点AFM的原理。
下图展示的就是AFM模型的结构,为了方便观看,我们去除了线性回归的部分。
input层以及Embedding层都和FM模型一致,它的输入是一个sparse表示的特征,它会把非零项转化成float向量。接下来,我们会详细解释一下pair-wise interaction层也就是二维特征的交叉层以及Attention-based Pooling层,这些也是这篇paper的主要内容。
受到FM当中二阶特征交叉做法的启发,我们在神经网络当中也做同样的处理。它通过element-wise-product(哈达玛积)的方式将两两向量组合在一起,对于m个向量,这样的组合一共有m(m-1)/2种。我们来举个例子,假设在向量x当中非零的特征为
,它embedding之后的结果是
。对于这些特征,我们两两组合之后得到的结果为:
其中
表示两个向量的哈达玛积,
表示
,
表示Pair-wise Interaction这一层的输出。通过定义pair-wise interaction层来提供权重,我们可以使用神经网络结构来表示FM。我们首先把
使用sum pooling(池化)来进行压缩,然后通过全连接层来预测分数:
这里的
,
分别表示权重和偏移量。如果我们固定p=1,b=0,那么上面这个式子和FM模型是完全一样的。pair-wise interaction layer可以简单地看成是权重层,用来给FM当中二阶交叉项提供权重。接下来我们来看Attention-based Pooling层。
Attention机制在神经网络模型当中广泛使用,它的主要思想是当我们把多项累加在一起的时候,允许每一项的权重不同。可以简单理解成一种自动加权的机制,它的权重也是通过神经网络来学习自动赋予的,而不是我们事先固定的。和FM结合起来之后,也就是说FM当中每一个二阶交叉项的权重都是通过Attention网络学习得到的:
其中
是attention网络提供给i和j交叉项的权重,求这些权重最简单的方法就是把它也作为模型的参数,让模型自己来学习。但有一个问题是很多交叉项在样本当中很少或者是没有共同出现过,这样会导致模型学习不到它正确的分布。这个问题和直接拟合二阶交叉项的问题是一样的。为了解决这个问题我们专门设计了一个多层神经网络来学习这个参数值。这个神经网络的输入就是
,输出是一个浮点数表示权重,它的表达式为:
其中
的表达式是一个多层神经网络,
是
经过softmax函数运算之后的结果,这也是normalized的一种常规方法。attention网络的输出结果是一个k维度的向量,它最后会把所有的特征交叉的结果加权压缩到一起。最后,我们可以写出整个AFM的表达式:
AFM相比FM直接在数据表达能力上进行了提升,因此它除了可以使用在一系列预测问题当中也可以使用在其他场景下。比如回归、分类和排序。问题的目标不同,使用的损失函数也不一样。比如对于回归问题,我们一般使用均方差,二分类问题我们则使用交叉熵。在这篇paper当中我们聚焦在回归问题上,并且使用均方差作为模型优化目标。
为了使得优化目标最优,我们使用随机梯度下降算法(SGD)来进行参数的训练。SGD是机器学习当中广泛使用的优化方法之一,也被像是TensorFlow、Pytorch等深度学习框架所支持,因此就不过多赘述了。
过拟合是深度学习模型当中经常出现的问题,FM模型就经常遇到过拟合的问题,所以我们常常会引入
正则项来预防FM模型的过拟合。由于AFM对于数据的刻画能力比FM更强,因此AFM也比FM更容易陷入过拟合。这里我们引入dropout和
正则来解决过拟合问题。
dropout方法经常使用在图像相关的模型当中,在训练过程当中,每次会随机让神经网络当中的一部分节点失效。从而逼迫网络更加专注在一些泛化能力更强的信息上,而不是被少数特殊点影响了全局。对于AFM模型来说,如果所有交叉特征都被用上,神经元很容易学到这些交叉特征之间的关系,因此而陷入过拟合。另外当测试的时候,dropout是关闭的,所以测试的时候模型可以更好地发挥出它的性能。
虽然paper当中有这么一段,但是dropout一般在推荐领域很少使用,因为推荐领域的特征不像图像那么密集,很多都是空值。所以使用dropout不是一定可以带来提升或者是避免过拟合的,这里的说法有一点想当然。
除了dropout之外,我们同样在Attention网络当中引入了
正则,所以最终的Loss可以写成:
这里的
表示的训练集,
表示
正则的参数。
实验的部分着重回答了以下三个问题:
使用了两份公开的数据集用来进行实验,分别是Frappe和Movielens。
对于所有的数据集而言,label值为1表示了用户在上下文中使用了app,或者是申请了一个电影的tag。我们把负样本标记为-1,这样在两个数据集上分别得到了288609和2006859条样本。我们将70%的样本作为训练集,20%的验证集和10%的测试集。
验证集的样本仅仅用来调试参数,性能的评估通过测试集完成。我们使用RMSE(root mean square error)来作为性能指标。
我们将AFM与LibFM、HOFM、Wide&Deep以及DeepCross进行对比,为了公平这些模型都经过调试到达最优。除了LibFM之外,所有的模型都通过min-batch Adagrad方法进行的训练。Frappe和Movielens的batch size分别是128和4096,embedding size均为256。
我们对于Wide&Deep和DeepCross的dropout rate进行了调试,并且采用了early stop的方法。对于Wide&Deep,DeepCross以及AFM模型来说,我们发现使用预训练得到的embedding向量的效果要比随机初始化的更好。dropout的调试情况如下:
在实验当中我们着重对两个参数对模型性能的影响进行了着重的实验,分别是
的正则系数
以及Attention factor,即Attention网络隐层的大小。
首先,我们先来看
的调试结果,
仅仅用在正则当中,对它进行调试不会对模型的其他部分有任何影响,整个结果相对更加准确。
我们可以看到对这两份数据集来说,我们适当增加
的值可以带来一定量的提升。相比于之前dropout参数的调试,显然正则项带来的影响更大。
第二份实验是关于Attention Factor的调试。
我们可以看到Attention Factor对结果的影响非常小,和dropout参数一样,可有可无。这还不是重点,重点是这个所谓的Attention Factor影响的并不是Attention层而已,由于它是要与embedding向量进行点积运算的。所以它必须要和embedding size保持一致。也就是说在这个实验当中,影响的并不仅仅是Attention网络而已,embedding size本身也是一个很大的变量。但这点paper当中没有提到,不知道是不是故意的。
这篇paper的重点就是在FM当中引入Attention机制,那么Attention网络究竟有没有影响呢?
答案是有的,我们从上面这张图也可以看得出来。当Attention Factor为1的时候,模型依然得到了提升。这个时候模型退化成了二阶线性回归模型,但由于有了Attention网络的参数,效果依然胜过FM,已经可以充分说明了Attention网络的效果。
除此之外,paper当中还展示了整个训练过程的指标收敛情况。
从这张图我们可以看到AFM的效果要明显好于FM,也证明了Attention网络的效果。
另外,paper当中还做了额外的研究工作。首先,固定了Attention输出的结果为
,然后训练FM部分。接着我们固定FM的部分,仅仅训练Attention网络的参数。当收敛的时候,模型的效果提升了3%。之后我们选择了测试集中的3条正例样本,展示了一下Attention分数和interaction分数相乘的结果如下:
我们可以看到,对于FM来说它没有Attention网络,所以所有的interaction它的权重都相同,都是0.33。而加上了Attention网络的AFM在Item-Tag这一栏的权重明显更高,并且最终得到的分数也更接近1。
这里的interaction score论文当中没有详细的说明,根据FM的公式推测应该是
。
最后, 我们展示一下在测试集当中各个模型的表现。
其中的Param一栏展示的是模型的参数量,我们可以看到AFM的样本参数数量仅仅多余LibFM,但它的RMSE是最小的。证明了AFM的一个有效性。
到这里,这篇AFM的paper我们就算是解析完了。基本上paper当中的要点本文都提及了,可能略过了部分我觉得没有什么用处的描述或者是说明。如果觉得有所困惑的同学,有能力还是建议阅读一下原文。点击下方阅读原文可以跳转。
你会发现即使是阅读原文,也一样会遇到很多困惑或者是不清楚的地方,这个时候就需要我们根据自己对模型以及问题的理解来进行合理地猜测。猜测得多了,你会发现你读paper会越来越顺,可能这也是能力之一吧。
希望大家尤其是这行的从业者,都能花点时间读读论文,学点东西。
今天的文章就到这里,感谢大家的阅读,如果还喜欢的话,不要忘了三连。