GNN的部分理論補充-03

本篇是GNN的部分理論補充

1. 不動點定理

不動點:函數的不動點或定點指的是被這個函數映射到其自身的一個點,即ξ=f(ξ)\xi=f(\xi)

壓縮映射:設ff在區間[a,b][a,b]上定義,f([a,b])[a,b]f([a, b]) \subset[a, b],並存在一個常數kk,滿足0<k<10<k<1,使得對一切x,y[a,b]x, y \in[a, b]都成立不等式f(x)f(y)kxy|f(x)-f(y)| \leq k|x-y|,則稱ff[a,b][a,b]上的一個壓縮映射,稱常數kk爲壓縮常數。

壓縮映射原理:設ff[a,b][a,b]上的一個壓縮映射,則ff[a,b][a,b]中存在唯一的不動點ξ=f(ξ)\xi=f(\xi),由任何初值a0[a,b]a_{0} \in[a, b]和遞推公式an+1=f(an),nN+a_{n+1}=f\left(a_{n}\right), n \in N_{+},生成的數列{an}\left\{a_{n}\right\}一定收斂於ξ\xi

2. 遞歸求導部分

關於GNN的內容裏面提到梯度的求解效率並不高,這裏解釋說明如下:

假設存在如下遞歸的式子:
Ht+1=F(Ht,X) \mathbf{H}^{t+1}=F\left(\mathbf{H}^{t}, \mathbf{X}\right)
函數FF的參數使用WW表示,現在輸入H0\mathbf{H}^0X\mathbf{X},那麼按照時序遞歸往前計算,有
H1=F(H0,X)H2=F(H1,X)...HT=F(HT1,X) \begin{aligned} \mathbf{H}^1 &= F(\mathbf{H}^0,\mathbf{X}) \\ \mathbf{H}^2 &= F(\mathbf{H}^1,\mathbf{X}) \\ & ... \\ \mathbf{H}^T &= F(\mathbf{H}^{T-1},\mathbf{X}) \end{aligned}
現在,需要求HT\mathbf{H}^T關於WW的偏導數,按照鏈式法則
HT(W)W=F(HT1(W),W;X)W=F(HT1,W;X)W+F(HT1(W),W;X)HT1(W)HT1(W)W \begin{aligned} \frac{\partial{\mathbf{H}^T(W)}}{\partial{W}} &= \frac{\partial{F(\mathbf{H}^{T-1}(W),W;X)}}{\partial{W}} \\ &= \frac{\partial{F(\mathbf{H}^{T-1},W;X)}}{\partial{W}} + \frac{\partial{F(\mathbf{H}^{T-1}(W),W;X)}}{\partial{\mathbf{H}^{T-1}(W)}}\cdot\frac{\partial{\mathbf{H}^{T-1}(W)}}{\partial{W}} \end{aligned}
在此說明一下,公式第一行等號右邊將函數寫成F(HT1(W),W;X)F(\mathbf{H}^{T-1}(W),W;X)的原因是,寫在分號;;前面的量爲與WW相關的“函數”,之後需要使用多元微分來求偏微分,分號後面的XX由於一直保持不變,所以可以暫時當做常量看待。公式第二行第一項中的HT1\mathbf{H}^{T-1}是前向計算的第T1T-1時刻的H\mathbf{H}的值,不是關於WW的函數,第二項中的WWWWT1T-1時刻的值,而不是變量。

可以看出,公式最後出現了HT1(W)W\frac{\partial{\mathbf{H}^{T-1}(W)}}{\partial{W}},和公式左邊形式差別在於T1T-1,因此,按照這樣的法則可以一直遞歸求下去得到最終的HT(W)W\frac{\partial{\mathbf{H}^T(W)}}{\partial{W}},但是在求的過程中,必須要先按照順序依次計算出H1...HT1\mathbf{H}^1...\mathbf{H}^{T-1},然後再逆序地遞歸求HT1(W)W...H1(W)W\frac{\partial{\mathbf{H}^{T-1}(W)}}{\partial{W}}...\frac{\partial{\mathbf{H}^1(W)}}{\partial{W}},顯然,這個求梯度的過程必須要在完成TT次函數FF運算之後才能進行,而且還需要遞歸求解,顯然效率比較低。

3. 切比雪夫多項式

ChebNet-2016 核心在於:採用切比雪夫多項式代替譜域的卷積核。
頻域上的圖卷積存在兩個問題:

  • 參數矩陣WW的參數複雜度與圖的節點數線性正相關;
  • 頻域卷積不具有局部感受野"另外,求特徵向量的計算複雜度高,不適用於實時場景下的大圖計算。

ChebNet指出可以使用多項式展開近似計算圖卷積,即對參數化的頻率響應函數進行多項式近似,但是複雜度仍然很高,於是作者使用迭代定義的切比雪夫多項式(ChebShev Polynomial)作近似並證明可以將計算複雜度降低至。在這裏插入圖片描述
其中K爲多項式的階數,E爲圖中邊的數量。作者將基於切比雪夫多項式定義的卷積核稱爲切比雪夫卷積核,對應的卷積運算則稱爲切比雪夫卷積,他們的公式定義如下:

在這裏插入圖片描述
圖1. 切比雪夫圖卷積的定義
其中λmax\lambda_{\max }表示拉普拉斯矩陣的最大特徵值。從替換和化簡後的卷積運算式可以發現,切比雪夫多項式矩陣的運算是固定,可以在預處理階段完成,且拉普拉斯矩陣一般是稀疏的,可以使用稀疏張量乘法加速,因此整個圖卷積的計算複雜度大大降低。除了定義切比雪夫圖卷積外,ChebNet的作者還提出了圖池化層,此處不展開敘述。
1階近似與GCN
受ChebNet切比雪夫圖卷積的啓發,Thomas等人(GCN的作者)提出了一種更加簡單的圖卷積變種GCN。GCN相當於對一階切比雪夫圖卷積的再近似。在切比雪夫卷積覈定義的基礎上,我們令多項式的階數K=1,再令矩陣L的大特徵值爲2(帶來的縮放效應可以通過網絡學習自動適應),則圖卷積運算過程可以按如下過程進一步簡化:
在這裏插入圖片描述
GCN的卷積核更小,參數量也更少,計算複雜度也隨之減小,它等價於最簡的一階切比雪夫卷積。上圖中倒數第三行的變換被稱爲“重歸一化技巧”,GCN的作者指出,前者的特徵值範圍是在區間[0,2]內的,所以在神經網絡當中多次反覆運用這樣的算子(多層堆疊)會導致梯度消失和梯度爆炸的問題,爲此他們使用歸一化技巧將其轉化成後者。而我們從吳曉明老師團隊的圖濾波半監督學習的研究中瞭解到,重歸一化技巧能夠將特徵值範圍進一步縮小以使濾波器變得更加低通,這也是一種有力的解釋。

對比ChebNet和GCN,ChebNet的複雜度和參數量比GCN要高,但是表達能力強。ChebNet的K階卷積算子可以覆蓋節點的K階鄰居節點,而GCN則只覆蓋一階鄰居節點,但是通過堆疊多個GCN層也可以擴大圖卷積的感受域,所以靈活性比較高。最重要的是複雜度較低的GCN相比之前的方法都更加易於訓練,速度快且效果好,實用性很強,所以成爲了倍最多提到的典型方法(當前引用量爲1094)。
總的來看,頻譜圖卷積網絡的研究以圖的頻譜分析爲理論基礎,沿着“降低模型複雜度”的主線進行,大多數常規的圖運算天然的平方複雜度是掣肘圖卷積實用性的主要阻礙,但是最終研究者們還是利用多項式近似和神經網絡的適應性一步步將圖卷積網絡改造到了實用級別,也提高了圖卷積網絡的研究熱度。

4. 圖Fourier變換

根據卷積原理,卷積公式可以寫成
fg=F1{F{f}F{g}} f * g=\mathcal{F}^{-1}\{\mathcal{F}\{f\} \cdot \mathcal{F}\{g\}\}
正、逆Fourier變換
F(v)=Rf(x)e2πixvdx \mathcal{F}(v)=\int_{\mathrm{R}} f(x) e^{-2 \pi i x \cdot v} d x

f(x)=RF(v)e2πixvdv f(x)=\int_{\mathbb{R}} \mathcal{F}(v) e^{2 \pi i x \cdot v} d v

一階導數定義
f(x)=limh0f(x+h)f(x)h f^{\prime}(x)=\lim _{h \rightarrow 0} \frac{f(x+h)-f(x)}{h}
拉普拉斯相當於二階導數
Δf(x)=limh0f(x+h)2f(x)+f(xh)h2 \Delta f(x)=\lim _{h \rightarrow 0} \frac{f(x+h)-2 f(x)+f(x-h)}{h^{2}}
在graph上,定義一階導數爲
fg(x)=f(x)f(y) f_{* g}^{\prime}(x)=f(x)-f(y)
對應的拉普拉斯算子定義爲
Δgf(x)=Σyx(f(x)f(y)) \Delta_{*g} f^{\prime}(x)=\Sigma_{y \sim x} (f(x)-f(y))
假設DDN×NN\times{N}的度矩陣(degree matrix)
D(i,j)={di if i=j0 otherwise  D(i, j)=\left\{\begin{array}{ll}{d_{i}} & {\text { if } i=j} \\ {0} & {\text { otherwise }}\end{array}\right.
AAN×NN\times{N}的鄰接矩陣(adjacency matrix)
A(i,j)={1 if xixj0 otherwise  A(i, j)=\left\{\begin{array}{ll}{1} & {\text { if } x_{i} \sim x_{j}} \\ {0} & {\text { otherwise }}\end{array}\right.
那麼圖上的Laplacian算子可以寫成
L=DA L=D-A
標準化後得到
L=IND12AD12 L=I_{N}-D^{-\frac{1}{2}} A D^{-\frac{1}{2}}
定義Laplacian算子的目的是爲了找到Fourier變換的基

傳統Fourier變換的基就是Laplacian算子的一組特徵向量
Δe2πixv=λe2πixv \Delta e^{2 \pi i x \cdot v}=\lambda e^{2 \pi i x \cdot v}
類似的,在graph上,有
Δf=(DA)f=Lf \Delta{f}=(D-A)f=Lf
圖拉普拉斯算子作用在由圖節點信息構成的向量ff上得到的結果等於圖拉普拉斯矩陣和向量ff的點積

那麼graph上的Fourier基就是LL矩陣的nn個特徵向量U=[u1un]U=\left[u_{1} \dots u_{n}\right]LL可以分解成L=UΛUTL=U \Lambda U^{T},其中,Λ\Lambda是特徵值組成的對角矩陣。

傳統的Fourier變換與graph的Fourier變換區別
在這裏插入圖片描述
f(i)f(i)看成是第ii個點上的signal,用向量x=(f(1)f(n))Rnx=(f(1) \ldots f(n)) \in \mathbb{R}^{n}來表示。矩陣形式的graph的Fourier變換爲
GF{x}=UTx \mathcal{G F}\{x\}=U^{T} x
類似的graph上的Fourier逆變換爲
IGF{x}=Ux \mathcal{I} \mathcal{G} \mathcal{F}\{x\}=U x

5. RNN系列模型

推薦閱讀
RNN的處理對象:RNN通常處理的是序列輸入(sequence),比如一個句子,或者一段視頻。

句子中的前後相鄰的詞彙是相互聯繫的,而且是有序的,在理解一段句子時,需要按照順序排列整個序列,與此類似,視頻中每一幀之間也是相互聯繫且是有序,理解一段視頻需要有序的播放。

RNN相關任務

  • 文本分類:輸入一段句子,模型預測該句子所屬的類別

    比如有三類文本,類別爲{軍事類,醫療類,科技類}\{\text{軍事類},\text{醫療類},\text{科技類}\},模型輸入一段句子,並將該句子歸類到這三類中的一類,比如某某公司新出了一種治療感染的特效藥屬於醫療類

  • 詞性預測:輸入一段句子,模型預測該句子每個詞彙的詞性

    比如輸入一句話我喫蘋果,那麼模型的輸出爲我(nn) 喫(v) 蘋果(nn)

RNN和普通前饋神經網絡比較:以上述任務爲例,如果使用普通神經網絡,可以將輸入的句子作爲特徵向量直接進行分類,但是,這樣做忽略了句子中詞彙之間的關聯性,比如在這個動詞後,很有可能接着是一個名詞,而不太可能是一個動詞,這種有序關係的建模使用普通的網絡較難處理。

基礎RNN模型

基礎的RNN模型示意圖如下

在這裏插入圖片描述
藍色框RNN表示一個RNNcell,在這個cell裏面進行向量運算的操作,XX表示輸入的向量值,YY表示輸出的向量值,自連接的弧線表示cell輸出的值會作爲下一時刻的輸入。將上圖中RNN的cell操作按照時時序進行展開(按照序列輸入的先後),得到如下圖
在這裏插入圖片描述
其中的aa就是RNN的cell的自連接弧的輸出或輸入。

如果將RNN的cell按照時序進行展開,得到如下圖
在這裏插入圖片描述
可以看出,在每一個時刻,輸入爲該時刻的輸入x<t>x^{<t>}以及上一時刻的cell的輸出a<t1>a^{<t-1>},輸出爲 y<t>y^{<t>}a<t>a^{<t>}。展開後實際上相當於爲一層網絡層,可以通過疊加兩個RNN的cell,來增強模型的表達能力,即讓第一個RNN的cell的輸出作爲第二個RNN的cell的輸入,示意圖如下
在這裏插入圖片描述
根據上圖可以看出,第一層的輸出GG作爲第二層的輸入,網絡的輸出爲第二層的輸出VV

RNN缺點:原始的RNN在訓練過程中可能會產生梯度爆炸或消失(可以參見),因此,需要對訓練過程採取一些措施,比如梯度裁剪,將梯度強制限制在飽和梯度範圍內。此外還有雙層雙向RNN,多層循環RNN等擴展模型。

長短期記憶(LSTM)

動手學深度學習
LSTM參考

根據前面RNN的模型可以看出,RNN的關鍵點之一是可以將先前的信息使用到後面的時刻,對於短句子,比比如the cloud in the [sky]預測的關鍵詞sky和前文的距離較短,RNN可以學會使用先前的信息,但是,對於長句子,比如I grew up in France...I speak fluent [French].,如果我們需要模型預測出應該是哪一種語言,由於French和前文的距離很長,那麼模型需要考慮位置很遠的相關信息。然而,對於較長的句子,RNN會喪失連接如此遠信息的能力。

LSTM(Long Short Term Memory)網絡,是一種RNN的變體,可以學習到長期的依賴信息,LSTM通過刻意的設計來避免長期依賴問題,使得LSTM結構本身就具有記住長期信息的能力。LSTM的結構示意圖如下


在這裏插入圖片描述
LSTM關鍵在於cell的狀態,這個狀態類似於傳送帶,在圖上方的水平線上貫穿運行,如下圖

在這裏插入圖片描述
LSTM通過精心設計的gate(門)的結構來實現去除或者增加信息到細胞狀態,門就是一種讓信息選擇式通過的方法,包含一個sigmoid層和一個按位的乘法操作,sigmoid層輸出0到1之間的值,描述每個部分有多少量可以通過。門機制結構如下示意圖

在這裏插入圖片描述
LSTM有三個門,用於控制信息的流動

  • Forget gate 遺忘門,使用ff表示;
  • Input gate 輸入門 ,使用ii表示;
  • Output gate 輸出門,使用oo表示。

第1步:決定我們會從細胞狀態中丟棄或保留哪些信息

這個門輸入ht1\mathbf{h_{t-1}}xt\mathbf{x_t},輸出一個在0到1之間的數值(向量),然後與上一時刻的細胞狀態Ct1\mathbf{C}_{t-1}的按元素相乘。如下:
在這裏插入圖片描述
第2步:確定什麼樣的新信息被存放在細胞狀態中
包含兩個部分,一個部分是sigmoid層爲輸入門,決定需要輸入多少信息,另一部分是tanh層,用於創建該時刻的輸入信息向量C~t\mathbf{\widetilde{C}}_t,這個向量用於之後加入到細胞狀態中。示意圖如下
在這裏插入圖片描述
第3步:需要更新舊的細胞狀態Ct1\mathbf{C}_{t-1}
首先將舊狀態與ftf_t相乘,表示需要過濾哪些信息,然後和這一時刻輸入的信息相加,表示將該時刻的信息加入到細胞狀態,示意圖如下
在這裏插入圖片描述
第4步:基於當前時刻的細胞狀態確定輸出什麼值
這也是一個過濾後的信息,首先通過一個tanh層進行處理,得到輸出信息的形式,然後通過一個sigmoid層來確定輸出哪些信息。

由此,可以得到最後的輸出ht\mathbf{h_t},如下示意圖

在這裏插入圖片描述

通過不斷進行以上過程,就可以將一個序列(比如句子)編碼成最終的輸出向量,然後通過這個輸出向量經過全連接層進行分類或迴歸,另外,類似於RNN,通過疊加兩個LSTM的cell來得到兩層的LSTM,以得到更高級的句子representation。

6個公式彙集如下:
it=σ(W(i)xt+U(i)ht1+b(i))ft=σ(W(f)xt+U(f)ht1+b(f))ot=σ(W(o)xt+U(o)ht1+b(o))ut=tanh(W(u)xt+U(u)ht1+b(o))ct=itut+ftct1ht=ottanh(ct) \begin{aligned} i_{t} &=\sigma\left(W^{(i)} x_{t}+U^{(i)} h_{t-1}+b^{(i)}\right) \\ f_{t} &=\sigma\left(W^{(f)} x_{t}+U^{(f)} h_{t-1}+b^{(f)}\right) \\ o_{t} &=\sigma\left(W^{(o)} x_{t}+U^{(o)} h_{t-1}+b^{(o)}\right) \\ u_{t} &=\tanh \left(W^{(u)} x_{t}+U^{(u)} h_{t-1}+b^{(o)}\right) \\ c_{t} &=i_{t} \odot u_{t}+f_{t} \odot c_{t-1} \\ h_{t} &=o_{t} \odot \tanh \left(c_{t}\right) \end{aligned}

門控循環單元(GRU)

引入了重置門(reset gate)和更新門(update gate)的概念,從而修改了循環神經網絡中隱藏狀態的計算方式。相比於LSTM,GRU將忘記門和輸入門合成了一個單一的更新門。同樣還混合了細胞狀態和隱藏狀態,加諸其他一些改動。最終的模型比標準的 LSTM 模型要簡單,也是非常流行的變體。
網絡詳細說明和實現細節參考動手學深度學習

應用

RNN適合應用於序列型輸入,每個時刻的輸入的token需要是一個向量,通過取每一時刻的輸出或者最後一個時刻的輸出來得到句子的representation,用於文本相關的下游任務,比如文本分類、詞性標註、機器翻譯等等。
其中較爲關鍵的是如何將序列的每一個token轉化爲向量輸入,一般情況下有如下幾種方法:

  • 隨機初始化:在模型初始化階段給每一個token隨機初始化賦予一個向量,然後在loss優化過程中使用隨機梯度下降法進行學習

  • 使用統計表徵:最簡單的就是one-hot向量,假設所有token的總數爲NN,一個token對應的向量爲
    Et=[0,0,...1,...,0],EtRN E_t=[0,0,...1,...,0],E_t\in{R^N}

  • 使用預訓練詞向量:通過word2vec對訓練預料進行預訓練得到預訓練詞向量,相當於將每一個token轉化成一個vector,使用這個vector作爲RNN模型每一時刻的輸入向量即可。

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