DySAT阅读笔记

1,028 阅读3分钟

《DySAT: Deep Neural Representation Learning on Dynamic Graphs via Self-Attention Networks》

目录

1、整体思路

离散型表示(snapshot sequence),动态链接预测任务。

GAT + Transformer:(multi-head)

  • GAT得到结构信息(保持局部特征)
  • 含有position encoding的Transformer来建模时序信息(学习时间演化信息)

2、DySAT

image.png

2.1 structural attention -- GAT

第一层input xvx_v是节点id的onehot,后面层是embedding。

每个snapshot t的节点v都进行以下的操作:几乎和多头注意力的GAT一模一样

euv=LeakyRelu(AuvaT(WsxuWsxv))αuv=exp(euv)kN(v)exp(ekv)zv=uN(v)αuv(Wsxu)hv=(zv1zv2...zvhead)e_{uv} = LeakyRelu(A_{uv} a^T(W_s x_u||W_s x_v)) \\[2ex] \alpha_{uv} = \frac{exp(e_{uv})}{\sum_{k \in N(v)}exp(e_{kv})} \\[2ex] z_v = \sum_{u \in N(v)}\alpha_{uv}(W_s x_u) \\[2ex] h_v = (z_v^1 || z_v^2 || ... || z_v^{head})
问题解释
为什么要进行structural neighbor?为了让节点的embedding学习到图的局部结构;后面的时序建模没有显示利用图结构信息
为什么要用GAT来建模?为什么用多头?本身图是带边权重的,不同邻居在聚合的时候也应该有不同的权重;多头的每一头都可以学习到一定的内容,多头可以削弱噪声的影响

2.2 temporal attention -- Transformer

2.1完成之后得到的结果hvh_v加上position encoding后,按照time step进行concat后作为2.2的输入:

Hv=(hv1+p1hv2+p2...hvT+pT)H_v = \begin{pmatrix} h_v^1 + p^1 \\ h_v^2 + p^2 \\ ...\\ h_v^T + p^T \\ \end{pmatrix}

之后开始Transformer的操作:

Mij=0ifijelseevij=((HvWq)(HvWk)T)ijdk+Mijβvij=exp(evij)kN(i)exp(evik)Zv=βv(HvWv)Yv=(Zv1Zv2...Zvhead)M_{ij} = 0 \quad if \quad i \le j \quad else -\infty \\[2ex] e_v^{ij} = \frac{((H_v W_q)(H_v W_k)^T)_{ij}}{\sqrt{d_k}} + M_{ij} \\[2ex] \beta_v^{ij} = \frac{exp(e_v^{ij})}{\sum_{k\in N(i)}exp(e_v^{ik})} \\[2ex] Z_v = \beta_v (H_v W_v) \\[2ex] Y_v = (Z_v^1||Z_v^2||...||Z_v^{head})
问题解释
为什么要加上position encoding?为了保留时间的先后顺序,因为后面建模的时候时间先后顺序会变得比较弱
为什么bias要加上M_{ij}?时刻i的查询只能影响到时间在他后面的时刻j;当j在i前面,负无穷softmax后的beta就变成了0,不会产生影响
为什么要用Transformer结构建模?t=1,2...T是典型的时序数据,通过Transformer来学习图的演变过程

2.3 loss function与下游任务

动态连接预测任务:

  • single-step link prediction:给定t时刻的信息,预测t+1时刻的边存在的概率
  • multi-step link prediction:给定t时刻的信息,预测t+1, ..., t+n时刻的边存在的概率

转化为二分类任务:

  • t时刻实际存在的边 -- 1
  • t时刻负采样的边 -- 0

loss function:

L=t=1TvV(uwalkt(v)logσ(yutyvt)wnkPnt(v)log(1σ(yktyvt)))L = \sum_{t=1}^T\sum_{v \in V}(\sum_{u\in walk^t(v)}-\log\sigma(y_u^t \cdot y_v^t) - w_n\sum_{k \in P_n^t(v)}\log(1 - \sigma(y_k^t \cdot y_v^t)))
问题解释
为什么loss function不用直接邻居而是用随机游走?随机游走能使得同一个随机游走序列中的节点embedding变得相似,感觉是考虑到了多跳的相似性;直接邻居的话就是考虑一阶相似性多一些

3、实验

3.1 数据集

image.png

2个通信图数据集:

  • Enron:边表示员工之间的电子邮件交互
  • UCI:边表示在线社交网络平台上的用户之间发送的消息

2个评分图数据集:

  • Yelp:由用户和企业组成,边表示随时间变化的观察评级
  • ML-10M:由用户和标签的交互组成,边表示将用户与他们在某些电影上的标签连接起来
问题解释
Yelp和ML-10M都是异构图,为什么不用异构图方法RGAT这种?不知道,可能同构图就已经能到达比较好的效果了吧?

3.2 baseline

静态方法:

  • node2vec
  • GraphSAGE
  • GAT
  • GCN-AE:自编码器
  • GAT-AE:自编码器

动态方法:

  • DynamicTriad
  • DynGEM:动态图自编码器
  • DynAERNN

3.3 评价指标

因为每次都是根据t来预测t+1,所以每个time step都会有一个二分类的统计结果:

  • micro AUC:所有time step边实例的总AUC
  • macro AUC:每个time step的AUC的平均值

3.4 实验结果

25%train,75%test。

tf:github.com/aravindsank…

single-step:

image.png

single-step:只评估未出现过的边

image.png

消融实验:

  • structural attention
  • temporal attention

image.png