從譜聚類說起
譜聚類(spectral clustering)是一種針對圖結構的聚類方法,它跟其他聚類算法的區別在於,他將每個點都看作是一個圖結構上的點,所以,判斷兩個點是否屬於同一類的依據就是,兩個點在圖結構上是否有邊相連,可以是直接相連也可以是間接相連。舉個例子,一個緊湊的子圖(如完全圖)一定比一個鬆散的子圖更容易聚成一類。
那譜聚類爲什麼叫譜而不是圖聚類呢?這個spectral是什麼東西?我們知道一個圖是可以用一個鄰接矩陣A來表示的。而矩陣的譜(spectral)就是指矩陣的特徵值,那麼這個特徵值跟圖的矩陣到底有什麼深刻的聯繫呢?
那麼首先,圖的聚類是什麼?我們可以將聚類問題簡化爲一個分割問題,如果圖的結點被分割成A,B這兩個集合,那麼我們自然是希望在集合中的結點的相互連接更加緊密比如團,而使得子圖之間更加儘可能鬆散。
爲了建立這個聯繫,我們構造一個laplace matrix:
L=D−A
D是一個對角矩陣,每個對角元素
Dii表示第i個結點的度。A則是這個圖鄰接矩陣。爲什麼要這樣去構造一個矩陣呢?因爲研究圖的一些性質的時候,我們常常用到一個類似於下式的目標函數:
xTMx={u,v}∈E∑(xu−xv)2
這個目標函數可以定義圖上的很多問題,比如最小圖分割問題,就是要找到一個方法將圖分成兩塊的使得切割的邊最少(如果邊有權重那就是切割的權重最小)。如下圖,你不能找到一個比切兩條邊更少的分割方法了。
而這個優化問題其實等價於當
x∈{0,1}V的時候:
min{u,v}∈E∑(xu−xv)2=u∈A,v̸∈A∑(1−0)2+u∈A,v̸∈A∑(0−1)2=2cut(A,A)
而這個方程不正是一個二次型嗎。爲了讓二次型得到這個結果。我們發現,當
M=dI−A=D−A的時候就可以了。驗證一下:
xT(dI−A)x=dxTx−xTAx=v∑dxv2−2{u,v}∈E∑xuxv={u,v}∈E∑(xu−xv)2
此外,當A不是鄰接矩陣而是權重矩陣W的時候,於是d就從度推廣到權重的求和,那麼這個公式還可以推廣爲:
xTLx=xT(dI−W)x=i,j∑ωij(xu−xv)2
RatioCut 切圖聚類
現在,我們可以嘗試將這個目標函數與Ratio切圖聚類的目標函數建立起聯繫,建立聯繫有什麼好處呢?好處就是如果我們發現切圖的目標函數是這個二次型,那麼我們只要優化這個二次型,不就可以用連續的方法來解決一個離散的問題嗎?
RatioCut考慮最小化
cut(A1,A2,...,Ak),同時最大化每個子圖的個數即:
RatioCut(A1,A2,...Ak)=21i=1∑k∣Ai∣cut(Ai,Ai)
其中
cut(Ai,Ai)表示兩個子圖之間的距離(兩個子圖結點之間距離的求和):
cut(Ai,Ai)=i∈A,j∈Ai∑wij
這裏公式裏的是A與A的補集的切圖權重(切的邊權重的求和),也就是說我們希望子圖A與其餘的圖分離的代價最小,比如我只要切掉一條微不足道的邊就能將兩個複雜的圖(比如兩個團)分離開,那麼就可以認爲這是一個好的切割。
現在我們仿照上面的x,將其推廣到多個簇,於是我們用一個指示函數(one-hot)來表達每個結點屬於哪個子圖,這樣就將切割問題跟二次型建立起了聯繫
我們引入指示向量
hj∈{h1,h2,..hk} j=1,2,...k,表示有k個子圖,對於任意一個向量
hj, 它是一個|V|-維向量(|V|爲結點數,用來標記哪個結點屬於哪個子圖,類似於one-hot),我們定義
hij爲:
hij={0∣Ai∣
1vj∈/Aivj∈Ai
那麼,對於每一個子圖都有:
hiTLhi=21m=1∑∣V∣n=1∑∣V∣wmn(him−hin)2=21(m∈Ai,n∈/Ai∑wmn(∣Ai∣
1−0)2+m∈/Ai,n∈Ai∑wmn(0−∣Ai∣
1)2=21(m∈Ai,n∈/Ai∑wmn∣Ai∣1+m∈/Ai,n∈Ai∑wmn∣Ai∣1=21(cut(Ai,Ai)∣Ai∣1+cut(Ai,Ai)∣Ai∣1)=∣Ai∣cut(Ai,Ai)
其原理在於,因爲當
m∈Ai,n∈/Ai時,因爲結點
vm屬於子圖i,結點
vn不屬於子圖i,於是
him−hin=∣Ai∣
1−0,同理,當
vm,
vn都屬於子圖的時候
him−hin=∣Ai∣
1−∣Ai∣
1=0。
上述是第i個子圖的式子,我們將k個子圖的h合併成一個H,於是式子變成:
RatioCut(A1,A2,...Ak)=i=1∑khiTLhi=i=1∑k(HTLH)ii=tr(HTLH)s.t. hiThi=1, i=1,2,...,k
也就是說Ratiocut本質上就是在最小化
tr(HTLH)這個東西。那麼怎麼優化呢?注意到每個
hi都是相互正交的,因爲一個結點不能同時屬於多個類別,因此H是一個正交矩陣,又因爲L是一個對稱矩陣,那麼可以證明,H是L的特徵向量的時候,恰好是這個優化問題的解,我們需要要找到那麼特徵值比較小的特徵向量,就可以找到一種代價最小的切割方法。我們可以來證明一下,特徵向量恰好是他的極值:
∇h(hTLh−λ(1−hTh))=∇htr(hTLh−λ(1−hTh))=∇htr(hTLh)−λ∇htr(hhT)=∇utr(uuTL)−λ∇htr(hEhTE)=∇utr(uEuTL)−λ∇htr(hEhTE)=Lu+LTu−λ(h+h)=2Lu−2λh=0⟹Lu=λh
這裏用到了一些最優化求導常用公式技巧,其實這個推導跟PCA是一樣的,只不過PCA找的是最大特徵值(PCA中L是協方差矩陣,目標是找到一個向量最大化方差),這裏是找最小特徵值,我們目標是找到一個向量最小化這個二次型矩陣。
最後,通過找到L的最小的k個特徵值,可以得到對應的k個特徵向量,這k個特徵向量組成一個nxk維度的矩陣,即爲我們的H。一般需要對H矩陣按行做標準化,即
hij∗=(t=1∑khit2)1/2hij
由於我們在使用維度規約的時候損失了少量信息,導致得到的優化後的指示向量h對應的H不能完全指示各樣本的歸屬(因爲是連續的優化,不可能恰到得到一個one-hot向量),因此一般在得到nxk維度的矩陣H後還需要對每一行進行一次傳統的聚類,比如使用K-Means聚類,從而得到一個真正的one-hot指示向量。
所以譜聚類的流程可以總結如下:
- 計算標準化後的lapace矩陣
- 求解標準化lapace矩陣的特徵值與特徵向量
- 取最小的k1個特徵向量
- 對這k1個特徵向量聚類,聚類數爲k2
- 得到k2個簇,就是對應k2個劃分。
GCN
圖卷積神經網絡,顧名思義就是在圖上使用卷積運算,然而圖上的卷積運算是什麼東西?爲了解決這個問題題,我們可以利用圖上的傅里葉變換,再使用卷積定理,這樣就可以通過兩個傅里葉變換的乘積來表示這個卷積的操作。那麼爲了介紹圖上的傅里葉變換,我接來下從最原始的傅里葉級數開始講起。
從傅里葉級數到傅里葉變換
此部分主要參考了馬同學的兩篇文章:
- 從傅立葉級數到傅立葉變換
- 如何理解傅立葉級數公式?
傅里葉級數的直觀意義
如下圖,傅里葉級數其實就是用一組sin,cos的函數來逼近一個周期函數,那麼每個sin,cos函數就是一組基,這組基上的係數就是頻域,你會發現隨着頻域越來越多(基越來越多),函數的擬合就越準確。
傅里葉變換推導
要講傅里葉變換的推導,我們要先從傅里葉級數講起,考慮一週期等於T,現定義於區間[-T/2,T/2]的周期函數f(x),傅里葉級數近似的表達式如下:
f(x)=C+n=1∑∞(ancos(T2πnx)+bnsin(T2πnx)),C∈R
利用偶函數*奇函數=奇函數的性質可以計算出
ak與
bk
an=∫−T/2T/2cos2(T2πnx)dx∫−T/2T/2f(x)cos(T2πnx)dx=T2∫−T/2T/2f(x)cos(T2πnx)dxbn=∫−T/2T/2sin2(T2πnx)dx∫−T/2T/2f(x)sin(T2πnx)dx=T2∫−T/2T/2f(x)sin(T2πnx)dx
利用歐拉公式
eix=cosx+isinx,我們發現
cosx,sinx 可表示成
cosx=2eix+e−ix,sinx=2ieix−e−ix,
再將傅立葉級數f(x)中
cos(T2πnx)和
sin(T2πnx)的線性組合式改寫如下:
ancos(T2πnx)+bnsin(T2πnx)=an(2eiT2πnx+e−iT2πnx)+bk(2ieiT2πnx−e−iT2πnx)=(2an−ibn)eiT2πnx+(2an+ibn)e−iT2πnx=cneiT2πnx+c−ne−iT2πnx
可以驗證
c−n=2a−n−ib−n=2an+ibn,這是因爲an是一個偶函數,bn是一個奇函數。此外,若n=0,就有
c0=a0/2。將以上結果代回f(x)的傅立葉級數即得指數傅立葉級數:
f(x)=n=−∞∑∞基的坐標
cn⋅正交基
eiT2πnx
現在我們知道
cn=2an−ibn,將
an,bn的結果代進去可以得到:
cn=T1∫−T/2T/2f(x)(cos(T2πnx)−isin(T2πnx))dx=T1∫−T/2T/2f(x)e−iT2πnxdx
公式用頻率替換:
Δω=T2π,再令
ωn=ωn現在我們可以寫出全新的傅里葉級數:
f(x)=n=−∞∑∞2πΔω∫−T/2T/2f(x)e−iωnxdx⋅eiωnx
現在令
T→∞,Δω→0,並設
F(ω)=T→∞lim∫−T/2T/2f(x)e−iωxdx
f(x)=n=−∞∑∞2πΔωF(ωn)⋅eiωnx=2π1n=−∞∑∞F(ωn)⋅eiωnxΔω=2π1∫−∞+∞F(ω)⋅eiωxdω
於是得到了傅里葉變換就是
F(ω)=∫−∞+∞f(x)e−iωxdx
Signal Processing on Graph
在將圖的傅里葉變換之前,我們先介紹一下圖信號是什麼。我們在傳統概率圖中,考慮每個圖上的結點都是一個feature,對應數據的每一列,但是圖信號不一樣,這裏每個結點不是隨機變量,相反它是一個object。也就是說,他描繪概率圖下每個樣本之間的圖聯繫,可以理解爲刻畫了不滿足iid假設的一般情形。
圖上的傅里葉變換
那麼我們要怎麼將傳統的傅里葉變換推廣到圖結構中去?回憶一下,傳統對f作傅里葉變換的方法:
f^(ξ):=⟨f,e2πiξt⟩=∫Rf(t)e−2πiξtdt
我們換了種寫法,其實我們發現這個傅里葉變換本質上是一個內積。這個
e−2πiξt其實是lapace算子的一個特徵函數,可以理解爲一種特殊形式的特徵向量:
−Δ(e2πiξt)=−∂t2∂2e2πiξt=(2πξ)2e2πiξt
注意,這裏導數本質上是一個線性變換,因爲它滿足線性算子的兩個性質,T(x+y)=T(x)+T(y), cT(x)=T(cx)。可以看到
e2πiξt是laplace算子的特徵向量,而
(2πξ)2則是lapace算子的特徵值。那麼在圖上我們的laplace矩陣就是離散化的lapace算子,而這個算子在圖上的基顯然就是特徵向量了!
因此,只要意識到傳統的傅里葉變換本質上求的是與正交基的內積(比如基
e2πiξt)上的係數,而推廣到圖上的正交基很顯然就是laplace矩陣的特徵值,於是對於laplace矩陣的傅里葉變換就可以表達爲:
f^(λl):=<f,ul>=i=1∑Nf(i)ul∗(i)
顯然這個變換就是在求解特徵向量的係數,也就是特徵值,因此,可以理解爲圖上的經過傅里葉變換後的函數
f^就是一個計算特徵值的函數。
更一般的,圖上的傅里葉變換可以寫成以下內積的形式,其中U是laplace矩陣的特徵向量矩陣:
傅里葉變換:
x^=UTx
傅里葉逆變換:
x=Ux^
因此,我們就可以定義圖上的卷積,因爲它就是簡單的兩個變換的乘積而已:
比如,x,y的卷積,就是他們傅里葉變換相乘
y⋆x=UTyU⊤x
如果我們將y參數化,設
gθ=diag(θ),就可以訓練一個卷積核:
gθ⋆x=UgθU⊤x
然而計算U的代價太高了,因此要想辦法去近似它,有人提出,
gθ′diag(θ),就可以訓練一個卷積核:
gθ⋆x=UgθU⊤x
然而計算U的代價太高了,因此要想辦法去近似它,有人提出,
gθ′(Λ)≈k=0∑Kθk′Tk(Λ~)
其中
Λ~=λmax2Λ−IN,現在假設
λλmax≈2,並且k=1,於是
gθ′⋆x≈θ0′x+θ1′(L−IN)x=θ0′x−θ1′D−21AD−21x
最後再假設這兩個參數是共享的,可以得到:
x
最後再假設這兩個參數是共享的,可以得到: