本論文是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更新權重即可。