【推薦系統】Graph Embedding系列之LINE

摘要

什麼是embedding?

Embedding在數學上表示的是一個映射關係,F: X -> Y,也就是一個函數。該函數具有兩個性質:injective和structure-preserving。Injective,即我們所說的單射函數,對於每個 Y 只有唯一的 X 對應,反之亦然;structure-preserving,結構保存,比如在X所屬的空間上X1<X2,那麼映射後在Y所屬空間上Y1<Y2。

深度學習中,Embedding特指用一個低維度向量表示一個實體,可以是一個詞(Word2Vec),可以是一個物品(Item2Vec),亦或者網絡關係中的節點(Graph Embedding)。

Embedding的初始化狀態可以理解爲是一組隨機數,隨着算法的優化與不斷迭代更新,當網絡達到收斂狀態的時候,網絡中各個層的參數就相對固化,這樣就得到了隱層權重表,此時就相當於得到了我們想要的embedding。在實際應用中,通常將神經網絡倒數第二層的權重參數當作對應樣本的embedding。

什麼是Graph Embedding?

Graph Embedding用低維、稠密、實值的向量表示網絡中的節點。目前,Graph Embedding已經是推薦系統、計算廣告領域非常流行的做法,並且在實踐後取得了非常不錯的線上效果。

Graph Embedding技術將圖中的節點以低維稠密向量的形式進行表達,要求在原始圖中相似(不同的方法對相似的定義不同)的節點其在低維表達空間也接近。得到的表達向量可以用來進行下游任務,如節點分類,鏈接預測,可視化或重構原始圖等。

Graph Embedding是把圖結構轉化成一個向量或者一組向量的變換,在這裏,Embedding能夠捕捉到圖的拓撲結構、節點到節點的關係、其他關於圖、子圖和節點的相關信息等。

Graph Embedding算法的演進

DeepWalk(2014)\rightarrowLine(2015)\rightarrowNode2vec(2016)\rightarrowEGES(2018)


LINE: Large-scale Information Network Embedding

  1. 論文地址:https://arxiv.org/pdf/1503.03578.pdf 【WWW 2015】
  2. Github地址:https://github.com/tangjianpku/LINE

算法講解:

1、LINE與DeepWalk對比

與DeepWalk一樣,LINE也是將每個節點用低維向量表示的一種算法。與DeepWalk不同的是,LINE適用於帶權或者不帶權的有向圖和無向圖。

LINE採用了“一階相似度(first-order proximity)和二階相似度(second-order proximity)”的概念,一階相似度用於表示局部網絡結構,但一階相似度不能夠完全表達全局網絡結構。因此,LINE使用了二階相似度作爲一階相似度的補充,希望二階相似度能夠補充一階相似度帶來的稀疏性問題並且更好的表示全局網絡結構。

論文的主要貢獻在於:

  • 提出了一個新的網絡embeeding模型LINE,LINE的目標函數保留了一階相似度和二階相似度。
  • 提出了一個解決了傳統隨機梯度下降算法的限制的邊抽樣算法來優化目標函數。
  • LINE模型在真實的信息網絡實驗上表現出不錯的有效性和效率。

LINE與DeepWalk的對比:

  • DeepWalk使用隨機遊走來擴張頂點的鄰居節點,近似於深度優先搜索(depth-first search),LINE採用了與“二階相似度”更貼切的廣度優先搜索(breadth-first search)。
  • DeepWalk僅適用於不帶權的網絡,而LINE適用於邊帶權或者不帶權的網絡。

2、相關概念

假設G=(V,E)表示一個信息網絡,V是頂點集,每個頂點表示一個數據實體;E是頂點間的邊集,每條邊表示的是兩個數據實體間的關係。每條邊e\epsilon E是一個有序對e=(u,v),e被分配的權重爲\omega _{\mu \upsilon }>0,權重表示的是頂點間關係的強度。LINE只考慮非負的邊權重。

網絡中的一階相似度(First-order Proximity)定義爲兩個節點間的局部成對相似性。對於每一對由邊(u,v)鏈接的節點,邊(u,v)上的權重\omega _{\mu \upsilon }表示的就是節點u和節點v之間的一階相似性。如果節點u和節點v之間不存在邊,那麼它們的的一階相似度爲0。

然而在真實的信息網絡中,兩個節點間存在一條邊相連通常只佔一小部分。即使兩個節點在本質上是相似的,由於它們之間不存在邊鏈接,它們的一階相似性仍然爲0。因此,一階相似性不足以保留整個網絡結構。那麼,我們就需要一個候選概念來解決這個稀疏性問題。直覺上,共享相同節點作爲鄰居的節點可能是相似的,這樣LINE定義了二階相似度。

網絡中節點對的二階相似性(Second-order Proximity)定義爲兩個節點的鄰居網絡結構的相似性。

假設p_{u}=(\omega _{u,1},...,\omega _{u,\left | V \right |}) 表示節點u和其他所有節點間的一階相似度,那麼p_{u}p_{v}的相似性就是節點u和節點v之間的二階相似度。如果節點u和節點v之間不存在共享的鄰居節點,那麼節點u和節點v之間的二階相似度爲0。

LINE也是用一個低維空間表示網絡中的每一個節點。同時,LINE滿足了幾個要求:

  • 保留了節點間的一階相似度和二階相似度
  • 適用於非常大的網絡,百萬級節點和億級邊
  • 支持帶權或者不帶權的有向邊和無向邊

3、LINE with First-order Proximity

對於每一條無向邊(i,j),節點v_{i}和節點v_{j}之間的聯合概率可表示爲:

其中,\overrightarrow{u_{i}}是節點v_{i}的低維向量表示,公式(1)定義了一個V*V空間下的概率分佈p(\cdot ,\cdot ),並直接利用sigmoid來度量兩個節點的相似度,

對應的經驗分佈可以表示爲:\widehat{p_{1}}(i,j)= \frac{w_{ij}}{W},這裏W=\sum _{(i,j)\epsilon E}w_{i,j}。爲了保留一階相似度,一個最直接的方法就是最小化目標函數:

其中,d(\cdot ,\cdot )是兩個分佈之間的距離。常用的衡量兩個概率分佈差異的指標爲KL散度,LINE使用KL散度來衡量兩個概率的分佈。使用KL散度來代替d(\cdot ,\cdot ),同時忽略一些常數,可以得到:

需要注意的是,一階相似度只適用於無向圖,不適用於有向圖。通過最小化公式(3)的O_{1},我們能夠在d維空間中找到每一個節點的向量表示。

4、LINE with Second-order Proximity

二階相似度適用於有向圖和無向圖。給定一個網絡或圖,不失一般性,我們均假設其爲有向圖(一條無向邊可以被當成兩條方向相反,權重相同的有向邊)。二階相似度假設具有大量相同鄰接頂點的兩個頂點是相似的。在這種情況下,每個節點可以被看作是一個特定的上下文(context),在context上擁有相同的分佈的節點也被認爲是相似的。這樣,每個節點有兩層含義:(1)節點本身 (2)其他節點的context節點

假設存在向量\overrightarrow{u_{i}}{\overrightarrow{u_{i}}}'\overrightarrow{u_{i}}是節點v_{i}的向量表示,此時v_{i}是網絡中的一個普通節點;{\overrightarrow{u_{i}}}'也是節點v_{i}的一個向量表示,此時v_{i}是網絡中其他節點的context節點。這樣網絡中的每個頂點實際上維護兩個embedding向量,一個是該頂點本身的表示向量,一個是該點作爲其他頂點的上下文頂點時的表示向量。對於每條有向邊(i,j),將節點v_{i}生成context節點v_{j}的概率爲:

其中,|V|是context節點的個數。對於每個節點v_{i},公式(4)實際上定義了v_{i}在其context上的條件概率p_{2}(\cdot |v_{i}),也就在整個頂點集合上的條件概率。如上所述,二階相似性假設兩個頂點在其上下文上具有相近的分佈,那麼這兩個頂點在表示上也是相似的。爲了保留二階相似性,希望每個頂點在其上下文上的條件分佈p_{2}(\cdot |v_{i})能夠近似於其經驗分佈\widehat{p_{2}}(\cdot |v_{i})。這樣優化的目標函數變成:

其中,d(\cdot ,\cdot )是兩個分佈之間的距離。由於網絡中節點的重要性可能不同,LINE在目標函數中引入\lambda _{i}作爲控制節點重要性的因子,\lambda _{i}可以通過頂點的度數或者PageRank等方法估計得到。經驗分佈\widehat{p_{2}}(\cdot |v_{i})可以表示爲\widehat{p_{2}}(v_{j} |v_{i})=\frac{\omega _{ij}}{d_{i}},其中\omega _{ij}是邊(i,j)的權重,d_{i}是節點v_{i}的出度。論文中爲了簡化,設置\lambda _{i}=d_{i},使用KL散度代替d(\cdot ,\cdot )並忽略常數項:

通過最小化目標函數(6)可以得到\left \{ \overrightarrow{u_{i}} \right \}_{i=1..|V|}\left \{ {\overrightarrow{u_{i}}}' \right \}_{i=1..|V|},這樣就得到了每個頂點v_{i}的d維向量表示\overrightarrow{u_{i}}

爲了同時保留頂點的一階相似度和二階相似度,一個簡單有效的方法是針對每個節點分別訓練保留了一階相似度和二階相似度的LINE模型,然後再連接通過這兩種方法訓練得到的embeddings。論文也提出了在以後的工作中,可以嘗試利用目標函數(3)和目標函數(6)進行聯合訓練以達到embedding的目的。

5、模型優化

優化目標函數(6)的計算代價很大,因爲它在計算條件分佈時要求遍歷所有節點,所以LINE也採用了word2vec中使用的負採樣技術:根據每條邊(i,j)的噪音分佈來採樣多個負樣本邊,進而減少計算量。這樣,目標函數變爲:

公式(7)的第一部分是爲觀察到的所有邊進行建模,第二部分爲從噪音分佈中提取的負採樣邊建模,其中K是負採樣邊的數量。論文中設置P_{n}(v)\propto d_{v}^{3/4},其中d_{v}是節點v的出度。LINE使用隨機梯度下降方法(ASGD)來優化公式(7),在每次迭代中,ASGD會隨機選擇一批邊來更新模型的參數。如果一個邊(i,j)被選中,那麼頂點v_{i}的embedding向量\overrightarrow{u_{i}}將使用下面的公式進行計算:

需要注意的是,這裏的梯度需要乘以一個邊的權重,如果邊的權重有很大的方差的話這樣的計算將會出現一些問題:很難找到一個合適的學習率。如果根據權值較小的邊選擇較大的學習率,則權值較大的邊的梯度會發生爆炸;而根據權值較大的邊選擇較小的學習率,會導致梯度過小,長時間難以收斂。

解決上述問題最直觀的做法就是,如果所有邊的權重都一樣,那麼選擇一個合適的學習速率就沒有任何問題。因此,一個最簡單的處理方法就是將一個加權的邊展開成多個二元邊。即一個權重爲\omega的邊可以拆分成\omega個二元邊。這樣的辦法雖然解決了上述問題,但同時帶來了極大的內存消耗,尤其當邊的權重很大的時候。爲了解決這個問題,可以對原始邊進行採樣並將採樣後的邊當作二元邊(採樣概率與原始邊的權值成正比)。採用這樣的邊抽樣方法,全局目標函數不變。這樣問題就轉化成了怎樣根據邊的權重進行抽樣。

假設W=(\omega _{1},\omega _{2},...,\omega _{|E|})表示邊的權重序列,那麼權重之和可表示爲\omega _{sum}=\sum_{i=1}^{|E|}\omega _{i},然後在[0,\omega _{sum}]區間內隨機取一個值,再看這個值落到哪個區間[\sum_{j=0}^{i-1}\omega _{j},\sum_{j=0}^{i}\omega _{j})。該方法需要O(|E|)的時間複雜度去抽樣一個樣本,當邊的規模很大時,代價也是很大的。論文中使用了alias table方法來根據邊的權重抽取一個樣本,這隻要O(1)的時間複雜度,從相同的離散分佈中完成一次隨機抽樣。

綜合上面的方法,LINE的時間複雜度是O(dK|E|),與邊的數量|E|成線性關係,同時不依賴於節點數量|V|。邊抽樣方法在提高了隨機梯度下降方法的有效性的同時並沒有影響其效率。

參考博文:

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