2.《Convolutional Neural Networks on Graphs with Fast Localized Spectral Filtering》論文理解

《Spectral Networks and Deep Locally Connected Networks on Graphs》的基礎上,
《Convolutional Neural Networks on Graphs
with Fast Localized Spectral Filtering》
作出了改進:
作者提出,泛化卷積網絡到圖上需要以下3個基本的步驟:
(1)在圖上設計出局部的卷積核
(2)將的相似節點聚類的圖粗化過程
(3)將空間分辨率轉化爲更高的濾波器分辨率的圖池化操作

1.在圖上設計出局部的卷積核
定義無向圖G=(V,E,W)G=(V,E,W),其中VV是節點的集合,V=n|V|=nEE是邊的集合,WW是由節點之間的連接權重得到的鄰接矩陣,DD是度矩陣,並且Dii=jWijD_{ii}=\sum_{j}{W}_{ij}LL是圖的拉普拉斯矩陣,L=DWL=D-WU=[u0,...,un1]Rn×nU=[u_{0},...,u_{n-1}]\in R^{n×n}LL的特徵向量矩陣,Λ=diag([λ0,...λn1])Rn×n\Lambda=diag([\lambda_{0},...\lambda_{n-1}])\in R^{n×n},“g*_{g}”表示圖上的卷積算子,所以
y=xgg=U((UTx)(UTg))=UgθUTx(1)y=x*_{g}g=U((U^{T}x)\bigodot(U^{T}g) )=Ug_{\theta}U_{T}x\tag{1}

其中,gθ=diag[(u0Tg,...,un1Tg)]g_{\theta}=diag[(u_{0}^{T}g,...,u_{n-1}^{T}g)],
因爲對於LL來說,特徵值和特徵向量一一對應,當λi\lambda_{i}確定時,uiTu_{i}^{T}就確定了,所以可以寫成g(λi)=uiTgg(\lambda_{i})=u_{i}^{T}g,那麼
gθ=diag[(g(λ0),...,g(λn1))]=g(diag([λ0,...λn1]))=g(Λ)=diag(θ)(2)g_{\theta}=diag[(g(\lambda_{0}),...,g(\lambda_{n-1}))]=g(diag([\lambda_{0},...\lambda_{n-1}]))=g(\Lambda)=diag(\theta)\tag{2}

其中,θRn\theta \in R^{n},所以gθg_{\theta}是個關於Λ\Lambda的函數,所以
y=Ugθ(Λ)UTx(3)y=Ug_{\theta}(\Lambda)U^{T}x\tag{3}

由於gθ(Λ)g_{\theta}(\Lambda)是一個關於Λ\Lambda的函數,由KK階矩陣級數展開得到:
gθ(Λ)k=0K1θkΛk(4)g_{\theta}(\Lambda)\approx\sum_{k=0}^{K-1}{\theta_{k}\Lambda^{k}}\tag{4}

將式(4)帶入式(1),得到:
yUk=0K1θkΛkUTx=k=0K1θkLkx=gθ(L)x(5)y\approx U\sum_{k=0}^{K-1}{\theta_{k}\Lambda^{k}}U^{T}x=\sum_{k=0}^{K-1}{\theta_{k}L^{k}}x=g_{\theta}(L)x\tag{5}

其中(gθ(L))i,j(g_{\theta}(L))_{i,j}表示卷積核gθg_{\theta}當中心在節點ii上時對節點jj的權值,dg(i,j)d_{g}(i,j)表示節點i,ji,j之間的最短路徑的邊的數目,當dg(i,j)>K1d_{g}(i,j)>K-1時,(gθ(L))i,j(g_{\theta}(L))_{i,j}的值爲0,這意味這在計算節點ii的鄰域節點時,只計算dg(i,j)K1d_{g}(i,j)\leq K-1的節點作爲鄰域進行卷積。
在這裏的多項式展開可以利用切比雪夫多項式展開,切比雪夫多項式滿足:
Tk(x)=2xTk1(x)Tk2(x)(6)T_{k}(x)=2xT_{k-1}(x)-T_{k-2}(x)\tag{6}

其中,T0=1,T1=xT_{0}=1,T_{1}=x
而且切比雪夫多項式{Tn(x)}\{T_{n}(x)\}L2([1,1],dy/1y2)L^{2}([-1,1],dy/\sqrt{1-y^{2}})爲正交基,即11Tn(x)Tm(x)11x2dx\int_{-1}^{1}{T_{n}(x)T_{m}(x)\frac{1}{\sqrt{1-x^{2}}}dx}=0(當n!=m),π\pi(當n=m=0),π/2\pi/2(當n=m!=0)。所以
gθ(Λ)=k=0K1θkTk(Λ~)(7)g_{\theta}(\Lambda)=\sum_{k=0}^{K-1}\theta_{k}T_{k}(\tilde{\Lambda})\tag{7}

其中,Λ~=2Λ/λmaxIn\tilde{\Lambda}=2\Lambda/\lambda_{max}-I_{n}。將Λ\Lambda這個對角矩陣規範到[1,1][-1,1]之間。所以L~=2L/λmaxIn\tilde{L}=2L/\lambda_{max}-I_{n}
xk=Tk(L~)x\overline x_{k}=T_{k}(\tilde L)x,由式(6)可知:xk=2L~xk1xk1,x0=x,x1=L~x(8)\overline x_{k}=2\tilde L\overline x_{k-1}-\overline x_{k-1},\overline x_{0}=x,\overline x_{1}=\tilde Lx\tag{8}

將式(8)帶入式(7)推出:
y=gθ(L)x=[x0,...xK1]θ(9)y=g_{\theta}(L)x=[\overline x_{0},...\overline x_{K-1}]\theta \tag{9}

到此,其實已經構造完了局部卷積核,原來的卷積公式:y=Ugθ(Λ)UTxy=Ug_{\theta}(\Lambda)U^{T}x,新的卷積公式y=[x0,...xK1]θy=[\overline x_{0},...\overline x_{K-1}]\theta,將求解gθ(Λ)g_{\theta}(\Lambda)部分變爲求解θ\theta(即爲卷積核的訓練參數),複雜度降低爲O(K)O(K),並且計算了求解特徵矩陣UU,變爲計算[x0,...xK1][\overline x_{0},...\overline x_{K-1}],其複雜度爲O(KE)O(K|E|)E|E|表示圖中邊的數目。而且這個部分在訓練的時候只需要計算一次,只於x,Lx,L有關,也就是隻與輸入有關,沒有訓練參數在其中。
當輸入爲多通道樣本的時候:
ys,j=i=1Fingθi,j(L)xs,i=i=1Fin[xs,i,0,...xs,i,K1]θi,jRn(10)y_{s,j}=\sum_{i=1}^{F_{in}}{g_{\theta_{i,j}}(L)x_{s,i}}=\sum_{i=1}^{F_{in}}[\overline x_{s,i,0},...\overline x_{s,i,K-1}]\theta_{i,j} \in R^{n}\tag{10}

其中,ss表示某個樣本ssxs,ix_{s,i}表示樣本的第ii個特徵,θi,jRK\theta_{i,j}\in R^{K}表示第jj個濾波器對樣本ss的第ii個特徵的切比雪夫係數,θRFout×Fin×K=RJ×I×K\theta\in R^{F_{out}×F_{in}×K}=R^{J×I×K}

2.將的相似節點聚類的圖粗化過程
在池化操作的時候,需要在圖像找到有意義的鄰域節點,它們需要有一定的相似性。這裏作者使用了GraclusGraclus分層聚類算法,首先選擇了一個未標記的節點ii,然後從其他未標記的節點中找出最大的局部歸一化切割Wi,j(1/di+1/dj)W_{i,j}(1/d_{i}+1/d_{j})的節點jj,將這兩個節點進行標記,粗化後的權值等於這兩個節點的權值之和,然後重複這個過程直到所有的節點都被標記。這個過程將節點的數量大約減少了一半,並且這個過程中會存在一些孤立節點以及未匹配點。

3.將空間分辨率轉化爲更高的濾波器分辨率的圖池化操作
在池化操作中,需要完成兩個步驟:
①:建立一個二叉樹
②:重新排列節點變成一維信號
在粗化後,每個節點都將有兩個子節點,即前一層粗化中是子節點,求和後得到後一個粗化中的節點。通過粗化創建的二叉樹有以下特點:(綠色是常規節點,橙色是孤立節點,藍色是假節點)
1):常規的節點和孤立節點有兩個常規的子節點;圖中g1g_{1}的0節點,它是個孤立節點,g1g_{1}中沒有和它匹配的點,但是它的子節點在g0g_{0}中是一對配對的節點0,1;
2):孤立節點可以通過添加假節點(未連接的節點,其權值爲0)進行配對,成爲子節點;圖中g2g_{2}的節點0,它的子節點是g1g_{1}中的孤立節點0以及假節點1;
3):假節點對應的子節點總都是假節點;
圖中g1g_{1}的節點1,它是由於孤立節點0添加的,所以在g0g_{0}中的子節點爲假節點2,3;
在這裏插入圖片描述
在圖中左邊部分是粗化過程,初始的圖g0g_{0}有8個節點,並且希望經過第一次粗化得到g1g_{1}有5個點,所以需要在g0g_{0}中找到3對匹配的點,剩下的節點作爲孤立節點於假節點匹配,得到g1g_{1};之後第二次粗化希望g2g_{2}有3個點,那麼需要找到2對匹配的點,然後剩下的孤立點與假節點匹配,在g1g_{1}中的假節點對應到g0g_{0}中需要添加兩個假節點。到此,完成了粗化的過程。
圖的右邊是池化的過程,它的過程相當於將g0g_{0}中的12個節點按照粗化過程中的節點關係排列成爲一維信號(g2將g_{2}節點排成一維信號後,反推出g0g_{0}中節點的順序,即建立二叉樹的過程),按照傳統的池化窗口的形式進行池化操作即可

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