【网络表示学习】ANRL

题目:ANRL: Attributed Network Representation Learning via Deep Neural Networks

作者:Zhen Zhang and Hongxia Yang and Jiajun Bu and Sheng Zhou and Pinggang Yu and Jianwei Zhang and Martin Ester and Can Wang

来源:IJCAI 2018

源码:https://github.com/cszhangzhen/ANRL

传统的基于网络结构的网络表示学习方法没有利用属性信息。结合拓扑结构和属性的表示学习方法目前仍然属于初步阶段原因:

(1)网络结构和节点属性是两种异构信息源,如何在同一个向量空间中保留他们的属性是一个问题。

(2)观察到的网络数据通常不完整甚至有噪声,难以得到有效的表示。

创新点

(1)自编码器的用法:用属性作为输入,重建的是并不是自身属性,而是邻居属性的聚合(加权平均或中位数)。这样聚合邻居特征有点类似GCN的做法,好处是聚合后的特征能够带有本地拓扑信息。所以作为中间层的表示也一定程度上考虑了本地结构信息。(但是这方面文中并没有详细解释为什么好)

(2)属性和拓扑的结合方式:用自编码器的中间层作为embedding;用embedding计算二阶相似度来更新embedding。

模型

Neighbor Enhancement Autoencoder

输入:节点 v i v_i vi的特征 x i x_i xi

输出:节点 v i v_i vi 邻居的特征重建值,重建的目标 T ( v i ) T(v_i) T(vi) 聚合了邻居的特征

自编码器loss定义
(2) L a e = ∑ i = 1 n ∥ x ^ i − T ( v i ) ∥ 2 2 \mathcal{L}_{a e}=\sum_{i=1}^{n}\left\|\hat{\mathbf{x}}_{i}-T\left(v_{i}\right)\right\|_{2}^{2}{\tag 2} Lae=i=1nx^iT(vi)22(2)
其中 T ( ⋅ ) T(\cdot) T() 采取以下两种方式:

  • Weighted Average Neighbor

    邻居特征的加权平均
    T ( v i ) = 1 ∣ N ( i ) ∣ ∑ j ∈ N ( i ) w i j x j T\left(v_{i}\right)= \frac{1}{|\mathcal{N}(i)|} \sum_{j \in \mathcal{N}(i)} w_{i j} \mathbf{x}_{j} T(vi)=N(i)1jN(i)wijxj

  • Elementwise Median Neighbor

    取每一维特征在邻居节点中的中位数
    T ( v i ) = x ~ i = [ x ~ 1 , x ~ 2 , ⋯   , x ~ m ] T\left(v_{i}\right)=\tilde{\mathbf{x}}_{i}=\left[\tilde{x}_{1}, \tilde{x}_{2}, \cdots, \tilde{x}_{m}\right] T(vi)=x~i=[x~1,x~2,,x~m]

x ~ k = Median ⁡ ( w i 1 x 1 k , w i 2 x 2 k , ⋯   , w i ∣ N ( i ) ∣ X ∣ N ( i ) ∣ k ) \tilde{x}_{k}=\operatorname{Median}\left(w_{i 1} \mathbf{x}_{1 k}, w_{i 2} \mathbf{x}_{2 k}, \cdots, w_{i|\mathcal{N}(i)| \mathbf{X}|\mathcal{N}(i)| k}\right) x~k=Median(wi1x1k,wi2x2k,,wiN(i)XN(i)k)

Attribute-aware Skip-gram Model

给定节点 v i v_i vi 和属性 x i x_i xi,对于所有的随机游走 c ∈ C c\in C cC,最小化以下损失函数
(3) L s g = − ∑ i = 1 n ∑ c ∈ C ∑ b ≤ b , j ≠ 0 log ⁡ p ( v i + j ∣ x i ) \mathcal{L}_{s g}=-\sum_{i=1}^{n} \sum_{c \in C} \sum_{b \leq b, j \neq 0} \log p\left(v_{i+j} | \mathbf{x}_{i}\right){\tag 3} Lsg=i=1ncCbb,j̸=0logp(vi+jxi)(3)
条件概率定义为:
(4) p ( v i + j ∣ x i ) = exp ⁡ ( v i + j ′ f ( x i ) ) ∑ v = 1 n exp ⁡ ( v v ′ T f ( x i ) ) p\left(v_{i+j} | \mathbf{x}_{i}\right)=\frac{\exp \left(\mathbf{v}_{i+j}^{\prime} f\left(\mathbf{x}_{i}\right)\right)}{\sum_{v=1}^{n} \exp \left(\mathbf{v}_{v}^{\prime T} f\left(\mathbf{x}_{i}\right)\right)}{\tag 4} p(vi+jxi)=v=1nexp(vvTf(xi))exp(vi+jf(xi))(4)
其中 V i ′ \mathbf{V}_{i}^{\prime} Vi 是节点 v i v_i vi 作为上下文节点时的表示, f ( ⋅ ) f(\cdot) f() 可以是任意属性编码函数,如用于图像数据的CNN或者用于序列数据的RNN。

上式直接计算开销大,用负采样进行优化:
(5) log ⁡ σ ( v i + j ′ T f ( x i ) ) + ∑ s = 1 ∣  neg  ∣ E v n ∼ P n ( v ) [ log ⁡ σ ( − v n T f ( x i ) ) ] \log \sigma\left(\mathbf{v}_{i+j}^{\prime \mathrm{T}} f\left(\mathbf{x}_{i}\right)\right)+\sum_{s=1}^{ | \text { neg } |} \mathbb{E}_{v_{n} \sim P_{n}(v)}\left[\log \sigma\left(-\mathbf{v}_{n}^{\mathrm{T}} f\left(\mathbf{x}_{i}\right)\right)\right]{\tag 5} logσ(vi+jTf(xi))+s=1 neg EvnPn(v)[logσ(vnTf(xi))](5)
负样本的概率分布采用word2vec论文里采用的 P n ( v ) ∝ d v 3 / 4 P_{n}(v) \propto d_{v}^{3 / 4} Pn(v)dv3/4

联合优化

模型包括两个部分,共享自编码器的encoder部分。其中左边分支是一个decoder,重建输入样本的邻居属性;右边是用输入样本对应表示预测其上下文。

两个分支都共享了自编码器的encoder部分,最终表示 y i ( K ) \mathbf{y}_{i}^{(K)} yi(K) 同时捕捉了节点属性和网络结构。

联合损失函数

L = L s g + α L a e + β L r e g = − ∑ i = 1 n ∑ c ∈ C − b ≤ j ≤ b , j ≠ 0 log ⁡ exp ⁡ ( u i + j T y i ( K ) ) ∑ v = 1 n exp ⁡ ( u v T y i ( K ) ) + α ∑ i = 1 n ∥ x ^ i − T ( v i ) ∥ 2 2 + β 2 ∑ k = 1 K ( ∥ W ( k ) ∥ F 2 + ∥ W ^ ( k ) ∥ F 2 ) \begin{aligned} \mathcal{L} &=\mathcal{L}_{s g}+\alpha \mathcal{L}_{a e}+\beta \mathcal{L}_{r e g} \\ &=-\sum_{i=1}^{n} \sum_{c \in C-b \leq j \leq b, j \neq 0} \log \frac{\exp \left(\mathbf{u}_{i+j}^{\mathrm{T}} \mathbf{y}_{i}^{(K)}\right)}{\sum_{v=1}^{n} \exp \left(\mathbf{u}_{v}^{\mathrm{T}} \mathbf{y}_{i}^{(K)}\right)} \\ &+\alpha \sum_{i=1}^{n}\left\|\hat{\mathbf{x}}_{i}-T\left(v_{i}\right)\right\|_{2}^{2}+\frac{\beta}{2} \sum_{k=1}^{K}\left(\left\|\mathbf{W}^{(k)}\right\|_{F}^{2}+\left\|\hat{\mathbf{W}}^{(k)}\right\|_{F}^{2}\right) \end{aligned} L=Lsg+αLae+βLreg=i=1ncCbjb,j̸=0logv=1nexp(uvTyi(K))exp(ui+jTyi(K))+αi=1nx^iT(vi)22+2βk=1K(W(k)F2+W^(k)F2)

其中n是节点总数,C是随机游走产生的节点序列,b是窗口大小。 x i \mathbf{x}_i xi表示节点 v i v_i vi 的属性, y i ( K ) \boldsymbol{y}_{i}^{(K)} yi(K) 是节点 v i v_i vi 的表示。 W ( k ) , W ( k ) \boldsymbol{W}^{(k)}, \boldsymbol{W}^{(k)} W(k),W(k) 分别是encoder和decoder第k层的权重矩阵。 U \mathbf{U} U 是图结构上下文预测部分的权重矩阵, u v \boldsymbol{u}_{\boldsymbol{v}} uv U \mathbf{U} U 的第v列。

训练

Q&A

  1. f ( ⋅ ) f(\cdot) f() 具体的作用和最终使用的函数

    看了作者源码实现里直接用最后的表示 y i ( K ) \mathbf{y}_{i}^{(K)} yi(K) 计算skip-gram的loss,并没有使用CNN或RNN。

    def make_skipgram_loss(self):
            loss = tf.reduce_sum(tf.nn.sampled_softmax_loss(
                weights=self.nce_weights,
                biases=self.nce_biases,
                labels=self.labels,
                inputs=self.Y,
                num_sampled=self.config.num_sampled,
                num_classes=self.N))
    
            return loss
    
  2. L s g \mathcal{L}_{s g} Lsg L  ae  \mathcal{L}_{\text { ae }} L ae  为什么不能同时优化?不同时优化,分步进行的先后顺序是否有影响?

    BiNE中也是两项loss的组合,然后分开优化

  3. 文中自编码器的输入和输出不同,与传统的自编码器用法带来的额外好处是什么?

你可能感兴趣的:(网络表示学习,网络表示学习)