DeepFM

DeepFM是一种结合FM(因子分解机)和DNN(深度神经网络)的模型,用于点击率预测。它包括wide(FM)和deep(DNN)两部分,其中FM部分处理低阶特征交互,DNN部分捕捉高阶特征交互。模型通过端到端训练,不需要复杂的特征工程,并且相比其他模型如FNN、PNN和宽深网络,DeepFM具有更好的性能和训练效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  • DeepFM 设计思路简单,源于 2016 年 Google 的宽深网络方法但是效果出众。DeepFM是一个集成了FM和DNN的神经网络框架,思路和Google的Wide&Deep相似,都包括wide和deep两部分。W&D模型的wide部分是广义线性模型,DeepFM的wide部分则是FM模型,两者的deep部分都是深度神经网络。DeepFM神经网络部分,隐含层的激活函数用ReLu和tanh做信号非线性映射,sigmoid函数做CTR预估的输出函数。

  • 模型结构:

    1. FM部分的结构:

       

      FM部分是一个因子分解机。关于因子分解机可以参阅文章[Rendle, 2010] Steffen Rendle. Factorization machines. In ICDM, 2010.。因为引入了隐变量的原因,对于几乎不出现或者很少出现的隐变量,FM也可以很好的学习。

    DeepFM的输出公式为:

     

    FM的输出公式为:

     

### DeepFM 模型概述 DeepFM 是一种融合了因子分解机(Factorization Machine, FM深度神经网络(Deep Neural Network, DNN)的推荐系统模型。它通过联合训练的方式,能够同时捕捉低阶特征交互高阶特征交互[^2]。 #### 模型结构 DeepFM 的整体架构由两大部分组成:FM 组件 Deep 组件。这两部分共享相同的输入层嵌入层(Feature Embedding Layer),从而减少了计算开销并提高了效率[^4]。 - **FM Component**: 负责捕获数据中的低阶特征交互关系。其核心在于利用二阶多项式来建模特征之间的相互作用[^1]。 - **Deep Component**: 使用多层感知器(MLP)提取复杂的高阶特征交互模式。这一部分类似于传统的深度学习方法,具有强大的表达能力。 最终输出是由 FM Deep 两个组件的结果加权求得出,确保既能保留线性简单交叉项的优势,又能挖掘深层次的关系[^3]。 --- ### 实现细节 以下是基于 PyTorch 编写的简化版 DeepFM 模型代码: ```python import torch import torch.nn as nn class DeepFM(nn.Module): def __init__(self, feature_size, embedding_dim, deep_layers=[64, 32]): super(DeepFM, self).__init__() # 参数初始化 self.feature_size = feature_size self.embedding_dim = embedding_dim # FM 部分 self.fm_first_order_embeddings = nn.Linear(feature_size, 1) self.fm_second_order_embeddings = nn.Embedding(feature_size, embedding_dim) # Deep 部分 all_dims = [embedding_dim * feature_size] + deep_layers layers = [] for i in range(1, len(all_dims)): layers.append(nn.Linear(all_dims[i - 1], all_dims[i])) layers.append(nn.ReLU()) self.deep_network = nn.Sequential(*layers) self.final_layer = nn.Linear(deep_layers[-1] + 1, 1) # 合并 FM Deep 输出 def forward(self, X): fm_first_order_emb_arr = self.fm_first_order_embeddings(X).unsqueeze(-1) fm_second_order_embs = self.fm_second_order_embeddings(X.long()) # 计算 FM 部分 sum_of_squares = torch.sum(fm_second_order_embs, dim=1)**2 square_of_sums = torch.sum(fm_second_order_embs**2, dim=1) fm_output = 0.5 * (sum_of_squares - square_of_sums).sum(dim=-1, keepdim=True) # 计算 Deep 部分 deep_input = fm_second_order_embs.view(-1, self.feature_size * self.embedding_dim) deep_output = self.deep_network(deep_input) # 合并 FM Deep 输出 concat_output = torch.cat([fm_output, deep_output], dim=-1) final_output = torch.sigmoid(self.final_layer(concat_output)) return final_output ``` 上述代码定义了一个基础版本的 DeepFM 模型,其中包含了 FM Deep 两个主要组成部分,并实现了前向传播逻辑。 --- ### 应用场景 DeepFM 广泛应用于广告点击率预测(CTR Prediction)、商品推荐等领域。由于它可以自动处理稀疏数据并有效结合低维与高维特征交互,因此特别适合解决大规模工业级问题。 例如,在电商平台上,可以通过分析用户的浏览历史、购买记录以及其他行为特征,构建一个 DeepFM 模型来进行个性化商品推荐;或者在搜索引擎中优化查询词与文档的相关性评分。 此外,为了方便后续部署或迁移学习,通常会采用 `torch.save` 方法保存完整的模型状态字典至文件中以便加载使用: ```python torch.save(model.state_dict(), 'deep_fm_model.pth') loaded_model = DeepFM(...) loaded_model.load_state_dict(torch.load('deep_fm_model.pth')) ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值