DeepFM

DeepFM模型包含FM和DNN两部分,FM模型可以抽取low-order特征,DNN可以抽取high-order特征。

  1. 首先利用FM进行embedding得到Dense Embeddings的输出。
  2. 将Dense Embeddings的结果作为左边FM模块和右边DNN模块的输入。通过一定方式组合后,模型左边FM模块的输出完全模拟出了FM的效果,而右边的DNN模块则学到了比FM模块更加高阶的特征交叉。
  3. 最后将DNN和FM的结果组合后激活输出。

具体计算时,主要涉及四个权重(embedding_size是进行embeding转化时指定的大小)

            * weights['feature_embeddings'] :维度是[self.feature_size,self.embedding_size]。这里表示存储对 每个feature的embedng表示,这里embedding转换就相当于是一个全连接层、feature_size是总的特征数量(可以看出离散特征的每个离散值都有单独的embedding表示的)。

            * weights['feature_bias']:维度是 [self.feature_size,1]。这里存储对特征的一维交叉计算,对应FM公式中的一维计算部分,对每个特征都会附加长度为1的权重。

            * weights['layer_0']:维度是(上一层神经元数量,当前层神经元数量),对应deep部分神经元的权重部分

            * weights['bias_0']:维度是(1,当前层神经元数量),对应深度计算的偏置部分。

一阶操作:wx:

数据乘对应的位置的权重,例如权重w0~w5:0.1,0.2,0.3,0.4,0.5,0.6。而样本的值为0,1,1,0,0.5,0。在原先one-hot向量中,我们只需要利用两个向量相乘求和即可:0.1*0+0.2*1+0.3*1+0.4*0+0.5*0.5+0.6*0。在这里,由于我们只记录了独热编码的有值部分下标,因此操作需要换成:0.2*1+0.3*1+0.5*0.5即找出有值部分对应的权重,然后对应相乘再求和即可。

二阶操作部分:

 

二者组合:可以看到,在DeepFM中,FM的输出(二阶输出)并非一个数值,而是一个张量,但是在纯FM中,其二阶部分输出的是一个数值,这里要做区分,在FM中,二阶输出结果与一阶输出结果相加,直接得到最后的输出值,而在DeepFM中,其还需要与DNN的输出做组合,因此可以输出一个张量进行拼接,最后再用一层权重输出最后的结果

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值