当前位置: 首页 > news >正文

【源码复现】图神经网络之PPNP/APPNH

目录

  • 1、论文简介
  • 2、论文核心介绍
    • 2.1、现有方法局限
    • 2.2、PageRank&Personalized PageRank
    • 2.3、PPNP&APPNP
  • 3、源码复现
    • 3.1、模型总体框架
    • 3.2、PPNP
    • 3.3、APPNP
    • 3.4、MLP(两层)

1、论文简介

  • 论文题目——《PREDICT THEN PROPAGATE: GRAPH NEURAL NETWORKS MEET PERSONALIZED PAGERANK》
  • 论文作者——Johannes Klicpera, Aleksandar Bojchevski & Stephan Gu ̈nnemann
  • 论文地址——PREDICT THEN PROPAGATE: GRAPH NEURAL NETWORKS MEET PERSONALIZED PAGERANK
  • 源码——源码链接

2、论文核心介绍

2.1、现有方法局限

 现有的方法,仅仅使用了局部有限的邻域信息,更大的邻域信息并没有考虑到。例如,GCN,它采用平均的方法来聚合一阶邻域信息,通过堆叠多层来考虑到更高阶的邻域信息(论文中实际是两层);GAT则是采用注意力机制来学习不同邻域结点信息对当前结点的重要性,也就是说它是对周围邻域结点信息的加权平均。上述方法仍然是浅层的网络,并没有利用到深层邻域信息。
 现有方法的另外一个缺点就是过平滑现象(oversmoothing),这也是GCN不能堆叠多层的原因所在。另有作者,通过建立GCN和随机游走(random walk)的关系,发现当GCN的层数增加,GCN会收敛到随机游走的极限分布,会使不同类的结点之间变得不可分,导致GCN性能下降。
 为了解决上述的问题,作者提出了一个新的传播方案,这个方案的灵感来自于个性化PageRank算法,它平衡了局部邻域信息与更大的邻域信息的需要,允许更多的传播步骤而不会导致过平滑现象。此外,作者将神经网络从信息传播中分开来,允许去实现更大范围的传播而不用改变神经网络结构,由于这种特性,也可以将SOTA预测方法与文中的传播方案进行融合。

2.2、PageRank&Personalized PageRank

 PageRank算法通过网页链接重要性得分计算。重要性可认为是网页链接点击。PageRank算法给定一个概率值,定义为网页访问的概率。一般地, 1 N \frac{1}{N} N1 表示为每个网页节点初始化的概率, P R \rm{PR} PR也是一个初始化的概率值。PageRank 是一个迭代算法,因此 P R \rm{PR} PR 值初始化 1 N \frac{1}{N} N1 N N N表示为节点的数量。 P R \rm{PR} PR值的总和一般为1,当 P R {\rm{PR}} PR越大,说明重要性越大。
给定节点 v v v,求节点 v v v P R {\rm{PR}} PR值,
P R ( v ) = ∑ u ∈ N v P R ( u ) O ( u ) PR(v) = \sum_{u \in \mathcal{N}_v }\frac{PR(u)}{O(u)} PR(v)=uNvO(u)PR(u)
N v \mathcal{N}_v Nv表示所有链接到节点 v v v的集合。 O ( u ) O(u) O(u)表示节点 u u u的对外链接数。最早提出的PageRank算法存在着一些缺点,例如当一些节点存在自链接,或者是一些节点的出链节点形成循环圈时,PageRank在迭代过程中会出现 P R {\rm{PR}} PR持续增大,不会减小的情况。对于上述问题,PageRank算法被重新进行改进
P R ( v ) = α ∑ u ∈ N v P R ( u ) O ( u ) + ( 1 − α ) N \mathrm{PR(v)=}\alpha\sum_{\mathrm{u}\in\mathcal{N}_v}\frac{\mathrm{PR(u)}}{\mathrm{O(u)}}+\frac{(1-\alpha)}{\mathrm{N}} PR(v)=αuNvO(u)PR(u)+N(1α)
α \alpha α是一个超参数,取值一般为0.85。 α \alpha α表示节点跳转时的概率,不依据节点之间的链接进行跳转。
 PageRank算法衍生出的模型个性化的PageRank算法,主要利用图中节点的链接关系来迭代计算节点的权重。PageRank算法使用随机游走的策略来访问图中节点。PageRank算法与个性化Page Rank算法的区别在于随机游走时的跳转行为不同。个性化的PageRank算法对跳转行为进行约束,指定调转到的对外链接为特定的节点。例如在个性化排序时,用户只能跳转到一些特定的节点,这些节点表示用户偏好的那些节点。

PPR ′ ( v ) = α ∑ u ∈ N v P R ( u ) O ( u ) + ( 1 − α ) r v \text{PPR}^{'}(\mathrm{v})=\alpha\sum_{\mathrm{u}\in\mathcal{N}_v}\frac{\mathrm{PR(u)}}{\mathrm{O(u)}}+(1-\alpha)\mathrm{r}_\mathrm{v} PPR(v)=αuNvO(u)PR(u)+(1α)rv
r v = { 1 v = u 0 v ≠ u \mathrm r_\mathrm{v}=\begin{cases}1&\mathrm{~v=u}\\0&\mathrm{~v\neq u}\end{cases} rv={10 v=u v=u
个性化PageRank算法中,用户的偏好表示为 r ∣ v ∣ = 1 \mathrm r|\mathrm{v}| = 1 rv=1,原始的PageRank采用的计算方式为 Π p r = A r w Π p r \Pi_{pr} = A_{rw}\Pi_{pr} Πpr=ArwΠpr, Π p r 是 A r w \Pi_{pr}是A_{rw} ΠprArw的特征向量, A r w = A D − 1 A_{rw}=AD^{-1} Arw=AD1。类似的,个性化的PageRank 算法可以表示为

Π p p r ( i x ) = ( 1 − α ) A ~ Π p p r ( i x ) + α i x \Pi_{\mathrm{ppr}}(\mathbf{i_x})=(1-\alpha)\tilde{{A}}\Pi_{\mathrm{ppr}}(\mathbf{i_x})+\alpha\mathbf{i_x} Πppr(ix)=(1α)A~Πppr(ix)+αix
参考连接

2.3、PPNP&APPNP

 上一节,我们知道了Personalized PageRank算法及其他的表达式,对上式进行求解,求得 Π p p r \Pi_{\mathrm{ppr}} Πppr
Π p p r ( i x ) = α ( I n − ( 1 − α ) A ~ ) − 1 i x \Pi_{\mathrm{ppr}}(\mathbf{i_{x}})=\alpha(\mathbf{I_n}-(1-\alpha)\tilde{\mathbf{A}})^{-1}\mathbf{i_{x}} Πppr(ix)=α(In(1α)A~)1ix
其中, A ~ = D ~ − 1 2 A ^ D ~ − 1 2 , A ^ = A + I , i x 是传送向量 \tilde{A}=\tilde{D}^{-\frac{1}{2}}\hat{A}\tilde{D}^{-\frac{1}{2}},\hat{A} = A+I,\mathrm{i_x}是传送向量 A~=D~21A^D~21A^=A+Iix是传送向量。最终的PPNP算法公式表达如下:
Z p p n p = s o f t m a x ( α ( I n − ( 1 − α ) A ~ ) − 1 H ) Z_{\mathrm{ppnp}} = \mathrm{softmax}(\alpha(\mathbf{I_n}-(1-\alpha)\tilde{\mathbf{A}})^{-1}\mathbf{H}) Zppnp=softmax(α(In(1α)A~)1H)
H i , : = f θ ( X i , : ) \mathbf{H}_{i,:} = f_{\theta}(\mathbf{X}_{i,:}) Hi,:=fθ(Xi,:)
其中 X \mathbf{X} X是特征向量矩阵, f θ f_{\theta} fθ是具有参数集合 θ \theta θ的神经网络, H ∈ R n × c \mathbf{H} \in R^{n \times c} HRn×c
 由于在计算上式的时候,需要求矩阵的逆运算,这是一个耗时的操作,为了加速PPNP的训练速度,作者采用一种近似操作来求解,称为APPNP。
Z ( 0 ) = H = f θ ( X ) , Z ( k + 1 ) = ( 1 − α ) A ~ Z ( k ) + α H , Z ( K ) = s o f t m a x ( ( 1 − α ) A ~ Z ( K − 1 ) + α H ) Z^{(0)}=H=f_\theta(\mathbf{X}),\\ Z^{(k+1)} =(1-\alpha)\tilde{A}Z^{(k)}+\alpha H,\\ Z^{(K)}=\mathrm{softmax}((1-\alpha)\tilde{A}Z^{(K-1)}+\alpha H) Z(0)=H=fθ(X),Z(k+1)=(1α)A~Z(k)+αH,Z(K)=softmax((1α)A~Z(K1)+αH)
其中, K K K是迭代次数。作者也在后面的附录中也证明了APPNP当 K ⟶ ∞ K \longrightarrow \infty K时,收敛到PPNP,所以APPNP可以看作PPNP的迭代解。
模型的框架如下图所示:
在这里插入图片描述

3、源码复现

模型复现源码链接链接:点我点我 提取码:6666

3.1、模型总体框架

import torch
from torch.nn import Module
import torch.nn as nn
from torch.nn import functional as F
import numpy as npclass PPNP(nn.Module):def __init__(self,model,propagation):super(PPNP,self).__init__()self.model = modelself.propagation = propagationdef forward(self,feature,adj):#Generate Prediction#用于生成预测if self.model.__class__.__name__ =='MLP':output = self.model(feature)else:output = self.model(feature,adj)#通过个性化PageRank传播if self.propagation is not None:output = self.propagation(output)#返回最后一层的结果return F.log_softmax(output,dim=1)

3.2、PPNP

class PPNPExtract(Module):def __init__(self,alpha,adj,dropout):super(PPNPExtract,self).__init__()self.alpha = alphaself.adj = adjself.dropout = dropoutpassdef forward(self,H):inv = self.PPR()inv = F.dropout(inv,self.dropout,training=self.training)return self.alpha * torch.mm(inv,H) def PPR(self):if isinstance(self.adj,torch.Tensor):ADJ = self.adj.to_dense().numpy()I_n = np.eye(self.adj.shape[0])M = I_n-(1-self.alpha)*ADJinv_M = np.linalg.inv(M)return torch.Tensor(inv_M)

3.3、APPNP

class PowerIteration(Module):def __init__(self,adj,alpha,k,dropout):super(PowerIteration,self).__init__()self.adj = adjself.alpha = alphaself.k = kself.dropout = dropoutdef forward(self,H):Z = Hfor _ in range(self.k):Z = F.dropout(Z,self.dropout,training=self.training)Z = (1-self.alpha)*torch.mm(self.adj,Z) + self.alpha * Hreturn Z

3.4、MLP(两层)

class MLP(Module):def __init__(self,input_dim,hid_dim,output_dim,dropout):super(MLP,self).__init__()self.input_dim = input_dimself.hid_dim = hid_dimself.output_dim = output_dimself.dropout = dropoutself.layer1 = nn.Linear(input_dim,hid_dim,bias=False)self.layer2 = nn.Linear(hid_dim,output_dim,bias=False)def forward(self,X):X = F.dropout(X,self.dropout,training=self.training)X = self.layer1(X)X = F.relu(X)X = F.dropout(X,self.dropout,training=self.training)X = self.layer2(X)return Xdef __repr__(self) -> str:return self.__class__.__name__

相关文章:

【源码复现】图神经网络之PPNP/APPNH

目录 1、论文简介2、论文核心介绍2.1、现有方法局限2.2、PageRank&Personalized PageRank2.3、PPNP&APPNP 3、源码复现3.1、模型总体框架3.2、PPNP3.3、APPNP3.4、MLP(两层) 1、论文简介 论文题目——《PREDICT THEN PROPAGATE: GRAPH NEURAL NETWORKS MEET PERSONALI…...

【算法与数据结构】131、LeetCode分割回文串

文章目录 一、题目二、解法三、完整代码 所有的LeetCode题解索引,可以看这篇文章——【算法和数据结构】LeetCode题解。 一、题目 二、解法 思路分析:本题仍然使用回溯算法的一般结构。加入了一个判断是否是回文串的函数,利用起始和终止索引进…...

网络编程学习笔记

参考: 套接字通信部分 《TCP/IP 网络编程》以及《TCP/IP网络编程》学习笔记 socket 编程 1. 字节序 字节序,顾名思义字节的顺序,就是大于一个字节类型的数据在内存中的存放顺序,也就是说对于单字符来说是没有字节序问题的&…...

腾讯待办停运后怎么办呢?导出的ics文件怎么打开查看

待办类工具在日常工作中的应用是比较广泛的,很多人会选择使用待办软件记录备忘事项,其中一些提醒类的工具是比较广泛使用的。腾讯待办属于一款待办事项和日程管理工具,它通常是以微信小程序的形式,为大家提供时间管理规划&#xf…...

家长群如何发成绩?

老师们是否经常被家长们追问:“老师,我孩子的成绩出来了吗?”、“老师,我孩子考了多少分?”等等。要想解决这个问题,看完这篇文章你就可以让家长们能够自助查询孩子的成绩了。 一、什么是成绩查询系统&…...

数组区域检索的优化 --- 分块,线段树,树状数组

思考 首先让我们来思考一个问题,给定一个数组,和left与right的值,让你求这个数组中left到right之间元素的和,你会怎么计算?最简单的当然是遍历。如果有人问你这个问题的时候,他决对是会让你优化的&#xff…...

若依侧边栏添加计数标记效果

2023.11.13今天我学习了如何对若依的侧边栏添加技术标记的效果&#xff0c;如图&#xff1a; 我们需要用到两个页面&#xff1a; 先说子组件实现计数标记效果 1.item.vue <script> export default {name: MenuItem,functional: true,props: {icon: {type: String,defau…...

WebSocket技术解析:实现Web实时双向通信的利器

当今互联网的发展中&#xff0c;实时性成为了越来越重要的需求&#xff0c;特别是在Web应用程序中。传统的HTTP协议在处理实时性方面存在一些局限性&#xff0c;因此WebSocket技术的出现填补了这一空白。WebSocket是一种在单个TCP连接上进行全双工通信的协议&#xff0c;它允许…...

深圳联强优创手持PDA身份证阅读器 身份证核验手持机

身份证手持机外观比较小巧&#xff0c;方便携带&#xff0c;支持条码识别、人脸识别、NFC卡刷卡、内置二代证加密模块&#xff0c;可离线采集和识别二代身份证&#xff0c;进行身份识别。信息读取更便捷、安全高效。采用IP65高防护等级&#xff0c;1.5M防摔&#xff0c;可以适应…...

力扣labuladong——一刷day31

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、力扣226. 翻转二叉树二、力扣116. 填充每个节点的下一个右侧节点指针三、力扣114. 二叉树展开为链表 二叉树解题的思维模式分两类&#xff1a; 1、是否可以…...

里氏代换原则

package com.jmj.principles.dmeo2.after;/*** 四边形接口*/ public interface Quadrilateral {double getLength();double getWidth();}package com.jmj.principles.dmeo2.after;/*** 长方形类*/ public class Rectangle implements Quadrilateral{private double length;priv…...

Illumination Adaptive Transformer

Abstract. 现实世界中具有挑战性的照明条件&#xff08;低光、曝光不足和曝光过度&#xff09;不仅会产生令人不快的视觉外观&#xff0c;还会影响计算机视觉任务。现有的光自适应方法通常单独处理每种情况。更重要的是&#xff0c;它们中的大多数经常在 RAW 图像上运行或过度…...

【教3妹学编程-算法题】给小朋友们分糖果 II

3妹&#xff1a;1 8得8&#xff0c;2 816&#xff0c; 3 8妇女节… 2哥 : 3妹&#xff0c;在干嘛呢 3妹&#xff1a;双11不是过了嘛&#xff0c; 我看看我这个双十一买了多少钱&#xff0c; 省了多少钱。 2哥 : 我可是一分钱没买。 3妹&#xff1a;我买了不少东西&#xff0c; …...

应急响应练习2

目录 1. 请提交攻击者的ip与系统版本 2. 攻击者通过某个组件漏洞获得服务器权限&#xff0c;请提交该组件的名称 3. 请提交攻击者首次攻击成功的时间 4. 请提交攻击者上传的webshell文件绝对路径 5. 请提交攻击者使用的webshell管理工具 6. 攻击者进一步留下的免杀的webs…...

JS算法练习 11.13

leetcode 2625 扁平化嵌套数组 请你编写一个函数&#xff0c;它接收一个 多维数组 arr 和它的深度 n &#xff0c;并返回该数组的 扁平化 后的结果。 多维数组 是一种包含整数或其他 多维数组 的递归数据结构。 数组 扁平化 是对数组的一种操作&#xff0c;定义是将原数组部…...

js升序排序

function sortByKey(array, key) {return array.sort(function(a, b) {var x Number(a[key]);var y Number(b[key]);return x < y ? -1 : x > y ? 1 : 0; //或者 return x-y});}...

2023亚太杯数学建模C题思路

文章目录 0 赛题思路1 竞赛信息2 竞赛时间3 建模常见问题类型3.1 分类问题3.2 优化问题3.3 预测问题3.4 评价问题 4 建模资料5 最后 0 赛题思路 &#xff08;赛题出来以后第一时间在CSDN分享&#xff09; https://blog.csdn.net/dc_sinor?typeblog 1 竞赛信息 2023年第十三…...

【ArcGIS Pro微课1000例】0030:ArcGIS Pro中自带晕渲地貌工具的妙用

在ArcGIS中,制作地貌晕渲效果通常的做法是先制作山体阴影效果,然后叠加在DEM的下面,再改变DEM的透明度来实现。而在ArcGIS Pro中自带了效果显著的晕渲地貌工具。 文章目录 一、晕渲地貌工具1. 符号系统2. 栅格函数二、山体阴影效果1. 工具箱2. 栅格函数打开ArcGIS Pro3.0,加…...

【原创】java+swing+mysql办公用品管理系统设计与实现

摘要&#xff1a; 办公用品管理系统是一个设计和实现办公用品库存和使用管理的信息系统。此系统可以提高办公用品的利用率&#xff0c;减少浪费&#xff0c;使办公用品管理更加高效、规范、便捷。本文主要介绍使用javaswingmysql技术去开发实现一个办公用品管理系统。 功能分…...

sqlalchemy查询数据为空,查询范围对应的数据在数据库真实存在

记录一个开发过程遇到的小bug,构造些伪数据还原并解释。 """ 场景:传参触发了查询条件,数据库中是存在传参对应范围的数据,但是通过查询条件得到的查询结果为空 """ 入参场景一: start_time = "2023-11-13" end_time = "202…...

大数据学习(132)-HIve数据分析

​​​​&#x1f34b;&#x1f34b;大数据学习&#x1f34b;&#x1f34b; &#x1f525;系列专栏&#xff1a; &#x1f451;哲学语录: 用力所能及&#xff0c;改变世界。 &#x1f496;如果觉得博主的文章还不错的话&#xff0c;请点赞&#x1f44d;收藏⭐️留言&#x1f4…...

Unity | AmplifyShaderEditor插件基础(第七集:平面波动shader)

目录 一、&#x1f44b;&#x1f3fb;前言 二、&#x1f608;sinx波动的基本原理 三、&#x1f608;波动起来 1.sinx节点介绍 2.vertexPosition 3.集成Vector3 a.节点Append b.连起来 4.波动起来 a.波动的原理 b.时间节点 c.sinx的处理 四、&#x1f30a;波动优化…...

听写流程自动化实践,轻量级教育辅助

随着智能教育工具的发展&#xff0c;越来越多的传统学习方式正在被数字化、自动化所优化。听写作为语文、英语等学科中重要的基础训练形式&#xff0c;也迎来了更高效的解决方案。 这是一款轻量但功能强大的听写辅助工具。它是基于本地词库与可选在线语音引擎构建&#xff0c;…...

消防一体化安全管控平台:构建消防“一张图”和APP统一管理

在城市的某个角落&#xff0c;一场突如其来的火灾打破了平静。熊熊烈火迅速蔓延&#xff0c;滚滚浓烟弥漫开来&#xff0c;周围群众的生命财产安全受到严重威胁。就在这千钧一发之际&#xff0c;消防救援队伍迅速行动&#xff0c;而豪越科技消防一体化安全管控平台构建的消防“…...

【FTP】ftp文件传输会丢包吗?批量几百个文件传输,有一些文件没有传输完整,如何解决?

FTP&#xff08;File Transfer Protocol&#xff09;本身是一个基于 TCP 的协议&#xff0c;理论上不会丢包。但 FTP 文件传输过程中仍可能出现文件不完整、丢失或损坏的情况&#xff0c;主要原因包括&#xff1a; ✅ 一、FTP传输可能“丢包”或文件不完整的原因 原因描述网络…...

2025年低延迟业务DDoS防护全攻略:高可用架构与实战方案

一、延迟敏感行业面临的DDoS攻击新挑战 2025年&#xff0c;金融交易、实时竞技游戏、工业物联网等低延迟业务成为DDoS攻击的首要目标。攻击呈现三大特征&#xff1a; AI驱动的自适应攻击&#xff1a;攻击流量模拟真实用户行为&#xff0c;差异率低至0.5%&#xff0c;传统规则引…...

【PX4飞控】mavros gps相关话题分析,经纬度海拔获取方法,卫星数锁定状态获取方法

使用 ROS1-Noetic 和 mavros v1.20.1&#xff0c; 携带经纬度海拔的话题主要有三个&#xff1a; /mavros/global_position/raw/fix/mavros/gpsstatus/gps1/raw/mavros/global_position/global 查看 mavros 源码&#xff0c;来分析他们的发布过程。发现前两个话题都对应了同一…...

【大厂机试题解法笔记】矩阵匹配

题目 从一个 N * M&#xff08;N ≤ M&#xff09;的矩阵中选出 N 个数&#xff0c;任意两个数字不能在同一行或同一列&#xff0c;求选出来的 N 个数中第 K 大的数字的最小值是多少。 输入描述 输入矩阵要求&#xff1a;1 ≤ K ≤ N ≤ M ≤ 150 输入格式 N M K N*M矩阵 输…...

Unity基础-Mathf相关

Unity基础-Mathf相关 一、Mathf数学工具 概述 Mathf是Unity中封装好用于数学计算的工具结构体&#xff0c;提供了丰富的数学计算方法&#xff0c;特别适用于游戏开发场景。它是Unity开发中最常用的数学工具之一&#xff0c;能够帮助我们处理各种数学计算和插值运算。 Mathf…...

DiMTAIC 2024 数字医学技术及应用创新大赛-甲状腺B超静态及动态影像算法赛-参赛项目

参赛成绩 项目介绍 去年参加完这个比赛之后&#xff0c;整理了项目文件和代码&#xff0c;虽然比赛没有获奖&#xff0c;但是参赛过程中自己也很有收获&#xff0c;自己一个人搭建了完整的pipeline并基于此提交了多次提高成绩&#xff0c;现在把这个项目梳理成博客&#xff0c…...