DeepFM算法

    本文记录的目的是方便自己学习和复习,有误之处请谅解,欢迎指出。

    FM通过对于每一位特征的隐变量内积来提取特征组合,最后的结果还不错,理论上FM可以对高阶特征组合进行建模,但实际中因为计算复杂度的原因,一般只用到了二阶特征组合。如果需要高阶特征的话,怎么办?DeepFM就是可以同时学习低阶和高阶的特征交叉的改进模型,主要由FM和DNN两部分组成,结合了广度和深度模型的优点,联合训练FM模型和DNN模型,

    DeepFM如下图所示,从架构上可以拆解成FM部分和DNN部分,分别负责低阶特征的提取和高阶特征的提取,同时共享第二层Dense Embedding。

DeepFM

    公式如下,就是将两部分特征融合,然后sigmoid:

    网上用这个张图讲解较多,刚开始看到时,没理解里面的具体计算细节,花了半天时间进行理解,现在通过自己的理解进行介绍。

一、FFM模块

        第一层,就是针对个领域做One Hot编码,每一个特征领域的One Hot中只有一个值为1,其他为0:

        第二层,在之前FM篇讲解中说过,每个特征都转换对应一个维的隐向量,这里。但是由于一层中的只有一个值为1,其他值为0,所以只有特征值为1的隐向量传递至第二层,这样每个领域只上传递一个维的特征向量到第二层。(从公式上理解,其实就是只有值为1的特征做特征组合才有意义,FM篇也讲过,如果值为0的隐向量传递到第二层,做特征交叉输出也为0,没有意义

        第三层,框架图左侧第一个就是公式左边的计算,将值为1的特征权重相加,值为0的特征加了也是白加,其输出为0;框架图右侧就是公式右边的计算过程,将特征值都为1的特征隐向量两两特征交叉。

FFM部分公式
FFM部分框架

    FFM模块计算过程如上所述,输出的是一个特征宽度优先的二阶特征交叉。

一、Deep模块

    现在介绍特征深度模块,这个部分我觉得没啥细节可讲,就是用第二层每个领域的特征隐向量embedding layer作为DNN的输入,提取高阶特征。

Deep模块框架

你可能感兴趣的:(DeepFM算法)