最近這段時間一直在做圖網絡相關,也差不多收尾了,有空整體復盤了下,大致以下幾個主題,不過沒整理完全哈哈(下次一定)
順手再安利幾份資料吧
ok,回到正題,今天要介紹的這篇是『Graph Embedding』系列第一篇,十分經典
論文:DeepWalk: Online Learning of Social Representations[1]代碼:https://github.com/phanein/deepwalkenjoy~
TL;DRDeepWalk是首次將深度學習技術(無監督學習)引入到網絡分析(network analysis)中的工作,它的輸入是一個圖,最終目標就是獲得網絡圖中每個結點的向量表示
先驗知識說到生成向量表示,最有名的莫過於Word2Vec了,那麼是不是可以將network embedding的問題轉化為熟悉的word embedding形式呢?這樣我們就可以借用word2vec的思想來解決了。
轉化的方式就是Random Walk ,通過這種方式將圖結構表示為一個個序列,然後我們就可以把這些序列當成一個個句子,每個序列中的結點就是句子中的單詞。
簡單的說,DeepWalk = RandomWalk + SikpGram, 下面我們來具體介紹下兩種技術。
Random Walk隨機遊走,顧名思義,就是從輸入圖中的任意一個結點
採用隨機遊走有兩個好處:
「利於並行化」:隨機遊走可以同時從不同的頂點開始採樣,加快整個大圖的處理速度;Skip Gramword2vec的skip-gram相信大家都非常熟悉了,這裡就不再贅述,放一張圖。
結合上面兩點, deepwalk其實就是首先利用random walk來表示圖結構,然後利用skip-gram模型來更新學習節點表示。算法流程如下所示:
算法有兩層循環,第一層循環採樣
其中第2步構建二叉樹的目的是為了方便後續 SkipGram模型的層次softmax算法。
參數更新的流程如下:
deepwalk可以說給網絡學習方向打開了一個新思路,有很多優點:
但是仍然存在許多不足:
遊走是完全隨機的,但其實是不符合真實的社交網絡的;本文參考資料[1]DeepWalk: Online Learning of Social Representations: https://arxiv.org/abs/1403.6652
- END -