什么是小手机型网站,百度一下官网网址,最近下载的网站怎么找,建设工程招投标网最专业的网站实验和完整代码 完整代码实现和jupyter运行#xff1a;https://github.com/Myolive-Lin/RecSys--deep-learning-recommendation-system/tree/main 引言
NeuralCF 模型由新加坡国立大学研究人员于 2017 年提出#xff0c;其核心思想在于将传统协同过滤方法与深度学习技术相结…实验和完整代码 完整代码实现和jupyter运行https://github.com/Myolive-Lin/RecSys--deep-learning-recommendation-system/tree/main 引言
NeuralCF 模型由新加坡国立大学研究人员于 2017 年提出其核心思想在于将传统协同过滤方法与深度学习技术相结合从而更为有效地捕捉用户与物品之间的复杂交互关系。该模型利用神经网络自动学习用户和物品的低维表示并通过这些表示实现对用户评分的精准预测。
1. NeuralCF模型简介
NeuralCF 模型融合了矩阵分解与深度学习两种方法的优势采用基于神经网络的结构来建模用户与物品间的非线性交互。传统矩阵分解方法通过计算用户与物品隐向量的内积来进行评分预测而 NeuralCF 则利用多层感知机MLP对用户与物品隐向量进行联合建模。具体而言模型首先为每个用户和物品分配低维嵌入向量然后将这些向量进行拼接concatenate再输入到深层神经网络中以提取潜在交互特征最后通过输出层得到预测评分。
2. NeuralCF的模型架构
NeuralCF 模型的架构主要包括以下关键组件
用户与物品嵌入Embedding 与传统矩阵分解方法类似NeuralCF 为每个用户与物品分配低维嵌入向量分别表征用户兴趣和物品特征。嵌入向量拼接Concatenation 在模型中用户与物品的嵌入向量被拼接为一个更高维度的向量作为神经网络的输入。这种拼接不仅保留了各自的特征信息同时为网络提供了学习复杂交互模式的可能性。多层感知机MLP 拼接后的向量经过多个全连接层MLP的处理每一层均采用激活函数通常为 ReLU引入非线性变换以便捕捉用户与物品之间更高阶的特征交互。输出层 多层感知机的输出经过一个线性层转换后最终得到评分预测。在实际应用中该预测值可以代表二分类问题例如点击与否或回归问题例如具体评分 2.1 数学模型
1. 用户和物品嵌入Embedding
NeuralCF模型首先为每个用户和每个物品分配一个低维度的隐向量。假设有 M M M 个用户和 N N N 个物品用户 u u u 的隐向量为 p u ∈ R d \mathbf{p_u} \in \mathbb{R}^d pu∈Rd物品 i i i 的隐向量为 q i ∈ R d \mathbf{q_i} \in \mathbb{R}^d qi∈Rd其中 d d d 是隐向量的维度。
2. 嵌入向量的拼接
传统的矩阵分解方法直接计算用户和物品隐向量的内积来预测评分而NeuralCF通过将用户和物品的隐向量拼接concatenate在一起构成一个新的向量 z concat ( p u , q i ) ∈ R 2 d \mathbf{z} \text{concat}(\mathbf{p_u}, \mathbf{q_i}) \in \mathbb{R}^{2d} zconcat(pu,qi)∈R2d
3. 多层感知机MLP
将拼接后的向量z输入到包含L层的多层感知机中每一层的变换公式为 h l ReLU ( W l h l − 1 b l ) , l 1 , 2 , … , L \mathbf{h_l} \text{ReLU}(\mathbf{W_l} \mathbf{h_{l-1}} \mathbf{b_l}), \quad l 1, 2, \dots, L hlReLU(Wlhl−1bl),l1,2,…,L
其中初始输入为 h 0 z \mathbf{h_0} \mathbf{z} h0z W l \mathbf{W_l} Wl 和偏置 b l \mathbf{b_l} bl分别为第 l层的权重和偏置参数
4. 输出层
经过多层感知机后最终输出层采用线性变换 r u i ^ σ ( W L h L b L ) \hat{r_{ui}} \sigma(\mathbf{W_L} \mathbf{h_L} \mathbf{b_L}) rui^σ(WLhLbL)
其中 σ \sigma σ 表示sigmoid激活函数输出值位于 0 与 1 之间适用于二分类任务对于回归任务则可去除 Sigmoid 激活。
5. 损失函数
针对不同任务NeuralCF 可采用不同的损失函数
回归问题通常使用均方误差MSE L 1 N ∑ ( u , i ) ( r u i − r u i ^ ) 2 \mathcal{L} \frac{1}{N} \sum_{(u,i)} \left( r_{ui} - \hat{r_{ui}} \right)^2 LN1(u,i)∑(rui−rui^)2
二分类问题 损失函数为交叉熵 L − 1 N ∑ ( u , i ) ( r u i log ( r u i ^ ) ( 1 − r u i ) log ( 1 − r u i ^ ) ) \mathcal{L} -\frac{1}{N} \sum_{(u,i)} \left( r_{ui} \log(\hat{r_{ui}}) (1 - r_{ui}) \log(1 - \hat{r_{ui}}) \right) L−N1(u,i)∑(ruilog(rui^)(1−rui)log(1−rui^))
3 NeuralCF混合模型
为进一步提升特征组合能力和非线性表达能力NeuralCF 在原有架构基础上引入了广义矩阵分解Generalized Matrix Factorization, GMF模块。需要指出的是GMF 与 MLP 部分分别采用独立的嵌入层这一设计有效提升了模型的灵活性和表现力。 3.2 GMF广义矩阵分解
广义矩阵分解模型扩展了传统矩阵分解方法通过引入不同的用户与物品交互方式来建模。与经典矩阵分解方法通过内积计算用户与物品之间的相似性不同GMF 采用元素积Hadamard 乘积来刻画二者间的交互关系 ϕ 1 ( p u , q i ) p u ⊙ q i \phi_1(p_u, q_i) p_u \odot q_i ϕ1(pu,qi)pu⊙qi
其中 p u p_u pu 和 q i q_i qi 是用户和物品的嵌入向量 ⊙ \odot ⊙ 是元素积操作。
3.4 GMF和MLP的融合
为了解决共享嵌入层的限制本方法提出了让GMF和MLP分别学习独立的嵌入层并通过连接它们的最后一层隐藏层进行融合。具体而言GMF和MLP的输出通过以下公式进行联合建模
GMF 部分 ϕ G M F p u G ⊙ q i G , \phi_{GMF} p_u^G \odot q_i^G, ϕGMFpuG⊙qiG,
其中 p u G p_u^G puG 和 q i G q_i^G qiG 分别表示GMF部分的用户和物品嵌入向量。
MLP 部分
通过多层非线性变换MLP 部分的用户与物品嵌入向量先进行拼接再逐层传递形式上可描述为 ϕ M L P a L ( W L T ( a L − 1 ( . . . a 2 ( W 2 T [ p u M q i M ] b 2 ) . . . ) ) b L ) , \phi_{MLP} a_L(W_L^T (a_{L-1}(...a_2(W_2^T [p_u^M \quad q_i^M] b_2)...)) b_L), ϕMLPaL(WLT(aL−1(...a2(W2T[puMqiM]b2)...))bL),
其中 p u M p_u^M puM 和 q i M q_i^M qiM 分别表示MLP部分的用户和物品嵌入向量 a L ( ⋅ ) a_L(\cdot) aL(⋅) 是激活函数 W L W_L WL 和 b L b_L bL 是MLP的权重和偏置参数。
融合与预测
最后GMF和MLP的输出通过全连接层进行融合并计算最终预测 y ^ u i σ ( h T [ ϕ G M F ϕ M L P ] ) \hat{y}_{ui} \sigma(h^T [\phi_{GMF} \quad \phi_{MLP}]) y^uiσ(hT[ϕGMFϕMLP])
其中 σ ( ⋅ ) \sigma(\cdot) σ(⋅) 是Sigmoid激活函数 h T h^T hT 是融合层的权重。
该融合策略使得模型可以分别从不同角度捕捉用户与物品的特征并通过联合表示进一步提升预测准确性与模型灵活性。
4.代码实现
以下代码段展示了基于 PyTorch 的 NeuralCF 模型实现包括模型配置、数据集构建与模型定义。
模型配置与数据集构建
class Config:num_users 1000num_items 2000embed_dim 16hidden_dims [64, 32, 16]batch_size 32lr 0.001num_epochs 30# 自定义数据集类
class CFDataset(Dataset):def __init__(self, num_samples10000):# 生成示例数据实际使用时替换为真实数据self.user_ids np.random.randint(0, Config.num_users, sizenum_samples)self.item_ids np.random.randint(0, Config.num_items, sizenum_samples)self.labels np.random.randint(0, 2, sizenum_samples).astype(np.float32)def __len__(self):return len(self.user_ids)def __getitem__(self, idx):return (torch.tensor(self.user_ids[idx], dtypetorch.long),torch.tensor(self.item_ids[idx], dtypetorch.long),torch.tensor(self.labels[idx], dtypetorch.float))NeuralCF 模型实现
class NeuralCF(nn.Module):def __init__(self, Config):super().__init__()# 定义用户和物品的隐向量self.user_embed_gmf nn.Embedding(Config.num_users, Config.embed_dim) # GMF用户隐向量self.item_embed_gmf nn.Embedding(Config.num_items, Config.embed_dim) # GMF物品隐向量self.user_embed_mlp nn.Embedding(Config.num_users, Config.embed_dim) # MLP用户隐向量self.item_embed_mlp nn.Embedding(Config.num_items, Config.embed_dim) # MLP物品隐向量# MLP层input_dim 2 * Config.embed_dimmlp_layers []for output_dim in Config.hidden_dims:mlp_layers.append(nn.Linear(input_dim, output_dim))mlp_layers.append(nn.ReLU())input_dim output_dimself.mlp nn.Sequential(*mlp_layers)# 输出层total_dim Config.embed_dim Config.hidden_dims[-1] # GMF MLP层维度self.fc nn.Sequential(nn.Linear(total_dim, 1),nn.Sigmoid())def forward(self, user_ids, item_ids):# 获取用户和物品的隐向量user_emb_gmf self.user_embed_gmf(user_ids)item_emb_gmf self.item_embed_gmf(item_ids)user_emb_mlp self.user_embed_mlp(user_ids)item_emb_mlp self.item_embed_mlp(item_ids)# GMF: 逐元素乘积gmf user_emb_gmf * item_emb_gmf# MLP: 拼接并通过多层感知机concat_emb torch.cat([user_emb_mlp, item_emb_mlp], dim1)mlp self.mlp(concat_emb)# 拼接GMF和MLP的结果neuralcf_emb torch.cat([mlp, gmf], dim1)# 输出层output self.fc(neuralcf_emb).squeeze()return output
5. NeuralCF的优势
NeuralCF 模型通过引入深度神经网络有效突破了传统矩阵分解方法的线性限制能够捕捉用户与物品之间的复杂非线性交互。其主要优势包括
非线性建模能力利用多层神经网络对用户与物品的隐向量进行非线性组合充分发掘潜在高阶交互信息。架构灵活性模型结构可以根据实际问题需求灵活调整隐藏层层数和神经元数量适应不同数据规模与复杂度。优异的泛化性能深度学习框架使得 NeuralCF 在处理稀疏数据时能够更好地防止过拟合提升了模型的泛化能力。
Reference
[1]. He, X., Liao, L., Zhang, H., Nie, L., Hu, X., Chua, T.-S. (2017). Neural Collaborative Filtering. In Proceedings of the 26th International Conference on World Wide Web (WWW ’17), 173–182. ACM.
[2]. 王喆 《深度学习推荐系统》