因子分解机 FM和FFM

因子分解机 Factorization Machine

因子分解机主要是考虑了特征之间的关联。

FM主要是为了解决数据稀疏的情况下,(而SVM无法解决稀疏问题),特征怎样组合的问题。

数据稀疏是指数据的维度很大,但是其中为0的维度很多。推荐系统是常见应用场景,原因是推荐系统中类别属性(如商品id)比较多,每一种类别属性经过onehot处理后会产生大量值为0的特征,导致样本变得稀疏,而FM就可以解决这种样本稀疏的问题。

因子分解机FM算法可以处理如下三类问题:

普通线性模型

我们将各个特征独立考虑,并没有考虑特征之间的相互关系。

img

FM模型

为了表述特征间的相关性,我们采用多项式模型,将特征 xi x i xj x j 的组合用 xixj x i x j 表示,只讨论二阶多项式模型:

j=i+1

其中,n表示样本的维度(是已经进行onehot以后的特征数量), xi x i 表示第i个特征,(如果是类别变量,那么onehot后只有一个维度值为1,其余维度值为0,因此在这种情况下 xi x i 的值通常是取0和1,而对于一般的数值维度, xi x i 的值对应原来的数值), wij w i j 是组合参数,代表组合特征的重要性,注意: wij w i j wji w j i 是相等的,因此组合特征部分相关参数共有 (n1)+(n2)+...+1=n(n1)/2 ( n − 1 ) + ( n − 2 ) + . . . + 1 = n ( n − 1 ) / 2

注意到,在数据稀疏的情况下,满足特征 xi x i xj x j 都不为0的情况很少,因此 wij w i j 很难训练。

为了求解组合参数 wij w i j , 对每个特征分量 xi x i 引入k维(k远小于n) 的辅助向量 vi=(vi1,vi2,...,vik) v i = ( v i 1 , v i 2 , . . . , v i k ) , 然后利用向量内积的结果 vivTj v i v j T 来表示原来的组合参数 wij w i j

实际上,辅助向量可以理解为是特征分量的另一种表示形式,类似于词向量的表示形式,但是和词向量存在区别。词向量中是将一个单词转换为向量表示形式,而单词是固定的,因此一个单词对应一个词向量;而在FM中,我们是将一个类别特征(注意,这是onehot前的特征)转换为一个向量,但由于该类别特征可以有多种取值,并且每种取值对应一个向量(也就是上面将类别特征onehot以后,每个特征分量对应一个辅助向量),因此,FM中确实是将一个类别特征转换为了向量形式,只不过向量会根据特征的取值发生变化。

此时,组合参数 wij w i j 组成的矩阵可以表示为:

= vvT

将组合参数进行分解的好处

  1. 从原来要求n(n-1)/2个组合参数变成了求矩阵V,参数数量变为n*k.
  2. 削弱了高阶参数间的独立性:k越大(即对特征分量的表征能力越强),高阶参数间独立性越强,模型越精细;k越小,泛化能力越强,

因此实际问题选择较小的k可以克服稀疏数据的问题,并获得较好的预测效果。

因此时间复杂度从O(n^2)变成了O(kn)

此时,分解机的表示形式变为

img

注意第二项,下标j的循环从i+1开始。

使用辅助向量乘积表示组合参数的原理

通常,由于数据稀疏,本来组合参数是学习不到的,但是我们可以通过特征i与其他特征的数据的关系,特征j和其他特征的关系,分别学习到特征i和特征j的对应的辅助向量 vi v i vj v j ,这样利用 vivTj v i v j T 来表示 wij w i j ,便可以解决数据稀疏带来的问题。

计算模型的预测值

在计算模型时,只需要考虑计算量最大的二次项:

img

可以先把标量 xi x i 和对应的辅助向量 vi v i 相乘,并记录下来,得到 ui=xivi u i = x i v i , 注意 xi x i 只是标量。

对于n个元素,共需要n*k次乘法,于是二元项变为:注意:公式中的r即为k,即辅助向量的维度

img

img

把上式凑成和的平方:

img

化简的原理是将整个对称矩阵W除去对角线上的数值,由于对称,再除以2得到原来的上三角矩阵。

括号内,两部分计算量均为O(n),因此整体计算量为O(kn)。

梯度下降求解模型参数

SGD中,需要计算两种导数:

  1. 预测值对一元参数的导数:

img

  1. 预测值对二元参数的导数:

img

实际处理问题

回归问题:

在回归问题中,直接使用模型预测值作为预测结果,并使用最小均方误差作为损失函数,其中m为样本个数:

img

二分类问题:

将输出结果通过激活函数,如sigmoid函数得到预测类别的概率,使用对数似然作为损失函数:

img

场感知分解机 FFM

FM的应用场景:给定一组数据,判定用户是否会进行点击。

采用onehot对categorical类型的数据进行编码后,数据会十分稀疏,并且数据维度增大。

以广告分类为例,“Day=26/11/15”、“Day=1/7/14”、“Day=19/2/15”这三个特征都是代表日期的,可以放到同一个field中。同理,商品的末级品类编码生成了550个特征,这550个特征都是说明商品所属的品类,因此它们也可以放到同一个field中。简单来说,同一个categorical特征经过One-Hot编码生成的数值特征都可以放到同一个field,包括用户性别、职业、品类偏好等。

Field-aware Factorization Machine(FFM) 模型

场感知说白了可以理解引入了field的概念,FFM把相同性质的特征归于同一个field。

因此,隐向量不仅与特征相关,也与filed相关,

即:对每一维特征分量 xi x i , 针对每一种field fj f j , 都会学习一个隐向量 vi,fj v i , f j ,与不同的特征关联需要使用不同的隐向量 (而FM每种特征只有一个隐向量)
例如,当考虑“Day=26/11/15”这个特征,与“Country”特征和“Ad_type”特征进行关联的时候,需要使用不同的隐向量,而在FM中则使用相同的隐向量。

假设样本的n个特征(已经onehot)属于f个field, 那么FFM二次项有nf个隐向量。

因此,得到:

img

其中, fj f j 是第j个特征所属的field. 如果隐向量的长度为k, 那么FFM的交叉项参数就有nfk个,远多于FM模型的nk个。此外,由于隐向量于filed有关,FFM的交叉项并不能够像FM那样进行化简,预测复杂度为 O(kn2) O ( k n 2 ) .

FFM的使用:所有的特征必须转换成“field_id:feat_id:value”格式,field_id代表特征所属field的编号,feat_id是特征编号,value是特征的值.

在FFM论文版本里的梯度更新,学习率是通过类似于adagrad自适应的学习率计算的。根据AdaGrad的特点,对于样本比较稀疏的特征,学习率高于样本比较密集的特征,因此每个参数既可以比较快速达到最优,也不会导致验证误差出现很大的震荡。

参考:

FM算法详解:https://blog.csdn.net/bitcarmanlee/article/details/52143909

FM计算:https://blog.csdn.net/shenxiaolu1984/article/details/78740481

fm美团:https://tech.meituan.com/deep_understanding_of_ffm_principles_and_practices.html

csdn, 推荐算法:https://blog.csdn.net/asd136912/article/details/78318563

美团,FFM: https://tech.meituan.com/deep_understanding_of_ffm_principles_and_practices.html

  • 7
    点赞
  • 39
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值