推荐系统学习笔记4:FNN、DeepFM与NFM——深度特征交互模型的演进
随着深度学习在推荐系统中的深入应用,研究者们提出了多种专门针对推荐任务设计的神经网络架构。FNN(Factorization-machine supported Neural Network)、DeepFM(Deep Factorization Machine)和NFM(Neural Factorization Machine)是三种重要的深度推荐模型,它们在不同方面改进了特征交互的学习方式。本文将详细分析这三种模型的架构、原理和应用。
1. 从FM到深度FM模型
1.1 FM模型的回顾与局限性
因子分解机(FM)通过隐向量的内积建模特征交互:
$$
\hat{y}{FM} = w_0 + \sum{i=1}^n w_i x_i + \sum_{i=1}^n \sum_{j=i+1}^n \langle \mathbf{v}_i, \mathbf{v}_j \rangle x_i x_j
$$
FM的优势:
- 能够处理稀疏数据下的特征交互
- 线性时间复杂度
- 在中小规模数据集上表现良好
FM的局限性:
- 交互形式单一:只使用内积,限制了交互函数的表达能力
- 高阶交互缺失:只考虑二阶交互,无法建模更高阶的复杂交互
- 线性组合:特征交互后直接求和,缺乏非线性变换
1.2 深度FM模型的演进路径
为了解决FM的局限性,研究者提出了多种深度扩展:
- FNN:使用FM预训练嵌入,然后输入深度神经网络
- DeepFM:同时结合FM的二阶交互和深度神经网络的高阶交互
- NFM:在FM基础上增加神经交互层,学习更复杂的交互函数
2. FNN:基于FM预训练的深度神经网络
2.1 FNN模型架构
FNN的核心思想是使用FM预训练的隐向量作为深度神经网络的输入,从而获得更好的初始化。
架构概述:
1 | 输入特征 |
2.2 两阶段训练过程
阶段一:FM预训练
- 在训练数据上训练FM模型
- 保存特征隐向量 $\mathbf{v}_i$
阶段二:DNN训练
- 将特征通过预训练的隐向量转换为嵌入表示:
$$
\mathbf{z}_i = \mathbf{v}_i x_i
$$ - 拼接所有嵌入向量:
$$
\mathbf{z} = [\mathbf{z}_1^T, \mathbf{z}_2^T, \dots, \mathbf{z}_n^T]^T
$$ - 输入多层感知机:
$$
\mathbf{h}_1 = \sigma(\mathbf{W}_1 \mathbf{z} + \mathbf{b}_1)
$$
$$
\mathbf{h}_L = \sigma(\mathbf{W}L \mathbf{h}{L-1} + \mathbf{b}_L)
$$ - 输出预测:
$$
\hat{y} = \sigma(\mathbf{w}^T \mathbf{h}_L + b)
$$
2.3 FNN的优势与局限性
优势:
- 更好的初始化:FM预训练提供了有意义的特征表示
- 减少训练时间:相比随机初始化收敛更快
- 缓解过拟合:预训练相当于一种正则化
局限性:
- 两阶段训练:流程复杂,需要分别训练两个模型
- FM局限性继承:受限于FM的表示能力
- 无法端到端优化:FM和DNN分开训练,不能协同优化
2.4 FNN的改进版本
2.4.1 SNN(Sampling-based Neural Network)
引入负采样技术,加速训练过程。
2.4.2 CCPM(Convolutional Click Prediction Model)
在FNN基础上增加卷积层,学习局部特征交互。
3. DeepFM:端到端的宽深融合模型
DeepFM是Wide&Deep架构的一种改进,用FM替换了Wide部分的线性模型,实现了真正的端到端训练。
3.1 DeepFM模型架构
DeepFM包含两个并行组件:
- FM组件:建模低阶特征交互
- 深度组件:建模高阶特征交互
1 | 输入特征 |
3.2 FM组件
FM组件与原始FM相同,但与其他组件共享特征嵌入:
$$
\hat{y}{FM} = \langle \mathbf{w}, \mathbf{x} \rangle + \sum{i=1}^n \sum_{j=i+1}^n \langle \mathbf{v}_i, \mathbf{v}_j \rangle x_i x_j
$$
3.3 深度组件
深度组件与FNN类似,但使用相同的嵌入层:
- 嵌入层:将稀疏特征映射为稠密向量
- 全连接层:多层神经网络学习高阶交互
3.4 共享嵌入层
DeepFM的关键创新是FM组件和深度组件共享相同的嵌入层:
- 参数效率:减少总参数量
- 信息共享:两部分相互促进
- 端到端训练:统一优化目标
嵌入层的输出同时用于FM的内积计算和深度组件的输入。
3.5 模型输出
DeepFM的最终预测是FM组件和深度组件的加权和:
$$
\hat{y} = \sigma(\hat{y}{FM} + \hat{y}{DNN})
$$
其中$\sigma$是sigmoid激活函数。
3.6 DeepFM的优势
- 无需特征工程:自动学习低阶和高阶特征交互
- 端到端训练:FM和DNN联合优化
- 共享嵌入:提高参数效率,促进信息共享
- 强表达能力:同时捕获显式和隐式特征交互
3.7 DeepFM的实际应用
3.7.1 在华为应用市场的应用
DeepFM在华为应用市场推荐系统中取得了显著效果:
- 点击率提升:相比基线模型提升15.2%
- 转化率提升:相比基线模型提升12.8%
- 训练效率:比Wide&Deep训练速度快30%
3.7.2 超参数设置
- 嵌入维度:10-20
- 隐藏层:3-5层,每层256-1024个神经元
- 激活函数:ReLU
- 优化器:Adam
- 学习率:0.001-0.01
4. NFM:神经因子分解机
NFM在FM的基础上引入神经交互层(Neural Interaction Layer),用神经网络替代内积来计算特征交互。
4.1 NFM模型架构
NFM的核心创新是双向交互层(Bi-Interaction Layer),它显式地建模特征对之间的交互。
架构流程:
1 | 输入特征 |
4.2 双向交互层
双向交互层计算所有特征嵌入向量的逐元素乘积和:
$$
f_{BI}(\mathcal{V}x) = \sum{i=1}^n \sum_{j=i+1}^n x_i \mathbf{v}_i \odot x_j \mathbf{v}_j
$$
其中$\odot$表示逐元素乘法(Hadamard积)。
数学性质:
- 对称性:$f_{BI}$关于特征顺序对称
- 非线性:相比内积具有更强的表达能力
- 维度保持:输出维度与嵌入维度相同
4.3 与传统FM的关系
当双向交互层的输出直接连接到输出层时,NFM退化为FM:
$$
\hat{y}{NFM} = w_0 + \sum{i=1}^n w_i x_i + \mathbf{h}^T f_{BI}(\mathcal{V}_x)
$$
如果$\mathbf{h}$是全1向量,则等价于FM。
4.4 深度堆叠层
在双向交互层之后,NFM可以堆叠多个全连接层来学习高阶交互:
$$
\mathbf{z}_1 = \sigma_1(\mathbf{W}1 f{BI}(\mathcal{V}_x) + \mathbf{b}_1)
$$
$$
\mathbf{z}_L = \sigma_L(\mathbf{W}L \mathbf{z}{L-1} + \mathbf{b}_L)
$$
4.5 NFM的优势
- 更强的交互建模:双向交互层比内积更具表达能力
- 深度非线性:通过深度网络学习复杂函数
- 参数效率:相比PNN等模型参数更少
- 可解释性:双向交互层具有明确的语义
4.6 NFM的变体
4.6.1 AFM(Attentional Factorization Machine)
在NFM基础上增加注意力机制,学习不同特征交互的重要性权重。
4.6.2 NFM with Feature Gating
引入门控机制,动态控制特征信息的流动。
5. 三种模型的比较分析
5.1 架构比较
| 模型 | 核心思想 | 交互方式 | 训练方式 | 参数共享 |
|---|---|---|---|---|
| FNN | FM预训练+深度网络 | 深度隐式交互 | 两阶段训练 | 无 |
| DeepFM | FM+DNN并行 | 显式二阶+隐式高阶 | 端到端训练 | 嵌入层共享 |
| NFM | 神经交互层+深度网络 | 神经双向交互 | 端到端训练 | 完全共享 |
5.2 表达能力分析
5.2.1 交互阶数
- FNN:理论上可以学习任意阶交互,但实际受网络深度限制
- DeepFM:显式二阶+隐式高阶
- NFM:通过双向交互层显式建模二阶交互,深度网络建模高阶交互
5.2.2 交互函数复杂度
- FNN:深度神经网络的万能逼近能力
- DeepFM:FM的线性交互+DNN的非线性交互
- NFM:双向交互层的非线性变换+DNN的进一步抽象
5.3 计算复杂度比较
| 模型 | 时间复杂度 | 空间复杂度 | 适合数据规模 |
|---|---|---|---|
| FNN | $O(nkd + d^2L)$ | $O(nk + dL)$ | 中小规模 |
| DeepFM | $O(nk + nkd + d^2L)$ | $O(nk + dL)$ | 大规模 |
| NFM | $O(n^2k + d^2L)$ | $O(nk + dL)$ | 中小规模 |
其中:
- $n$:特征数量
- $k$:嵌入维度
- $d$:隐藏层维度
- $L$:隐藏层数量
5.4 实际效果对比
在公开数据集上的实验结果:
| 模型 | MovieLens-1M | Frappe | Criteo |
|---|---|---|---|
| RMSE | LogLoss | AUC | |
| FM | 0.832 | 0.265 | 0.789 |
| FNN | 0.821 | 0.251 | 0.795 |
| DeepFM | 0.815 | 0.243 | 0.802 |
| NFM | 0.813 | 0.239 | 0.804 |
6. 实践应用指南
6.1 如何选择模型
6.1.1 根据数据规模选择
- 小规模数据:NFM或FNN,避免过拟合
- 大规模数据:DeepFM,充分利用数据
6.1.2 根据特征类型选择
- 稠密特征为主:FNN或DeepFM
- 稀疏特征为主:NFM或DeepFM
6.1.3 根据业务需求选择
- 需要可解释性:DeepFM(FM部分可解释)
- 追求最高精度:NFM
- 考虑推理速度:DeepFM
6.2 实现注意事项
6.2.1 嵌入维度选择
- 原则:高频特征高维度,低频特征低维度
- 经验值:一般取10-50维
- 调整方法:根据特征频率动态调整
6.2.2 网络深度设计
- FNN:3-5层,避免梯度消失
- DeepFM:DNN部分2-4层
- NFM:双向交互层后接2-3层
6.2.3 正则化策略
- L2正则化:所有权重矩阵
- Dropout:隐藏层,比率0.3-0.5
- 早停法:基于验证集性能
6.3 训练技巧
6.3.1 优化器选择
- Adam:默认选择,适应大部分场景
- AdaGrad:稀疏特征场景
- SGD with Momentum:需要精细调优时
6.3.2 学习率策略
- 余弦退火:逐渐降低学习率
- 热重启:周期性增加学习率
- 自适应学习率:根据梯度调整
6.3.3 批次大小
- 原则:大批次稳定,小批次泛化
- 推荐:256-1024
- 调整:根据GPU内存调整
7. 高级主题与扩展
7.1 多任务学习扩展
7.1.1 DeepFM-MTL
在DeepFM基础上扩展为多任务学习,同时优化点击率、转化率、停留时长等多个目标。
7.1.2 共享-私有架构
每个任务有私有网络,同时共享公共特征表示。
7.2 序列建模扩展
7.2.1 DeepFM with RNN
在DeepFM基础上增加RNN层,建模用户行为序列。
7.2.2 NFM with Attention
在NFM中引入注意力机制,关注重要的历史行为。
7.3 图神经网络扩展
7.3.1 GraphFM
将用户-物品交互建模为图,使用图神经网络学习表示。
7.3.2 Social DeepFM
融入社交网络信息,利用朋友关系改进推荐。
8. 工业界应用案例
8.1 阿里巴巴的DeepFM实践
在阿里巴巴的电商推荐中,DeepFM被用于:
- 首页推荐:综合用户画像、历史行为、实时上下文
- 搜索排序:排序搜索结果中的商品
- 广告推荐:预测广告点击率和转化率
优化措施:
- 特征分桶:连续特征离散化
- 嵌入压缩:低维嵌入+量化
- 在线学习:实时更新模型
8.2 美团的NFM应用
美团在外卖推荐中使用NFM的改进版本:
- 多目标优化:同时优化点击、下单、评价
- 时空特征:结合时间和地理位置
- 实时更新:分钟级模型更新
8.3 腾讯的FNN应用
在腾讯新闻推荐中,FNN用于:
- 冷启动处理:利用FM预训练缓解冷启动
- 多源特征融合:文本、图像、用户行为
- 个性化推送:基于用户兴趣动态调整
9. 未来发展方向
9.1 自动化架构搜索
使用AutoML技术自动搜索最优的模型架构、嵌入维度、网络深度等超参数。
9.2 可解释性增强
开发可解释的深度推荐模型,提供推荐理由,增加用户信任。
9.3 联邦学习应用
在保护用户隐私的前提下,通过联邦学习训练跨平台的推荐模型。
9.4 跨域推荐
利用源域的知识改进目标域的推荐,解决数据稀疏问题。
10. 总结
FNN、DeepFM和NFM代表了深度推荐模型发展的重要阶段:
- FNN:开创了使用FM初始化深度网络的思路,但两阶段训练限制了其应用。
- DeepFM:实现了真正的端到端训练,通过共享嵌入层巧妙结合了FM和DNN。
- NFM:提出了双向交互层这一新颖架构,在表达能力和计算效率之间取得了良好平衡。
在实际应用中,DeepFM因其平衡性成为最受欢迎的选择,NFM在需要更强表达能力的场景中表现出色,而FNN因其简单的两阶段训练仍在某些特定场景中使用。
随着推荐系统场景的复杂化和数据规模的扩大,这些模型仍在不断演进。未来的深度推荐模型将更加注重效率、可解释性和隐私保护,同时继续提升推荐的准确性和多样性。
深度推荐模型的发展远未停止,新的架构和技术不断涌现。作为从业者,我们需要深入理解每种模型的原理和适用场景,在实践中根据具体需求选择合适的模型,并持续关注最新的研究进展。