2023/4/23周报

news2024/11/15 12:40:22

目录

摘要

论文阅读

1、标题和现存问题

2、矩阵分解(MF)和图神经网络

3、GNN_MF框架

4、项目聚集和社会聚集

5、实验准备和结果

2、深度学习

1、GCN

2、代码实例

总结


摘要

本周在论文阅读上,阅读了一篇基于GNN的矩阵分解推荐算法论文。该算法通过神经网络,将社交网络图以及用户项目图联系起来,学习目标用户在社会空间以及项目空间上的特征向量。通过MLP将两个特征向量串联提取用户的潜在特征向量,集成在概率矩阵分解模型上,产生预测评分。在深度学习上,学习了GNN中的GCN模型,以及进行简单的实例代码复现。

This week,in terms of thesis reading,perusaling a paper on matrix decomposition recommendation algorithm based on GNN.This algorithm connects social network graphs and user project graphs through neural networks to learn the feature vectors of target users in both social and project spaces.By concatenating two feature vectors through MLP, the user's potential feature vectors are extracted and integrated into a probability matrix decomposition model to generate predictive scores.In deep learning,studying the GCN model in GNN and performed simple instance code reproduction.

论文阅读

1、标题和现存问题

标题:基于GNN的矩阵分解推荐算法

现存问题:在推荐系统的任务中,用户-项目交互包含了用户对推荐项目的评价,是一种典型的图形数据 。 因此,有人提出了GNN来解决推荐问题 。 sRMGCNN 采用GNN提取用户和项目的图嵌入,然后结合递归神经网络进行扩散过程。尽管先前的工作取得了令人瞩目的成功,但人们对 GNN 的社会推荐关注甚少。文章提出了一种用于社会推荐的图神经网络来填补这一空白。

2、矩阵分解(MF)和图神经网络

在众多协同过滤推荐算法中,矩阵分解已成为最受欢迎的推荐算法之一,它主要是将用户和项目嵌入到一个共享的潜在空间中,将用户和项目用特征潜在向量表示,用户和项目之间的交互被建模为其潜在特征向量的内积。

矩阵分解将用户项目评分矩阵分解为两个低秩矩阵的乘法,其中可以存储用户和项目的潜在因素。因此,矩阵分解可以发现具有相似内容和隐含特征的项目。矩阵分解的主要难题是在因子向量中找到用户和项目之间的映射。为了学习因子向量pu和qi ,将评级矩阵R中的值作为训练数据,其目标函数:

GNN主要思想是如何使用神经网络迭代地从局 部图邻域聚集特征信息。同时,节点信息经过转换和聚合后可以通过图来传播。因此,GNN自然地整合了节点信息和拓扑结构,并被证明在表示学习方面具有强大的能力。另一方面,社会推荐中的数据可以用两个图来表示。这两个图包括表示用户之间关系的社交图和表示用户与项目之间交互的用户项图。用户同时参与到这两个图中。此外,社交推荐的自然方式是将社交网络信息纳入用户和项目潜在因素学习。学习项目和用户的表征是建立推荐系统的关键。

3、GNN_MF框架

模型框架图:

GNN_ MF的目标是找到用户和项目的潜在模型,其条件分布可以定义为:

对于概率矩阵分解中的用户潜在特征向量,有神经图生成的用户潜在特征向量向量来近似,如下所示:

定义一个给定W和X的U的条件分布来建模用户潜在模型:

使用两种类型的聚合 从两个图中学习潜在因子,第一个聚合表 示为项目聚合,用于从用户项目图中学习项目空间用户自身偏好潜在因子,第二种是社会聚集,从社会图中学习社会空间用户社交偏好潜在因素,然后,将这两个因素结合起来,形成最终的用户潜在因素。

4、项目聚集和社会聚集

项目聚集

项目聚合的目的是通过考虑用户ui交互过的项目和用户对这些项目的评分意见,来学习项目空间用户潜在因素,具体聚合函数如下:

在用户-项目交互过程中,用户可以表达他/她的观点(或评分分数),用r表示。这些对项目的看法可以捕捉到用户对项目的偏好,有助于对项目空间用户潜在因 素进行建模。为了建立观点模型,对于每一类意见r,引入一个意见嵌入向量er。针对用户ui与项目va之间的意见r交互,通过多层感知器(MLP)将意见交互表示建模为项目嵌入qa和意见嵌入er的组合。

形式上,注意力网络被定义为:

最后的注意权重通过使用Softmax函数对上述注意得分进行归一化得到:

社会聚集

为了从这个社会化的角度来表达用户的潜在因素, 提出了社交空间用户潜在因素,即从社交图中聚合相邻用户的项目空间用户潜在因素。具体而言,ui 的社交空间用户潜因子,是将用户在ui的邻居N(i)中的项目空间用户潜因子聚合起来,如下所示:

用一个双层神经网络来执行一个注意力机制,通过将社会注意力和目标用户嵌入pi相关联,提取出这些对ui有重要影响的用户,并 对其关联强度进行建模:

为了更好地了解用户潜在因素,需要将项目空间用户潜在因素和社会空间用户潜在因素结合起来考虑,因为社会图和用户项目图从不同的角度提供了关于用户的信息。通过一个标准的MLP将这两个潜在因素结合 成最终用户潜在因素,用户潜在因素定义为:

5、实验准备和结果

实验采用两个具有代表性的数据集Ciao和Epinions:

采用五折交叉验证来对推荐模型进行训练与测试。把数据集中用户对项目的评分数据平均分成5等份,在每次实验中,随机选取1组作为测试集,其余4组作为训练集。5次实验确保每 一组都被测试,最终实验结果为5次实验结果的平均值。利用两个指标来衡量预测精度,即均方根误差(RMSE)和平均绝对误差(MAE):

文章提出的算法和PMF、SocislMF、NeuMF以及DeepSoR等经典推荐算法进行比较

SocialMF和DeepSoR的表现总是优于PMF。所有这些方法都是基于矩阵分解的。SocialMF和DeepSoR同时利用评级和社交网络信息;而PMF只使用评级信息。 这些结果支持社会网络信息是对推荐的评级信息的补充。

NeuMF的性能比PMF好得多。两种方法都只利用评级信息。然而,NeuMF是基于神经网络结构的,这表明了神经网络模型在推荐系统中的强大作用。

DeepSoR的性能优于SocialMF。它们都利用了评级和社交网络信息。然而,DeepSoR是基于神经网络体系结构的,这进一步表明了神经网络模型在推荐中的作用。

文章方法GNN_MF始终优于所有对比方法。与 DeepSoR 相比,GNN_MF提供了先进的模型组件来集成评级和社会网络信息。此外,还提供了一种在用户项图中同时考虑交互和意见的方法

2、深度学习

1、GCN

GCN是图卷积神经网络(Graph Convolutional Network)的缩写,是一种基于图结构数据的神经网络,主要用于节点分类、图分类和链接预测等任务。GCN是GNN(Graph Neural Network)的一种特殊形式,属于其中的一种。相对于GNN中的其他模型,GCN有以下优势:

  1. 参数共享:GCN在计算邻居节点的信息时,采用的是一致的卷积操作,这意味着模型中不同节点的参数是共享的,从而大大减少了模型参数量,避免了过拟合的问题。

  2. 可解释性:GCN的卷积操作采用的是邻接矩阵和输入特征矩阵的矩阵乘法,这种方式比较直观,容易理解,也方便对模型进行可视化和解释。

  3. 适用范围广:GCN适用于各种类型的图数据,包括稠密图、稀疏图和带权图等等,而且对于一些小规模的图,GCN的效果也很好。

  4. 鲁棒性:GCN在处理不完整的图时也有一定的鲁棒性,即便是在有少量的节点和边缺失的情况下,GCN仍然能够保持一定的准确率。

  5. 易于实现:相对于其他GNN模型,GCN的实现较为简单,只需要进行一些简单的矩阵乘法即可,这也使得GCN成为一种较为常用的图神经网络模型。

    一些 GCN 的缺点如下:

    1. 局限性:GCN 对于图数据的处理主要是基于节点和边的局部信息,而忽略了全局信息,因此在处理大规模的图数据时可能存在一些局限性。

    2. 过拟合:GCN 容易出现过拟合问题,特别是在小数据集上进行训练时,因为 GCN 模型本身的复杂度较高,而小数据集可能无法提供足够的信息进行模型的训练,这样就容易出现过拟合。

    3. 过于依赖图结构:GCN 对于图结构的依赖性很高,如果输入的图结构出现错误或者异常,那么就可能导致模型的性能下降或者无法正确处理。

    4. 计算效率:GCN 计算时需要进行大量的矩阵计算和向量乘法,因此在处理大规模图数据时,可能需要较长的计算时间和较高的计算资源。

对于每个节点 i,需要聚合其相邻节点的信息 h_j,其中 j\in N(i)表示节点i的邻居节点集合。聚合的过程可以用以下公式表示:

其中,W表示权重矩阵,sigma表示非线性激活函数,c{ij}是归一化因子,可以定义为节点i和节点 j的度数的乘积,即 c{ij}=\sqrt{d_i} \sqrt{d_j},其中d_i和d_j分别是节点i和节点j的度数。

该公式中,{c_{ij}可以将节点j对节点i的信息传递进行归一化,使得每个节点的信息权重相同。在实际实现中,这一操作可以通过对邻接矩阵进行标准化来实现。

2、代码实例

使用PyTorch Geometric在KarateClub数据集上训练图卷积网络(GCN)。KarateClub数据集是一个社交网络数据集,该代码实现了一个包含三个GCN层和一个线性分类器的GCN模型,并使用交叉熵损失函数和Adam优化器来训练模型。通过可视化工具展示了训练过程中嵌入向量的变化情况,并在每100个epoch后进行更新。最后,使用NetworkX和Matplotlib库将KarateClub数据集以图形的形式展示出来。

import torch
import networkx as nx
import matplotlib.pyplot as plt
from torch_geometric.datasets import KarateClub
from torch_geometric.utils import to_networkx
from torch.nn import Linear
from torch_geometric.nn import GCNConv
import time

def visualize_graph(G,color):
    plt.figure(figsize=(7,7))
    plt.xticks()
    plt.yticks()
    nx.draw_networkx(G,pos=nx.spring_layout(G,seed=42), with_labels=False,node_color=color,cmap="Set2")
    plt.show()

def visualize_embedding(h,color, epoch=None, loss=None):
    plt.figure(figsize=(7,7))
    plt.xticks()
    plt.yticks()
    h = h.detach().cpu().numpy()
    plt.scatter(h[:,0],h[:,1],s=140, c=color, cmap="Set2")
    if epoch is not None and loss is not None:
        plt.xlabel(f'Epoch:{epoch},Loss: {loss.item():.4f}', fontsize = 16)
    plt.show()



datset = KarateClub();
# print(f'Dataset:{datset}')
# print('===========')
# print(f'Number of graphs:{len(datset)}')
# print(f'Number of feature:{datset.num_features}')
# print(f'Number of classes:{datset.num_classes}')


data = datset[0]
# print(data)
#以矩阵的形式展示图之间的关系(邻接矩阵)
edge_index = data.edge_index
print(datset.num_classes)
# print(edge_index.t())
print(data)

class GCN(torch.nn.Module):
    def __init__(self):
        super().__init__()
        torch.manual_seed(1234)
        self.conv1 = GCNConv(datset.num_features, 4) #定义好输入特征和输出特征
        self.conv2 = GCNConv(4,4)
        self.conv3 = GCNConv(4,2)
        self.classifier = Linear(2, datset.num_classes)

    def forward(self, x, edge_index):
        h = self.conv1(x, edge_index)#输入特征和邻接矩阵
        h = h.tanh()
        h = self.conv2(h, edge_index)
        h = h.tanh()
        h = self.conv3(h, edge_index)
        h = h.tanh()

        out = self.classifier(h)

        return out,h

model = GCN()
criterion = torch.nn.CrossEntropyLoss() #损失函数
optimizer = torch.optim.Adam(model.parameters(), lr=0.01) #优化器

def train(data):
    optimizer.zero_grad() #梯度清零
    out, h = model(data.x, data.edge_index) #通过模型前向传播
    loss = criterion(out[data.train_mask], data.y[data.train_mask])#通过train_mask来计算损失
    loss.backward()
    optimizer.step()
    return loss,h

for epoch in range(401):
    loss, h = train(data)
    if epoch % 100 ==0:
        visualize_embedding(h, color=data.y, epoch=epoch, loss=loss)
        time.sleep(0.3)


#将数据集以图的形式表现出来
G = to_networkx(data, to_undirected=True)
visualize_graph(G, color = data.y)


​ ​ ​

总结

本周仍旧继续对GNN的相关知识展开学习,GCN作为GNN中的一种模型,通过卷积操作来处理图形数据,在非规则的图像数据上能有很好的效果,除此之外GCN通过在图形中考虑局部和全局信息来提高其表现以及利用卷积的参数共享和稀疏性质来提高计算效率

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/452958.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【机器学习】 多维kd-tree的python实现

一、说明 本篇主要介绍一个用python实现kd-tree的代码,以及围绕代码实现的kd-tree原理。期望能够为读者打开另一个视角,看待kd-tree的好处。 二、什么是K维树? K-D 树(也称为 K 维树)是一种二叉搜索树,其中…

甘蔗种植成本居高不下 培育良种和提高机械化覆盖率或成行业破局关键

一、甘蔗种植行业概述及分类 甘蔗是一种重要的经济农作物,是世界上最重要的糖料作物及较有发展潜力的可再生能源作物,现广泛种植于热带及亚热带地区,最大的甘蔗生产国是巴西、印度和中国。 根据观研报告网发布的《中国甘蔗种植市场发展态势分…

matlab 点云滤波(中值、均值、高斯滤波)代码

点云中值、均值、高斯滤波 介绍一下滤波函数 smoothdata: 对含噪数据进行平滑处理 B smoothdata(___,method) 为上述任一语法指定平滑处理方法。例如,B smoothdata(A,sgolay) 使用 Savitzky-golay 滤波器对 A 中的数据进行平滑处理。Method-平滑处理方法 "…

java实现修改excel中数据格式

目录 背景:过程:方案:个人想法:总结:1、清楚边界,全局观2、工欲善其事,必先利其器3、别总想着改源码,别总觉得自己做不出来,要给自己积极的心理暗示。有用。 背景&#x…

基于深度强化学习训练《街头霸王·二:冠军特别版》通关关底 BOSS -智能 AI 代理项目上手

文章目录 SFighterAI项目简介实现软件环境项目文件结构 运行指南环境配置验证及调整gym环境: gym-retro 游戏文件夹错误提示及解决Could not initialize NNPACK!错误提示:libGL error: MESA-LOADER: failed to open swrast 运行测试训练模型查看曲线 Tip…

《Redis设计与开发》读书笔记

《Redis设计与实现》读书笔记 简单动态字符串 SDS的定义 结构: buf数组:用于保存字符串 len属性:记录SDS中保存字符串的长度 free属性:记录buf中未使用字节数量 遵循C字符串以空字符串结尾的惯例,保存空字符串的…

默认成员函数之构造函数,构造函数的特点,创建,调用与对象创建的一语双关,默认构造函数等

内置类型与自定义类型 C当中的类型的话分为两类:一种就是内置类型/基本类型,就是c语言自带的那些类型基本类型,如int, char, double, 指针(任何类型的指针,因为指针就是地址嘛)等等;还有就是自…

某安全对抗行走APP逆向分析

1.定位url 抓包: https://api5.xxxx.com/xxx-rest-service/message/fun_getnearby 看一下参数: opentime:时间戳 reqdata:base64编码 sign 未知,需要解密 # -*- coding: utf-8 -*- # @Author : Codeooo # @Time : 2022-10-14import frida, sysm199a = "&qu…

learn_C_deep_5 (语句和表达式的概念、if语句的多种语法结构、C语言有没有布尔类型、“零值”的比较)

目录 语句和表达式的概念 if语句的多种语法结构 注释的便捷方法(环境vs) if语句执行的过程 逻辑与&& 逻辑或|| 运算关系的顺序 ​编辑 C语言有没有布尔类型 C99标准 sizeof(bool)的值为多少? _Bool原码 BOOL、TRUE、…

IT_开发提测标准规范

背景 公司 IT 规模小,开发提测质量差,流程不规范,导致测试任务重,于是推行 :IT_开发提测标准规范,正文如下;拟定开发提测标准规范后,测试与项目经理内部评审后,发至IT群…

低相位噪声链路调试分析

上图为原始状态,与项目结项评审指标差不多,确实存在几个噪声比较差的点。 频率分布大约在几Hz,20K,50K左右。 由于测试时由子卡进行输出,采用直接进行直接输出,以看出,明显的尖峰已经没有了,只剩下20K左右的尖峰,但是总体来说,效果很差,可能时单端输出的问题。试…

【SVN已解决】svn下载成功图标不显示解决方法

介绍 这里是小编成长之路的历程,也是小编的学习之路。希望和各位大佬们一起成长! 以下为小编最喜欢的两句话: 要有最朴素的生活和最遥远的梦想,即使明天天寒地冻,山高水远,路远马亡。 一个人为什么要努力&a…

【小技巧】word文档编辑技巧(一)

文章目录 一、显示显示导航显示所有字符 二、格式格式-三级目录格式-文本格式-图格式-表格式-公式格式-参考文献 三、小技巧交叉引用连续交叉引用表/图目录等自动更新分节符设置页眉/页码word转pdf带导航 一、显示 显示导航 开启导航:视图->显示框->导航窗格…

《春琴抄》庭有枇杷树,今已亭亭如盖矣~

《春琴抄》庭有枇杷树,今已亭亭如盖矣~ 谷崎润一郎(1886年7月24日~1965年7月30日),日本近代小说家,唯美派文学主要代表人物之一,《源氏物语》现代文的译者。 代表作有《刺青》《春琴抄》《细雪》…

客户体验的重要性和企业发展的紧密联系

近年来,随着企业数字化转型的加速,客户服务的意义越来越被人们所重视。客户服务的质量不仅直接影响到客户满意度和忠诚度,而且会间接影响到企业的品牌口碑和市场竞争力。然而,目前市面上的很多企业帮助中心搭建平台,可…

【油猴脚本】ChatGPT 智能 Prompts 提示词助手

chatGPT 插件脚本 中文 Prompt 训练对话框 ChatGPT 智能 Prompts 可以为你带来更好的使用体验助你训练好用的ChatGPT:添加快捷指令(prompts)新增:论文专家角色、支持自动发送、固定智能助手…还有更多需求可以到仓库Issues里发起…

Qt Quick - ScrollView

Qt Quick - ScrollView 使用总结 一、概述二、使用四、分级五、滚动条控制六、触摸vs.鼠标交互七、美化 一、概述 ScrollView 为用户定义的内容提供滚动功能。类似QScrollArea 的功能。 二、使用 第一个例子展示了ScrollView的最简单用法。 ScrollView {width: 200height: …

本周大新闻|MR头显或成WWDC23重头戏;PICO 4 Pro本周开售

本周XR大新闻,AR方面,彭博社Mark Gurman确认XR头显将成为WWDC重头戏,同时将兼容iPad应用;Inprentus将发布用于AR光波导方案的闪耀光栅工艺;富采展示0.12英寸蓝光Micro LED;锐思华创公布多层光波导PGU&#…

大数据技术之Kafka集成

一、集成Flume 1.1 Flume生产者 (1)启动Kafka集群 zkServer.sh startnohup kafka-server-start.sh /opt/soft/kafka212/config/server.properties & (2)启动Kafka消费者 kafka-console-consumer.sh --bootstrap-server 192…

Django框架之定义模型和表迁移

django3.0 定义表模型并通过定义好的模型实现源代码创建数据表。 概述 模型是一个用于表示数据的Python类,包含基本的数据字段和行为。 通常一个模型就代表一张数据库表。 模型继承自django.db.models.Model,模型的每一个属性代表一个数据的字段。 定…