1. 程式人生 > >網路表徵學習綜述

網路表徵學習綜述

背景

當前機器學習在許多應用場景中已經取得了很好的效果,例如人臉識別與檢測、異常檢測、語音識別等等,而目前應用最多最廣泛的機器學習演算法就是卷積神經網路模型。但是大多應用場景都是基於很結構化的資料輸入,比如圖片、視訊、語音等,而對於圖結構(網路結構)的資料,相對應的機器學習方法卻比較少,而且卷積神經網路也很難直接應用到圖結構的資料中。在現實世界中,相比圖片等簡單的網格結構,圖結構是更泛化的資料結構,比如一般的社交網路、網際網路等,都是由圖這種資料結構表示的,圖的節點表示單個使用者,圖的邊表示使用者之間的互聯關係。針對網路結構,用向量的資料形式表示網路結構、節點屬性的機器學習方法就是網路表徵學習。

圖的鄰接矩陣是將邊的資訊表示成了N*N的矩陣(N為節點個數)通過鄰接矩陣可以將圖重建,那麼是否可以直接用鄰接矩陣的列向量作為圖節點的表示向量呢?其實是可以的,但是這種表示形式有兩個問題:第一,圖結構中,任意兩個節點不一定是相連的,通常一個節點僅有很少的鄰居,因此鄰接矩陣是稀疏矩陣,倘若節點數目很多(如社交網路,使用者可能達百萬級甚至更多),以鄰接矩陣直接表示圖結構將非常不划算。第二,鄰接矩陣僅僅表示了邊的資訊,而無法加入節點的本身屬性,在當前的很多應用中,我們不僅僅需要表示圖的結構屬性,而且還伴隨著節點本身的屬性(比如社交網路中,每個使用者的性別,年齡,愛好等)綜合以上兩點問題,網路表徵學習的目的就有了兩個:第一,我們要學習一種低維度的向量表示網路節點,將節點對映到相應的向量空間,這種網路表徵學習就是關於圖結構的網路表徵學習,也稱網路嵌入;第二,我們的表示不僅僅可以表徵網路結構,同時也可以表徵節點本身自帶的屬性,這種表徵學習,就是伴隨節點屬性的網路表徵學習。通常第二種表徵學習方法都是從第一種方法中推廣而來。

關於圖結構的網路表徵

學習關於圖結構的網路表徵學習重點關注的是網路的拓撲結構與性質,是網路表徵學習中最基本的一類方法,其目的在於如何得到節點在低維空間中的向量表示,使得向量之間的關係可以保持圖結構中節點之間的結構關係。同時,我們需要確定向量之間距離的一種度量方式,用來表徵對應節點之間的相似性。

節點之間的結構關係就是邊的連線,比如直接鄰居節點,就應該比二階鄰居(鄰居的鄰居)或高階鄰居(鄰居的鄰居的…)與原本節點的關係更緊密,因為直接鄰居與原節點有邊的直接連線。這種緊密關係應該可以用向量的距離來表示。節點之間的性質關係,則對應在邊的性質。首先是邊的權重,如果兩個向量距離較小,那麼在原圖中對應兩個節點之間邊的權重越小(也可能越大,權重表示距離則權重越小;權重表示相似度則權重越大)。其次是邊的方向,在無向圖中邊僅代表連線,但對於有向圖,邊的指向將影響節點之間的連線方式。下面我將介紹幾種常見且有效的網路表徵方法。

DeepWalk

DeepWalk【2】是KDD 2014的一篇文章,這種方法的核心思想是,採用隨機遊走的方式,將網路結構節點之間的關係轉化成句子,那麼不同節點就代表不同的詞,然後用自然語言處理中Word2Vec的方法得到節點的低維度向量表示。那麼這種方法其實就是分兩步:隨機遊走,和詞向量表示學習。我們分別來看看這兩步操作到底是什麼:

隨機遊走就是在網路結構中,以某個節點做起點,然後以一定的概率隨機移動到其鄰居位置,再從鄰居位置隨機移動,直到走t步(t是預先設定好的引數),於是得到一個由t個“詞”(節點)組成的“句子”(序列)。圖中每個節點都要作為起點做隨機遊走,設有N個節點;且每個節點都要做r次隨機遊走,那麼最後就可以得到N*r個“句子”,每個“句子”都是由t個“詞”組成。

接下來是詞向量表示學習的方法,原工作中使用Skip-gram的方法學習詞向量表示,具體思想類似於極大似然概率:比如現在有一個隨機遊走得到的句子(序列) A B C D E,每個字母代表一個詞(節點),這個句子共5個詞。這個句子之所以出現,是因為這種詞的順序是常見的形式(比如我們只能從一群學生中抽1個學生,問他考試前是否複習,如果這個同學說複習,那麼我們就會更傾向於相信在這個群體中,考試動作之前會發生複習動作的概率更大),所以我們可以認為C詞很大概率就是與B詞和D詞相鄰的,我們以C詞的詞向量作為輸入,那麼其鄰居詞中,B詞和D詞出現的概率就應該更高,也就是P(鄰居是B詞和D詞 | 輸入為C詞的詞向量)的值應該更高,那麼我們就應該更新C詞的詞向量,使得上述的條件概率最大。其更新公式如下所示:

Node2Vec

Node2Vec【3】是KDD 2016的一篇文章,Node2Vec的方法同樣也是採用了隨機遊走和Skip-gram的學習方法,主要的創新點在於隨機遊走的策略。在 Node2Vec方法中對隨機遊走向鄰節點轉移的概率做了調整。

圖中t是上一次走的節點,v是當前節點,α是一個偏置,影響最終的轉移概率,轉移概率的公式如下:

式中 w_{vx} 為邊的權重, \pi_{vx} 表示轉移概率。由圖可知,v點回到t點轉移概率的偏置設為1/p,v點向x1點(既與v相連,又與t相連)轉移概率的偏置設為1,v點向其他點轉移概率的偏執設為1/q

這種方法的好處是結合了BFS(p控制)與DFS(q控制)來做隨機遊走(DeepWalk方法是基於DFS的)以兩個引數p,q來控制,得到的序列可以更全面地表示網路結構中節點的鄰居關係。


LINE

LINE方法由2015年發表在WWW會議上的論文【4】提出來。首先我們需要使用卷積神經網路模型對節點提特徵,得到節點的低維向量表示,那麼究竟怎樣的低維向量表示是更好的呢?作者提出了兩種相似度的衡量方式:一階相似度和二階相似度,其中一階相似度表示節點與直接鄰居之間的相似性,二階相似度表示節點與高階鄰居之間的相似性。原本網路結構中邊的連線和權重表示了節點之間的相似性,在這裡不妨設權重越大,表示兩個節點越相近。那麼我們得到的低維向量表示,也一定需要符合原結構中各個節點的相似性關係。

首先我們來看看一階相似度。式中, \widehat{P_1} (i,j) 是根據網路邊的權重計算出的節點之間相似度, w_{ij} 是連線節點i,j邊的權重。其本質是選中i,j兩個節點的經驗概率。

而節點的低維向量的內積,可以用來衡量兩個向量的相似度(距離),式中使用了sigmoid函式,將向量的內積對映到[0,1]之間。也可以表示i,j兩個節點同時出現的聯合概率

接下來作者以KL散度,來衡量兩個概率分佈的距離作為損失函式,並通過BP演算法更新卷積神經網路的引數。優化函式如下所示

對於二階相似度,首先求得在節點i出現的條件下,節點j出現的條件概率,即從i出發,能到達j的條件概率;然後求得網路結構中兩個節點的經驗條件概率,始終的分母表示i點的度;最後同樣利用KL散度表示兩個分佈的差異,求得優化函式如下。

最後我們可以將一階相似度和二階相似度結合在一起,共同訓練卷積神經網路的引數。

SDNE

論文【8】提出了一種半監督模型來做圖嵌入,引入了自動編碼機的模型架構,以鄰接矩陣中第i個列向量表示節點i,設為,輸入編碼器,得到低維的SDNE模型結構

編碼向量設為 y_{i} ,那麼對於原圖結構中相連的節點i,j,對應的編碼向量的距離應該很小,因此這裡引入一個監督學習的目標函式

式中 s_{ij} 表示鄰接矩陣中i,j兩個節點的連線情況。同時我們還需要訓練解碼器,使得解碼得到的輸出設為 \widehat{x_l} ,與輸入 x_{i} 相同,於是引入了無監督學習的損失函式


但是由於輸入x_{i}為鄰接矩陣的列向量,其中會有很多0元素,我們更希望要求輸出與輸入在非0元素處的值相近,即最好保證原始邊的權重不變,因此在上式中加入了一個懲罰因子b_{i} ∈ R_{n},使損失函式在非0處不同的值有更大的懲罰項。


於是總損失函式包含三個部分:監督學習的損失函式 L_{1} 、無監督學習的損失函式L_{1},以及引數正則化項

最終我們編碼器的輸出