总结
通过邻居节点,计算节点emb,可以无监督学习
细节
对于unseen的节点也能产出emb,主要是通过对邻居节点的学习
计算节点emb的算法步骤
- 节点emb初始化
- 计算节点
v
的邻居节点emb: h N ( v ) k ← AGGREGATE k ( { h u k − 1 , ∀ u ∈ N ( v ) } ) h_{\mathcal{N}(v)}^k \leftarrow \text{AGGREGATE}_k(\{ h_u^{k-1}, \forall u \in \mathcal{N}(v) \}) hN(v)k←AGGREGATEk({huk−1,∀u∈N(v)}) - 更新节点
v
的emb: h v k ← σ ( W k ⋅ CONCATE ( h v k − 1 , h N ( v ) k ) ) h_v^k \leftarrow \sigma(\bold{W}^k \cdot \text{CONCATE}(h_v^{k-1}, h_{\mathcal{N}(v)}^k)) hvk←σ(Wk⋅CONCATE(hvk−1,hN(v)k)) - emb归一化
上述算法可以延伸到mini-batch用法上
计算loss,尽量让相邻的节点有相似的emb,距离远的节点emb不同,loss如下:
J
G
(
z
u
)
=
−
log
(
σ
(
z
u
T
z
v
)
)
−
Q
⋅
E
v
n
∼
P
n
(
v
)
log
(
σ
(
−
z
u
T
z
v
n
)
)
J_\mathcal{G}(\bold z_u) = -\log(\sigma(\bold z_u^T \bold z_v)) - Q \cdot \mathbb E_{v_n \sim P_n(v)}\log(\sigma(- \bold z_u^T \bold z_{v_n}))
JG(zu)=−log(σ(zuTzv))−Q⋅Evn∼Pn(v)log(σ(−zuTzvn))
其中:
-
z
v
\bold z_v
zv是节点
u
的一个邻居节点 - P n P_n Pn是negative sampling
- Q Q Q是negative samples的数量
- z u \bold z_u zu不是从emb table中读出来的,而是从邻居节点的emb中计算出来的
图不像nlp/cv,邻居节点之间是无序的。因此理想的aggregator应该是对称的(对输入的各种排列结果,输出不变)
3个aggregator:mean aggregator(去掉concate),lstm aggregator(对输入顺序敏感,因此输入是一个random permutation),pooling aggregator(max-pooling)
实验
实验类别:节点分类,3个dataset(citation、reddit、ppi)
baseline:random classifier,lr,deepwalk,deepwalk+random emb拼接
loss函数:unsupervised loss如上,以及cross-entropy as supervised loss
评估指标:f1
实验结果: