DyRep: Learning representations over dynamic graphs
1、问题描述
问题:现有的模型无法同时建模图中长期和短期的变化过程。
解决:对于association和communication过程分别建模。
2、DyRep
2.1 初始化S,A和节点embedding
S(t)为t时刻的条件强度矩阵,表示u和v在t时刻的连接强度;A(t)为t时刻的邻接矩阵。
根据A初始化S,并进行行(邻居数量)归一化:
可以采用已有的节点特征,或随机初始化。
| 问题 | 解释 |
|---|---|
| 为什么要对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计算得到:
max-pooling后得到u聚合邻居后的消息。
2.2.2 self-propagation
有点类似residual,对自己(节点v)前一次事件中的embedding进行一个线性变换:
2.2.3 exogenous drive
时间差编码:
节点v的新embedding为三部分相加:
| 问题 | 解释 |
|---|---|
| 为什么更新节点v的表示要用到3个部分的表示? | 1)二阶邻居信息是为了获得邻居的局部拓扑结构2)self-propagation是为了保留原来的特征(平滑过渡)3)时间差编码是为了体现时间间隔的影响 |
2.3 更新S,A
定义节点u和v在时刻t下的条件强度函数:
为学习到的标量时间参数,对应过程中发生相关事件的比例。
根据不同类型的事件,有不同的更新操作:
-
Association(k=0且状态改变/原来没有边) :A相应位置变为1,增加当前边的连接强度的同时,减少其他邻居边的权重
-
Communication(k=1且原来有边) :只增加当前边的连接强度
| 问题 | 解释 |
|---|---|
| 为什么条件强度函数外面还要有一层 ? | 1)首先为了使结果变为正值,并且在一定值域范围内2)加入一个可学习参数 ,可自适应学习不同事件类型的权重 |
| 为什么association阶段,邻居边的权重要减少? | 因为出现的边导致节点邻居的边数量增加了+1,为了保持数值稳定,相应的邻居边权重要减小 |
2.4 无监督训练
目标:发生时间的节点对的条件连接强度尽可能大,未出现的节点对的条件连接强度尽可能小:
3、实验
官方没有开源。有几个非官方的开源代码。
3.1 数据集
数据集的时间分为association和communication两种(和之前的不太一样),数据集应该也没有开源
- Social Evolution Dataset
- Github Dataset
3.2 baseline
- Know-Envolve:知识图谱上的动态图嵌入方法
- DynGem:动态图自编码器
- GraphSAGE
- GAT
3.3 评价指标
动态连接预测:
- MAR(Mean Average Rank):越小越好
- hits@10:越大越好
事件事件预测:(给出这一次的事件,预测u和v下一次发生事件k是什么时候)
- MAE
3.4 实验结果
没有表格,只有图表。
和baseline的比较:
消融实验(github):
- 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的贡献最大