版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
图神经协同网络算法设计与实现案例分析目录TOC\o"1-3"\h\u27600图神经协同网络算法设计与实现案例分析 11940(一)数据集描述 117391(二)实验的衡量指标 159771.召回率 175132.折损累计增益 2321383.归一化折损累计增益 228056(三)对照组算法 230206(四)超参数设置 229643(五)实验环境 34951(六)实验代码实现 341031.用户交互接口 4218662.数据处理模块 4109083.网络定义模块 4296714.训练主体程序 5211325.测试模块 519176.Main模块 5134997.程序架构图 619650(七)训练结果对比 622943(八)模型收敛速度对比 722433(九)总结 7(一)数据集描述实验数据集为现实世界中的常用推荐数据集Gowalla[23]和amazon-book,数据如下:表5-1数据集统计数据数据集用户数物品数User-Item稠密度Gowalla298584098110273700.00084AmazonBook526439159929841080.00062在测试的过程中,将用户没有交互历史的项目看作负面项目,算法的最后将会输出用户对于所有未直接交互的物品(训练集为直接交互)的评分。因为测试集是从真实数据中随机选出的,所以可以作为参考来计算所有用户的召回率和折损累计增益。因为预测结果将会赋予每个物品预测值,因此需要排序选择部分结果进行检测。实验中将会筛选前10和前20的物品来进行计算。(二)实验的衡量指标1.召回率作为评估预测准确度中用到的钙奶呢,在实验中用到的两个数据集中预测TOPK物品推荐准确度。召回率又称为查全率,是推荐出的项目在该项目系统中于所查询关键字相同物品的比率,换句话说就是推荐筛选出的用户的预测topK感兴趣的物品和用户所有感兴趣项目的比值。Re2.折损累计增益累计增益(CG)是的搜索结果相关性分数的总和,代表着推荐出的K个项目和事实相比的得分加和,但是计算的时候只考虑其中的项目而不考虑项目之间的顺序。因此,在此基础上,提出了折损累计增益(DCG),在每个项目相关的粉上附加一个折损值,目的是为了排名更靠前的结果更能影响结果所以添加入折损项1/log(i+1)因此,DCG评分计算公式为:rⅇ3.归一化折损累计增益顾名思义,归一化折损累计增益是针对不同推荐对象的返回兴趣对象不同二提出的。因为累计增益的计算方式是使用加和计算,因此兴趣广泛的对象和兴趣专一的对象的得分是不一致的,没有办法对两个不同的搜索结果来进行比较,因此需要进行归一化处理。nDC分母IDCG指的是当前用户的所有兴趣项的最大DCG值。(三)对照组算法为了对比出前文中的网络的有效性,将本文中提出的图神经神经网络与其他算法进行对比。对比对象为BPRMF和LightGCN[19]。BPRMF就是经过贝叶斯个性化排序的矩阵分解算法。LightGCN的作者认为,对于协同过滤而言非线性激活函数和特征嵌入化表示前的特征变换矩阵没有很大的用途,理由是输入的数据仅仅为ID的嵌入表示,没有节点自带的特征信息,所以没有计算提取对应非线性特征的必要。(四)超参数设置1.对于输入数据的嵌入层大小统一设置为64,优化器函数选择Adam,对于节点Dropout和学习率通过在验证集上进行网格搜索确定为0.1和0.001.2.整个模型的参数初始化不使用完全随机初始化二十使用Xavier初始化器[24]3.嵌入信息传播层L通过验证集搜索最终确定三层拟合程度合适,在四层时前期拟合程度类似但是在训练次数多的情况下会出现过拟合导致的泛化能力下降,因此在训练集上训练时使用L=3。表5-2嵌入信息传播层层数L对比GowallaAmazonBookRecall10Ndcg10Recall10Ndcg10L=20.1540260.1301120.0330150.024134L=30.1568720.1327470.0337150.025409L=40.1570170.1327460.0344010.026230因为在L为1的时候相当于仅仅交互自己的一阶邻居而不会传播图的协同信息(五)实验环境实验使用Python进行实现,用Pytorch进行训练,相对于Tensorflow,Pytorch可以自定义图,不需要完整定义网络去运行,方便调试。在Pytorch中变量使用张量Tensor来表示,运行机制类似于Numpy并且定义了多种数学操作和自动求导操作,更符合实验自定义网络的需求。本次实验的硬件配置如下:表5-3实验环境硬件配置配置名称配置参数CPUIntel(R)Xeon(R)CPUE5-2678v3内存64GGPUNVIDIAGeForceRTX2080*2操作系统Ubuntu20Python版本3.8.3Pytorch版本1.5.0(六)实验代码实现实验项目将各个功能进行模块化设计,降低每个模块之间的耦合度从而最大程度上保证代码的稳定性。下面来说明具体的程序实现细节。1.用户交互接口因为训练程序运行在服务器命令行界面上,所以在训练程序上提供命令行参数接口非常必要,可以通过结合bash脚本快速实现对于超参数的网格化搜索以及对不同超参数的快捷设置。此功能使用argparse开源库来进行实现,其中包含对数据集,学习率,损失函数,batchsize,dropout,运行模式切换(测试,训练,预测)以及多进程处理数据等相关参数的传递,并将其封装为包进行调用。if__name__=='__main__':args=parse_args()2.数据处理模块数据集(gowalla,amazonbook)初始为txt数据文件,通过逐行读入后构建交互矩阵并通过pickle包进行序列化存储,这样就不需要再次进行文件读入操作而是直接加载成为numpy向量。#在主程序调用此模块将会传入多核加载变量来通过torch.utils.data.DataLoader函数进行快速加载.3.网络定义模块网络定义模块中使用pytorch来编写图神经协同网络类,主要分为初始化部分,网络结构定义部分,网络操作函数等。初始化部分分为结构定义和整体网络初始化。因为嵌入信息传播层是自己定义的网络结构,包含消息聚合和消息构建操作,需要继承torch中的nn.Module来自行实现。嵌入信息传播层实现分为结构定义和正向传播两个部分,虽然在训练的过程中需要进行反向传播,但是torch框架有着自动求导的特性,因此反向传播相关操作会依靠正向传播的相关操作进行自动生成。根据传播层的定义,首先需要构建网络来实现两个矩阵对用户嵌入特征向量和物品嵌入向量进行乘积,这里使用torch.nn中的Liner方法来实现,并且添加torch.nn中的drop模块和LeakyReLU。最终对这些模块中的所有参数进行初始化。因为不同的参数初始化方法对于网络的收敛速度有很大的影响,所以使用xavier初始化方法[24]。在这之后按照顺序定义实现正向传播部分,这一部分就是定义该部分网络的运行顺序,首先实现两个部分的矩阵相乘再相加,最后经过dropout返回处理过后的Embedding。图神经网络协同算法整体网络定义在类的初始化模块中接受外层传入的参数例如层数,batchsize,dropout,交互矩阵等。然后按照传入的矩阵规格和嵌入层维数K设置Embedding层作为整体网络的输入部分,这里使用torch.nn中已经定义好的模块。之后定义上面自行实现的嵌入信息传播层,通过nn.ModuleList进行堆叠来实现多层网络叠加,在叠加之后需要对不同维度的embedding进行组合并进行归一化处理,最终再次使用xavier初始化方法。然后自按照顺序定义forward函数,不同的是,返回值将用户embedding和物品embedding进行展平连接。4.训练主体程序训练主体程序中采用工厂模式,通过外层传入的网络来进行训练,首先对于网络进行梯度清零和损失值清零,然后运行forward函数来进行计算,计算出预测的相似度高的用户,然后清空梯度进行反向传播,进行更新,对于一个epoch中的所有样本都进行相同的操作来完成一次训练。5.测试模块测试模块在运行前需要开启评估模式(torch.nn.Module自带),因为ndcg和召回率都是需要所有数据进行计算而不能采样,所以需要进行矩阵相乘得到评分矩阵来进行计算。评分数据集使用之前划分的测试集即20%的总体数据,在传入之后只用zip方法来生成迭代器逐个进行运算测试。因为数据是在cpu哪进行运算的,所以在这里通过Mp.pool开启进程池来进行并行计算。在计算中首先需要在随机抽取的用户u中获取topK的物品下标,然后计算召回率和ndcg进行返回。对于测试集中的所有结果做平均后返回作为当前测试结果。6.Main模块Main模块负责将以上各个模块进行组合来运行,首先调用用户交互结构获得用户命令行数据,之后调用数据处理模块生成训练集、测试集numpy矩阵,在测试状态下会生成小规模的测试矩阵(随机选取并且会对序号进行重新编码),之后是数据加载模块生成拉普拉斯矩阵并将上面所有变量通过调用.cuda()方法导入到gpu中,这里支持多gpu进行运算。之后就是初始化图神经协同网络类并将其导入gpu中,作为参数运行训练主体程序Session。之后定义epoch进行训练。7.程序架构图(七)训练结果对比Gowalla数据集下的模型性能表现AmazonBook数据集下的性能表现(八)模型收敛速度对比(九)总结通过实验结果可以得知,采用图神经网络算法的NGCF和LightGCN具有更好的特征提取能力,在召回率和折损累计增益方面具有更佳的表现。在采用图神经网络的两个算法中进行对比去除在Gowalla数据集中NGCF在TOP10召回的表现优于LightGCN,其余数据均低于LightGCN,说明在隐反馈数据集中,因为输入数据中的节点没有相关的特征导致预先设定的提取节点自身信息的特征提取矩阵和非线性激活函数在处理仅由节点编号表示的节点时没有起到作用而仅仅减弱了有效信息的传递,因此在用单位矩阵处理的LightGCN中的效果更好。
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 1.2我们都是社会的一员导学案(含答案)-2025-2026学年统编版道德与法治八年级上册
- 2026丽水职业技术学院招聘专业技术人员19人备考题库(一)及1套完整答案详解
- 行业营销活动策划方案模板多渠道营销支持
- 环保公益活动策划互动方案
- XX初中2026年春季学期学生意外伤害处理流程
- 家居设计责任承诺书范文8篇
- 企业数据访问权限精细化管理方案
- 彩钢瓦基础施工方案(3篇)
- 机器学习优化银行数据分析模型
- 改坡道施工方案(3篇)
- 2026简易标准版离婚协议书
- 2026广东东莞市谢岗镇社区卫生服务中心招聘纳入岗位管理编制外人员7人备考题库及一套答案详解
- 湖南省长沙市天心区长郡中学2026届高一生物第一学期期末统考试题含解析
- 2025-2030中国低压电器行业融资渠道及应用领域发展现状研究报告
- 2025年csco肝癌治疗指南
- 2026云南公务员考试(6146人)易考易错模拟试题(共500题)试卷后附参考答案
- 2025年直招军官笔试题型及答案
- 烟台交通集团有限公司管理培训生招聘参考题库必考题
- 仓储安全检查标准及执行流程
- 恶劣天气应急处理演练方案
- 骨质疏松护理要点解读
评论
0/150
提交评论