【網絡表示學習】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

輸入:節點viv_i的特徵 xix_i

輸出:節點 viv_i 鄰居的特徵重建值,重建的目標 T(vi)T(v_i) 聚合了鄰居的特徵

自編碼器loss定義
(2)Lae=i=1nx^iT(vi)22 \mathcal{L}_{a e}=\sum_{i=1}^{n}\left\|\hat{\mathbf{x}}_{i}-T\left(v_{i}\right)\right\|_{2}^{2}{\tag 2}
其中 T()T(\cdot) 採取以下兩種方式:

  • Weighted Average Neighbor

    鄰居特徵的加權平均
    T(vi)=1N(i)jN(i)wijxj T\left(v_{i}\right)= \frac{1}{|\mathcal{N}(i)|} \sum_{j \in \mathcal{N}(i)} w_{i j} \mathbf{x}_{j}

  • Elementwise Median Neighbor

    取每一維特徵在鄰居節點中的中位數
    T(vi)=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]

x~k=Median(wi1x1k,wi2x2k, ,wiN(i)XN(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)

Attribute-aware Skip-gram Model

給定節點 viv_i 和屬性 xix_i,對於所有的隨機遊走 cCc\in C,最小化以下損失函數
(3)Lsg=i=1ncCbb,j0logp(vi+jxi) \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}
條件概率定義爲:
(4)p(vi+jxi)=exp(vi+jf(xi))v=1nexp(vvTf(xi)) 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}
其中 Vi\mathbf{V}_{i}^{\prime} 是節點 viv_i 作爲上下文節點時的表示,f()f(\cdot) 可以是任意屬性編碼函數,如用於圖像數據的CNN或者用於序列數據的RNN。

上式直接計算開銷大,用負採樣進行優化:
(5)logσ(vi+jTf(xi))+s=1 neg EvnPn(v)[logσ(vnTf(xi))] \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}
負樣本的概率分佈採用word2vec論文裏採用的 Pn(v)dv3/4P_{n}(v) \propto d_{v}^{3 / 4}

聯合優化

模型包括兩個部分,共享自編碼器的encoder部分。其中左邊分支是一個decoder,重建輸入樣本的鄰居屬性;右邊是用輸入樣本對應表示預測其上下文。

兩個分支都共享了自編碼器的encoder部分,最終表示 yi(K)\mathbf{y}_{i}^{(K)} 同時捕捉了節點屬性和網絡結構。

聯合損失函數

L=Lsg+αLae+βLreg=i=1ncCbjb,j0logexp(ui+jTyi(K))v=1nexp(uvTyi(K))+αi=1nx^iT(vi)22+β2k=1K(W(k)F2+W^(k)F2) \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}

其中n是節點總數,C是隨機遊走產生的節點序列,b是窗口大小。xi\mathbf{x}_i表示節點 viv_i 的屬性,yi(K)\boldsymbol{y}_{i}^{(K)} 是節點 viv_i 的表示。W(k),W(k)\boldsymbol{W}^{(k)}, \boldsymbol{W}^{(k)} 分別是encoder和decoder第k層的權重矩陣。U\mathbf{U} 是圖結構上下文預測部分的權重矩陣,uv\boldsymbol{u}_{\boldsymbol{v}}U\mathbf{U} 的第v列。

訓練

Q&A

  1. f()f(\cdot) 具體的作用和最終使用的函數

    看了作者源碼實現裏直接用最後的表示yi(K)\mathbf{y}_{i}^{(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. Lsg\mathcal{L}_{s g}L ae \mathcal{L}_{\text { ae }} 爲什麼不能同時優化?不同時優化,分步進行的先後順序是否有影響?

    BiNE中也是兩項loss的組合,然後分開優化

  3. 文中自編碼器的輸入和輸出不同,與傳統的自編碼器用法帶來的額外好處是什麼?

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章