因子分解机FM算法(Factorization Machine)

背景

数据输入

以一个广告分类的问题为例,根据用户画像、广告位以及一些其他的特征,来预测用户是否会点击广告(二分类问题)。数据如下:

ClickedCountrySexAd_type
1USAFemaleMovie
0ChinaFemaleGame
1ChinaMaleGame

Clicked?是分类值,表明用户是否点击了此广告。1表示点击,0表示未点击。而Country,Sex,Ad_type则是Categorical特征(类别特征),一般都是进行one-hot编码处理。

将上面的离散特征数据进行one-hot编码以后(假设Country,Sex,Ad_type类别只有图中几种),如下图所示

ClickedCountry=USACountry=ChinaSex=MaleSex=FemaleAd_type=MovieAd_type=Game
1100110
0010101
1011001

 

显然可以看出,特征从最初的3个变成了现在的6个。而实际工程当中,由于有的Categorical特征维度会非常大(比如地区等),如果采用One-Hot编码,那么互联网公司的动辄上亿个特征的数据集就是这么来的了。

例如,第一条输入的样本数据就是x=[1,0,0,1,1,0]

演变

LR

在说FM之前,先介绍一下最基本的一个模型–LR,可以说LR是点击率(click through rate,以下简称CTR)预估的开山鼻祖。LR模型简单易懂,将数据的一阶特征进行线性组合后再压缩到0~1的概率范围内进行分类。LR模型具有很强的可解释性,权重因子的大小说明了对应特征对预测结果影响大小。但也是因为LR模型太简单,只能做输入特征的一阶线性组合,所以需要进行复杂的特征工程,用人工的方法进行特征交叉组合,再进入LR模型中。可以说特征工程加广义线性模型LR的做法在2005年到2015年间广泛统治着工业界的CTR预估。

LR模型的具体形式如下:

而最终的CTR预估值为

可以从另一个角度来看待LR模型,其就是一个单层的神经网络,将输入值与各自的权重系数相乘后进行累加,再经过一个sigmod神经单元,将输出值由 (−∞,+∞)压缩到值域为 (0,1)范围内的概率值。

为方便叙述,之后的sigmoid就不再加了 

poly2

在一般的线性模型中,是各个特征独立考虑的,没有考虑到特征与特征之间的相互关系。但实际上,大量的特征之间是有关联的。最简单的以电商为例,一般女性用户看化妆品服装之类的广告比较多,而男性更青睐各种球类装备。那很明显,女性这个特征与化妆品类服装类商品有很大的关联性,男性这个特征与球类装备的关联性更为密切。如果我们能将这些有关联的特征找出来,显然是很有意义的。 

通过引入二阶多项式,如式的模型考虑了特征之间的相互关系。

有些地方可能这样描述: 

这个公式很好理解,就是把所有的特征都进行组合再给予权值,但这个公式存在一个问题,二阶项参数的训练依赖于大量非零的样本。然而,在实际应用场景中,数据空间十分稀疏,训练得到的二阶交叉项参数是存在很大偏差的。

FM

为了解决上述因特征空间稀疏带来的参数不准确的问题,FM借助矩阵分解的思想,对二阶交叉项的系数矩阵进行了分解

故FM的公式如下

其中k≪n,本来需要训练的n×n个参数,现在只需要训练n×k个。 

这个公式的时间复杂度是O(kn^2),通过下方化简可以达到O(kn)

 

 构成一个完整的对称矩阵,是这个对称矩阵的对角线,是这个对称矩阵的上三角部分=1/2(完整矩阵-对角线)。第一步就是这样得出。

第一步到第二步是把内积拆开写。

j 没有关系,i 没有关系,所以

第二步到第三步是这样来的:然后再用刚刚上边的等式代入,就会得到第三步的公式。

从神经网络角度窥探FM

笔者之前发现DeepFM的模型中的FM部分的架构图看起来跟FM公式不太一样,但是按照模型图构建的表达式计算出来的数值和FM公式计算出来的竟然是一样的,于是我就开始猛推,果然两者是一样的。数学底子差,不免要把公式拆到底,但这样真的非常直观。其实这就是FM模型在神经网络角度的解读。

从神经网络的角度来进一步审视FM模型,可以发现隐藏在公式后面的FM本质其实是embedding加interaction

 

FM的二阶部分在神经网络角度的架构图如下:

在这里插入图片描述

在DeepFM中也是这样表达的。

假设特征域有三个,每个域的深色又代表取值为1,浅色代表取值0

在这里插入图片描述

实际上,FM的二阶部分的公式是这样描述的下边就来证明公式和上边模型的等价性。

现在来看图片,每个特征域都embedding出一个长度为5 的向量,是这样做的

第一个域:,其中x1,x2组成一个1×2的矩阵,v1,v2组成一个2×5的矩阵,相乘得到1×5的矩阵

=[x1v11+x2v21,x1v12+x2v22,x1v13+x2v23,x1v14+x2v24,x1v15+x2v25]

同理,第二个域其中x3,x4,x5组成一个1×3的矩阵,v3,v4,v5组成一个3×5的矩阵,相乘得到1×5的矩阵

=[x3v31+x4v41+x5v51,x3v32+x4v42+x5v52,x3v33+x4v43+x5v53,x3v34+x4v44+x5v54,x3v35+x4v45+x5v55]

第三个域我不再赘述。

这三个域对应的embedding的向量两两内积相加

我们以前两个向量内积为例,二者点乘,依次拆开得到:

x1v11(x3v31+x4v41+x5v51) + x2v21(x3v31+x4v41+x5v51) + x1v12(x3v32+x4v42+x5v52) + x2v22(x3v32+x4v42+x5v52) +

....... + x1v15(x3v35+x4v45+x5v55) + x2v25(x3v35+x4v45+x5v55)

抽出含有x1x3的项 :x1x3(v11v31+v12v32+v13v33+v14v34+v15v35)=x1x3<v1,v3>

同理抽出其他项,发现前两个域的内积等于<v1,v3>x1x3 + <v1,v4>x1x4 + <v1,v5>x1x5 + <v2,v3>x2x3 + <v2,v4>x2x4 + <v2,v5>x2x5

如果把所有域对应的向量的内积加起来,就会发现<v1,v3>x1x3 + <v1,v4>x1x4 + <v1,v5>x1x5 + <v2,v3>x2x3 + <v2,v4>x2x4 + <v2,v5>x2x5 + ...+ <v10,v5>x10x5 = 不同特征域的x_i,x_j的<v_i,v_j>x_i  x_j 的和

 

回想一下FM的公式,FM是把x_j和x_i的<v_i,v_j>x_i x_j 全部求和(x≠j)。

因为,是独热,所以,同一个特征域的那一项其实是零,非零项只会出现在x_i 和 x_j都不为0 的时候。所以他们两者是没差别的。

公式里的V矩阵的k在这里=5。参数是10×5的。模型图里用的参数分别是2×5,3×5,5×5的,组在一起也是10×5。

仔细看图容易发现,其实embedding产生的向量只是由特征域中取值1的特征生成的,因为取值0的特征对他没有贡献。也就是说其实embedding之后的向量其实就是不等于0的x_i所对应的v_i,图中有效贡献用彩线标明。上边embedding的向量之间的内积其实也就是v_i和v_j的内积。在图中用彩色也有标注。这又符合了   FM公式推导的<v_i,v_j>x_i x_j只有都不为零的x才对最后结果有贡献  这一点 。

 

容易发现公式和模型图计算出的其实是相等的。

 

作者在设计FM算法时本意是将交互因子分解为两个特征向量权重的内积 ,但这却在另一方面引入了embedding思想。这一点在之后的DeepFM等 模型中被广泛应用,可以说FM为后面DL大行其道打通了一条坦途,这应该也是作者始料未及的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值