1. 节点嵌入——基于矩阵分解的方法
我们得到的所有节点嵌入全部排列到一起,就构成了我们的嵌入矩阵 Z \mathbf{Z} Z:
每一列 z i \mathbf{z_i} zi代表一个节点的嵌入,其为列向量。当 v v v与 u u u为邻居节点时,我们优化目标是最大化 z v T z u \mathbf{z}_{v}^{\mathrm{T}} \mathbf{z}_{u} zvTzu(也就是使余弦相似度尽可能大)。由于我们已经对嵌入进行归一化,因此 z v T z u \mathbf{z}_{v}^{\mathrm{T}} \mathbf{z}_{u} zvTzu最大值为1,我们要尽可能使得 z v T z u = A u , v \mathbf{z}_{v}^{\mathrm{T}} \mathbf{z}_{u}=A_{u, v} zvTzu=Au,v,也就是 Z T Z = A \boldsymbol{Z}^{T} \boldsymbol{Z}=A ZTZ=A( A A A为邻接矩阵):
但实际上 Z T Z = A \boldsymbol{Z}^{T} \boldsymbol{Z}=A ZTZ=A是几乎不可能达到的,因此我们的优化目标是:
min Z ∥ A − Z T Z ∥ 2 \min _{\mathbf{Z}}\left\|A-Z^{T} \boldsymbol{Z}\right\|_{2} Zmin∥∥A−ZTZ∥∥2
前面的随机游走其实本质上就是使用 softmax 函数替代L2范数,但目标是一致的。此时,由边连通性定义节点相似度的内积解码器等价于