轉自本人:https://blog.csdn.net/New2World/article/details/105291956
大量真實網絡都有一個規律,即這些網絡都是由一些 building block 構成,類似 Kronecker 圖有大量的重復結構。而我們需要一種度量方式來衡量某個結構在圖中的顯著性。因此需要引入 motif 和 graphlet 這兩個概念。
這一部分我還有一些概念沒完全理解,所以在最后記錄了一些問題等待以后回來解決。也歡迎有理解了的朋友幫忙解惑。
Network Motifs
這里實在無法確定 motif 的准確翻譯是什么,干脆不翻譯了。但它是什么東西還是得搞清楚的:在圖中大量重復的模式被稱為 motif。這個定義包含了三個要點
- 大量,就是多,比隨機圖多
- 重復,還是多
- 模式,即規模小的導出圖[1]
我們為什么需要這個 motif ?首先,既然這個概念的定義表明它在網絡中大量存在,說明這個 motif 揭示了這個網絡的一些普遍規律,比如食物鏈中的互利共生關系或競爭關系。同時我們可以依據這個規律預測一些我們可能還沒有發現的網絡中隱含的關系。
知道了 motif 的好處之后就需要找到一種方法來衡量它在網絡中的顯著性,也就是是否大量出現。最直接的方式就是挨個數,即 \(N_i^{real}\)。那么這樣就又遇到了需要參照的情況了,換句話說就是“我怎么知道 \(N_i^{real}\) 算不算多?”。
Configuration Model
既然需要參照,那就自己動手生成一個。但這個生成模型就不能像 ER 隨機圖模型一樣簡單的按概率取邊了。因為我們想要了解一個 motif 在網絡中是否大量重復出現,那么需要和真實網絡有相似的度分布和聚類系數。因此我們需要生成一個各節點和真實網絡有相同度的隨機圖。這樣的模型被視為這個網絡的零模型(null model)。
怎么做呢?首先我們將每個度為 \(k_i\) 的點拓展為 \(k_i\) 個迷你點一組的結構,然后隨機連接這些迷你點。最后合並同一組的迷你點就能得到滿足節點度條件的圖。
這里的確會出現自環和重邊的問題,但需要清楚的是隨着圖的規模增大,節點數增加,相比於節點個數,每個節點的度(迷你點個數)是可以忽略不計的。也就是說這種自環和重邊的情況很少發生。即使發生了,忽略就好,雖然會使得某些點的度不滿足條件但不影響(反正都是隨機圖,差這個別幾個點無所謂)。
還有一種方法,就是從給定的圖開始,隨機選擇兩條邊然后將它們的端點交換。例如,\(A\rightarrow B,C\rightarrow D\),交換后為 \(A\rightarrow D,C\rightarrow B\)。而交換次數大致是 \(Q\times|E|\),其中 \(Q\) 需要取一些比較大的數,比如 \(100\)。直觀理解就是讓每條邊平均交換 \(Q\) 次。
注意:這里交換就需要避免自環和重邊了。因為隨機的次數很多,如果不考慮自環和重邊,最后可能導致這兩種邊大量出現且圖會不連通。
當然,很明顯,第一種方法更有效率……
這樣有了參照之后我們就能數出來隨機圖里 motif 的出現次數 \(N_i^{rand}\)。那我們將 motif 的顯著性定義為:
這里 \(Z_i\) 是節點 \(i\) 的顯著性;\(SP_i\) 是歸一化后所有候選的 motif 的顯著性向量,它揭示了所有 motif 間的相對顯著性關系,有了對比一切都明了了。至於需要生成多少隨機圖才能得到一個較為准確的標准差,Jure 的回答是:\(100,1000,10000\),反正大於 \(10\)
雖然這里介紹的 motif 很簡單,就是一些 pattern。但我們可以將這個概念拓展。例如,可以加入節點類型,就算網絡結構一致但節點類型不一樣也算不同的 motif;或者還可以加上時序信息。另外,還可以定義不同的顯著性度量方法、對零模型加上不同的限制條件等。[2]
Graphlets
motif 是從整個圖中提取結構信息,那么如果我們要考慮一個局部或者一個節點周圍的結構信息呢?我們引入了 graphlets 概念。graphlets 是一系列連通的非同構子圖,這里要求是導出子圖,即 induced。如下圖,沒有標字母的就是對稱的或位於非同構位的節點。
這里提到了一個自同構軌道(automorphism orbit)[3]的概念,不太清楚,記錄下
類似於節點的度,定義 graphlet degree 為包含節點的 graphlet 的個數。對於有不同非同構位的 graphlet 要針對不同位置各自計算,以此得到 Graphlet Degree Vector (GDV)。
統計了節點數從 \(2\) 到 \(5\) 的 graphlets 后我們能得到一個長度為 \(73\) 的 GDV 向量來表示一個節點周圍的結構信息,而這個信息覆蓋了以該節點為中心 \(4\) 個 hops 內的區域。
How to Find Motifs and Graphlets
一般來說,合適的 motif 的規模就 \(3\)~\(8\) 個點,如果大了的話這個計算量就爆炸了。而且判斷兩個圖是否同構的問題本身就是個 NP-complete 問題。那么計數一個圖里的子圖個數主要分兩步:1. 枚舉;2. 計數。現在又幾種有效的算法來對子圖進行枚舉:
- Exact Subgraph Enumeration (ESU) [Wernicke 2006]
- Kavosh [Kashani et al. 2009]
- Subgraph Sampling [Kashtan et al. 2004]
Jure 主要介紹了 ESU,這個算法和找一個集合的所有子集的方法差不多,都是遞歸進行遍歷。它定義了兩個集合 \(V_{subgraph}\) 和 \(V_{extension}\),分別代表 當前已經生成了的子圖節點 和 后續遍歷的候選節點。其主要思路是:從一個起始點開始,每次往 \(V_{extension}\) 里加滿足一下條件的點:
- 節點序號必須要大於起始點
- 新節點可以互相鄰接,但不能跟任何已經在 \(V_{subgraph}\) 里的點鄰接
ESU 算法運行后會生成一棵 ESU 樹,如下圖[4]
根據 ESU 的輸出我們就可以來數同構的結構個數了,比如上圖中畫出的子圖總共有兩種非同構結構,第一種出現了 \(5\) 次,第二種只出現了 \(1\) 次。而圖的同構算法這里采用的是 McKay's nauty [McKay 1981] 算法。這是一種啟發式的算法,具體細節這里不做深入介紹,有時間了會寫一篇 cs224w 里出現的算法匯總。
這里附帶了同構圖的定義:
如果存在這么一種雙射關系 \(f\),使得在圖 \(G\) 中鄰接的任意兩個節點 \(\mu,\nu\) 在圖 \(H\) 中有對應的 \(f(\mu)\) 和 \(f(\nu)\) 鄰接,那么就說圖 \(G\) 和 \(H\) 同構。
Structural Roles
在現實中的真實網絡里,不同節點可能扮演不同角色,比如食物鏈中的捕食者和被捕食者,企鵝群里的群主、管理員和群成員等等。而不同角色的節點周圍的網絡結構多多少少會有些差異,比如星型結構的中心、聚集的小團體或一些外圍節點。研究這些不同角色的節點也可以告訴我們一些網絡中隱含的信息。
角色的定義是在網絡中具有相似位置的點的集合。這個定義和 community 其實是互補的,比如各個公司可能是不同的 community,而每個公司內部的角色大致是相同的(管理層和下屬員工)。公司(community)內個體間會有比較密切的聯系,但公司間相同職位(角色)的個體並不一定會有關聯。
這里定義了 structural equivalence:若兩節點與其他所有節點具有完全相同的連接關系,那么這兩個節點就具有相同結構。然而這個定義太死板了,我們只想找到相似的結構,因此在這個定義的基礎上我們允許一些 noise
既然有了定義,那么我們就要從網絡中找出不同角色。有了角色信息后我們就可以:
- 發現一些異常行為
- 遷移學習,預測其它網絡角色
- 計算網絡相似度和遷移兼容性
這里介紹的算法是 RolX,這是一種
- 無監督學習
- 不需要先驗知識
- 復雜度和邊的數量成線性關系
- 能發現不同角色間的多種關系
這個算法的流程很直接,提取信息,然后聚類即可。大致流程可以歸納為:
重點在特征提取這一步,特征包括了局部,ego和遞歸信息:
- 局部信息,比如之前提到的 GDV、節點的度等
- egonet 內的邊的數量、egonet 與其他節點連接的邊的數量等都能作為特征
- 遞歸信息這個概念很抽象,比如鄰接節點的平均度、前面局部和 ego 信息的均值及總和等等。(甚至可以求和的結果和前面所有信息一起在求和或者均值,遞歸嘛)
不過特征太多也不見得是好事,因此會去除一些相關度高的特征以達到剪枝的目的。
egonet:包括一個節點、該節點的鄰接節點以及這些節點間所有邊的子圖
最后一步使用聚類方法進行節點的角色聚類,可以使用 K-Means 等。而 RolX 中使用的是 Non-Negative Matrix Factorization,同時使用 MDL(最小描述長度) 來選擇模型,KL 散度來度量 likelihood
Jure 的 slide 定義 motif 是 induced,但 wikipedia(https://en.wikipedia.org/wiki/Network_motif; https://en.wikipedia.org/wiki/Graphlets) 定義的 motif 不一定是 induced ↩︎
overrepresentation 和 underrepresentation (anti-motif) 的概念不太清楚
↩︎
automorphism orbit 的具體定義是什么?graphlets 里的非同構位是不是就是 automorphism orbit? ↩︎
Jure 在課程視頻 58:08 的地方回答學生問題說到 ESU 樹輸出的兩個同構的子圖是不同的 motif。有點迷惑:motif 不應該是一個 pattern 嗎?這倆輸出的不應該是 subgraph 嗎?這倆到底是同一個 motif 不同 subgraph 還是如 Jure 說的不同 motif? ↩︎