本论文是kdd2016的一篇论文
主要的目的也是做node embedding。
主要的想法就是通过deep autoencode对node进行embedding,不过在在embedding的时候不仅考虑了1-hop的信息而且考虑了n-hop的信息。使其变成半监督学习的模式(其实就是对loss function改了改)
输入是一个graph的n*n的邻接矩阵S,其实可以看成有n个数据的训练集,每个数据的feature个数是n,即与图上各点的连接情况
框架如下:
垂直看是正常的deep autoencode(没有稀疏项),水平看,在每个smaple(node)的最后一个encoding层,还加上了和其他smaple(node)的约束关系,其实就是邻接关系的约束。
具体看Loss function:
Lmix为最后的loss function。
L2nd是在正常的算loss的平方差的基础上点乘了一个B,
其实就是放大了原本邻接的那一项的loss,为了使loss越小,bp后,邻接项就会更有邻接的趋势。L1st就是在最后一个encoding层,增加了与其他node的邻接信息,这样做的结果就是,在训练时为了使loss变小,那么bp后,yi-yj更加趋于0,也是就是说邻接项会更加的邻接。这就是所谓的监督学习,并且这里就体现了1-hop的信息;而原本的deep autoencode,是无监督学习,并且体现的是 n-hop的信息。因此结合起来就是半监督学习的,考虑1-hop和n-hop信息的一个structure。
Lreg就是L2正则。
训练时,每次跑完n个node,然后计算loss和梯度,依次BP更新权重即可。