最全面的圖卷積網路GCN的理解和詳細推導,都在這裡了!
阿新 • • 發佈:2021-02-02
[toc]
## 1. 為什麼會出現圖卷積神經網路?
普通卷積神經網路研究的物件是具備Euclidean domains的資料,Euclidean domains data資料最顯著的特徵是他們**具有規則的空間結構**,如圖片是規則的正方形,語音是規則的一維序列等,這些特徵都可以用一維或二維的矩陣來表示,卷積神經網路處理起來比較高效。
CNN的【平移不變性】在【非矩陣結構】資料上不適用
- **平移不變性(translation invariance)**:比較好理解,在用基礎的分類結構比如ResNet、Inception給一隻貓分類時,無論貓怎麼扭曲、平移,最終識別出來的都是貓,**輸入怎麼變形輸出都不變**這就是平移不變性,網路的層次越深這個特性會越明顯。
- **平移可變性(translation variance)**:針對目標檢測的,比如一隻貓從圖片左側移到了右側,檢測出的貓的座標會發生變化就稱為平移可變性。當卷積網路變深後最後一層卷積輸出的feature map變小,物體在輸入上的小偏移,經過N多層pooling後在最後的小feature map上會感知不到,這就是為什麼R-FCN原文會說網路變深平移可變性變差。
**離散卷積本質就是一種加權求和**。CNN中的卷積就是一種離散卷積,本質上就是利用一個共享引數的過濾器(kernel),通過**計算中心畫素點以及相鄰畫素點的加權和來構成feature map實現空間特徵的提取**,當然**加權係數就是卷積核的權重係數(W)**。
那麼卷積核的係數如何確定的呢?是**隨機化初值**,**然後根據誤差函式通過反向傳播梯度下降進行迭代優化**。這是一個關鍵點,卷積核的引數通過優化求出才能實現特徵提取的作用,**GCN的理論很大一部分工作就是為了引入可以優化的卷積引數**。
生活中很多資料不具備規則的空間結構,稱為Non Euclidean data,如,推薦系統、電子交易、分子結構等抽象出來的圖譜。這些圖譜中的每個節點連線不盡相同,有的節點有三個連線,有的節點只有一個連線,是**不規則**的結構。對於這些不規則的資料物件,普通卷積網路的效果不盡人意。CNN卷積操作配合pooling等在結構規則的影象等資料上效果顯著,但是如果作者考慮**非歐氏空間**比如圖(即graph,**流形也是典型的非歐結構**,這裡作者只考慮圖),就**難以選取固定的卷積核來適應整個圖的不規則性,如鄰居節點數量的不確定和節點順序的不確定。**
例如,社交網路非常適合用圖資料來表達,如社交網路中節點以及節點與節點之間的關係,使用者A(有ID資訊等)、使用者B、帖子都是節點,使用者與使用者之間的關係是關注,使用者與帖子之間的關係可能是釋出或者轉發。通過這樣一個圖譜,可以分析使用者對什麼人、什麼事感興趣,進一步實現推薦機制。
總結一下,圖資料中的空間特徵具有以下特點:
1) **節點特徵**:每個節點有自己的特徵;(體現在點上)
2) **結構特徵**:圖資料中的每個節點具有結構特徵,即節點與節點存在一定的聯絡。(體現在邊上)
總地來說,圖資料既要考慮**節點資訊**,也要考慮**結構資訊**,圖卷積神經網路就可以自動化地既**學習節點特徵**,又能**學習節點與節點之間的關聯資訊**。
綜上所述,GCN是要為除CV、NLP之外的任務提供一種處理、研究的模型。
**圖卷積的核心思想是利用『邊的資訊』對『節點資訊』進行『聚合』從而生成新的『節點表示』。**
## 2. 圖卷積網路的兩種理解方式
**GCN的本質目的就是用來提取拓撲圖的空間特徵。** 而圖卷積神經網路主要有兩類,一類是基於空間域或頂點域vertex domain(spatial domain)的,另一類則是基於頻域或譜域spectral domain的。通俗點解釋,空域可以類比到直接在圖片的畫素點上進行卷積,而頻域可以類比到對圖片進行傅立葉變換後,再進行卷積。
所謂的兩類其實就是從兩個不同的角度理解,關於從空間角度的理解可以看本文的[從空間角度理解GCN](#mycode)
### 2.1 vertex domain(spatial domain):頂點域(空間域)
基於空域卷積的方法直接將卷積操作定義在每個結點的連線關係上,它跟傳統的卷積神經網路中的卷積更相似一些。在這個類別中比較有代表性的方法有 Message Passing Neural Networks(MPNN)[1], GraphSage[2], Diffusion Convolution Neural Networks(DCNN)[3], PATCHY-SAN[4]等。
### 2.2 spectral domain:頻域方法(譜方法)
這就是譜域圖卷積網路的理論基礎了。這種思路就是希望藉助圖譜的理論來實現拓撲圖上的卷積操作。從整個研究的時間程序來看:首先研究GSP(graph signal processing)的學者定義了graph上的Fourier Transformation,進而定義了graph上的convolution,最後與深度學習結合提出了Graph Convolutional Network。
基於頻域卷積的方法則從圖訊號處理起家,包括 Spectral CNN[5], Cheybyshev Spectral CNN(ChebNet)[6], 和 **First order of ChebNet(1stChebNet)[7]** 等
論文Semi-Supervised Classification with Graph Convolutional Networks就是一階鄰居的ChebNet
認真讀到這裡,腦海中應該會浮現出一系列問題:
Q1 什麼是Spectral graph theory?
[Spectral graph theory](https://en.wikipedia.org/wiki/Spectral_graph_theory)請參考維基百科的介紹,簡單的概括就是**藉助於圖的拉普拉斯矩陣的特徵值和特徵向量來研究圖的性質**
Q2 GCN為什麼要利用Spectral graph theory?
這是論文([Semi-Supervised Classification with Graph Convolutional Networks](https://arxiv.org/abs/1609.02907))中的重點和難點,要理解這個問題需要大量的數學定義及推導
過程:
(1)定義graph上的Fourier Transformation傅立葉變換(利用Spectral graph theory,藉助圖的拉普拉斯矩陣的特徵值和特徵向量研究圖的性質)
(2)定義graph上的convolution卷積
下面將介紹關於頻譜域的圖卷積網路的推導相關的內容。
## 3. 什麼是拉普拉斯矩陣?
拉普拉斯矩陣(Laplacian matrix) 也叫做導納矩陣、**基爾霍夫矩陣**或**離散拉普拉斯運算元**,主要應用在圖論中,作為一個圖的矩陣表示。對於圖 G=(V,E),其Laplacian 矩陣的定義為 L=D-A,其中 L 是Laplacian 矩陣, D=diag(d)是頂點的度矩陣(對角矩陣),d=rowSum(A),對角線上元素依次為各個頂點的度, A 是圖的鄰接矩陣。
Graph Fourier Transformation及Graph Convolution的定義都用到圖的拉普拉斯矩陣。
**頻域卷積的前提條件是圖必須是無向圖**,只考慮無向圖,那麼L就是對稱矩陣。
### 3.1 常用的幾種拉普拉斯矩陣
#### 普通形式的拉普拉斯矩陣
$$
L=D-A
$$
L中的元素給定為:
$$
L_{i,j}=\begin{cases}
diag(v_i) & i=j\\
-1 & i \neq j \ and \ v_i \ is\ adjacent \ to \ v_j\\
0 & otherwise
\end{cases}
$$
其中diag(vi) 表示頂點 i 的度。
#### 對稱歸一化的拉普拉斯矩陣(Symmetric normalized Laplacian)
$$
L^{sys}=D^{-1/2}LD^{-1/2}=I-D^{-1/2}AD^{-1/2}
$$
矩陣元素定義為:
$$
L^{sys}_{i,j}=\begin{cases}
1 & i=j \ and \ diag(v_i) \ \neq \ 0\\
-\frac{1}{\sqrt{diag(v_i)diag(v_j)}} & i \neq j \ and \ v_i \ is\ adjacent \ to \ v_j\\
0 & otherwise
\end{cases}
$$
很多GCN的論文中應用的是這種拉普拉斯矩陣
#### 隨機遊走歸一化拉普拉斯矩陣(Random walk normalized Laplacian)
$$
L^{rw}=D^{-1}L=I-D^{-1}A
$$
矩陣元素定義為:
$$
L^{rw}_{i,j}=\begin{cases}
1 & i=j \ and \ diag(v_i) \ \neq \ 0\\
-\frac{1}{diag(v_i)} & i \neq j \ and \ v_i \ is\ adjacent \ to \ v_j\\
0 & otherwise
\end{cases}
$$
#### 泛化的拉普拉斯 (Generalized Laplacian)
泛化的拉普拉斯(用得少)定義為:
$$
\begin{cases}
Q_{i,j}<0 & i \ \neq \ j \ and \ diag(v_i) \ \neq \ 0\\
Q_{i,j}=0 & i \neq j \ and \ v_i \ is\ adjacent \ to \ v_j\\
any number & otherwise
\end{cases}
$$
Graph Convolution與Diffusion相似之處,當然從Random walk normalized Laplacian就能看出了兩者確有相似之處(其實兩者只差一個相似矩陣的變換,可參考[Diffusion-Convolutional Neural Networks](https://arxiv.org/abs/1511.02136))
其實維基本科對[Laplacian matrix](https://en.wikipedia.org/wiki/Laplacian_matrix)的定義上寫得很清楚,國內的一些介紹中只有第一種定義。這讓我在最初看文獻的過程中感到一些的困惑,特意寫下來,幫助大家避免再遇到類似的問題。
### 3.2 無向圖的拉普拉斯矩陣有什麼性質
(1)拉普拉斯矩陣是半正定矩陣。(最小特徵值大於等於0)
(2)**特徵值中0出現的次數就是圖連通區域的個數**。
(3)最小特徵值是0,因為拉普拉斯矩陣(普通形式:$L=D-A$)每一行的和均為0,並且**最小特徵值對應的特徵向量是每個值全為1的向量**;
(4)最小非零特徵值是圖的代數連通度。
拉普拉斯矩陣的半正定性證明,如下:
要證明拉普拉斯矩陣是半正定的,只需要證明其二次型$f^TLf \geq0$
證明:
$$
\begin{aligned}
f^TLf & =f^TDf-f^TAf \\
& = f^T*diag(d)*f-f^TAf \\
& =\sum_{i=1}^m d_i f_i^2-\sum_{j=1}^m[\sum_{i=1}^m f_j*a_{ij}]f_j \\
& =\sum_{i=1}^m d_i f_i^2-\sum_{i,j=1}^m f_i*f_j*a_{ij} \\
& =\frac{1}{2} [ \sum_{i=1}^md_if_i^2-2\sum_{i,j=1}^m f_i f_j a_{ij}+\sum_{j=1}^m d_j f_j^2 ] \\
& = \frac{1}{2}\sum_{i,j=1}^m a_{ij}(f_i-f_j)^2 \\
\end{aligned}
$$
所以,對於任意一個屬於實向量$f \in \mathbb{R}^m$(f為m∗1的實數列向量 ),都有此公式成立:
$$
f^TLf = \frac{1}{2}\sum_{i,j=1}^m a_{ij}(f_i-f_j)^2
$$
### 3.3 為什麼GCN要用拉普拉斯矩陣?
- 拉普拉斯矩陣是對稱矩陣,可以進行特徵分解(譜分解)
- 由於卷積在傅立葉域的計算相對簡單,為了在graph上做傅立葉變換,需要找到graph的連續的正交基對應於傅立葉變換的基,因此要使用拉普拉斯矩陣的特徵向量。
### 3.4. 拉普拉斯矩陣的譜分解(特徵分解)
GCN的核心基於拉普拉斯矩陣的譜分解,文獻中對於這部分內容沒有講解太多,初學者可能會遇到不少誤區,所以先了解一下特徵分解。
特徵分解(Eigendecomposition),又稱**譜分解**(Spectral decomposition)是將矩陣分解為由其特徵值和特徵向量表示的矩陣之積的方法。**只有對可對角化矩陣或有n個線性無關的特徵向量的矩陣才可以施以特徵分解。**
不是所有的矩陣都可以特徵分解,其充要條件為**n階方陣存在n個線性無關的特徵向量**。
但是拉普拉斯矩陣是半正定矩陣(半正定矩陣本身就是對稱矩陣),有如下三個性質:
- **對稱矩陣一定n個線性無關的特徵向量**
- 半正定矩陣的特徵值一定非負
- **對陣矩陣的不同特徵值對應的特徵向量相互正交**,這些正交的特徵向量構成的矩陣為正交矩陣。
由上拉普拉斯矩陣對稱知一定可以譜分解,且分解後有特殊的形式。
對於拉普拉斯矩陣其譜分解為:
$$
L=U \Lambda U^{-1}=U
\left[
\begin{matrix}
\lambda_1 & & \\
& \ddots & \\
& & \lambda_n \\
\end{matrix}
\right] U^{-1}
$$
其中$U=(\vec{u_1},\vec{u_2},\cdots,\vec{u_n})$,是列向量為單位特徵向量的矩陣,也就說 $ \vec{u_l} $是列向量,Λ是n個特徵值構成的對角陣。
由於 U 是正交矩陣,即$UU^{T}=E$,所以特徵分解又可以寫成:
$$
L=U \Lambda U^{-1}=U \Lambda U^{T}
$$
注意,特徵分解最右邊的是特徵矩陣的逆,只是拉普拉斯矩陣是對稱矩陣才可以寫成特徵矩陣的轉置。
### 3.5 拉普拉斯運算元
定義:拉普拉斯運算元是n維歐幾里德空間中的一個二階微分運算元,定義為梯度($\nabla f$)的散度($\nabla \cdot f$,即$\nabla f \cdot f$)。因此如果f是二階可微的實函式,則f的拉普拉斯運算元∆定義為:
$$
∆f=\nabla^2 f=\nabla \cdot \nabla f
$$
f的拉普拉斯運算元也是笛卡爾座標系xi中的所有非混合二階偏導數:
$$
∆f=\sum_{i=1}^n \frac{\partial^2f}{\partial x_i^2}
$$
函式f的拉普拉斯運算元也是該函式的海塞矩陣(是一個多元函式的二階偏導數構成的方陣)的跡:
$$
∆f=tr(H(f))
$$
拉普拉斯運算元(Laplacian operator) 的物理意義是空間二階導,準確定義是:標量梯度場中的散度,一般可用於描述物理量的流入流出。比如說在二維空間中的溫度傳播規律,一般可以用拉普拉斯運算元來描述。
### 3.6 拉普拉斯矩陣和拉普拉斯運算元的關係
其實,拉普拉斯矩陣的定義源於拉普拉斯運算元,拉普拉斯運算元是$n$維歐式空間中的一個二階微分運算元$\Delta f=\sum_{i=1}^{n} \frac{\partial^{2} f}{\partial x_{i}^{2}}$。當作用域$n=2$(即退化到二維歐式空間),拉普拉斯運算元就變成了我們熟悉的邊緣檢測運算元:
$$
\begin{aligned}
\Delta f(x, y) &=\frac{\partial^{2} f(x, y)}{\partial x^{2}}+\frac{\partial^{2} f(x, y)}{\partial y^{2}} \\
&=[(f(x+1, y)-f(x, y)-f(x-1, y))]\\
&+[(f(x, y+1)-f(x, y))-(f(x, y)-f(x, y-1))]\\
&=[f(x+1, y)+f(x-1, y)+f(x, y+1)+f(x, y-1)]-4 f(x, y)
\end{aligned}
$$
在處理二維影象時,上述運算元其實就是:
$$
\begin{array}{|lll|}
\hline 0 & 1 & 0 \\
1 & -4 & 1 \\
0 & 1 & 0 \\
\hline
\end{array}
$$
可以看出,在二維影象領域,拉普拉斯運算元常用於衡量中心畫素和區域性上、下、左、右四鄰居畫素之間的差異,這種性質通常被用來當作影象上的邊緣檢測運算元。
同樣,在圖訊號中,拉普拉斯運算元也可以用來描述節點與其鄰居節點之間的訊號之間的差異,這從下式可以看出:
$$
L \boldsymbol{x}=(D-A) \boldsymbol{x}=\left[\cdots, \sum_{v_{j} \in N\left(v_{i}\right)}\left(x_{i}-x_{j}\right), \cdots\right]
$$
因此,拉普拉斯矩陣是反映圖訊號區域性平滑度的運算元,進一步來說,拉普拉斯矩陣可以定義成一個非常重要的二次型:
$$
\boldsymbol{x}^{T} L \boldsymbol{x}=\sum_{v_{i}} \sum_{v_{j} \in N\left(v_{i}\right)} x_{i}\left(x_{i}-x_{j}\right)=\sum_{e_{ij} \in E}\left(x_{i}-x_{j}\right)^{2}
$$
令$\mathrm{TV}(\boldsymbol{x})=\boldsymbol{x}^{\mathrm{T}} L \boldsymbol{x}=\sum_{e_{ij} \in E}\left(x_{i}-x_{j}\right)^{2}$,我們稱$TV(\boldsymbol{x})$為圖訊號的總變差(Total Variation)。總變差是一個標量,它將各邊上訊號的差值進行加和,從而刻畫了圖訊號整體的平滑度。
## 4. 如何通俗易懂地理解卷積?
### 4.1 連續形式的一維卷積
在泛函分析中,卷積是通過兩個函式f(x)和g(x)生成第三個函式的一種運算元,它代表的意義是:**兩個函式中的一個(取g(x),可以任意取)函式,把g(x)經過翻轉平移,然後與f(x)的相乘,得到的一個新的函式,對這個函式積分,也就是對這個新的函式求它所圍成的曲邊梯形的面積。**
設f(t),g(t)是兩個可積函式,f(t)與g(t)的卷積記為$f(t)*g(t)$,它是其中一個函式翻轉並平移後與另一個函式乘積的積分,是一個自變數是平移量的函式。也就是:
$$
f(t)*g(t)= \int_{-\infty}^{+\infty}f(\tau)g(t-\tau)d\tau= \int_{-\infty}^{+\infty}f(t-\tau)g(\tau)d\tau
$$
### 4.2 離散形式的一維卷積
對於定義在整數$\mathbb{Z}$上的函式f,g,卷積定義為
$$
(f*g)(t)={\sum}_{\tau=-\infty}^{\infty}f(\tau)g(t-\tau)
$$
### 4.3 例項:擲骰子問題
光看數學定義可能會覺得非常抽象,下面舉一個擲骰子的問題,該例項參考了知乎問題"如何通俗易懂地解釋卷積"的回答。
想象現在有兩個骰子,兩個骰子分別是f跟g,f(1)表示骰子f向上一面為數字1的概率。同時拋擲這兩個骰子1次,它們正面朝上數字和為4的概率是多少呢?相信讀者很快就能想出它包含了三種情況,分別是:
- f向上為1,g向上為3;
- f向上為2,g向上為2;
- f向上為3,g向上為1;
最後這三種情況出現的概率和即問題的答案,如果寫成公式,就是$\sum_{\tau=1}^{3}f(\tau)g(4-\tau)$。可以形象地繪製成下圖:
如果稍微擴充套件一點,比如說認為 f(0) 或者 g(0)等是可以取到的,只是它們的值為0而已。那麼該公式可以寫成$\sum_{\tau=-\infty}^{\infty}f(\tau)g(4-\tau)$。仔細觀察,這其實就是卷積(f∗g)(4)。如果將它寫成內積的形式,卷積其實就是
$$
[f(-\infty),\cdots,f(1),\cdots,f(\infty)] \cdot [g(\infty),\cdots,g(3),\cdots,g(-\infty)]
$$
這麼一看,是不是就對卷積的名字理解更深刻了呢? **所謂卷積,其實就是把一個函式卷(翻)過來,然後與另一個函式求內積。**
對應到不同方面,卷積可以有不同的解釋:g 既可以看作我們在深度學習裡常說的核(Kernel),也可以對應到訊號處理中的濾波器(Filter)。而 f 可以是我們所說的機器學習中的特徵(Feature),也可以是訊號處理中的訊號(Signal)。f和g的卷積 (f∗g)就可以看作是對f的加權求和。下面兩個動圖就分別對應訊號處理與深度學習中卷積操作的過程。
## 5. 傅立葉變換
### 5.1 連續形式的傅立葉變換
關於傅立葉變換相關的詳細而有趣的內容,可以看這幾篇文章:
- [如何直觀地理解傅立葉變換?](https://blog.csdn.net/yyl424525/article/details/98764320)
- [如何理解傅立葉級數公式?](https://blog.csdn.net/yyl424525/article/details/98765291) (強烈推薦看一看)
- [從傅立葉級數到傅立葉變換](https://blog.csdn.net/yyl424525/article/details/98765466) (強烈推薦看一看)
- [如何理解拉普拉斯變換?](https://blog.csdn.net/yyl424525/article/details/98790080)
下面是一個大致流程:
任意函式可以分解為奇偶函式之和:
$$
f(x)=\frac{f(x)+f(-x)}{2} + \frac{f(x)-f(-x)}{2}=f_{even}+f_{odd}
$$
任意一個周期函式可以由若干個正交函式(由$sin, cos$ 構成)的線性組合構成,寫出傅立葉級數的形式如下:
$$
\displaystyle f(x)=a_0+\sum _{{n=1}}^{\infty}\left(a_{n}cos({\frac{2\pi n}{T}x})+b_{n}sin({\frac{2\pi n}{T}x})\right),a_0\in\mathbb{R}
$$
利用尤拉公式$e^{ix}=\cos x+i \sin x$(這裡的指複數中的i),$\cos x, \sin x$可表示成
$$
\cos x=\frac{e^{ix} +e^{-ix}}{2} ,\sin x=\frac{e^{ix} -e^{-ix}}{2i}
$$
在時間t軸上,把$e^{it}$向量的虛部(也就是縱座標)記錄下來,得到的就是$sin(t)$:
在時間t軸上,把$e^{i2t}$向量的虛部記錄下來,得到的就是$sin(2t)$:
如果在時間t軸上,把$e^{it}$的實部(橫座標)記錄下來,得到的就是$cos(t)$的曲線:
更一般的,具有兩種看待$sin, cos$的角度:
$$
e^{i\omega t}\iff \begin{cases}sin(\omega t)\\cos(\omega t)\end{cases}
$$
這兩種角度,一個可以觀察到旋轉的頻率,所以稱為頻域;一個可以看到流逝的時間,所以稱為時域:
所以,任意周期函式可以以$e^{i\omega t}$為基函式用傅立葉級數的指數形式表示。即,對於一個周期函式$f(x)$以傅立葉級數的指數形式表示為:
$$
f(x)=\sum ^{\infty }_{n=-\infty }\underbrace{c_{n}}_{\text{基的座標}} \cdot \underbrace{e^{i\tfrac{2\pi nx}{T}}}_{\text{正交基}}
$$
但是對於非周期函式,並不能用傅立葉級數的形式表示。但是還是用某個周期函式$f_T(x)$當$T \rightarrow \infty$來逼近,即$\lim_{T \rightarrow \infty} f_T(x)=f(x)$,用積分的形式可以表示為:
$$
f(x) = \int_{-\infty}^\infty [\int ^{+\infty }_{-\infty } f(x)e^{-i\omega x} dx]\ e^{i\omega x}\,d\omega=\int_{-\infty}^\infty F(\omega)\ e^{i\omega x}\,d\omega
$$
其中,**$F( \omega )$就是$f(x)$的連續形式的傅立葉變換**:
$$
F( \omega ) =\mathcal{F}[f(x)]=\int ^{+\infty }_{-\infty } f(x)e^{-i\omega x} dx
$$
可以看出,$f(x)$和$F(\omega)$可以通過指定的積分運算相互表達。
當然,也可以利用尤拉公式通過cos和sin函式表示為$F(u)$:
$$
F(u)=\int_{-\infty}^{+\infty}f(x)\left[cos(2\pi xu)-i sin(2\pi xu)\right]dx
$$
所以,對函式$f(x)$的傅立葉變換$\mathcal{F}$和傅立葉的逆變換$\mathcal{F}^{-1}$記作:
$$
F( \omega )=\mathcal{F}[f(x)],f(x)=\mathcal{F}^{-1}[F(\omega)] \\
$$
- $F(\omega)$叫做$f(x)$的**象函式或傅立葉變換**,即通過傅立葉變換後關於頻率的函式,函式影象就是頻譜圖,$\omega$ 就是f對應在頻域中的頻率
- $f(x)$叫做$F(\omega)$的原象函式
其實可以發現這個**對訊號$f(x)$的傅立葉變換$F(\omega)$形式上是$f(x)$與基函式$e^{-i\omega x}$的積分,本質上將函式$f(x)$對映到了以$e^{-i\omega x}$為基向量的空間中**。
### 5.2 頻域(frequency domain)和時域(time domain)的理解
時域:真實量到的訊號的時間軸,代表真實世界。
頻域:為了做訊號分析用的一種數學手段。
要理解時域和頻域只需要看下面兩張動圖就可以了:
上圖來自於維基百科,圖中紅色部分就是原函式f(x)在時域裡面的曲線圖,此函式經過傅立葉變換後可以分解成很多如右圖中的曲線。在左圖中的的藍色線就是對應的頻域中的頻譜圖。
頻譜圖裡的豎線分別代表了不同頻率的正弦波函式,也就是之前的基,而**高度則代表在這個頻率上的振幅**,也就是這個基上的座標分量。
很多在時域看似不可能做到的數學操作,在頻域相反很容易。這就是需要傅立葉變換的地方。尤其是從某條曲線中去除一些特定的頻率成分,這在工程上稱為濾波,是訊號處理最重要的概念之一,只有在頻域才能輕鬆的做到。
看一個傅立葉變換去噪的例子:
在傅立葉變換前,影象上有一些規律的條紋,直接在原圖上去掉條紋有點困難,但我們可以將圖片通過傅立葉變換變到頻譜圖中,頻譜圖中那些規律的點就是原圖中的背景條紋。
只要在頻譜圖中擦除這些點,就可以將背景條紋去掉,得到下圖右側的結果。
### 5.3 週期性離散傅立葉變換(Discrete Fourier Transform, DFT)
傅立葉變換有連續時間非週期傅立葉變換,連續時間週期性傅立葉變換,離散時間非週期傅立葉變換和離散時間週期性傅立葉變換,鑑於計算機主要處理離散週期性訊號,本文主要介紹週期性離散時間傅立葉變換(DFT)。訊號$x_n$的傅立葉變換$X_k$為
$$
X_k=\sum_{n=0}^{N-1}x_n e^{-i \frac{2\pi}{N}kn}
$$
訊號$x_n$用其傅立葉變換$X_k$表示為:
$$
x_n=\sum_{n=0}^{N-1}X_k e^{i \frac{2\pi}{N}kn}
$$
其中
- N表示傅立葉變換的點數
- k表示傅立葉變換的第k個頻譜
## 6. Graph上的傅立葉變換及卷積
**把傳統的傅立葉變換以及卷積遷移到Graph上來,核心工作其實就是把拉普拉斯運算元的特徵函式$e^{-i\omega t}$ 變為Graph對應的拉普拉斯矩陣的特徵向量。**
傅立葉變換與拉普拉斯矩陣的關係:**傳統傅立葉變換的基,就是拉普拉斯矩陣的一組特徵向量。**
### 6.1 圖上的傅立葉變換
前面講到可以用一組正交函式cos和sin(或$e^{-i\omega t}$ )表示任意函式,且傅立葉變換是連續形式的,在處理Graph時,用到的是傅立葉變換的離散形式。由於拉普拉斯矩陣進行譜分解以後,可以得到n個線性無關的特徵向量,構成空間中的一組正交基,因此歸一化拉普拉斯矩陣運算元的特徵向量構成了圖傅立葉變換的基。圖傅立葉變換將輸入圖的訊號投影到了正交空間,相當於把圖上定義的任意向量,表示成了拉普拉斯矩陣特徵向量的線性組合。
離散積分就是一種內積形式,由此可以定義Graph上的傅立葉變換(實數域):
$$
F(\lambda_l)=\hat{f}(\lambda_l)=\sum_{i=1}^{N}{f(i) u_l(i)}
$$
- $f$是Graph上的N維向量,可以表示某個點的特徵向量,$f(i)$表示第$i$ 個特徵
- $u_l(i)$表示第$l$ 個特徵向量的第$i$ 個分量
- $f$的Graph 傅立葉變換就是與 $\lambda_l$ 對應的特徵向量$u_l$進行內積運算
- $\lambda$就對應於$\omega$(具體解釋見第7部分)
- $\hat{f}$表示$f$的傅立葉變換
### 6.2 圖的傅立葉變換——圖的傅立葉變換的矩陣形式
利用矩陣乘法將Graph上的傅立葉變換推廣到矩陣形式:
$$
\left(\begin{matrix} \hat{f}(\lambda_1)\\ \hat{f}(\lambda_2) \\ \vdots \\\hat{f}(\lambda_N) \end{matrix}\right)=\left(\begin{matrix}\ u_1(1) &u_1(2)& \dots &u_1(N) \\u_2(1) &u_2(2)& \dots &u_2(N)\\ \vdots &\vdots &\ddots & \vdots\\ u_N(1) &u_N(2)& \dots &u_N(N) \end{matrix}\right)\left(\begin{matrix}f(1)\\ f(2) \\ \vdots \\f(N) \end{matrix}\right)
$$
即$f$在Graph上傅立葉變換的矩陣形式為:
$$
\hat{f}=U^Tf \qquad(a)
$$
### 6.3 圖的傅立葉逆變換——圖的傅立葉逆變換的矩陣形式
類似地,傳統的傅立葉變換是對頻率$\omega$ 求積分:
$$
\mathcal{F}^{-1}[F(\omega)]=\frac{1}{2\Pi}\int_{}^{}F(\omega)e^{i\omega t} d\omega
$$
遷移到Graph上變為對特徵值$\lambda_l$求和:
$$
f(i)=\sum_{l=1}^{N}{\hat{f}(\lambda_l) u_l(i)}
$$
利用矩陣乘法將Graph上的傅立葉逆變換推廣到矩陣形式:
$$
\left(\begin{matrix}f(1)\\ f(2) \\ \vdots \\f(N) \end{matrix}\right)= \left(\begin{matrix}\ u_1(1) &u_2(1)& \dots &u_N(1) \\u_1(2) &u_1(2)& \dots &u_N(2)\\ \vdots &\vdots &\ddots & \vdots\\ u_1(N) &u_2(N)& \dots &u_N(N) \end{matrix}\right) \left(\begin{matrix} \hat{f}(\lambda_1)\\ \hat{f}(\lambda_2) \\ \vdots \\\hat{f}(\lambda_N) \end{matrix}\right)
$$
即 f 在Graph上傅立葉逆變換的矩陣形式為:
$$
f=U\hat{f} \qquad(b)
$$
### 6.4 圖上的傅立葉變換推廣到圖卷積
在上面的基礎上,利用卷積定理類比來將卷積運算,推廣到Graph上。
卷積定理:**函式卷積的傅立葉變換是函式傅立葉變換的乘積**,即對於函式f與g兩者的卷積是其函式傅立葉變換乘積的逆變換(中間的橋樑就是傅立葉變換與反傅立葉變換,證明見:https://zhuanlan.zhihu.com/p/54505069):
$$
f * g=\mathcal{F}^{-1}{\{\mathcal{F}(f) \cdot \mathcal{F}(g) \}}=\mathcal{F}^{-1}\{ \hat{f} \cdot \hat{g}\}
$$
所以,對圖上f和卷積核g的卷積可以表示為:
$$
(f*g)_G=U((U^T g)\cdot(U^Tf))
$$
從上面可以看出,對卷積核$g$和$f$進行傅立葉變換的結果$U^T g,U^T f$都是一個列向量:
$$
\left(\begin{matrix} \hat{f}(\lambda_1)\\ \hat{f}(\lambda_2) \\ \vdots \\\hat{f}(\lambda_N) \end{matrix}\right),\left(\begin{matrix}f(1)\\ f(2) \\ \vdots \\f(N) \end{matrix}\right)
$$
所以,很多論文中的Graph卷積公式也寫作:
$$
(f*g)_G=U((U^Tg)\odot(U^Tf))
$$
$\odot$ 表示hadamard product(哈達馬積),對於兩個向量,就是進行內積運算;對於維度相同的兩個矩陣,就是對應元素的乘積運算。
如果把$U^Tg$整體看作可學習的卷積核,這裡我們把它寫作$g_\theta$。最終圖上的卷積公式即是:
$$
(f*g)_G = Ug_{\theta}U^Tf
$$
有的地方,還把$g_\theta=U^Tg$也成對角矩陣的形式,即定義一個濾波$g_\theta=diag(U^T g)$,則:
$$
f*g_\theta=Ug_{\theta}U^Tf= U\left(\begin{matrix}\hat g(\lambda_1) & \\&\ddots \\ &&\hat g(\lambda_n) \end{matrix}\right) U^Tf
$$
接下來第8節要介紹的圖上頻域卷積的工作,都是在$g_\theta$的基礎上做文章。
## 7. 為什麼拉普拉斯矩陣的特徵向量可以作為傅立葉變換的基?特徵值表示頻率?
在Chebyshev論文([M. Defferrard, X. Bresson, and P. Vandergheynst, “Convolutional neural networks on graphs with fast localized spectral filtering,”in Advances in Neural Information Processing Systems, 2016](http://papers.nips.cc/paper/6081-convolutional-neural-networks-on-graphs-with-fast-localized-spectral-filtering))中就有說明,圖上進行傅立葉變換時,拉普拉斯矩陣是對稱矩陣,所有有n個線性無關的特徵向量,因此可以構成傅立葉變換的一組基,而其對應的特徵值就是傅立葉變換的頻率。
### 7.1 為什麼拉普拉斯矩陣的特徵向量可以作為傅立葉變換的基?
傅立葉變換一個本質理解就是:把任意一個函式表示成了若干個正交函式(由sin,cos 構成)的線性組合。
通過即 f 在Graph上傅立葉逆變換的矩陣形式: $f=U\hat{f} \qquad(b)$也能看出,graph傅立葉變換把graph上定義的任意向量f,表示成了拉普拉斯矩陣特徵向量的線性組合,即:
$$
f=\hat{f}(1)u_1+\hat{f}(2)u_2+\cdots +\hat{f}(n)u_n
$$
那麼:為什麼graph上任意的向量f都可以表示成這樣的線性組合?
原因在於$(\vec{u_1},\vec{u_2},\cdots,\vec{u_n})$是graph上 n維空間中的 n 個線性無關的正交向量(**拉普拉斯矩陣是對稱矩陣,必定可以進行特徵分解,有n個線性無關的特徵向量**),由線性代數的知識可以知道:n 維空間中n 個線性無關的向量可以構成空間的一組基,而且拉普拉斯矩陣的特徵向量還是一組正交基。
### 7.2 怎麼理解拉普拉斯矩陣的特徵值表示頻率?
在graph空間上無法視覺化展示“頻率”這個概念,那麼從特徵方程上來抽象理解。
將拉普拉斯矩陣 L 的 n 個非負實特徵值,從小到大排列為$\lambda_1 \le \lambda_2 \le \cdots \le \lambda_n$,而且最小的特徵值$\lambda_1=0$,因為 n 維的全1向量對應的特徵值為0(由 L 的定義就可以得出):
$$
L \left(\begin{matrix}1\\ 1 \\ \vdots \\1 \end{matrix}\right)=0
$$
從特徵方程的數學理解來看:
$$
Lu=\lambda u
$$
在由Graph確定的 n 維空間中,越小的特徵值 $\lambda_l$表明:拉普拉斯矩陣 L 其所對應的基$u_l$上的分量、“資訊”越少,那麼當然就是可以忽略的低頻部分了。
其實影象壓縮就是這個原理,把畫素矩陣特徵分解後,把小的特徵值(低頻部分)全部變成0,PCA降維也是同樣的,把協方差矩陣特徵分解後,按從大到小取出前K個特徵值對應的特徵向量作為新的“座標軸”。
Graph Convolution的理論告一段落了,下面開始Graph Convolution Network
## 8. 深度學習中GCN的演變
Deep learning 中的Graph Convolution直接看上去會和第6節推匯出的圖卷積公式有很大的不同,但是萬變不離其宗,都是根據下式來推導的:
$$
g_\theta * x = Ug_\theta U^Tx =U\left(\begin{matrix}\hat g(\lambda_1) & \\&\ddots \\ &&\hat g(\lambda_n) \end{matrix}\right) U^T x
$$
Deep learning 中的Convolution就是要**設計含有trainable共享引數的kernel**。
上式**計算量很大**,因為**特徵向量矩陣U 的複雜度**是$O(N^2)$。此外,對於大型圖來說,**L特徵值分解的計算量也很大**。
基於上面最原始的卷積公式,深度學習中的GCN主要是從下面幾篇文章演變而來的(引用次數都很高),後面一一進行簡單介紹:
- 【1】Bruna, Joan, et al. “**Spectral networks and locally connected networks on graphs**.” 源於ICLR 2014(被引740次)
- 【2】Defferrard, Michaël, Xavier Bresson, and Pierre Vandergheynst. “**Convolutional neural networks on graphs with fast localized spectral filtering**.” 源於NIPS 2016(被引997次)
- 【3】Hammond, David K., Pierre Vandergheynst, and Rémi Gribonval. “**Wavelets on graphs via spectral graph theory**.” Applied and Computational Harmonic Analysis 30.2 **(2011**)(被引874次)
- 【4】Kipf, Thomas N., and Max Welling. “**Semi-supervised classification with graph convolutional networks**.” 源於ICML 2017 (被引1537次)
### 8.1 Spectral CNN
譜CNN源於論文([J. Bruna, W. Zaremba, A. Szlam, and Y. LeCun, “Spectral networks and locally connected networks on graphs,” in Proceedings of International Conference on Learning Representations, 2014](https://arxiv.org/abs/1312.6203)),Bruna等人,第一次提出譜卷積神經網路。他們簡單地把$g_\theta$ 看作是一個可學習引數的集合:$g_\theta=\Theta_{i,j}^k$。並且假設圖訊號是多維的,圖卷積層頂定義為:
$$
X_{:,j}^{k+1} = \sigma(\sum_{i=1}^{f_{k-1}}U\Theta_{i,j}^kU^TX_{:,i}^{k})\quad \quad \quad (j=1,2,\cdots,f_k)
$$
- $X^k\in \mathbb{R}^{N\times f_{k-1}}$是輸入圖訊號,對應圖上就是點的輸入特徵
- $N$是節點數量
- $f_{k-1}$是輸入通道的數量
- $f_{k}$是輸出通道的數量
- $\Theta_{i,j}^k$是一個可學習引數的對角矩陣,就跟三層神經網路中的weight一樣是任意的引數,通過初始化賦值然後利用誤差反向傳播進行調整
- $\sigma(\cdot)$是啟用函式
第一代的引數方法存在著一些弊端,主要在於:
(1)**計算複雜**:如果一個樣本一個圖,那麼每個樣本都需要進行圖的拉普拉斯矩陣的特徵分解求U矩陣計算複雜;每一次前向傳播,都要計算$U,diag(\theta_l )$及 $U^T$三者的乘積,特別是對於大規模的graph,計算的代價較高,需要$\mathcal{O}(n^2)$的計算複雜度
(2)**是非區域性性連線的**
(3)卷積核需要N個引數,當圖中的節點N很大時是不可取的
由於以上的缺點第二代的卷積核設計應運而生。
### 8.2 Chebyshev譜CNN(ChebNet)
Chebyshev譜CNN源於論文([M. Defferrard, X. Bresson, and P. Vandergheynst, “Convolutional neural networks on graphs with fast localized spectral filtering,”in Advances in Neural Information Processing Systems, 2016](http://papers.nips.cc/paper/6081-convolutional-neural-networks-on-graphs-with-fast-localized-spectral-filtering))。Defferrard等人提出ChebNet,定義特徵向量對角矩陣的切比雪夫多項式為濾波器,也就是
$$
g_θ=g_θ(Λ) \approx \sum^{K-1}_{i=0} \theta_i T_k(\tilde Λ)
$$
其實,就是利用Chebyshev多項式擬合卷積核的方法,來降低計算複雜度。
推導過程如下:
考慮訊號$x∈\mathbb{R}^N$(x就是graph上對應於每個頂點的feathure vector,即由資料集提取特徵構成的向量,而不是和線性代數中常說的特徵向量,注意區別)與以引數為 $θ \in \mathbb{R}^N$的濾波器 $g_θ=diag(θ)$在傅立葉域的譜卷積。
$$
g_\theta * x = Ug_\theta U^Tx \qquad (3)
$$
其中
- U 是對稱歸一化的拉普拉斯(normalized graph Laplacian)運算元$L=I_N−D^{−1/2}AD^{−1/2}=UΛU^T$的特徵向量矩陣,Λ是由L的特徵值構成的對角矩陣。
$$
\begin{aligned}
L &= D^{-\frac{1}{2}}(D - A)D^{-\frac{1}{2}} \\
&= D^{-\frac{1}{2}} D D^{-\frac{1}{2}} -
D^{-\frac{1}{2}} A D^{-\frac{1}{2}} \\
&= I_N - D^{-\frac{1}{2}} A D^{-\frac{1}{2}}
\end{aligned}
$$
由於normalized graph Laplacian矩陣L是實對稱矩陣, 因此其特徵向量矩陣U是正交矩陣,即$UU^T=I_N$
- $U^Tx$是x的傅立葉變換。
- $g_θ$是由引數θ構成的對角矩陣diag(θ)。由於引數θ的確定與L的特徵值有關,作者認為$g_θ$是特徵值 Λ的一個函式,即令
$$
g_θ=g_θ(Λ)
$$
式3的**計算量很大**,因為**特徵向量矩陣U 的複雜度**是$O(N^2)$。此外,對於大型圖來說,**L特徵值分解的計算量也很大**。
為了解決這個問題,[Hammond et al.(2011) :Wavelets on graphs via spectral graph theory](https://hal.inria.fr/inria-00541855/document)指出$g_θ(Λ)$可以很好的通過Chebyshev多項式$T_k(x)$ 的Kth-階截斷展開來擬合,並**對Λ進行scale使其元素位於[−1,1]**:
$$
g_{\theta}(Λ) \approx \sum^{K}_{k=0} \theta_kT_K(\tilde Λ) \qquad (4)
$$
其中
- $\tilde Λ = 2Λ / λ_{max}− I_N$(為縮放後的特徵向量矩陣,縮放後範圍是[−1,1],單位矩陣的特徵值是n重1),縮放的目的是為了滿足Chebyshev多項式$T_k(x)$ 的$K^{th}$ 階截斷展開的條件:自變數範圍需要在[−1,1]之間
- $λ_{max}$是L 的最大特徵值,也叫**譜半徑**。
- $θ∈\mathbb{R}^K$ 是切比雪夫係數的向量
- Chebyshev多項式遞迴定義為$T_k(x) = 2xT_{k−1}(x) − T_{k−2}(x)$, 其中$T_0(x)=1, T_1(x)=x$ 。
回到對訊號x與濾波器$g_{θ}$的卷積的定義,現在有:
$$
g_{\theta} * x = \sum^{K}_{k=0} \theta_kT_K(\tilde L)x \qquad (5)
$$
其中
- $\tilde L= 2L / λ_{max}− I_N=U \tilde \Lambda U^T$
- 易證 $(UΛU^T)^k=UΛ^kU^T$
現在,相比於第一種Spectral CNN:
- 此表示式現在是K-localized,具有區域性連線性,因為它是拉普拉斯運算元中的Kth-階多項式,即它僅取決於離中央節點(Kth階鄰域)最大K步的節點
- **$T_K(\tilde L)x$的複雜度是O(|E|)**,即與邊數E呈線性關係,整個運算的複雜度是$O(K|E|)$。當graph是稀疏圖的時候,計算加速尤為明顯,這個時候複雜度遠低於$O(n^2)$
--------------
公式4到公式5的補充證明如下:
(1)先用數學歸納法證明
$$
U T_k (\tilde{\Lambda}) U^T = T_k (U \tilde{\Lambda} U^T)
$$
數學歸納法思路:當n=1時顯然成立,假設n=k時成立,只需證n=k+1時成立
證明:
根據切比雪夫多項式的定義, 已知
$$
\begin{aligned}
&U T_0(\tilde{\Lambda}) U^T = UU^T =1 = T_0(U \tilde{\Lambda} U^T) \\
&U T_1(\tilde{\Lambda}) U^T = U\tilde{\Lambda}U^T = T_1(U \tilde{\Lambda} U^T)
\end{aligned}
$$
假設對於任意k>1, 滿足
$$
U T_{k-2} (\tilde{\Lambda}) U^T= T_{k-2} (U \tilde{\Lambda} U^T)
$$
與
$$
U T_{k-1} (\tilde{\Lambda}) U^T= T_{k-1} (U \tilde{\Lambda} U^T)
$$
則
$$
\begin{aligned}
U T_k (\tilde{\Lambda}) U^T
&= 2U \tilde{\Lambda} T_{k-1}(\tilde{\Lambda})U^T -
U T_{k-2}(\tilde{\Lambda}) U^T \\
&= 2 (U \tilde{\Lambda} U^T) \left[U T_{k-1}(\tilde{\Lambda})U^T \right] -
U T_{k-2}(\tilde{\Lambda}) U^T \\
&= 2 (U \tilde{\Lambda} U^T) T_{k-1} (U \tilde{\Lambda} U^T) -
T_{k-2} (U \tilde{\Lambda} U^T) \\
&= T_k (U \tilde{\Lambda} U^T)
\end{aligned}
$$
因此,根據數學歸納法, 證畢。
(2)已知
$$
\tilde L= U \tilde{\Lambda} U^T
$$
(3)將(1)、(2)兩式帶入卷積公式:
$$
\begin{aligned}
g_\theta * x
& = Ug_\theta U^Tx \\
& = U g_{\theta}(Λ) U^Tx \\
& =U (\sum^{K}_{k=0} \theta_kT_K(\tilde Λ)) U^Tx \\
& = (\sum^{K}_{k=0} \theta_kT_K(U\tilde Λ U^T)) x \\
& = \sum^{K}_{k=0} \theta_k T_K(\tilde L) x \qquad (5)
\end{aligned}
$$
---------------
### 8.3 CayleyNet
CayleyNet進一步應用了引數有理複合函式的Cayley多項式來捕獲窄的頻帶。CayleyNet的譜圖卷積定義為
$$
\mathbf{x} *g_\theta=c_{0} \mathbf{x}+2 \operatorname{Re}\left\{\sum_{j=1}^{r} c_{j}(h \mathbf{L}-i \mathbf{I})^{j}(h \mathbf{L}+i \mathbf{I})^{-j} \mathbf{x}\right\}
$$
其中
- $Re(\cdot)$為複數的實部
- $c_0$為實數
- $c_j$為複數
- $i$為虛數
- $h$為控制Cayley濾波器頻譜的引數
CayleyNet在保留空間區域性性的同時,說明ChebNet可以看作是CayleyNet的一個特例。
### 8.4 一階ChebNet(1stChebNet)-GCN
一階ChebNet源於論文([T. N. Kipf and M.Welling, “Semi-supervised classification with graph convolutional networks,” in Proceedings of the International Conference on Learning Representations, 2017](https://arxiv.org/pdf/1609.02907))。這篇論文基於前面的工作,正式成為**GCN的開山之作**,後面很多變種都是基於這篇文章的。
該篇論文貢獻有兩點:
- 作者對於直接操作於圖結構資料的網路模型根據頻譜圖卷積(Hammond等人於2011年提出的Wavelets on graphs via spectral graph theory)使用一階近似簡化計算的方法,提出了一種簡單有效的層式傳播方法。
- 作者驗證了圖結構神經網路模型可用於快速可擴充套件式的處理圖資料中節點半監督分類問題,作者通過在一些公有資料集上驗證了自己的方法的效率和準確率能夠媲美現有的頂級半監督方法。
下面介紹ChebNet的一階近似方法:
Kipf等人引入了一種一階近似ChebNet。假設$K=1,\lambda_{max}=2$,則ChebNet卷積公式簡化近似為:
$$
x*g_\theta = \theta_0x - \theta_1 D^{− 1 /2} AD^{− 1 /2}x
$$
為了抑制引數數量防止過擬合,1stChebNet假設$\theta=\theta_0=-\theta_1$,圖卷積的定義就近似為(這是簡單的一階模型):
$$
g_θ * x = θ (I_N + D^{− 1 /2} AD^{− 1 /2} ) x
$$
其中
- 而$I_N+D^{−1/2}AD^{−1/2}$是有範圍[0,2]的特徵值。因此,如果在深度神經網路模型中使用該運算元,則**反覆應用該運算元會導致數值不穩定(發散)和梯度爆炸/消失**。
為了解決該問題, 引入了一個renormalization trick:
$$
I_N+D^{−1/2}AD^{−1/2} \stackrel{\tilde A=A+I_N}{\longrightarrow} \tilde D^{−1/2} \tilde A \tilde D^{−1/2}
$$
其中
- $\tilde A=A+I_N,\tilde D_{ii}=∑_j \tilde A_{ij}$,即圖中加上自環
再加上一個啟用函式,最後就可以得到了論文中的快速卷積公式:
$$
H ^{(l+1)} =f(H^l,A)=\sigma (\tilde D^{-1/2} \tilde A \tilde D^{ − 1/2} H^{(l)}W^{(l)} )
$$
- $W$就是引數$\theta$引數矩陣
**推廣:特徵對映公式**
可以將這個定義推廣到具有C個輸入通道(即每個節點的C維特徵向量)的訊號$X∈\mathbb{R}^{N×C}$和 F 個濾波器或特徵對映如下:
$$
Z = \tilde D^{− 1 /2} \tilde A \tilde D^{− 1/ 2} XΘ
$$
其中
- $Θ∈\mathbb{R}^{C×F}$ 是一個濾波器引數矩陣,其實就是引數矩陣W
- $Z∈\mathbb{R}^{N×F}$ 是一次卷積的輸出矩陣。
**這個濾波操作複雜度是 $O(|E|FC)$(其中E為邊數,C為特徵向量維度,F為卷積核數量),並且$\tilde AX$ `可以有效地實現為密集矩陣和稀疏矩陣的乘積。**(在原始碼中使用了稀疏矩陣和稠密矩陣乘法)
帶一階濾波器的多層圖卷積網路(GCN)的結構圖如下圖所示。
**Input**:Feature matrix $X \in \mathbb{R}^{N \times D}$,preprocessed adjacency matrix $\tilde A$
在看了上面的公式以及論文中的訓練方法之後,並沒有覺得GCN有多麼特別,無非就是一個設計巧妙的公式,也許不用這麼複雜的公式,多加一點訓練資料或者把模型做深,也可能達到媲美的效果呢。
最後論文的附錄裡提到“even an untrained GCN model with random weights can serve as a powerful feature extractor for nodes in a graph”,可見即使不訓練,完全使用隨機初始化的引數W,GCN提取出來的特徵就已經十分優秀了!這跟CNN不訓練是完全不一樣的,CNN不訓練是根本得不到什麼有效特徵的。
然後作者做了一個實驗,使用一個俱樂部會員的關係網路,使用隨機初始化的GCN進行特徵提取,得到各個node的embedding,然後視覺化:
可以發現,在原資料中同類別的node,經過GCN的提取出的embedding,已經在空間上自動聚類了。
而這種聚類結果,可以和DeepWalk、node2vec這種經過複雜訓練得到的node embedding的效果媲美了。
作者接著給每一類的node,提供僅僅一個標註樣本,然後去訓練,得到的視覺化效果如下:
關於1stChebNet CGN的更多細節,可以參考部落格:
[Semi-Supervised Classification with Graph Convolutional Networks用圖卷積進行半監督分類](https://blog.csdn.net/yyl424525/article/details/98724104)
#### GCN的優點
1)、**權值共享,引數共享**,從$AXW$可以看出每一個節點的引數矩陣都是W,權值共享;
2)、**具有區域性性Local Connectivity**,也就是**區域性連線**的,因為每次聚合的只是一階鄰居;
上述兩個特徵也是CNN中進行引數減少的核心思想
3)、**感受野正比於卷積層層數**,第一層的節點只包含與直接相鄰節點有關的資訊,第二層以後,每個節點還包含相鄰節點的相鄰節點的資訊,這樣的話,參與運算的資訊就會變多。層數越多,感受野越大,參與運算的資訊量越充分。也就是說隨著卷積層的增加,從遠處鄰居的資訊也會逐漸聚集過來。
4)、**複雜度大大降低**,不用再計算拉普拉斯矩陣,特徵分解
#### GCN的不足
1)、**擴充套件性差**:由於訓練時需要需要知道關於訓練節點、測試節點在內的所有節點的鄰接矩陣$A$,因此是transductive的,不能處理大圖,然而工程實踐中幾乎面臨的都是大圖問題,因此在擴充套件性問題上侷限很大,為了解決transductive的的問題,[GraphSAGE:Inductive Representation Learning on Large Graphs](https://blog.csdn.net/yyl424525/article/details/100532849) 被提出;
2)、**侷限於淺層**:GCN論文中表明,目前GCN只侷限於淺層,實驗中使用2層GCN效果最好,為了加深,需要使用殘差連線等trick,但是即使使用了這些trick,也只能勉強儲存效能不下降,並沒有提高,[Deeper Insights into Graph Convolutional Networks for Semi-Supervised Learning](https://blog.csdn.net/yyl424525/article/details/101024591)一文也針對When GCNs Fail ?這個問題進行了分析。雖然有一篇論文:[DeepGCNs-Can GCNs Go as Deep as CNNs?](https://blog.csdn.net/yyl424525/article/details/99464457)就是解決GCN侷限於淺層的這個問題的,但個人覺得並沒有解決實質性的問題,這方面還有值得研究的空間。
3)、**不能處理有圖**:理由很簡單,推導過程中用到拉普拉斯矩陣的特徵分解需要滿足拉普拉斯矩陣是對稱矩陣的條件;
## 9. GCN的一些改進
### 9.1 鄰接矩陣的探索
#### Adaptive Graph Convolution Network (AGCN)
自適應GCN(AGCN)為了探索圖拉普拉斯矩陣為指明的隱藏結構,(R. Li, S. Wang, F. Zhu, and J. Huang, “Adaptive graph convolutional neural networks,” in Proceedings of the AAAI Conference on Artificial Intelligence, 2018)提出了自適應圖卷積網路(AGCN)。AGCN利用所謂的殘差圖來擴充圖,殘差圖是通過計算節點對的距離來構造的。儘管AGCN能夠捕獲互補關係資訊,但是以$O(N^2)$的計算量為代價。自適應圖卷積網路(AGCN)通過圖的鄰接矩陣學習未知的隱藏結構關係。它通過一個以兩個節點的特徵為輸入的可學習的距離函式來構造一個所謂的殘差圖鄰接矩陣。
#### Dual Graph Convolutional Network(DGCN)
對偶圖卷積網路(DGCN)引入了一種對偶圖卷積結構,該結構具有兩個並行的圖卷積層。雖然這些對偶層共享引數,他們使用歸一化了的鄰接矩陣Ā和歸一化了的積極點態互資訊(PPMI)的共生矩陣提取節點隨機遊走。DGCN通過對偶圖卷積層的整合輸出,無需疊加多個圖卷積層即可捕獲區域性和全域性結構資訊。
## 10. GCN程式碼分析和資料集Cora、Pubmed、Citeseer格式
篇幅較長,資料集格式,見另下一篇:[GCN使用的資料集Cora、Citeseer、Pubmed、Tox21格式 ](https://blog.csdn.net/yyl424525/article/details/100831452)
篇幅較長,程式碼分析見另一篇:[圖卷積網路GCN程式碼分析(Tensorflow版)](https://blog.csdn.net/yyl424525/article/details/100634211)
## 11. 從空間角度理解GCN
前面介紹了GCN譜方法的推導以及背後的思路等,這是一種比較嚴謹和理論的方法。但是,其實可以發現,在傅立葉域上定義出來的GCN操作,其實也可以在空間域上進行理解,其就是所謂的訊息傳遞機制,或者說每次從鄰居中聚集資訊然後對中心節點進行更新。
如下圖所示,紅色節點S1的鄰居正是藍色節點B1,B2,B3,這些鄰居節點根據一定的規則將資訊,也就是特徵,彙總到紅色節點上。
通常來說,會加入一個線性變換矩陣W,以作為匯聚節點特徵的特徵維度轉換(或者說是對映),於是有
$$
\sum_{u \in \mathcal{N}(v)} H^{(l)}(u)) W^{(l)}
$$
加入啟用函式後有:
$$
\sigma(\sum_{u \in \mathcal{N}(v)} H^{(l)}(u)) W^{(l)})
$$
上式用更為緊緻的矩陣形式表達:
$$
H ^{(l+1)}=(H^{(l)},A)=σ(A H^{(l)}W^{(l)})
$$
不難發現,其實HW的結果乘上鄰接矩陣A的目的其實在於選在一階鄰居節點,其實本質就是在於鄰居節點的資訊傳遞。但是上式還可以進行一些改進,比如資訊聚合時沒有考慮節點自己的資訊,因此可以在圖中**加入一個自環**,鄰接矩陣變為
$$
\tilde A=A+I_N
$$
度矩陣變為
$$
\tilde D_{ii}=∑_j \tilde A_{ij}
$$
為了標準化(或歸一化)鄰接矩陣A使得**每行之和為1**,可以令:
$$
\tilde A=\tilde D^{-1} \tilde A
$$
這樣就行歸一化以後,對鄰居的聚合就不是求和了而是求平均值。
還是考慮此圖
$$
A=\left\{
\begin{matrix}
0 & 1 & 0 & 0 & 1 & 0\\
1 & 0 & 1 & 0 & 1 & 0\\
0 & 1 & 0 & 1 & 0 & 0\\
0 & 0 & 1 & 0 & 1 & 1\\
1 & 1 & 0 & 1 & 0 & 0\\
0 & 0 & 0 & 1 & 0 & 0
\end{matrix}
\right\}
,
D=
\left\{
\begin{matrix}
2 & 0 & 0 & 0 & 0 & 0\\
0 & 3 & 0 & 0 & 0 & 0\\
0 & 0 & 2 & 0 & 0 & 0\\
0 & 0 & 0 & 3 & 0 & 0\\
0 & 0 & 0 & 0 & 3 & 0\\
0 & 0 & 0 & 0 & 0 & 1
\end{matrix}
\right\}
$$
$$
\tilde A=A+I_N=\left\{
\begin{matrix}
1 & 1 & 0 & 0 & 1 & 0\\
1 & 1 & 1 & 0 & 1 & 0\\
0 & 1 & 1 & 1 & 0 & 0\\
0 & 0 & 1 & 1 & 1 & 1\\
1 & 1 & 0 & 1 & 1 & 0\\
0 & 0 & 0 & 1 & 0 & 1
\end{matrix}
\right\}
,
\tilde D=∑_j \tilde A_{ij}=D+I_N=
\left\{
\begin{matrix}
3 & 0 & 0 & 0 & 0 & 0\\
0 & 4 & 0 & 0 & 0 & 0\\
0 & 0 & 3 & 0 & 0 & 0\\
0 & 0 & 0 & 4 & 0 & 0\\
0 & 0 & 0 & 0 & 4 & 0\\
0 & 0 & 0 & 0 & 0 & 2
\end{matrix}
\right\}
$$
則歸一化以後為
$$
\tilde D^{-1} \tilde A=
\left\{
\begin{matrix}
1/3 & 0 & 0 & 0 & 0 & 0\\
0 & 1/4 & 0 & 0 & 0 & 0\\
0 & 0 & 1/3 & 0 & 0 & 0\\
0 & 0 & 0 & 1/4 & 0 & 0\\
0 & 0 & 0 & 0 & 1/4 & 0\\
0 & 0 & 0 & 0 & 0 & 1/2
\end{matrix}
\right\}
\cdot
\left\{
\begin{matrix}
1 & 1 & 0 & 0 & 1 & 0\\
1 & 1 & 1 & 0 & 1 & 0\\
0 & 1 & 1 & 1 & 0 & 0\\
0 & 0 & 1 & 1 & 1 & 1\\
1 & 1 & 0 & 1 & 1 & 0\\
0 & 0 & 0 & 1 & 0 & 1
\end{matrix}
\right\}=
\left\{
\begin{matrix}
1/3 & 1/3 & 0 & 0 & 1/3 & 0\\
1/4 & 1/4 & 1/4 & 0 & 1/4 & 0\\
0 & 1/3 & 1/3 & 1/3 & 0 & 0\\
0 & 0 & 1/4 & 1/4 & 1/4 & 1/4\\
1/4 & 1/4 & 0 & 1/4 & 1/4 & 0\\
0 & 0 & 0 & 1/2 & 0 & 1/2
\end{matrix}
\right\}
$$
上式對鄰接矩陣進行了標準化,這個標準化稱之為random walk normalization。然而,在實際中,動態特性更為重要,因此經常使用的是renormalization(GCN論文中的叫法):
$$
\tilde A=\tilde D^{− 1 /2} \tilde A D^{− 1 /2}
$$
$$
\tilde D^{-1/2}=
\left\{
\begin{matrix}
\frac{1}{\sqrt{3}} & 0 & 0 & 0 & 0 & 0\\
0 & \frac{1}{\sqrt{4}} & 0 & 0 & 0 & 0\\
0 & 0 & \frac{1}{\sqrt{3}} & 0 & 0 & 0\\
0 & 0 & 0 & \frac{1}{\sqrt{4}} & 0 & 0\\
0 & 0 & 0 & 0 & \frac{1}{\sqrt{4}} & 0\\
0 & 0 & 0 & 0 & 0 & \frac{1}{\sqrt{2}}
\end{matrix}
\right\}
$$
$$
\tilde A=\tilde D^{− 1 /2} \tilde A D^{− 1 /2}=
\left\{
\begin{matrix}
\frac{1}{\sqrt{3}} & 0 & 0 & 0 & 0 & 0\\
0 & \frac{1}{\sqrt{4}} & 0 & 0 & 0 & 0\\
0 & 0 & \frac{1}{\sqrt{3}} & 0 & 0 & 0\\
0 & 0 & 0 & \frac{1}{\sqrt{4}} & 0 & 0\\
0 & 0 & 0 & 0 & \frac{1}{\sqrt{4}} & 0\\
0 & 0 & 0 & 0 & 0 & \frac{1}{\sqrt{2}}
\end{matrix}
\right\}
\cdot
\left\{
\begin{matrix}
1 & 1 & 0 & 0 & 1 & 0\\
1 & 1 & 1 & 0 & 1 & 0\\
0 & 1 & 1 & 1 & 0 & 0\\
0 & 0 & 1 & 1 & 1 & 1\\
1 & 1 & 0 & 1 & 1 & 0\\
0 & 0 & 0 & 1 & 0 & 1
\end{matrix}
\right\}
\cdot
\left\{
\begin{matrix}
\frac{1}{\sqrt{3}} & 0 & 0 & 0 & 0 & 0\\
0 & \frac{1}{\sqrt{4}} & 0 & 0 & 0 & 0\\
0 & 0 & \frac{1}{\sqrt{3}} & 0 & 0 & 0\\
0 & 0 & 0 & \frac{1}{\sqrt{4}} & 0 & 0\\
0 & 0 & 0 & 0 & \frac{1}{\sqrt{4}} & 0\\
0 & 0 & 0 & 0 & 0 & \frac{1}{\sqrt{2}}
\end{matrix}
\right\}
=\\
\left\{
\begin{matrix}
\frac{1}{\sqrt{9}} & \frac{1}{\sqrt{12}} & 0 & 0 & \frac{1}{\sqrt{12}} & 0\\
\frac{1}{\sqrt{12}} & \frac{1}{\sqrt{16}} & \frac{1}{\sqrt{12}} & 0 & \frac{1}{\sqrt{16}} & 0\\
0 & \frac{1}{\sqrt{12}} & \frac{1}{\sqrt{9}} & \frac{1}{\sqrt{12}} & 0 & 0\\
0 & 0 & \frac{1}{\sqrt{12}} & \frac{1}{\sqrt{16}} & \frac{1}{\sqrt{16}} & \frac{1}{\sqrt{8}}\\
\frac{1}{\sqrt{12}} & \frac{1}{\sqrt{16}} & 0 & \frac{1}{\sqrt{16}} & \frac{1}{\sqrt{16}} & 0\\
0 & 0 & 0 & \frac{1}{\sqrt{8}} & 0 & \frac{1}{\sqrt{4}}
\end{matrix}
\right\}
$$
renormalization後有:
$$
L^{sym} := D^{− 1 /2} L D^{− 1 /2} =D^{− 1 /2} (D-A) D^{− 1 /2} =I_n - D^{− 1 /2} A D^{− 1 /2}
$$
這就是在GCN譜方法推導中中提到的拉普拉斯矩陣要這樣標準化的原因了。
經過鄰接矩陣新增自環(renormalization)之後,可以得到
$$
H ^{(l+1)} =f(H^l,A)=\sigma (\tilde D^{-1/2} \tilde A \tilde D^{ − 1/2} H^{(l)}W^{(l)} )
$$
這就是GCN用譜方法推匯出來的公式,這樣就可以從空間結構的角度理解一階ChebNet(GCN)了。
## 12. GCN處理不同型別的圖
### 關於帶權圖問題
GCN論文裡的針對的是無權的無向圖,並且採用的是平均聚合的方法,鄰居之間沒有權重。但是,現實生活中更多的是帶權圖。比如,我們都認識馬|化|騰,但是張|志|東與馬|化|騰的親密度要比我們和馬|化|騰的親密度高得多。因此,可以預測張|志|東的工資比我們更接近馬|化|騰。
不過GCN還是可以直接處理帶權圖,原來的鄰居矩陣取值只能是0和1,現在可以取更多的權值。
### 關於有向圖問題
前面的都是針對於無向圖的問題,所有拉普拉斯矩陣是對稱矩陣,但是在有向圖中,就不能定義拉普拉斯矩陣了。目前的兩種解決思路:
(a)要想保持理論上的完美,就需要重新定義圖的鄰接關係,保持對稱性
比如這篇文章[MotifNet: a motif-based Graph Convolutional Network for directed graphs](https://arxiv.org/abs/1802.01572)
提出利用Graph Motifs定義圖的鄰接矩陣。
(b)個人認為基於空間域的GCNs都可以處理有向圖,比如GraphSAGE、GAT等,聚合鄰居資訊時根據有向邊判斷是否是鄰居即可
### 節點沒有特徵的圖
對於很多網路,可能沒有節點的特徵,這個時候也是可以使用GCN的,如論文中作者對那個俱樂部網路,採用的方法就是用單位矩陣 I替換特徵矩陣X,有的地方也用節點度作為節點特徵。
## 13. 問題討論
下面將總結一些常見的問題和回答,歡迎大佬們一起討論
### Q1:GCN中鄰接矩陣為什麼要歸一化?
看前面的例子
$$
\tilde A=A+I_N=\left\{
\begin{matrix}
1 & 1 & 0 & 0 & 1 & 0\\
1 & 1 & 1 & 0 & 1 & 0\\
0 & 1 & 1 & 1 & 0 & 0\\
0 & 0 & 1 & 1 & 1 & 1\\
1 & 1 & 0 & 1 & 1 & 0\\
0 & 0 & 0 & 1 & 0 & 1
\end{matrix}
\right\}
,
\tilde D=∑_j \tilde A_{ij}=D+I_N=
\left\{
\begin{matrix}
3 & 0 & 0 & 0 & 0 & 0\\
0 & 4 & 0 & 0 & 0 & 0\\
0 & 0 & 3 & 0 & 0 & 0\\
0 & 0 & 0 & 4 & 0 & 0\\
0 & 0 & 0 & 0 & 4 & 0\\
0 & 0 & 0 & 0 & 0 & 2
\end{matrix}
\right\}
$$
$$
\tilde D^{-1} \tilde A=
\left\{
\begin{matrix}
1/3 & 1/3 & 0 & 0 & 1/3 & 0\\
1/4 & 1/4 & 1/4 & 0 & 1/4 & 0\\
0 & 1/3 & 1/3 & 1/3 & 0 & 0\\
0 & 0 & 1/4 & 1/4 & 1/4 & 1/4\\
1/4 & 1/4 & 0 & 1/4 & 1/4 & 0\\
0 & 0 & 0 & 1/2 & 0 & 1/2
\end{matrix}
\right\}
$$
顯然,**$\tilde{D}^{-1} \tilde{A} X$歸一化對鄰居取平均值**。
$$
\begin{array}{l}{X^{*}=\tilde{D}^{-1} \tilde{A} X} \\ {X_{i}^{*}=\sum_{j=1}^{N} \frac{\tilde{A}_{i j}}{\tilde{D}_{i i}} X_{j}=\sum_{j=1}^{N} \frac{\tilde{A}_{i j}}{\sum_{k=1}^{N} \tilde{A}_{i k}} X_{j}}\end{array}
$$
舉個例子,如果把『我』看成當前節點,『我的朋友』看做『我』的相鄰節點,要估算『我的工資』該怎麼做呢?對鄰居節點的工資進行加權後是求和,不能估算『我的工資』,求和的方式可能出現一個低端交際花員工的工資比一個朋友較少的大佬的工資更高。因此,進行歸一化($D^{-1}A$)取平均值,就可以更合理的估算『我的工資』。
### Q2:GCN中鄰接矩陣為什麼要renormalization?
還是看前面的例子
$$
\tilde A=\tilde D^{− 1 /2} \tilde A D^{− 1 /2}=
\left\{
\begin{matrix}
\frac{1}{\sqrt{9}} & \frac{1}{\sqrt{12}} & 0 & 0 & \frac{1}{\sqrt{12}} & 0\\
\frac{1}{\sqrt{12}} & \frac{1}{\sqrt{16}} & \frac{1}{\sqrt{12}} & 0 & \frac{1}{\sqrt{16}} & 0\\
0 & \frac{1}{\sqrt{12}} & \frac{1}{\sqrt{9}} & \frac{1}{\sqrt{12}} & 0 & 0\\
0 & 0 & \frac{1}{\sqrt{12}} & \frac{1}{\sqrt{16}} & \frac{1}{\sqrt{16}} & \frac{1}{\sqrt{8}}\\
\frac{1}{\sqrt{12}} & \frac{1}{\sqrt{16}} & 0 & \frac{1}{\sqrt{16}} & \frac{1}{\sqrt{16}} & 0\\
0 & 0 & 0 & \frac{1}{\sqrt{8}} & 0 & \frac{1}{\sqrt{4}}
\end{matrix}
\right\}
$$
網上很多地方把上面這個叫做對稱歸一化,從例子中可以看出$\tilde A=\tilde D^{− 1 /2} \tilde A D^{− 1 /2}$確實是對稱的,但是行和列都沒有歸一化,論文中叫renormalization,本人提議各大網友不要再叫對稱歸一化,容易誤導別人。
對於節點4,鄰居節點分別為[3,4,5,6],鄰居節點的度數分別為[3,4,4,2]。現考慮第4行,鄰居節點分到的權重分別為[$\frac{1}{\sqrt{12}} , \frac{1}{\sqrt{16}} , \frac{1}{\sqrt{16}} , \frac{1}{\sqrt{8}}$],可以看到,**鄰居節點度數越小,分配到的權重越大**。因此,空間意義就是:**每個節點通過邊對外發送相同量的資訊, 邊越多的節點,每條邊傳送出去的資訊量就越小**。
舉個例子,要估計一個大佬的工資,那麼他的朋友中除了同等高收入的朋友,也有一些低端交際花,如果按這些低端交際花的朋友數給他分配權重,那麼就會拉低大佬的工資,因此,需要剔出這些低端交際花的影響。
### Q3:GCN中引數矩陣W的維度如何確定?怎麼理解GCN是transductive的?
由下列公式可知
$$
Z = \tilde D^{− 1 /2} \tilde A \tilde D^{− 1/ 2} XW
$$
引數矩陣W的行數為輸入節點特徵的維度,不可調,而列數F為節點最後輸出的特徵維度,是可調引數。
雖然W的維度和鄰接矩陣A無關,但是引數矩陣W的取值的更新和A相關,因此如果把訓練集和測試集分開,分別形成自己的鄰接矩陣。那麼W的值的更新和訓練集的鄰接矩陣相關,如果直接用於計算測試集的embedding,效果應該會很差。這也是都說GCN是transductive的原因。
### Q4:為什麼GCN裡使用NELL資料集相比於其他三個的分類準確率這麼低?
### Q5:如何將自己的資料集轉化成GCN程式碼裡的資料集的格式?
個人是不建議轉成程式碼裡的格式的,因為自己的資料集的特徵、維度等是不一樣的,因此,也沒有現成的程式碼可以幫你轉化成和Cora、Pubmed等資料集一樣的格式,強行轉成這種格式可能會造成資訊的損失,得不償失。
### Q6:增加GCN層數,為何準確率還降低了?
在“[A Comprehensive Survey on Graph Neural Networks](https://blog.csdn.net/yyl424525/article/details/100057958)”和“[Deeper Insights into Graph Convolutional Networks for Semi-Supervised Learning](https://blog.csdn.net/yyl424525/article/details/101024591)”中的解釋是over smoothing,也就是層數多了,反而使遠處的