概述

 
图深度学习
2021年电子工业出版社出版的图书
https://baike.baidu.com/item/%E5%9B%BE%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0

  

有些数据以图的形式展示更好

其他数据可以转为图形式

 
像素为节点,相邻像素为边 

顺序数据转图数据会有损失,但这种损失可以忽略不计 

 


 


 


节点之间关系预测

 


节点分类

 
上面
- 每个节点是一个事物,事物之间的关系是图 

下面 
- 每个数据就是一个图,比如分子结构,分子本身就是图 
- 图的生成,匹配... 

 


 


 


 


 


 
比如,抖音 粉丝 数量,有人几个,有人几万个 

 
因为,深度学习与图的结合,需要依据特定的业务场景进行分析,
下面就列举几个场景 
    

推荐系统

 
用户,商品为节点 
用户的信息可以表示为节点的属性 

推荐系统的核心是 学习用户与商品之间的关系 
    

交通预测

 

Traffic prediction with advanced Graph Neural Networks
https://deepmind.google/discover/blog/traffic-prediction-with-advanced-graph-neural-networks/

路段作为节点 
路段之间的关系为边 
    

 
将道路分段,每个段是一个节点,段与段之间的关系为边 

每个节点上有流量数据 

预测未来几小时的流量
    

药物发现

 
药物的成本低,研发成本高,
    
GNN可以降低研发的成本
- 分子结构 -- 功能 ... 学习中 
- 需要的功能 -- 分子的结构 预测 


 

    

 

    

 
E:\tpf\doc2web\lgl\study1\150-alg\GNN

G:\wks\kejian\peixun\shenlan\gnn\01-图深度学习\code

/opt/wks/fanxq/01-AML专家指导/ibm-aml

 

------------------------------------------------------------------------------
    

 

    
图表示学习

 
从图上提取特征,得到行列二维表,就可以转机器学习了 
- 提取节点特征,边的特征,合并到一行

特征工程 
- 手工提取节点信息
- 度 
- 中心性 

缺陷 
- 手工麻烦 
- 特征固定后,后续固定继承,无法最优 

 


特征学习

 
改手工提取 为   自动学习

针对下游任务
从100个结构/节点特征选择10个,降维,灵活 


表示学习

 
特征学习是选择,不改变 

表示学习是从原特征中 学习出一组特征 

 


第1代

 
最开始1970-2000通过聚类的方式...降维

2006通过矩阵因子分解的形式降维 
- SVD 奇异值分解 

第2代

 
实际上也是矩阵分解 

第3代:引入深度学习

 


 

  

 


图论基础

 
v:节点 
e:边,无向,权重,有边为1,无边为0 

先整理不重不漏的 节点集合V与边的集合E,并此演生矩阵 
    

 
矩阵n*n ,A为邻接矩阵
- v1与v2有边为1,无边为0 
- 有5个节点,为5*5矩阵 
- 第1行/列为第1个节点到各个节点的边 
- 第2行/列为第2个节点到各个节点的边 
    

 
关于主对角线对称,即A与其转置矩阵一样 
    

 
一个节点的度是该节点与其他节点之间边的个数 
    

邻域:相邻节点的集合

 


    

 

    

途径(walk): 两个节点之间的路径

 
交替排列

 
算法中并不严格区分 途径与路
  

 

  

 

- 如果存在两个节点之间没有边,那么这个图称不是连通的

- 路的长度就是边的个数
  

 

  

 
两个节点之间 最长的最短路径 
  

 

  

 

  

 
将节点转化为了一个数字,用数字的大小来代表重要性 

n个节点转化为n维向量,一张图转化为一个向量,
一个节点对应向量中的一个元素,其值越大越重要 

V是节点信息,有n个节点,一个节点转化为一个数值,n个节点转化为n个数值 

 
度中心性:一行中边的个数 

中心性就是重要性,越重要的事物越重,引力越高,有成为中心趋势
- 重要的表示方法是多样的,多角度的
- 自身的信息 
- 边的个数 
- 相邻节点的重要性 

 
c 中心 
d 节点的度
cd 节点度所表示的中心性 

考虑两个因素
- 度:节点关联的边越多就表示重要性越高
- 自身:自身的信息
    

 
Ax = ax 

a为特征值,x为特征向量,现在有关联矩阵A,就可以求出特征值a,以及对应的特征向量x 
    

 
β实际为βi

节点关联的节点多
所关联的节点重要
自己重要 -- Katz中心性 
    

 

    

核心思想

 
如果一个节点(或边)位于许多其他节点对的最短路径上,
那么它的介数中心性较高,说明它在网络中具有更强的中介或枢纽作用。

 
介数中心性(Betweenness Centrality)是图算法中衡量节点或边在网络中重要性的指标之一,
用于量化一个节点或边作为“桥梁”对其他节点之间最短路径的影响程度。

直观解释

 
高介数中心性的节点通常是连接不同社区(或群组)的关键节点。例如:

社交网络中,连接多个群体的“中介人”。

交通网络中,必经的枢纽站点。

互联网中,流量高度集中的路由器。

低介数中心性的节点则可能处于网络边缘,或不参与其他节点之间的连接。

应用场景

 
关键节点识别:找出网络中潜在的单点故障(如电力网、通信网)。

社区发现:通过删除高介数边(如Girvan-Newman算法)分裂社区。

流行病控制:干预传播网络中的中介节点以阻断扩散。

计算优化

示例

 
 A —— B —— C
  \   /
    D

那些绕不过去的环节

 


 


 


 


图论基础·扩展

 
图的结构:一个图由节点(或顶点)和边构成。

路径:
一条路径是从一个节点出发,沿着边序列到达另一个节点,
且中间不重复经过同一个节点(简单路径通常要求不重复,但最短路计算中会自动满足这一点)。

权重:边可以有一个数值,称为“权重”或“成本”。它可以代表实际距离、时间、费用、难度等。

如果所有边的权重都是1,那么最短路就是经过边数最少的路径。

如果边的权重不同,最短路就是各边权重之和最小的路径。

总权重:一条路径的总权重是其经过的所有边的权重之和。
    
举个例子:
想象一个城市交通图,节点是各个路口,边是道路。
边的权重可以是道路的长度或驾车通过所需的时间。
那么从A点到B点的“最短路”,可能就是总长度最短或总耗时最少的路线。

从家到公司可能有两条不同的路线,它们的总长度或总通行时间完全一样。

对称结构

 
```
A --1-- X
|       |
1       2
|       |
Y --2-- B
```

路径1: A->X->B, 总权重 = 1 + 2 = 3
路径2: A->Y->B, 总权重 = 1 + 2 = 3

权重组合不同,但总和相同

 
```
      B
    /   \
   2     2
  /       \
 A         D
 \        /
  3      1
    \   /
      C
```

路径1: A -> B -> D, 总权重 = 2 + 2 = 4
路径2: A -> C -> D, 总权重 = 3 + 1 = 4
现在,这两条路径的总权重都是4,因此它们都是最短路。

 


 

    

 


 


 


 


 


 


图信号

一个节点代表一个信号

 
RN是实数上的n维度向量,一个节点一个数值,n个节点形成一个n维向量 
- n维列向量,一个节点映射到一个数值,
- n个节点映射到n个数值,形成n维列向量
    

 
一个信号可以有多维,一维一个通道,图上表示的是4通道
- 如果是在机器学习中,说法就会换成一个对象的多个属性,只是叫法不一样 
- 这里f(1)有4个数值 

 

    

 
度矩阵为对角阵,用一个行/列向量表示节点的度,
- 第i个节点只在向量的第i个元素上有值,该值为该节点的度 
- 其他位置上的元素皆为0 

f,h为 列向量 

vj 是vi的相邻节点 
    

 
hi 是 第i个节点 与 其相邻节点 信息差的和 
- 两个节点的信息值想减后有正有负,再相加后会 中和 
- 因此对差做平方 
    

 
如果两个节点之间有连接的话
- 二次型可以衡量两个节点信息值的差异
- 如果节点之间相近,则过渡平滑... 
    

 


 


 


 
半正交矩阵可以进行特征分解
邻接矩阵的对角线为为0
- 可能因为这个的原因,它会有一个为0的特征值
- 从而导致它为半正定矩阵

    

 
u是特征向量,应该还是一个单位向量,其模为1,这样最后才能剩下一下特征值  

将该特征值作为信号的频率,由小到大排列,就是频率由低频到高频排列 
    

 

  

 

  

 

  

 


图傅立叶变换

向量与线性组合

 
任何一个图信号都可以表示为一组特征(或者叫特征向量)与一组特征向量的线性组合 

特征值1*特征向量1 + 特征值2*特征向量2 ... 特征值n*特征向量n

特征向量与特征值

Axi = λi·xi

λi是特征值,xi是特征向量

SVD

奇异值分解(Singular Value Decomposition, SVD)是线性代数中的一种分解方法,
它可以将一个矩阵分解为三个特殊矩阵的乘积。
SVD 在信号处理、统计学、机器学习等多个领域有着广泛的应用,
尤其是在数据压缩、去噪和特征提取等方面。

然而,在实际编程中,尤其是在使用 NumPy 库进行 SVD 分解时,
返回的 Σ 矩阵通常以向量形式给出,而不是完整的对角矩阵。
因此,如果你使用 U, S, V = np.linalg.svd(A) 进行 SVD 分解,得到的各部分含义如下:


使用这种方式,你可以通过 np.diag(S) 将 S 转换为一个对角矩阵,然后手动构造出原始的 SVD 形式:

注意,这里的“≈”表示当 A 不是方阵或者其秩小于其行数和列数的最小值时,
SVD 分解后的重构可能只是原矩阵的一个近似。
如果 A 是方阵且满秩,那么这种分解是精确的。

 

    

 

    

 
U,S,V = np.linalg.svd(A)

U与V皆是正交矩阵


方阵中对称阵比较特殊,以对称阵举例说明SVD

import numpy as np
A = np.array([[3, 5, 7], [5, 1, 0],[7,0,3]])
U,S,V = np.linalg.svd(A)
U.shape,S.shape,V.shape
((3, 3), (3,), (3, 3))

当A为对称阵时,U的转置就是V,由于U是正交矩阵,U的转置就是U的逆,于是此时的SVD就是
V的逆矩阵,S,V = np.linalg.avd(A)

当A不为对称阵时,U与V不再满足这种关系,但它们依然是正交矩阵,
其特征值都是1,其结构依然是比较相似的

V[:,1]@V[:,2]
-2.7755575615628914e-16


V[:,1]@V[:,0]
8.326672684688674e-17

V[:,2]@V[:,0]
-5.551115123125783e-17

 

    

 
傅立叶变换
通过傅立叶级别将图信号从空间域变换到谱域  


反傅立叶变换 
U是正交矩阵,空间域到谱域的公式两个同时乘以U的转置矩阵后,就得到了谱域到空间域的变换公式 
    

 

    

 

    

 

    

 


 

  

 


复杂图

 
简单图:只有一种节点类型,边也只有一种边  
    

 

    

 
用户是一类节点
用户喜欢的事物是一类节点 

用户与事物之间有边,用户与用户之间,事物与事物之间是没有边的 
    

 
两个节点之间可以有多个边,每个边代表着一种关系 

每一种关系相当于看节点的一个维度,即从不同的维度看节点



 
将边分类,比如 好友是一类,拉黑是另外一类 ,前者为正,后者为负 
  
符号专指 +-正负符号,特指一个事物中正负两种关系 

 

  

 
三篇文章的作者是一个 

Author 1 就是一个超边,链接了三篇文章 
- 前面图中的一个边,只链接了两个节点 

 


 


 
社交图 
- 不同的时刻,用户节点数不同,用户有来有走 

将节点映射到一个时间函数上 
- 用户是什么时间加入进来的
- 边是什么时间建立的 

这样的图是变化的,也叫流图 
- 时间是离散的,1月份,2月份,... 
- 由月份到月份之间的数据是变化的,但也是离散的 
  

 

  

 

  

 

    
图嵌入·通用框架

 
邻接矩阵用向量表示节点 
- n维向量表示n个节点的图,如果图上节点个数多,则向量维度较高
- 度:社交,大部分人只有几个,几十个 好友 
    

 
用一个函数将节点信息映射到低维空间 f: V--R
- 保留重要信息的前提下,表示用的维度尽量低 
    

 

    

 

    

 

    

 

    

 
词·嵌入:
- 词变向量,就是编码,维度变换,线性变换或者encode编码器都可以
- 嵌入:
  - 一句话由多个单词按一定顺序排列而成,关键是 排列方式,也就是序列 
  - A单词在第1个位置,B单词在第2个位置... 
  - 把一个单词放在一个序列中,就像是把一个单词嵌入到一个序列中一样 

词嵌入就是word2vec,就是词转向量,只是这个词带有上下文含义,
- 这个词带有以该词为中心左边单词与右边单词的信息
- 这是嵌入的第二重含义
  

 
文章,段落,句子,单词 
将单词从类似one hot这种高维空间映射到低维空间 
- 映射的过程中,尽量保留原有的语义信息  
- 这里的语义,更多的指上下文信息,即前一个词是什么,后一个词是什么 
- 共同出现的信息,叫共现信息 
    

 
中心词 
- 以某个词为中心,以step=1为窗口,就是提取中心词前一个单词与后一个单词 
- 这就是词嵌入方法的基本思想 
- 通过这种方法,保留单词的基本信息 
    

 

    

 

    

 

    

 
一句话  单词  中心词   左右单词
一张图  节点  中心节点 邻域(相邻节点组成的分布)

 
1. 将信息从 图域 映射 到 向量特征空间/嵌入域
2. 保留重要信息: 共现信息(上下文信息),结构角色,社区信息,节点状态 

 


 


 


 

  

 


简单图嵌入

 
邻域,共现信息,相邻的信息,对应word2vec中的上下文信息 
    

 
deepwalk的映射函数
- ei为单位矩阵E中第i列
    

 
ei从W中提取第i个节点的向量特征,W是要学习的特征 

    

 

    

 
类似于自然语言处理中的 词嵌入,就是单词编码 
自然语言是一个序列,图不是,需要通过一种方法转化为一个序列

 
deepwalk通过随机游走的方法,产生一个序列,该序列对应着一个句子

N表示均匀分布 

从当前节点到下一个节点
- 按度处理,节点之间的概率相同,等比 

有了序列之后,就可以提取共现信息 
    

 
每个随机游走W就是一条途径,节点的共现信息为IW 

从每个节点出发进行随机游走得到多条途径R={W}, 每个途径都对应一个共现信息IW,
- 这些共现信息并起来称为I  
- I就是通过随机游走,在图中提取出来的节点,及节点的共现信息 
    

 

    

重构器:提取节点信息转换为节点出现的概率

 
- 共现信息IW是基于随机游走的,是随机的序列
  - 一个随机游走的途径,转化为前后成对出现的节点对的集合
  - 共现信息是集合

- 右边嵌入域融入概率信息
  - 概率是基于统计
  - 上下文序列上的概率,成对出现的概率 
    

 
中心节点只有一个节点
上下文节点有多个节点,这就是上下文节点
在deepwalk中,这两类节点,每类都对应一个初始化参数矩阵W 
    
通过向量内积计算中心节点与上下文节点之间的相似性,
- 余弦相似度,越相似的两个单位向量,其内积越接近1 
- 所有节点与其上下文节点的相似度的和为分母 

目标函数:初始化是随机组合,训练的目的在于让模型输出的节点的概率逼近真实节点出现的概率

 
共现信息中直接从图中提取出来的
通过初始化参数矩阵W及概率对构成的嵌入域并不与共现信息对等 

如果让嵌入域中的节点向量接近共现信息中节点的真实含义?
- 嵌入域尽可能正确地预测共现信息
- 希望嵌入域中这个包含概率的计算公式的最大化 就是 真实的共现信息/ 接近共现信息 
- 对应统计学中的最大似然估计
- 使用log转化,将连乘改为求和,并转化为最小化问题 
    

 
W是随机游走的路径,R是多个路径W的集合 
    
IW是 单条路径W中 由(中心词,邻接词)构成的组合,代表中该路径中的信息 

I 代表多条路径W中信息

 
有了邻接词可以推断中心词,有了中心词也可以推断邻接词 

核心目的还是 将图中相邻节点的概率 转化为 节点对之间的概率  
    

 


 
在大规模中节点多,相邻节点内积运算计算量大 
  

 
- 同维度对比,比如都是softmax,有没有速度更快的softmax 
- 其他维度:负采样 
- 字典的维度可以看作节点的个数 
- p(vcon|vcen)可以看作平级处理,计算机不知道vcen的上下文节点是什么,
- 于是它会遍历所有的上下文节点vcon,来统计计算p(vcon|vcen)
  

 
- hierchical:层级结构
  - 将搜索转化为二叉树
  - 不再是全遍历 ,而是从根节点往下二分查找 
- p(left|b0,v8) = sigmoid(fb(b0)的转置f(b8)) 
  - 只是利用这个公式,这种算法,这种设计来定义一个小模型
  - 用于完成p(left|b0,v8)的计算
  - 至于效果要结合数据训练完后才知道
  - 以上为个人猜测 
  

负采样

 
- 分子:使用log + sigmoid ,最大化出现在共现信息中的概率
- 分母:除了使用log + sigmoid ,还加入了负采样 ,
  - 取没有出现在中心节点fcen中的节点对
  - 最小化没有出现在共现信息中的概率 
  - 有很多负样本,没有出现在共现信息中,抽取K个 
  - 最小化负样本的概率 ,最小化没有出现在共现信息中的节点对
  

其他保留共现信息的方法

 
LINE:仅使用边 

 
二阶:除了考虑当前节点,还会考虑上个节点的信息 
  

 
p:当前节点的度 
q>1: 倾向于游走到 接近 当前节点离上个节点的距离 的一个节点上 
q<1: 倾向于游走到 远离 当前节点离上个节点的距离 的一个节点上 

 

  

 
- 节点u与节点v的距离较远,通过邻接节点所表示的共现信息,相似度较低
- u与v的结构类似,从角色的角度看,它们很类似 

 
- 从结构信息中 提取 角色 出来,构建一个新图 
- 结构的相似性 由度表示 ,然后两个节点之间的距离dist(du,dv)是多少
- su1,1阶邻接节点按度的大小排序,
- dist(su1,sv1),两个排序之间的距离 
- 第k阶的相似性,是第k-1,k-2,...,1之和 

 
- 每一阶都构造一个图 
- 边的权限与度的相似性相关 
- 一阶的相似性 = 一阶,0阶的求和  
- 同阶可以游走,不同阶之间也可以游走 

 


 
- 节点状态信息提取,重构,优化
- 重在节点,不考虑边了
- 所以将节点按固定顺序排成一列即可 

 
- 用中心度的算法来计算节点的状态
  - 个人猜测是 拉普拉斯矩阵 
  - 保留的是相对大小,做了归一化处理 

- 固定的节点顺序 
  - i在j的前面 
  - 如果使用softmax,就像之前的那样,p(vi,vj)与p(vj,vi)一样 
  - 为了突显i在j前,对fvi-fvj做一次线性变换,再加一个sigmoid函数 来作为p(vi,vj)的概率 
  - 这里只是利用了sigmoid可以将数据变换到(0,1)之间的特性,类似于概念,但不是概率,却有工程意义
  - -减号的不对称性,就区分出前后的差异了

 


 


 


 


 
- 比如在社交网络中,有些节点分布相对集中;社区与社区之间密度较低 
  - 社区发现 
  - 通讯网络中要以发现犯罪团伙

通过最大化模块度来发现社区/团伙

 
- Aij 邻接矩阵的(i,j)元 
  - 0或1 
  - 1表示有边
  - 0表示无边 

- 在有两个社区的情况下,1属于社区1,-1属于社区-1 
- 在模型度公式中,是不知道hi是1还是-1的,需要学习后才发现 
- 如果di与dj是随机提取的两个节点,
- 那么这两个节点之间出现边的概率为 dvi*dvj/vol(G)

- dvi*dvj/vol(G) 
  - 在保留图原有节点边的情况下,两个节点之间出现边的期望,
  - 或者说就以这个公式作为两个节点之间边出现边的概率计算公式


- Aij - dvi*dvj/vol(G)
  - Aij表示节点i与节点j之间 实际上 是否有边
  -  dvi*dvj/vol(G)表示i与j之间有边的期望 
  - 相差若大
    - 若大,接近1,表示实际有边的概率很大;同时要求hi*hj的结果为正,即1*1=1或(-1)*(-1)=1,即hi与hj在同一社区
  - 若小,
    - 表示实际无边的概率很大,那么最好hi与hj为不同的值一个为1一个为-1

  
- 越大在同一社区的概率越大,越小在同一社区的概率越小


 


 


图转向量

 
一句话  单词  中心词   左右单词
一张图  节点  中心节点 邻域(相邻节点组成的分布)

 
取中心节点与相邻节点的 相邻概率 关系 
- 图不像句子中的单词,天然是个序列 
- 图通过 随机游走 的方式先转换为序列,再取前后依赖的概率  
    

 

    

 
边构成了结构 
提取结构信息,就是观察边的构成,就是邻接矩阵 
    

 

    

 
- 节点状态:使用重要性来代表状态,并进行排序 
- 越重要的节点就会越集中于一端 
    

大模型给出的方法

 
在图神经网络(GNN)和图算法中,**保留节点状态、节点信息**是一个非常核心的问题。
图结构的复杂性决定了我们需要设计合适的机制来传递、更新并保留节点的信息。

下面我将从几个角度系统地解释如何在 GNN 和图算法中实现这一目标:

## 一、图神经网络(GNN)中的节点状态保留机制

### 1. **消息传递机制(Message Passing)**
GNN 的基本操作是通过**邻居聚合**来更新节点表示,其过程如下:

- 每个节点收集其邻居节点的信息(message);
- 将这些信息聚合(如求和、均值、最大值等);
- 结合当前节点的原有信息进行更新(通常通过一个神经网络);

这个过程中,**旧的节点信息会被保留并通过某种方式融合进新的表示中**,从而避免完全丢失历史状态。

#### 示例:GraphSAGE
```python
h_v^{(l+1)} = σ(W ⋅ mean({h_u^{(l)} | u ∈ N(v) ∪ {v}}))
```
其中包含了当前节点 `v` 自身的信息。
  

 
h(l)是在 以l节点为中心及邻域节点的环境中 加权 激活 -- h(l+1) 
  

 
### 2. **残差连接(Residual Connections)**
为了防止信息在多层传播中丢失,可以在 GNN 层之间加入残差连接:

```python
h_v^{(l+1)} = σ(W ⋅ AGG(...) + h_v^{(l)})
```

这使得每一层都能“记住”上一层的信息,从而保留节点的历史状态。

 
### 3. **门控机制(如 GRU、LSTM)**
有些 GNN(如 DCRNN、GRU-based GNN)使用**门控机制**来控制信息流动,决定哪些信息保留、哪些更新。

例如,在 GRU 中:
```python
h_v^{(l+1)} = (1 - z) * h_v^{(l)} + z * \tilde{h}
```
其中 `z` 是更新门,决定保留多少旧信息。

 
### 4. **注意力机制(如 GAT)**
在 GAT(Graph Attention Network)中,每个节点对邻居赋予不同的权重,这样可以更灵活地保留重要的信息。

```python
h_v^{(l+1)} = σ(Σ α_{vu} W h_u^{(l)})
```
这里的注意力系数 `α` 决定了哪些邻居信息更重要,有助于保留关键节点信息。

 
  
  ## 二、图算法中的节点信息保留方法
  
  在传统的图算法中,虽然不使用神经网络,但也有多种方式来保留节点的状态或信息:
  
  ### 1. **标签传播(Label Propagation)**
  - 每个节点保留自己的标签;
  - 在迭代过程中,用邻居标签加权平均来更新自己;
  - 初始标签在整个过程中都有影响。
  
  ### 2. **PageRank**
  - 每个节点有初始的 PageRank 值;
  - 每次迭代根据邻居节点的 PR 值重新计算;
  - 初始值会在多次迭代后逐渐衰减,但仍起作用。
  
  ### 3. **随机游走(Random Walk)**
  - 某些图嵌入方法(如 DeepWalk、Node2Vec)基于随机游走生成序列;
  - 游走路径会保留节点访问顺序和频率信息;
  - 最终通过语言模型学习节点表示。
  
  ---
  
  ## 三、综合策略:如何更好地保留节点信息?
  
  | 方法 | 是否保留节点信息 | 说明 |
  |------|------------------|------|
  | 消息传递(默认) | ✅ | 融合了邻居与自身信息 |
  | 残差连接 | ✅✅ | 显式保留历史状态 |
  | GRU / LSTM | ✅✅ | 控制信息保留程度 |
  | 注意力机制 | ✅✅ | 动态选择重要信息 |
  | 多跳聚合 | ❌⚠️ | 过度聚合会导致信息稀释(Over-smoothing) |
  
  ---
  
  ## 四、注意事项:信息丢失问题(Over-smoothing)
  
  在深层 GNN 中,随着层数增加,所有节点的表示趋于相似,这种现象称为 **Over-smoothing**。为了解决这个问题,可以采用以下策略:
  
  - 使用残差连接;
  - 控制网络深度;
  - 使用跳跃连接(Jumping Knowledge Networks);
  - 使用个性化 PageRank(PPR)作为传播机制。
  
  ---
  
  ## 五、总结
  
  > **保留节点信息的关键在于:在每次信息更新时,合理融合当前节点的历史状态和新传来的邻居信息。**
  
  你可以根据任务需求选择合适的方法:
  
  - 如果你希望保留更多原始节点信息 → 使用残差连接或跳跃连接;
  - 如果你想动态控制信息保留程度 → 使用 GRU 或注意力机制;
  - 如果你在处理浅层图结构 → 简单的消息传递即可;
  - 如果你在处理深层图结构 → 需要特别注意 Over-smoothing 问题。
  
  ---
  
  如果你有具体的场景(比如社交网络、知识图谱、蛋白质相互作用等),我可以结合具体任务给出更详细的建议。欢迎继续提问!


 

  

 

  

 

  

 


复杂图嵌入

 
根据质质图的特点,设置游走(为了使用类似word2vec的方式提取信息)的方法 
    
不同的语义形成不同的链路 
- mata-path元路径  
- 如何发现链路,需要专业的知识进行定义,或者一些知识挖掘路径的方法等  

 
确定随机游走的方法之后,剩下与简单图就一致了 
    

 

    

 
两个用户指向同一个商品时,生成的子图v1中两个用户之间有链接,
如果是两个用户共同指向多个商品,则子图中两个用户之间的链接,是求和的结果 
    

 
提取边的信息 e = (v1,v2) 

计算两个节点之间边的概率p(e|v1,v2),并最大化实际两个节点之间有边的概率p 
- 单条边计算方式:通过计算两个节点之间的相似性,来表征两个节点存在边的概率  
    

 

    

 
异质图有不同的边,不同的节点,但任何两个节点之间,最多一个边 
多维图,强调用是两个节点之间有多种关系 

一个像素有三色,就可以认为是多维图 
- 不同的是,多维图中的关系与RGB像素那样每个节点都是三色,
- 多维图中两个节点之间的关系,是 边种类集合 的一个子集 

 
如果只是节点分类,可能只需要通用映射就可以了 ,不需要再做维度特征映射 

在涉及到特征维度时,再做相关的特征 

 


 
符号图:两个用户之间之间只存在一种关系,正 或 负  
- 两个事物之间一种关系的两个面:比如引力与斥力,喜欢与喜欢,正与反,是与非 

 
s: 相似度函数

f(vi),f(vj)的相似度 - f(vi),f(vj)的相似度 > 阈值 
- 尽可以让喜欢 与 不喜欢的 限界大一些,变得容易区分 
- 最大化正与负之间的差异
  

 

  

 

  

 
之前图,侧重研究两个节点之间的关系,
- 一个节点最多连接两个节点,并且分析问题的时候,是两个两个进行分析

超图,一个节点可以对应多个节点,是一种多对多的关系,要更加复杂  

 
超边的信息:代表多个节点的信息 

节点:一个节点出现在多个超边中,如何提取其共现信息 
- 每个节点和其他节点共同出现的频率 f(vi) = MLP(Ai)

 
二分图 
- 二组不同的节点 之间的关系 

超图 
- p(e|v1,v2,v3) v1,v2,v3 三个节点同时出现在一个超边中的概率 

 


 


时序随机游走

 
除了邻域信息,更重要的是考虑节点发生的时间顺序 
- v3->v5在t6, v5的邻域有v2,v6,v4 ,但t6的下一时刻只能是t7,因此仅有v5->v6 
- 体现在概率上,就是让v5->v6的概率,高于v5->v2,v4的概率 

 


 


 


 


 


网络嵌入

 

    

 

    

 


 

  

 


网神经网络

 
- 图中的任务有两类
  - 针对节点,比如节点分类
  - 针对图,比如分子结构预测,一个图属于什么类别  


 
图滤波输入:邻接矩阵,节点表示  
图滤波输出:邻接矩阵,新的节点表示  

图滤波不改变图的拓扑结构 
图滤波重点在于改变节点的表示   

 
图池化改变图的结构    

 

    

 
- h = Lf  
  - f 指图中的节点信号 

- h(i)
  - 第i项h为第i个节点与其邻域所有节点差的和 
  - 差之和有正有负,并不能很好地表示差异的大小 
  - 通常使用二次型,平米,其结果为正,
  - 如此就可以衡量节点之间过渡的平滑程序  

- 拉普拉斯矩阵可以看作节点与其领域的差分计算
  - 如果相邻节点变化不大,就过渡平滑,低频
  - 如果相信节点变化较大,就起伏明显,高频

 
- 半正定矩阵 
  - U:列向量 
  - 有一个特征值为0 
  - 特征向量i = ui的转置 L ui 

 
- 特征向量从0到大的过程,就是频率由低到高的过程 
  - λi为特征值  
  - ui为特征向量 

- 下图右上方的公式感觉写错了,应该是 fi = f·ui的转置

 
以特征向量ui为基 的一个线性组成 ,这也是傅立叶级数 


 


 


 


 
- 图神经网络的输入是 
  - 节点的属性 
  - 图的拓扑结构,节点的邻域  

- 图滤波/图卷积不改变图的网络结构,只是改变了节点的表达 
  - 图像领域,卷积不改变特征图的shape,改变了特征的维度,由m维转为n维
  - 特征图的shape由池化组件改变

 
GFT:图FT,将图结构转换为节点向量,空间域--谱域 
- U为拉普拉斯矩阵的行向量 
- UT为其列向量 

IGFT:反FT 
- 谱域 -- 空间域 

f:图中的节点信息 

 
g(λi)表示对特征频率进行过滤,比如,
- 只保留低频信号 
- 只保留高频信号
- 只保留某个范围内的信号 

对频率特征处理后,再通过IGFT,将信息从谱域还原到空间域  

空间信息 -- 谱域 -- 在谱域上对信息信息进行处理 -- 反傅立叶变换 -- 谱域到空间域 

 
Ug(Λ)UT 写成 g(L) 会出现良好的特征 

整个过程可以简化为 f -- g(L)f,相当于了过滤了一部分信号 
- 新的信号少了大量的噪声  

 
如果提前不知道信号的频率范围,就不知道是该保留高频,还是低频,还是特定频率的信号 
- 从数据中学习  
- 输入的数据是d1维,先变换到d2维,通常是先升维  

 


 

  

 


参考
    神经网络】神经元ReLU、Leaky ReLU、PReLU和RReLU的比较