LINE 是一種將大規模網絡結點表徵成低維向量的算法,可很方便用於網絡可視化,結點分類,鏈路預測,推薦。
source codegit
LINE相比於其餘算法來講有以下幾點優點:github
用一張圖來直觀理解
關聯圖中6,7結點的是一條強邊,所以結點6,7的向量表示應該類似(一階類似度);而結點5,6由於共享了類似的鄰居,所以5,6的向量表示也應該類似(二階類似度)。算法
ps:具體措施:以正比於邊權大小的機率來採樣邊,將被採樣的邊做爲二值邊(0 無邊,1有邊)進行模型更新。
在這種採樣過程當中,目標函數保持不變,邊的權重再也不影響梯度。網絡
首先,瞭解一下KL散度和一階類似度的概念app
KL散度Dkl(p,q):指用q分佈來近似p分佈的信息損失。函數
一階類似度:對於兩個有邊連接的頂點,其邊的強度越大,則該兩頂點關係越密切,即越類似。性能
模型大致過程:學習
(我的理解PS:可是爲何使得聯合機率分佈近似經驗分佈的信息損失最小就是保留一階類似度?經驗分佈,邊權除以邊權總和必定程度上體現了邊權的重要性,而邊權的大小又是描繪一階類似度的重要信息,所以能夠將該經驗分佈理解成保留了一階類似度的分佈,而求各個結點的向量表示,使得兩節點的聯合分佈近似於經驗分佈的信息損失最小,即該組向量表示就是體現一階類似度的最優的向量表示)優化
上述一階類似度只適用於無向圖,而不適用於有向圖。ui
首先要理解二階類似度的相關概念
模型大致過程
經過學習每一個結點i的兩個向量表示ui,ui’來最小化上述目標函數,最終能夠獲得每一個結點的向量表示。
那麼如何同時結合一階類似度和二階類似度呢?這篇論文提出時涉及了兩種方案:
ps:我的對這部分理解不夠成熟,可能有誤。
優化上述目標函數(6)須要很大的計算開銷(須要對每一條邊進行採樣來訓練模型)。這裏使用負採樣來解決問題。
負採樣:根據必定的策略選取部分更重要的邊來進行訓練,每次訓練只對神經網絡的部分權重進行更新,大大減小了SGD過程當中的計算量。
(ps:正比於邊的權重做爲機率進行邊的採樣。通常來講,邊權越大的應該被採樣的機率要越高,在語言學領域:出現單詞對頻率越高的應該被採樣的機率越大)
上述這種邊採樣策略提升了隨機梯度降低的效率。
LINE 時間複雜度是邊的線性函數,與頂點個數V無關。以下:
1. 低度頂點的嵌入表示
因爲低度頂點鄰居數目極少,原網絡中提供的信息有限,尤爲在基於二階類似度的LINE算法中是很是依賴於頂點的鄰居數目的,那麼如何肯定低度頂點的向量表示呢?
一種直觀的方法:添加更高階的鄰居(如鄰居的鄰居)來做爲該低度結點的直接鄰居。 與新添鄰居邊的權重以下:
dk是結點k的出邊的權重總和。(實際上,能夠只添加與低度頂點i有邊的,且邊權最大的頂點j的鄰居做爲頂點i的二階鄰居)
2. 如何找到網絡中新添加頂點的向量表示
若是已知新添加的頂點i與現有頂點的聯繫(即存在邊),則可獲得其經驗分佈
以後經過最小化目標函數(3)或(6)可獲得新加頂點i的向量表示
若是未能觀察到新添頂點與其餘現有頂點的聯繫,咱們只能求助其餘信息,好比頂點的文本信息,留待之後研究。
LINE 適用於大規模網絡;既保留了一階類似度,又保留了二階類似度;提出邊採樣算法,只採樣部分且只更新神經網絡部分權值,而且將採樣的邊處理成二進制邊,解決了加權邊梯度降低的侷限性(即梯度爆炸----邊權直接乘以梯度,且若邊權方差過大 可能致使梯度爆炸),加快了效率。
將來的拓展:一階二階之外更高階的類似度以及在異構網絡中的應用。