深入淺出圖神經網路 第5章 圖訊號處理與圖卷積神經網路 讀書筆記

DazTricky 發表於 2021-07-14
神經網路

前面廢點話:

終於!來到了GNN最相關的內容!前面四章來說都是一些預備知識,或者說是介紹性的認識的東西,其實和GNN的關係不是特別大。但從這一章開始一上來就是GNN最核心的東西:圖訊號處理。這部分其實非常關鍵,但大部分人學的時候可能都會忽視這一點,認為自己可以直接進入GCN的部分,這是錯誤的。入門GCN最勸退的地方其實就是拉普拉斯和傅立葉變換那裡,當然沒懂的話也可以對著DGL或者PyG這兩個輪子幾行程式碼就寫出來幾個GCN,但輪子得來終覺淺,個人認為作為開山的論文,GCN的思想還是很重要的,所以這一章的讀書筆記會做的比之前都詳細,儘量能寫出自己的理解。

第5章 圖訊號處理與圖卷積神經網路

5.1 矩陣乘法

夯實基礎!什麼叫夯實基礎!矩陣乘法確實是整個機器學習的重中之重,所以我們先從最基礎的開始看起。

對於矩陣\(A \in R^{K\times M},B\in R^{M\times P},C=AB\),我們有三種計算方式:

  1. 內積視角:矩陣\(A\)看作一個行向量矩陣,\(B\)看作一個列向量矩陣,有\(C_{ij}=A_{i,:}B_{:,j}\)
  2. 行向量視角:矩陣\(B\)看作一個行向量矩陣,\(A\)看作一個係數矩陣,有\(C_{i,:}=\sum_{m}^{M}A_{im}B_{m,:}\)
  3. 列向量視角:矩陣\(A\)看作一個列向量矩陣,\(B\)看作一個係數矩陣,有\(C_{:,j}=\sum_{m}^{M}B_{mj}A_{:,m}\)

我們設\(A=\begin{bmatrix}1&-1&2\\0&2&1\end{bmatrix},B=\begin{bmatrix}2&0\\-1&1\\0&-1\end{bmatrix}\)

進行矩陣乘法當然是簡單的,也就是用傳統的內積視角,很容易得到\(C=\begin{bmatrix}3&-3\\-2&1\end{bmatrix}\)

如果我們用行向量的視角,則有\(C\)的第一行:\(\begin{bmatrix}3&-3\end{bmatrix}=\begin{bmatrix}1&-1&2\end{bmatrix}\begin{bmatrix}2&0\\-1&1\\0&-1\end{bmatrix}\)

如果我們用列向量的視角,則有\(C\)的第一列:\(\begin{bmatrix}3\\-2\end{bmatrix}=\begin{bmatrix}1&-1&2\\0&2&1\end{bmatrix}\begin{bmatrix}2\\-1\\0\end{bmatrix}\)

需要注意的特別是行視角的計算方式對理解空域圖卷積的計算邏輯與意義有很大幫助。

5.2 圖訊號與圖的拉普拉斯矩陣

\(G=(V,E)\),假設共有\(N\)個節點,圖訊號是一種描述\(V\to R\)的對映,表示成向量\(x=[x_1,x_2,...,x_N]^T\),其中\(x_i\)表示在節點\(v_i\)上的訊號強度。

拉普拉斯矩陣定義為\(L=D-A\)\(D\)是一個對角矩陣,對角線元素為節點的度數,\(A\)則是圖的鄰接矩陣。

拉普拉斯矩陣中的元素可以表示為

\[L_{ij}=\begin{cases}\text{deg}(v_i)&\text{if } i=j \\ -1&\text{if }e_{ij}\in E\\0&\text{otherwise}\end{cases} \]

拉普拉斯矩陣還有一種正則化的表示(Symmetric Normalized Laplacian)\(L_{sym}=D^{-\frac{1}{2}}LD^{-\frac{1}{2}}\),各個元素可以表示為

\[L_{s ym}[i,j]=\begin{cases}1&\text{if } i=j \\ \frac{-1}{\sqrt{\text{deg}(v_i)\text{deg}(v_j)}}&\text{if }e_{ij}\in E\\0&\text{otherwise}\end{cases} \]

很關鍵!GCN用的就是這個。

那麼拉普拉斯矩陣是怎麼來的呢?

考慮拉普拉斯運算元:\(\Delta f=\Sigma^n_{i=1}\frac{\partial^2f}{\partial x_i^2}\),將其作用到離散的二維影像空間裡,就能得到邊緣檢測運算元:

\[\Delta f(x,y)=\frac{\partial^2f(x,y)}{\partial x^2}+\frac{\partial^2f(x,y)}{\partial y^2}=f(x+1,y)+f(x-1,y)+f(x,y+1)+f(x,y-1)-4f(x,y) \]

具體的計算過程不贅述,就表明一點:因為是離散的空間,離散函式的導數退化為差分

矩陣形式的表示為:\(\begin{bmatrix}0&1&0\\1&-4&1\\0&1&0\end{bmatrix}\)。其描述了中心畫素與區域性上下左右四鄰居畫素的差異,所以拿來進行邊緣檢測。

同理對於圖訊號,拉普拉斯運算元也被用來描述中心節點與鄰居節點之間的訊號差異:

\[Lx=(D-A)x=[...,\sum_{v_j\in N(v_i)}(x_i-x_j),...] \]

可以看到我們將拉普拉斯矩陣與圖訊號相乘後得到的向量中的元素\((Lx)_i\)代表的就是\(v_i\)的訊號值乘\(v_i\)的度數再減掉其鄰居的訊號值之和。所以拉普拉斯矩陣可以用來刻畫圖訊號的區域性平滑度。

進一步可以定義二次型:

\[x^TLx=\sum_{e_{ij}\in E}(x_i-x_j)^2 \]

這個被稱為\(TV(x)\),圖訊號的總變差,是一個反應圖訊號的整體平滑度的標量。

5.3 圖傅立葉變換

我們先對拉普拉斯矩陣再進行一些分析:

假設圖\(G\)的拉普拉斯矩陣有\(L\in R^{N\times N}\),由前面的定義很容易知道\(L\)是一個實對稱矩陣,可以對角化,所以有:

\[L=V\Lambda V^T= \begin{bmatrix} \vdots&\vdots&\cdots&\vdots\\ v_1&v_2&\cdots&v_N\\ \vdots&\vdots&\cdots&\vdots \end{bmatrix} \begin{bmatrix} \lambda_1 &&&\\ &\lambda_2&&\\ &&\ddots&\\ &&&\lambda_N \end{bmatrix} \begin{bmatrix} \cdots&v_1&\cdots\\ \cdots&v_2&\cdots\\ \cdots&\vdots&\cdots\\ \cdots&v_N&\cdots \end{bmatrix} \]

\(V=[v_1,...,v_N]\)\(L\)的N個特徵向量,且有\(V\in R^{N\times N}\)是正交矩陣\(VV^T=I\)。用\(\lambda_k\)表示第\(k\)個特徵向量對應的特徵值,並令\(\lambda_1\le\lambda_2\le...\le\lambda_N\)

因為前面有\(x^TLx=\sum_{e_{ij}\in E}(x_i-x_j)^2\ge0\),所以拉普拉斯矩陣是半正定矩陣,其所有特徵值均非負。且如果我們將全為\(1\)的向量帶入前面的\(Lx\)顯結果然為0,說明拉普拉斯矩陣具有最小特徵值為0,對應的特徵向量全為\(1\)

之後考慮圖傅立葉變換,對於圖\(G\)上訊號\(x\),其圖傅立葉變換為

\[\tilde x_k=\sum^N_{i=1}V^T_{ki}x_i=\lang v_k,x\rang \]

我們稱特徵向量為傅立葉基,\(\tilde x_k\)\(x\)在第k個傅立葉基上的傅立葉係數。通過定義我們可以看出傅立葉係數本質上是圖訊號在傅立葉基上的投影,衡量了圖訊號與傅立葉基之間的相似度。

矩陣形式可以計算所有傅立葉係數:\(\tilde x=V^Tx\)

因為\(V\)是正交矩陣,所以上式可以變換為\(V\tilde x=VV^Tx=Ix=x\),由此定義逆圖傅立葉變換IGFT:

\[x_k=\sum_{i=1}^NV_{ki}·\tilde x_i \]

同時可以有其向量形式:

\[\begin{aligned} x=V\tilde x&= \begin{bmatrix} \vdots&\vdots&\cdots&\vdots\\ v_1&v_2&\cdots&v_N\\ \vdots&\vdots&\cdots&\vdots\\ \end{bmatrix} \begin{bmatrix} \tilde x_1\\\tilde x_2\\\vdots\\\tilde x_N \end{bmatrix} \\&=\tilde x_1v_1+\tilde x_2v_2+\cdots+\tilde x_Nv_N \\&=\sum^N_{k=1}\tilde x_kv_k \end{aligned} \]

這表明傅立葉基是一組完備的基向量,任意一個圖訊號都可以被這組基所表示。

此時我們再回頭看總變差,可以將其改寫為:

\[\begin{aligned} TV(x)&=x^TLx=x^TV\Lambda V^Tx \\&=(V\tilde x)^TV\Lambda V^T(V\tilde x) \\&=\tilde x^T(V^TV)\Lambda (V^TV)\tilde x \\&=\tilde x^T\Lambda\tilde x \\&=\sum^N_k\lambda_k\tilde x_k^2 \end{aligned} \]

說明圖的總變差與圖的拉普拉斯矩陣的特徵值之間有著線性對應關係,是圖的所有特徵值的一個線性組合,權重是圖訊號的傅立葉係數的平方。

之後書中分析了什麼樣的圖訊號具有最小的總變差,個人感覺這一段寫的有些混亂,沒太讀懂,這裡僅給出一個結論:如果\(x=v_i\)\(v_i\)是拉普拉斯矩陣的一個特徵向量,那麼總變差就為\(\lambda_i\)即特徵向量對應的特徵值。所以我們取最小特徵值對應的特徵向量就可以得到最小的總變差為0(拉普拉斯矩陣最小特徵值為0)。還有一個引申出來的結論:特徵值實際上是圖訊號平滑度的一種梯度刻畫,可以將其視為”頻率”,特徵值越低,頻率越低,傅立葉基變化的越緩慢,相近節點上的訊號趨於一致;特徵值越高,頻率越高,傅立葉基變化的越劇烈,相近節點上的訊號有很大不同。

好!這裡已經灌輸了太多概念和定義還有一些二級結論,我讀的時候就有點暈,寫這篇筆記的時候又暈了一次,所以我覺得要停下來做一點梳理。

我認為主要迷惑的點是GFT和IGFT為什麼是那樣定義的,我查詢了一些資料,得到的結果是:別問,問就是定義。GFT實際上不是“基於數學”的,而是將傅立葉變換經過類比定義出了圖上的一種計算操作,我們可以將其視為以拉普拉斯矩陣的特徵向量為基對圖訊號進行投影,其將一個圖訊號分解到不同平滑程度的圖訊號上。

另一個迷惑的點是空域和頻域在GFT裡到底是啥,我的理解是原始的圖訊號是空域,得到的傅立葉係數則是在頻域。

書中稍後也提到的傅立葉係數可以等價成圖訊號在對應頻率分量上的幅值,反映了圖訊號在這個頻率上的強度(前面說了將拉普拉斯矩陣的特徵值看作頻率)。那麼再結合總變差中如果圖訊號是某特徵向量那麼總變差的值就是特徵向量對應的特徵值的結論,我們就有圖訊號在低頻分量(較小的特徵值)上的強度越大,訊號的平滑度就越高(總變差小),反之平滑度越低。

由此就定義好了圖訊號的頻域。我們又有IGFT,所以相應地可以得到空域。這樣算對GFT有了一個基本的各方面的定義。

5.4 圖濾波器

定義:對給定圖訊號的頻譜中各個頻率分量的強度進行增強或衰減的操作。圖濾波器\(H\in R^{N\times N}\),那麼有\(H:R^N\to R^N\),有經過圖濾波器的輸出圖訊號\(y\),則:

\[y=Hx=\sum^N_{k=1}(h(\lambda_k)\tilde x_k)v_k \]

可以得到:

\[H=V \begin{bmatrix} h(\lambda_1)\\ &h(\lambda_2)\\ &&\ddots\\ &&&h(\lambda_N) \end{bmatrix} V^T \]

對比拉普拉斯矩陣,圖濾波器可以寫為:

\[H=V\Lambda_h V^T \]

\(Hx\)描述了一種作用在每個節點一階子圖上的變換操作。我們稱滿足這樣性質的矩陣為\(G\)的圖位移運算元。

圖濾波器具有以下幾個性質:

  1. 線性
  2. 順序無關
  3. 如果\(h(\lambda)\ne 0\),則濾波操作可逆

\(\Lambda_h\)為圖濾波器\(H\)的頻率響應矩陣,\(h()\)\(H\)的頻率響應函式。不同的頻率響應函式可以實現不同的濾波型別,常見的即為低通、高通、帶通。(插一句嘴,忘了哪篇paper分析過GCN實際上是低通濾波器~)

空域角度

書裡給了個計算的例子沒頭沒腦的挺迷的...給了個式子但前面寫\(L\)後面寫\(H\)...沒懂想表達什麼,所以就只記錄一下一些概念和結論。

貼一下給的空域的式子:

\[y=\sum^K_{k=0}h^kx^{k}\\ x^{k}=H^kx=Hx^{k-1} \]

(書裡寫的是\(x^k=L^kx\),我覺得寫錯了應該是H)

圖濾波器的區域性性:k階的計算只涉及節點的k階鄰居。

空域角度下,濾波操作具有如下性質:

  1. 區域性性,每個節點的輸出訊號值只需要考慮其k階子圖
  2. 可以通過k步迭代式的矩陣向量乘法完成濾波操作

因為區域性性,所以\(H\)可以看做一個聚合鄰居的操作運算元。(酷,馬上想到GraphSAGE的聚合操作)

頻域角度

將拉普拉斯矩陣的定義帶入到\(H\)的定義給出這樣一個形式:

\[H=V \begin{bmatrix} \sum_{k=0}^Kh_k\lambda_1^k\\ &\sum_{k=0}^Kh_k\lambda_2^k\\ &&\ddots\\ &&&\sum_{k=0}^Kh_k\lambda_N^k \end{bmatrix} V^T \]

這說明只要K足夠大,那麼可以通過這種形式來逼近關於\(\lambda\)的任意一個函式。

考慮

\[y=Hx=V(\sum^K_{k=0}h_k\Lambda^k)V^Tx \]

這是頻域視角下的濾波操作,其變換過程如下:

  1. GFT,\(V^Tx\)將空域圖訊號變到頻域\(\tilde x\)
  2. \((\sum^K_{k=0}h_k\Lambda^k)\)對頻率的分量進行調節得到\(\tilde y\)
  3. IGFT,\(V\tilde y\)得到空域的圖訊號\(y\)

說是頻域角度,其實最後還是得到空域的圖訊號。

對比空域,頻域要先計算拉普拉斯矩陣的特徵值和特徵向量,本身時間複雜度不低,所以有一定的侷限性。

5.5 圖卷積神經網路

定義:圖訊號\(x_1,x_2\),圖卷積運算為:

\[x_1*x_2=IGFT(GFT(x_1)\odot GFT(x_2)) \]

\(\odot\)是哈達瑪積,在第2章的時候提到過(沒看過的朋友快去看!),簡單來說就是把矩陣相乘簡化為元素相乘再湊成矩陣。

將圖卷積展開有:

\[\begin{aligned} x_1*x_2&=V((V^Tx_1)\odot(V^Tx_2)) \\&=V(\tilde x_1\odot(V^Tx_2)) \\&=V(\text{diag}(\tilde x_1)(V^Tx_2)) \\&=(V\text{diag}(\tilde x_1)V^T)x_2 \end{aligned} \]

\(\tilde x_1\)變成對角陣那步從結果上來說和哈達瑪積等價,所以可以去掉哈達瑪積。

定義\(H_{\tilde x_1}=V\text{diag}(\tilde x_1)V^T\),回顧前面圖濾波器的定義,顯然其也是一個圖濾波器,其頻率響應矩陣為\(x_1\)的頻譜,由此圖卷積就變為了圖濾波運算。

下面考慮的是如何將圖卷積運算應用到圖資料的學習中去。

對頻率響應矩陣進行引數化

這是很自然的想法,即定義這樣的神經網路層:

\[\begin{aligned} X'&=\sigma(V \begin{bmatrix} \theta_1\\ &\theta_2\\ &&\ddots\\ &&&\theta_N \end{bmatrix}V^TX) \\&=\sigma(V\text{diag}(\theta)V^TX) \\&=\sigma(\Theta X) \end{aligned} \]

\(\sigma(·)\)為啟用函式,\(\theta\)是需要學習的引數,X是輸入的圖訊號,X'是輸出的圖訊號。

可以從空域和頻域兩個角度來考慮這層網路:

  • 空域上來說就是學習了一個圖位移運算元,能夠使得圖訊號發生針對性的變化
  • 頻域上來說就是學習了一個頻率響應函式,得到了一個滿足要求的圖濾波器

這樣的方法簡單,但也有一些問題:

  • 學習引數過多,為圖中的節點數,在大規模圖上幾乎不可行,容易過擬合
  • 真實圖資料中一般有效的資訊都在低頻,不需要對每個頻率都學習

對多項式係數進行引數化

就貼了個公式沒細說,總之也是在學習圖濾波器,略過,貼一下公式:

\[X'=\sigma(V(\sum^K_{k=0}\theta_k\Lambda^k)V^TX) \]

這個方法在GCN的paper裡也有提到,GCN就是從這個方法改進來的,所以重點還是看後續的GCN的部分。

設計固定的圖濾波器

終於!GCN來辣!

首先是考慮5.2裡的公式,令\(K=1\)可以得到這樣一個神經網路層:

\[X'=\sigma(\theta_0 X+\theta_1LX) \]

\(\theta_0=\theta_1=\theta\),有:

\[X'=\sigma(\theta(I+L)X)=\sigma(\theta \tilde LX) \]

注意\(\theta\)是一個標量一個值,也就是對\(\tilde L\)的頻率響應函式做了一個尺度變換,因為尺度變換最後會被歸一化操作所替代,所以沒必要引入這個引數,不妨就令其為1,所以就有了一個固定的圖濾波器\(\tilde L\)

那麼對\(\tilde L\)的歸一化就是:

\[\tilde L_{sym}=\tilde D^{-\frac{1}{2}}\tilde A\tilde D^{-\frac{1}{2}},\tilde A= A+I,\tilde D_{ii}=\Sigma_j\tilde A_{ij} \]

再考慮一下\(\tilde L_{sym}\),想一下它是怎麼來的:我們一步步定義、推匯出了GFT和IGFT,定義了圖濾波器,給出了圖卷積的定義,將圖卷積的運算寫成了圖濾波器的形式,為了加強圖濾波器的擬合能力給出了多項式形式的圖濾波器,最後我們將其化簡為只有兩項,得到了\(\tilde L\),再進行歸一化得到了\(\tilde L_{sym}\)

也就是說,\(\tilde L_{sym}\)就可以被看作是一個圖濾波器,也可以看做是圖位移運算元,\(\tilde L_{sym}X\)就是在做圖卷積!

而得到\(\tilde L_{sym}\)無疑是容易的,不需要計算特徵值、特徵向量,只需要得到鄰接矩陣即可。

為了增強網路的擬合能力,考慮一個引數化的權重矩陣\(W\),即:

\[X'=\sigma(\tilde L_{sym}XW) \]

\(W\)是可學習的(不然\(\tilde L_{sym}\)是確定的網路在學啥呢hh),上式就是一層GCN Layer所做的事情。GCN就是多層堆疊的神經網路,我們也叫它圖卷積神經網路。

終於!在前面4章加上這一章大量的內容鋪墊之後,GCN終於現出了真容。

由此我們可以簡單分析一下GCN:

  • \(\tilde L_{sym}\)是一個圖位移運算元,所以一層GCN就是聚合一層鄰居節點的資訊
  • GCN沒有進行特徵分解等操作,雖然\(\tilde L_{sym}\)是從圖濾波器化簡來的,但其可以認為是空域的圖卷積操作

更多的分析會在之後的章節。書中5.6節是GCN的程式碼實戰,我會專門再出一篇部落格來寫,敬請期待。

寫在後面:

你可能注意到我好久之後才更新了這一章讀書筆記orz

一方面是在準備期末焦頭爛額,另一方面是這一章的內容硬核而且又非常重要,我讀了好幾遍確保我理解正確之後才開始動手寫讀書筆記(雖然也不確定我理解的是不是都對)。之前我對GCN的認識全來自於Kipf的論文,誠實地講沒太讀明白,因為缺了很多基礎的知識。這次順著這本書讀下來感覺好理解了很多。其實GCN的原理講解網上一抓一大把,我也看了不少,但也都是似懂非懂的,這次真的讀書筆記順著寫下來才有種豁然開朗的感覺。希望各位也都能有所收穫。如果我的筆記有錯誤也請多多指教。