深度学习与推荐系统千字文——FM模型

前言

简单的机器学习模型构建往往假设各个特征之间相互独立,并基于特征独立进行模型训练,例如:LR、SVM;

但是实际场景中特征往往存在相互关联的,比如:女性更喜欢化妆品类广告,男性更喜欢球类装备广告:

女性—化妆品,男性—球类设备

两者之间的关联性较高。

    因此,关联特征需要考虑引入到模型建设中。

    关联特征在one-hot变化中是按照笛卡尔积的形式呈现的,容易引发高维灾难,比如性别和品类的关联特征如下:

深度学习与推荐系统千字文——FM模型_第1张图片

(男/球类)的向量为(女/球类,女/化妆品,男/球类,男/化妆品),one-hot之后为(0,0,1,0),维度指数型增加(4维变成8维):

    为了解决关联特征导致的高维灾难问题,引入了FM模型

 

FM模型推

 

    FM模型从形式上可以看作是:线性模型+关联特征,即在线性模型的基础上,添加了高维关联特征:

    上面公式能看出,wij存在较高的稀疏性,需要找方法解决稀疏问题。

    为了计算wij,对每一个特征分量xi找一个辅助向量vi=(vi1,vi2,......,vik),然后,利用vivjT对wij进行计算,汇总所有的特征可得如下v矩阵,每行为一个特征:

深度学习与推荐系统千字文——FM模型_第2张图片

    则wij矩阵的计算为:

    这一思路的基本想法是:将关联之后的特征维度降到k维,计算某一个wij,然后汇总出wij矩阵:

深度学习与推荐系统千字文——FM模型_第3张图片

问题来了,如何计算辅助向量vi=(vi1,vi2,......,vik)?

    主要应用的方法为:

    上面关联特征的计算为:

深度学习与推荐系统千字文——FM模型_第4张图片

通过上面的计算就能得到FM与辅助向量vi,f的逻辑关系,然后通过梯度递减,即SGD进行数据运算:

最终得到FM的模型:

此时,模型不仅考虑了关联特征,同时解决稀疏问题,并将复杂度降低到与LR模型同一水平。

 

FM与SVM的比较

 

 

    SVM的二元特征交叉参数是独立的,而FM的二元特征交叉参数是两个k维的向量vi、vj,交叉参数就不是独立的,而是相互影响的。

    FM可以在原始形式下进行优化学习,而基于kernel的非线性SVM通常需要在对偶形式下进行

    FM的模型预测是与训练样本独立,而SVM则与部分训练样本有关,即支持向量

    线性SVM只有一维特征,不能挖掘深层次的组合特征在实际预测中并没有很好的表现;而多项式SVM正如前面提到的,交叉的多个特征需要在训练集上共现才能被学习到,否则该对应的参数就为0,这样对于测试集上的case而言这样的特征就失去了意义,因此在稀疏条件下,SVM表现并不能让人满意。而FM不一样,通过向量化的交叉,可以学习到不同特征之间的交互,进行提取到更深层次的抽象意义。

    笔者认为,算法的精神在于逻辑,代码倒是其次,本文只介绍原理,代码部分,可以自行到网上查询~

    欢迎大家关注公众号:

 

你可能感兴趣的:(深度学习,推荐算法专栏,推荐系统,深度学习)