
人工智能深度学习NLP计算机视觉强化学习【免费下载链接】google-researchGoogle Research项目地址https://gitcode.com/gh_mirrors/go/google-research点击查看免费下载导读本指南围绕 Google Research 开源仓库dot_vs_learned_similarity目录展开它是论文Neural Collaborative Filtering vs. Matrix Factorization RevisitedRendle, Krichene, Zhang, Anderson, 2020的官方复现代码。文章将带你完整走通两个核心实验一是用 NCF 论文的数据集与评估协议复现经典矩阵分解MF基线二是用多层感知机MLP逼近点积函数、检验神经网络是否真能学到内积式相似度。读完本文你将掌握两个可运行的实验脚本的完整参数体系、数据生成与评测原理以及如何用仓库自带的 Perl 工具构造超参数调优所需的留出集。一、论文背景与仓库结构Neural Collaborative Filtering vs. Matrix Factorization Revisited的核心论点是此前 NCF 论文He et al., WWW 2017中神经协同过滤模型相对矩阵分解的显著优势很大程度上来自不公平的实验设置——例如 MF 基线未充分调参、负采样数量不同等。该论文通过更严谨的复现表明经过合理调参的 MF 可以达到与 NCF 相当的效果并进一步从表达能力角度发问MLP 到底能否逼近一个点积本仓库正是这两组实验的可运行代码。仓库目录结构如下README.md实验说明与超参数汇总本文的骨架文档mf_simple.py实验一的 MF 模型实现approx_dot.py实验二的MLP 学习点积实现create_hold_out.pl为超参数调优构造留出集的数据切分工具requirements.txt依赖声明argparse1.1、keras2.3.1、numpy1.16.4注意仓库仅提供代码两个实验所需的数据集如 MovieLens 1M与 NCF 参考实现需要按下文说明自行准备。二、实验一Revisiting NCF Experiments2.1 实验目标与依赖实验一实现了一个带偏置的简单矩阵分解模型直接使用 NCF 论文He et al., WWW 2017的数据集格式与评估协议用于验证MF 基线在 NCF 协议下究竟能达到多好的效果。运行前提需要 NCF 论文的官方参考实现代码及其数据集公开仓库名为neural_collaborative_filtering该参考实现假定运行在 Python 2 运行时下下载后将其中的数据集目录如Data/ml-1m、Data/pinterest-20与Dataset.py、evaluate.py等模块就位将本仓库的 mf_simple.py 复制到与Dataset、evaluate模块相同的目录下脚本通过from Dataset import Dataset与from evaluate import evaluate_model直接复用 NCF 的加载与评测代码见 mf_simple.py。2.2 模型与优化细节源码解读从 mf_simple.py 的模块说明可以看出模型设计的关键点模型形式带偏置的矩阵分解y(u,i) b v_{u,1} v_{i,1} Σ_{f2}^{d} v_{u,f} · v_{i,f}即全局偏置 用户偏置 物品偏置 高维向量的点积第 1 维专门留给偏置见 mf_simple.py 中embedding_dim - 1的传参损失函数Logistic 损失隐式反馈的二分类视角优化算法随机梯度下降SGD每个样本执行一步更新见 mf_simple.py负采样训练中为每个正样本随机采样--negatives个负样本见 mf_simple.py负样本是均匀随机抽取的物品不强制排除已出现在训练集中的物品注释明确说明这种情况应该是无害的目标函数与 NCF 论文一致argmin_V Σ_{(u,i)∈S} [ ln(1exp(-y(u,i))) #neg/|I| · Σ_{j∈I} ln(1exp(y(u,j))) reg · ||V||₂² ]参数初始化嵌入向量按均值为 0、标准差为--stddev的正态分布初始化评估协议完全沿用 He et al. WWW 2017 的协议——对每个测试用户从其测试正样本与 100 个负样本testNegatives中计算HR10与NDCG10见 mf_simple.py 的evaluate封装。2.3 最终实验的运行命令README 中给出图 2 各曲线所用的最终超参数可直接复现MovieLens 1Mpython mf_simple.py --data Data/ml-1m --epochs 256 --embedding_dim 16 \ --regularization 0.005 --negatives 8 --learning_rate 0.002 --stddev 0.1Pinterest-20python mf_simple.py --data Data/pinterest-20 --epochs 256 --embedding_dim 16 \ --regularization 0.01 --negatives 10 --learning_rate 0.007 --stddev 0.1关于实验设置的几个事实来自 README论文将嵌入维度从 16 变化到 192 以绘制学习曲线维度越大训练越久但效果越好每个配置重复 8 次实验报告的是平均值代码刻意不追求运行速度而是追求简单可读因此不适合直接用于大规模生产训练。2.4 命令行参数一览下表整理了 mf_simple.py 中全部命令行参数及其默认值便于自定义实验参数类型默认值含义--datastrData/ml-1m数据集路径NCF 仓库的 Data 目录--epochsint128训练轮数--embedding_dimint8嵌入维度第 1 维用作偏置实际模型维度为embedding_dim - 1--regularizationfloat0.0用户/物品嵌入的 L2 正则系数--negativesint8每个正样本对应的随机负样本数--learning_ratefloat0.001SGD 步长--stddevfloat0.1嵌入初始化的标准差脚本在每个 epoch 结束后都会打印HR与NDCGK10训练曲线可以方便地观察收敛情况见 mf_simple.py。2.5 超参数调优构造留出集README 强调上述最终超参数是在**留出集holdout set**上调优得到的。留出集可以通过仓库自带的 Perl 脚本 create_hold_out.pl 构造./create_hold_out.pl --in Data/ml-1m.train.rating \ --out_train Data/ml-1m.holdout.train.rating \ --out_test Data/ml-1m.holdout.test.rating \ --out_test_neg Data/ml-1m.holdout.test.negative该脚本的工作机制见 create_hold_out.pl 的头部注释输入数据格式为每行一条评分记录userid itemid [...]且按用户排序脚本为每个用户取出第一条记录放入测试集因数据集按时间逆序排列文件中的第一条记录即该用户最近的一次交互模拟预测下一次交互的时序语义生成三个输出文件--out_train从原数据中剔除每个用户首条记录后的训练集--out_test每个用户的首条记录格式与训练集相同--out_test_neg为每个测试样本生成100 个负样本每行格式为(userid, itemid)后跟制表符分隔的负物品 id 列表负样本从全部物品中均匀采样且排除该用户在训练集与测试集中出现过的物品见 create_hold_out.pl输出数据格式与 He et al. WWW 2017 论文完全一致可直接被 NCF 的评测代码读取。更多实验细节见论文附录 A。三、实验二Learning a Dot Product with MLP3.1 实验动机与运行命令第二个实验直接回答论文的核心理论问题一个多层感知机能否学会用点积来度量两个嵌入向量的相似度论文通过构造标签由真实点积 噪声构成的合成数据训练 MLP 拟合点积并对比其 RMSE 与真实点积模型、平凡模型恒预测 0的差距。图 3 各曲线由以下命令生成README 原文python approx_dot.py --embedding_dim {16,32,64,128} \ --num_users {4000,8000,16000,32000,64000,128000} \ --num_items {4000,8000,16000,32000,64000,128000} \ --first_layer_mult {1,2,4} --learning_rate 0.001实验设置要点图 3 的三张子图分别对应first_layer_mult取{1,2,4}纵轴为用户数{4000,8000,16000,32000,64000,128000}且设置num_items num_users每个配置重复 5 次实验报告平均值。3.2 合成数据生成机制源码解读approx_dot.py 的GenerateData函数按如下方式构造数据每个样本x是维度为2 * embedding_dim的实值向量即用户嵌入与物品嵌入的拼接标签y为该对的相似度数据生成时保证两类基线 RMSE 已知见 approx_dot.py 的常量完美模型真实点积的 RMSE 为rmse_best 0.85恒预测 0 的平凡模型 RMSE 为rmse_naive 1.13噪声标准差直接取sd_noise rmse_best嵌入分布标准差则按sd_emb sqrt(sqrt((rmse_naive² - rmse_best²) / emb_dim))反推见 approx_dot.py从而让数据在统计意义上精确匹配上述两个 RMSE 目标生成三份数据集train从固定的num_users × num_items嵌入集合中采样用户-物品对test与 train 同分布但样本与训练集互不重叠fresh使用全新生成的嵌入不受 train/test 固定嵌入集合限制默认 100000 个样本用于检验模型的外推能力——这是本实验最关键的部分因为真实推荐系统会遇到训练中未见过的新用户/新物品主流程按每个用户平均 100 个物品交互估计总样本量并按 90%/10% 切分 train/test见 approx_dot.py。3.3 基线评测与 MLP 训练ComputeRMSE见 approx_dot.py在同一批数据上计算两个基线 RMSE恒预测 0 的平凡模型 RMSE、真实点积模型的 RMSE。脚本运行时会先打印这两组基线再打印 MLP 的 train/test/fresh RMSE三者的差距直接回答了MLP 离点积有多远。MLP 架构由TrainMLP实现见 approx_dot.py输入先经过Flatten形状(2, embedding_dim)展平三个隐藏层宽度分别为first_layer_mult * 2*emb_dim、first_layer_mult * emb_dim、first_layer_mult * emb_dim / 2激活函数为 ReLU论文建议的设定输出层为 1 个线性单元损失为均方误差MSE优化器为 Adam学习率取--learning_ratelrlearning_rate是 Keras 2.x 的 API 写法复现时建议使用与论文时代一致的 Keras 2.3.x 及以上版本。3.4 命令行参数一览下表整理了 approx_dot.py 的全部参数参数类型默认值含义--embedding_dimint64嵌入维度--num_usersint100000用户数--num_itemsint100000物品数--first_layer_multint1首层宽度倍数首层尺寸为2 * emb_dim * first_layer_mult--epochsint32训练轮数--batch_sizeint256批大小--learning_ratefloat0.001Adam 学习率脚本结束时会输出一行以制表符分隔的汇总统计embedding_dim、num_users、num_items及三组数据集上 MLP/平凡模型/点积模型的 RMSE见 approx_dot.py便于批量实验后直接收集数据绘图。四、复现环境与注意事项依赖安装按 requirements.txt 安装即可核心依赖为argparse、keras2.3.1、numpy1.16.4实验二的approx_dot.py依赖 TensorFlow/Keras 2.x其Adam(lr...)写法与新版 Keras 3 不兼容请按脚本年代选择环境实验一的数据与模块mf_simple.py直接 import NCF 参考实现中的Dataset与evaluate_model请确保这些模块与数据集位于同一搜索路径且 Python 运行时与 NCF 参考实现兼容README 注明其假定为 Python 2 运行时复现时需据此搭建环境实验成本README 明确说明实验一代码以简洁为目标、未经速度优化嵌入维度较大如 192或数据规模较大时训练耗时较长建议先在较小配置上验证脚本可运行再扩展到论文规模结果统计口径两组的论文结果均为多次重复8 次 / 5 次的均值单次运行存在随机波动复现时建议保持相同的重复次数并取平均。五、总结dot_vs_learned_similarity为神经协同过滤 vs 矩阵分解之争提供了一个严谨、可运行的实证工具链mf_simple.py让你在 NCF 完全一致的协议下重新审视 MF 基线的真实水平approx_dot.py则把问题抽象为MLP 能否逼近点积这一可量化的合成任务并用 train/test/fresh 三组 RMSE 清晰刻画了神经网络的拟合与外推能力。结合 create_hold_out.pl 的留出集构造工具这套代码既可用于复现论文图 2、图 3 的关键结论也可作为后续推荐模型对比实验的标准化基线。赞分享人工智能深度学习NLP计算机视觉强化学习【免费下载链接】google-researchGoogle Research项目地址https://gitcode.com/gh_mirrors/go/google-research点击查看免费下载相关推荐矩阵力量Book4_Power-of-Matrix从矩阵分解到深度学习优化矩阵力量Book4_Power of Matrix从矩阵分解到深度学习优化 你是否还在为高维数据处理烦恼是否想知道机器学习模型如何高效提取特征本文将带你通文档教程机器学习学术论文复现终极指南从Jupyter Notebook到研究论文机器学习学术论文复现终极指南从Jupyter Notebook到研究论文 在机器学习领域学术论文的复现是验证研究成果、推动技术进步的关键环节。GitHub教程机器学习Caffe 卷积实现解析从 im2col 归约到 BLAS/GPU 矩阵乘法Caffe 卷积实现解析从 im2col 归约到 BLAS/GPU 矩阵乘法 Caffe 处理卷积的核心策略是把卷积运算整体归约为一次矩阵 矩阵乘法G深度学习计算机视觉上一篇social-auto-upload单元测试编写如何为上传器编写测试用例下一篇Serialize-Error 项目常见问题解答创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考