node2vec python_论文笔记 | node2vec
論文筆記 | node2vec: Scalable Feature Learning for networks
論文【node2vec: Scalable Feature Learning for networks】為可度量的網絡特征學習,是由斯坦福大學的Aditya Grover和Jure Leskovec在2016年提出的,它實際上是對DeepWalk的改進,是基于DeepWalk的升華。所以在了解node2vec之前,可以先看對DeepWalk的解讀。安小飛:論文筆記 | DeepWalk?zhuanlan.zhihu.com
簡介
DeepWalk是圖特征學習的開山之作,它的主要是思想是借助了在處理文本任務中詞向量的處理方法來解決圖特征學習的問題,主要方法是隨機漫步+語言模型,先通過隨機漫步找出N個經過路徑節點的有序序列,再對序列進行skip gram訓練,得到對應的向量。但是該方法也有一些缺陷或者不嚴謹的地方,第一是隨機漫步可以理解為簡單的深度優先搜索,深度往往增加了算法和模型的復雜度,但并沒有考慮到廣度優先帶來的周圍鄰居結構的影響;第二是,文中并沒有給出一個明確的優化目標函數。
node2vec在DeepWalk的基礎上提出了更加合理的圖特征學習方法,提出了用于網絡中可伸縮特征學習的半監督算法,使用SGD優化一個自定義的基于圖的目標函數,該方法可以最大化的在D維特征空間保留節點的網絡領域信息;在隨機游走的基礎上設計了一種二階隨機游走的過程,相當于對DeepWalk算法的一種擴展,它保留了鄰居節點的圖特征。
節點相似性度量
網絡節點相似性度量的依據:內容相似性:相鄰節點之間的相似性,人以群分,我們往往和我們直接關聯的人存在著相似;
結構相似性:網絡局部拓撲結構上的相似性,中介和中介存在結構上的相似性;
重要假設:同質性假設:連通的節點并且屬于相似網絡簇或者社群的節點應該相似;
結構等價假設:具有相似結構角色的節點應該相似;
如上圖所示,結點
和結點s6在局部網絡結構中具有相似的結構角色,所以應該具有相似性,雖然兩個結點之間并沒有直接相連。又如,結點s1和
屬于同一個網絡簇(直連),所以更應該相似。
學習框架
將網絡中的特征學習問題描述為一個極大似然優化問題,設
為給定網絡,設
為節點到特征表征的映射函數,我們的目標是學習一個后續節點的預測任務,這里
是一個參數,指定特征表示的維數,
是一個
參數的矩陣,為每個源節點
,定義
的網絡鄰居節點的社區抽樣策略。
目標優化函數如下,該目標函數根據節點
的特征表示,最大化節點
的網絡觀測鄰域
,
:
為了讓優化任務易于處理,做了兩點假設:條件獨立性假設:即假設結點間相互獨立,簡單來說就是,對于某一個源結點,其采用到的鄰居結點是獨立的,采用其中一個鄰居結點不會對其他鄰居結點造成影響。
特征空間對稱假設:源結點和鄰居結點的特征空間有一個對稱性影響。簡單來說就是,一個源結點和其某一個鄰居結點有關系,那么對于這個鄰居結點來說,這個源結點也是其鄰居結點,影響是相互的。
根據以上兩個假設,最終目標函數
可以優化為以下形式:
每個節點分割函數
,對于大型網絡來說,計算成本很高,所以采用負采樣來近似它,在定義特征函數
模型參數上,采用隨機梯度上升法對公式(4)進行優化。
經典搜索策略
可以將采樣源節點鄰域問題視為一種網絡局部搜索問題,所熟知的無非就是廣度優先遍歷(BFS)和深度優先遍歷(DFS),廣度優先更容易采樣鄰居節點,從而獲得每個節點鄰居的微觀視圖,這更容易表示結構的相似性,比如限制一個
鄰居域,節點
的BFS就會對s1,s2,s3采樣,廣度優先遍歷采樣鄰居節點往往重復對此采樣,這有利于減少偏差。對深度優先遍歷來說,它盡可能深的遍歷網絡,采樣節點更準確的反映了鄰居節點的宏觀情況,這更容易表示內容相似性,即驗證同質性假設,而
使用DFS就會對s4,s5,s6進行采樣。
Node2Vec
基于上面的問題,Node2Vec提出了參數化的游走方式。具體來說,Node2Vec提出了兩個重要參數
和
用于控制游走。
論文定義了一個二階的隨機游走策略,
是轉移概率。返回概率參數(Return parameter)
,對應BFS,
控制回到原來節點的概率,如圖中從t跳到v以后,有
的概率在節點v處再跳回到t。
離開概率參數(In out parameter)
,對應DFS,
控制跳到其他節點的概率。
p用來控制重新訪問Walk的的結點的可能性,p越大,可能性越小。同理,q越大,加入q>1,那么隨機游走就用參數控制游走的結點更結點結點t(降低了往外游走的概率)。如果q<1,則游走方式更大概率探索遠離結點t的結點。
總的來說,整個策略是在DFS和BFS之間采取某種平衡,也提供了參數化的控制方式,可以根據不同的需求進行調參,增大了普適性。
總結
總的來說,論文做了以下事情:
1、提出了一種高效的可伸縮網絡特征學習算法,該算法使用SGD實現網絡感知領域保持的優化目標;
2、尋找一種在廣度優先遍歷和深度優先遍歷之間的平衡點;
3、基于鄰域保留目標的特征學習方法擴展到節點和邊的預測任務;
4、對多個真實的數據集進行了實證評估;
備注:具體其他的內容可以參考原始論文,更具論文題目可以很輕松的找到原論文,且原論文還提供的Node2vec的源碼。
Python版:【https://github.com/aditya-grover/node2vec】(源碼中在保存模型的地方存在部分的問題,需要自行修改一下,且源碼是基于python2實現的),當然該算法的源碼速度上只能計算百萬級節點網絡,對于超大型網絡來說需要在spark上進行實現。
備注2:這篇文章是用Typora寫的,格式非常的好看,導入到知乎后格式亂的和屎一樣,真的難看,懶的調了,想看原始文章的可以到這里下載下來,用Typora看(Typora真的非常之好用,寫作起來也非常的順暢)。anfei123/bolgs-plan?github.com
參考
【1】Aditya Grover and Jure Leskovec.node2vec: Scalable Feature Learning for Networks
【2】Bryan Perozzi,Rami Al-Rfou and Steven Skiena.DeepWalk: Online Learning of Social Representations
總結
以上是生活随笔為你收集整理的node2vec python_论文笔记 | node2vec的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: pkcs8格式证书转换pkcs1格式
- 下一篇: Android项目-IPTV经验总结