【GNN】VGAE:利用變分自編碼器完成圖重構

今天學習的是 Thomas N. Kipf 的 2016 年的工作《Variational Graph Auto-Encoders》,目前引用量爲 260 多。

VGAE 屬於圖自編碼器,是圖神經網絡細分類別的一大類。Kipf 同學也非常厲害,其影響力最大的一篇論文莫過於 2017 年提出的 GCN 模型。

VGAE 全稱爲 Variational Graph Auto-Encoders,翻譯過來就是變分圖自編碼器,從名字中我們也可以看出 VGAE 是應用於圖上的變分自編碼器,是一種無監督學習框架。

看到這可能不知道大家都沒有疑問,至少我會有以下幾點疑問:

  1. 自編碼器是利用編碼與解碼對數據進行壓縮,加上變分後的 VGAE 是什麼?
  2. 自編碼器是通過隱藏層節點數小於輸入層節點數實現數據壓縮,VGAE 如何實現?
  3. 自編碼器預測的目標是輸入,而 VGAE 要預測的是什麼?

1.Introduction

我們知道自編碼器的是通過減少隱藏層神經元個數來實現重構樣本,自編碼器爲了儘可能復現輸入數據,其隱藏層必須捕捉輸入數據的重要特徵,從而找到能夠代表原數據的主要成分。

變分圖自編碼器也具有類似的目的,其主要是爲圖中節點找尋合適的 Embedding 向量,並通過 Embedding 向量實現圖重構。其中獲取到的節點 Embedding 可以用於支撐下游任務。

2.VGAE

2.1 VAE

在介紹 VGAE 之前,我們先介紹下 VAE(Variational Auto-Encoders)。VAE 瞭解清楚後,VGAE 也算完成了 80%。

VAE 最早來源於 2014 年 Kingma 的一篇論文《Auto-Encoding Variational Bayes》。該論文目前引用數超 8300 次,作者 Kingma 和 Kipf 都來自於阿姆斯特丹大學。

VAE 是變分貝葉斯(Variational Bayesian)和神經網絡的結合。

簡單介紹下變分貝葉斯方法:我們知道統計模型由觀察變量 x、未知參數 θ\theta 和隱變量 z 組成,生成模型是通過隱變量來估計觀察變量:pθ(z)pθ(xz)p_{\theta}(z)p_{\theta}(x|z)。但很多情況下,這個後驗概率並容易得到(因變量和參數都不知道),所以我們就需要通過其他的方式來近似估計這個後驗概率。貝葉斯統計學傳統的推斷方法是採用馬氏鏈蒙特卡洛(MCMC)採樣方法,通過抽取大量樣本給出後驗分佈的數值近似,但這種方法的計算代價昂貴。而變分貝葉斯是把原本的統計推斷問題轉換成優化問題(兩個分佈的距離),並利用一種分析方法來近似隱變量的後驗分佈,從而達到原本統計推斷的問題。

而 VAE 則是利用神經網絡學習來學習變分推導的參數,從而得到後驗推理的似然估計。下圖實線代表貝葉斯推斷統計的生成模型 pθ(z)pθ(xz)p_{\theta}(z)p_{\theta}(x|z),虛線代表變分近似 qϕ(zx)q_{\phi} (z|x)

這篇論文裏最重要的就是公式,爲了簡單起見,不進行公示推導。直接說結論:作者提出了 AEVB(Auto-Encoding Variational Bayesian)算法來讓 qϕ(zx)q_{\phi} (z|x) 近似 pθ(xz)p_{\theta}(x|z),同時把最大似然函數的下界作爲目標函數,從而避開了後驗概率的計算,並且將問題轉換爲最優化問題,同時可以利用隨機梯度下降來進行參數優化。

VAE 模型中,我們假設 qϕ(zx)q_{\phi} (z|x) 這個後驗分佈服從正態分佈,並且對於不同樣本來說都是獨立的,即樣本的後驗分佈是獨立同分布的。可能大家會有個疑問:

  1. 爲什麼是服從正態分佈?
  2. 爲什麼要強調是各樣本分佈是獨立的?

對於第一個問題,這裏只是做一個假設,只要是一個神經網絡可以學到的分佈即可,只是服從正態分佈就是 VAE 算法,如果服從其他的分佈就是其他的算法;

對於第二個問題,如果我們學到的各變量的分佈都是一致的,如:

這樣的結構無法保證通過學到的分佈進行採樣得到的隱變量 ziz_i 能夠與真實樣本 xix_i 一一對應,所以就無法保證學習效果了。

所以 VAE 的每個樣本都有自己的專屬正態分佈:

這樣,我們便能通過每個樣本的專屬分佈來還原出真實樣本。

這也是論文中最重要的一點:
logqϕ(zx(i))=logN(z;μ(i),σ2(i),I) \log q_{\phi}(\mathbf{z}|\mathbf{x}^{(i)}) = \log N(\mathbf{z} ;\mathbf{\mu}^{(i)},\mathbf{\sigma}^{2(i)},\mathbf{I}) \\
VAE 通過構建兩個神經網絡來分別學習均值和方差 μk=f1(Xk),logσk2=f2(Xk)\mu_k = f_1(\mathbf{X}_k),\log \sigma_k^2 = f_2(\mathbf{X}_k),這樣我們便能得到樣本 XkX_k 的專屬均值和方差了,然後從專屬分佈中採樣出 ZkZ_k,然後通過生成器得到 X^k=g(Zk)\mathbf{\hat X}_k = g(\mathbf{Z}_k),並通過最小化重構誤差來進行約束 D(X^k,Xk)D(\mathbf{\hat X}_k, \mathbf{X}_k)

但隱變量是通過採樣得到的,而不是經過編碼器算出來的。這樣的重構過程中免不了受到噪聲的影響,噪聲會增加重構的難度,不過好在這個噪聲的強度可以通過方差反應,方差可以通過一個神經網絡得到計算,所以最終模型爲了更好的重構會盡量讓模型的方差爲零,而方差爲零時,就不存在隨機性了,這樣模型最終會是一組均值,便退化成了普通的 AutoEncoder。

爲了防止噪聲爲零不再起作用,VAE 會讓所有的後驗分佈都向標準正態分佈看齊,衡量兩個分佈的距離,我們有 KL 散度:
Lμ,σ2=12i=1d(μi2+σi2log  σi21) L_{\mu, \sigma^2} = \frac{1}{2}\sum_{i=1}^d \big( \mu_i^2 + \sigma_i^2 - log\; \sigma_i^2 - 1 \big) \\
其中,d 爲隱變量的維度。

變分自編碼中的變分是指變分法,用於對泛函 KL(pq)KL(p|q) 求極值。

我們將約束兩個分佈的 KL 散度加入到損失函數中,則有:
L=D(X^k,Xk)+12i=1d(μi2+σi2log  σi21) L = D(\mathbf{\hat X}_k, \mathbf{X}_k) + \frac{1}{2}\sum_{i=1}^d ( \mu_i^2 + \sigma_i^2 - log\; \sigma_i^2 - 1 ) \\
簡單來說,VAE 的本質就是利用兩個編碼器分別計算均值和方差,然後利用解碼器來重構真實樣本,模型結構大致如下:

2.2 VGAE

我們再來看一下變分圖自編碼,先來看下框架:

其中,X 爲節點的特徵矩陣,A 爲鄰接矩陣,先利用後驗概率得到隱變量 Z,再用隱變量重構鄰接矩陣 A。

VGAE 的編碼器是一個兩層的圖卷積網絡:
q(ZX,A)=Πi=1Nq(ziX,A) q(\mathbf{Z}|\mathbf{X},\mathbf{A}) = \Pi_{i=1}^N q(z_i|\mathbf{X},\mathbf{A}) \\
其中,後驗概率和 VAE 的解決方案一致:
q(ziX,A)=N(ziμi,diag(σi2)) q(\mathbf{z}_i|\mathbf{X},\mathbf{A})=N(\mathbf{z}_i |\mu_i, diag(\sigma_i^2)) \\
其中,μ=GCNμ(X,A)\mu=GCN_{\mu}(\mathbf{X},\mathbf{A}) 是特徵向量的均值;log  σ=GCNσ(X,A)log\;\sigma=GCN_{\sigma}(X,A) 是節點向量的方差。

兩層卷積神經網絡定義爲:
GCN(X,A)=A~  ReLU(A~XW0)W1 GCN(\mathbf{X},\mathbf{A}) = \mathbf{\widetilde{A}}\; ReLU(\mathbf{\widetilde A}\mathbf{X}\mathbf{W_0})\mathbf{W_1} \\
其中,GCNμ(X,A)GCN_{\mu}(\mathbf{X},\mathbf{A})GCNσ(X,A)GCN_{\sigma}(\mathbf{X},\mathbf{A}) 共享第一層參數 W0W_0,不共享第二層參數 W1W_1A~=D1/2AD1/2\mathbf{\widetilde A}=\mathbf{D}^{-1/2}\mathbf{A}\mathbf{D}^{-1/2} 是對稱標準化鄰接矩陣。

VGAE 的解碼器則是利用隱變量的內積來重構鄰接矩陣:
p(AZ)=i=1Nj=1Np(Aijzi,zj) p(\mathbf{A}│\mathbf{Z})=∏_{i=1}^N∏_{j=1}^Np(A_{ij} |\mathbf{z}_i, \mathbf{z}_j) \\
其中,p(Aij=1zi,zj)=σ(ziTzj)p(A_{ij}=1|\mathbf{z}_i,\mathbf{z}_j) = \sigma(\mathbf{z}_i^{T}\mathbf{z}_j).

損失函數也是包括兩部分:
L=Eq(ZX,A))[log  p(AZ)]KL[q(ZX,A)p(Z)] L=\mathbb{E}_{q(\mathbf{Z}|\mathbf{X}, \mathbf{A}))}[log⁡\;p(\mathbf{A}│\mathbf{Z})]-KL[q(\mathbf{Z}│\mathbf{X},\mathbf{A})||p(\mathbf{Z})] \\
其中,p(Z)=ΠiN(zi0,I)p(\mathbf{Z})=\Pi_i N(\mathbf{z}_i|0,\mathbf{I}) 表示

2.3 GAE

除了變分自編碼器外,作者也提出了非概率模型的圖自編碼器(Graph Auto Encoder),公式如下:
A^=σ(ZZT) \hat {\mathbf{A}} = \sigma(\mathbf{Z}\mathbf{Z}^T) \\
其中,Z=GCN(X,A)\mathbf{Z} = GCN(\mathbf{X},\mathbf{A})

此時的損失函數只包括重構損失。

3.Experiment

簡單看一下實驗部分,主要是邊預測問題,我們也可以看到 VGAE 是預測鄰接矩陣的。

打星號的是不使用節點的特徵。

4.Conclusion

總結:VGAE 利用神經網絡學習後驗分佈從而實現編碼過程,同時利用重構誤差和 KL 散度進行參數優化,從而得到節點的隱變量作爲節點的 Embeding。

5.Reference

  1. 《Variational Graph Auto-Encoders》
  2. 《Auto-Encoding Variational Bayes》
  3. 《變分自編碼器(一):原來是這麼一回事》

關注公衆號跟蹤最新內容:阿澤的學習筆記

阿澤的學習筆記

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