DyREP阅读笔记

599 阅读4分钟

DyRep: Learning representations over dynamic graphs

1、问题描述

问题:现有的模型无法同时建模图中长期和短期的变化过程。

解决:对于association和communication过程分别建模。

2、DyRep

image.png

image.png

2.1 初始化S,A和节点embedding

S(t)为t时刻的条件强度矩阵,Suv(t)S_{uv}(t)表示u和v在t时刻的连接强度;A(t)为t时刻的邻接矩阵。

根据A初始化S,并进行行(邻居数量)归一化:

Suv(t0)=Auv(t0)Nu(t0)S_{uv}(t_0) = \frac{A_{uv}(t_0)}{|N_u(t_0)|}

可以采用已有的节点特征,或随机初始化zu(t0)z^u(t_0)

问题解释
为什么要对S进行这样的初始化操作?而不是直接用A?初始为GCN的连接强度,相当于进行了对称重归一化操作

2.2 计算event中节点的新的embedding

事件(u, v, t, k):节点u和v在时刻t发生了事件k,其中:

  • k=0,表示association event -- 事件发生后长期存在,会对未来的网络拓扑结构和当前节点表示产生重大影响
  • k=1,表示communication event -- 事件发生时间短暂,不会对拓扑结构产生影响,只影响当前节点的表示

每次发生事件,就要对u和v生成新的embedding。

2.2.1 二阶消息传递

这里的消息传递操作是二阶的(以v为目标节点为例,v从u那里获得u的邻居i的表示)。

这里使用基于TPP的GAT进行u的消息聚合,注意力系数通过连接强度S计算得到:

αui(t)=exp(Sui(t))jNu(t)exp(Suj(t))hstructu(t)=maxiNu(t){σ(αui(t)Whzi(t))}\alpha_{ui}(t) = \frac{\exp(S_{ui}(t^-))}{\sum_{j \in N_u(t)}\exp(S_{uj}(t^-))} \\[2ex] h_{struct}^{u}(t^-) = max_{i \in N_u(t)}\{\sigma(\alpha_{ui}(t)\cdot W^h z^i(t^-))\}

max-pooling后得到u聚合邻居后的消息。

2.2.2 self-propagation

有点类似residual,对自己(节点v)前一次事件中的embedding进行一个线性变换:

Wreczv(tv)W^{rec} z^v(t^-_v)

2.2.3 exogenous drive

时间差编码:

Wt(ttv)W^t (t - t^-_v)

节点v的新embedding为三部分相加:

zv(t)=σ(Wstruct(hstructu(t))+Wreczv(tv)+Wt(ttv))z^v(t) = \sigma(W^{struct}(h_{struct}^u(t^-)) + W^{rec} z^v(t^-_v) + W^t (t - t^-_v))
问题解释
为什么更新节点v的表示要用到3个部分的表示?1)二阶邻居信息是为了获得邻居的局部拓扑结构2)self-propagation是为了保留原来的特征(平滑过渡)3)时间差编码是为了体现时间间隔的影响

2.3 更新S,A

定义节点u和v在时刻t下的条件强度函数:

λkuv(t)=fk(gkuv(t))gkuv(t)=WkT[zu(t)zv(t)]fk(x)=ϕklog(1+exp(x/ϕk))\lambda_k^{uv}(t) = f_k(g_k^{uv}(t^-)) \\[2ex] g_k^{uv}(t^-) = W_k^T [z^u(t^-)||z^v(t^-)] \\[2ex] f_k(x) = \phi_k \log(1 + \exp(x / \phi_k))

ϕk\phi_k为学习到的标量时间参数,对应过程中发生相关事件的比例。

根据不同类型的事件,有不同的更新操作:

  • Association(k=0且状态改变/原来没有边) :A相应位置变为1,增加当前边的连接强度的同时,减少其他邻居边的权重

    • Suv(t)=Suv(t)+1Nu(t)+λkuv(t)S_{uv}(t) = S_{uv}(t^-) + \frac{1}{|N_u(t)|} + \lambda_k^{uv}(t)
    • Sui(t)=Sui(t)(1Nu(t)1Nu(t))S_{ui}(t) = S_{ui}(t^-) - (\frac{1}{|N_u(t^-)|} - \frac{1}{|N_u(t)|})
  • Communication(k=1且原来有边) :只增加当前边的连接强度

    • Suv(t)=Suv(t)+1Nu(t)+λkuv(t)S_{uv}(t) = S_{uv}(t^-) + \frac{1}{|N_u(t)|} + \lambda_k^{uv}(t)

image.png

问题解释
为什么条件强度函数外面还要有一层 fk(x)f_k(x)1)首先为了使结果变为正值,并且在一定值域范围内2)加入一个可学习参数 ϕk\phi_k,可自适应学习不同事件类型的权重
为什么association阶段,邻居边的权重要减少?因为出现的边导致节点邻居的边数量增加了+1,为了保持数值稳定,相应的邻居边权重要减小

2.4 无监督训练

目标:发生时间的节点对的条件连接强度尽可能大,未出现的节点对的条件连接强度尽可能小:

Loss=p=1Pλp(t)+0Tuvkλkuv(t)dtLoss = - \sum_{p=1}^P \lambda_p(t) + \int_{0}^T \sum_{u} \sum_{v} \sum_{k} \lambda_{k}^{uv}(t) dt

3、实验

官方没有开源。有几个非官方的开源代码。

3.1 数据集

数据集的时间分为association和communication两种(和之前的不太一样),数据集应该也没有开源

  • Social Evolution Dataset
  • Github Dataset

3.2 baseline

image.png

  • Know-Envolve:知识图谱上的动态图嵌入方法
  • DynGem:动态图自编码器
  • GraphSAGE
  • GAT

3.3 评价指标

动态连接预测:

  • MAR(Mean Average Rank):越小越好
  • hits@10:越大越好

事件事件预测:(给出这一次的事件,预测u和v下一次发生事件k是什么时候)

  • MAE

3.4 实验结果

没有表格,只有图表。

和baseline的比较:

image.png

消融实验(github):

image.png

  • DyRep-Comm:只用communication事件进行训练
  • DyRep-Assoc:只用association事件进行训练
  • DyRep-No-SP:没有self-propagation
  • DyRep-No-Struct:没有h_struct
  • DyRep-No-Att:没用attention
  • DyRep-S-Comm:只在communication事件时对S进行更新
  • DyRep-S-Assoc:只在association事件时对S进行更新

发现,self-propagation的贡献最小,h_struct的贡献最大