- Arbitrary size and complex topological 任意尺寸输入和复杂的拓扑网络结构
- No fixed node ordering or reference point 图节点无序性
- Dynamic and have multimodal features 多模态和动态图
- Objects:nodes 节点,vertices 顶点 N
- Interactions:linkes,edges E
- System:network,graph G(N,E)
-
Undirected 无向图
-
Directed 有向图
-
Heterogeneous graph 异质图
$$G = (V,E,R,T)$$ - 节点有不同的种类 V
- 不同的边类型 E
- 节点类型集合 T(Vi)
- 边类型集合 R
- eg: T=2时 两种类型的节点 二分图,可以进行展开拆分成U图和V图
<figure><img src=".gitbook/assets/image (2) (1).png" alt=""><figcaption></figcaption></figure>
图的重要特征
-
Node Degrees 节点度
-
Adjacency Matrix 邻接矩阵(图的矩阵表示)
-
无向图:对称阵;有向图:非对称阵
-
为什么要把图表示矩阵形式:邻接矩阵 表示了图的全息信息(可以包含节点、边、权重),后续矩阵计算
-
邻接矩阵缺点:现实中的大多数图的邻接矩阵都是稀疏矩阵
-
Density of matrix:
$$\frac{E }{N^2}$$ - 针对这个问题引入:连接列表和邻接列表,只记录连接关系
<figure><img src=".gitbook/assets/image (2) (1) (1).png" alt=""><figcaption></figcaption></figure>
-
Density of matrix:
-
图的表示学习:自动学习特征,将各个模态的输入转为向量,将节点映射为d维向量(低维 连续 稠密—— distributed vector 分布式向量、task-independent 与下游任务无关)
节点嵌入的目的:向量点乘数值(余弦相似度)反应节点的相似度
原文:DeepWalk: Online Learning of Social Representations
{% embed url="https://dl.acm.org/doi/10.1145/2623330.2623732" %}
论文Keyword:Online learning增量学习,实现对图中节点的Embedding Learning 表示学习,输入为图,输出为每个节点对应的k维向量
- “Random walk generator” 随机游走生成器
- “Update procedure” 迭代优化
语言模型推广:中心词预测周围词,通过随机游走路径来进行语言建模——用前i-1个节点预测第i个节点
重点:
- 损失函数的计算
$$J(\Phi) = -logPr(u_k|\Phi(v_j))$$ $$= \prod_{j=i-w,j=i}^{i+w}Pr(v_j|\Phi(v_i))$$
import networkx as nx
import pandas as pd
import numpy as np
import random
from tqdm import tqdm
df.head()
#构建无向图:
G = nx.from_pandas_edgelist(df,"source","target",edges_attr=True,create_using=nx.Graph())
print(len(G))
def get_randomwalk(node,path_length):
random_walk = [node] //起始节点
for i in range(path_length-1):
temp = list(G.neighbore(node)) //汇总当前节点的所有邻接节点
temp = list(set(temp)-set(random_walk))
if len(temp)== G:
break
random_node = random.choice(temp) //随机选择下一个节点
random_walk.append(random_node)
node = random_node
return random_walk
gama = 10
walk_length = 5
random_walks = []
for n in tqdm(all_nodes):
for i in range(game):
random_walks.append(get_randomwalk(n,walk_length))
k-layer GNN 每个节点感受野:k-hop neighborhood
由于GNN感受野有限,太高层数的GNN计算图过于复杂,所以映入Neighborhood Aggregation: