最近這段時間一直在作圖網絡相關,也差很少收尾了,有空總體覆盤了下,大體如下幾個主題,不過沒整理徹底哈哈(下次必定)node
順手再安利幾份資料吧 git
-
斯坦福的CS224W課程 -
清華大學唐傑老師的不少分享 -
清華大學 thunlp/GNNPapers -
一些大佬們的新書:《Graph Representation Learning》、《Deep Learning on Graphs》 -
等等
ok,回到正題,今天要介紹的這篇是『Graph Embedding』系列第一篇,十分經典github
-
論文:DeepWalk: Online Learning of Social Representations [1] -
代碼:https://github.com/phanein/deepwalk
enjoy~web
TL;DR
DeepWalk是首次將深度學習技術(無監督學習)引入到網絡分析(network analysis)中的工做,它的輸入是一個圖,最終目標就是得到網絡圖中每一個結點的向量表示
。畢竟萬物皆可向量,獲得向量以後能作的事情就很是多了。以下所示是論文中給出的Karate network
例子。算法
先驗知識
說到生成向量表示,最有名的莫過於Word2Vec
了,那麼是否是能夠將network embedding
的問題轉化爲熟悉的word embedding
形式呢?這樣咱們就能夠借用word2vec的思想來解決了。微信
轉化的方式就是Random Walk
,經過這種方式將圖結構表示爲一個個序列,而後咱們就能夠把這些序列當成一個個句子,每一個序列中的結點就是句子中的單詞。網絡
簡單的說,DeepWalk = RandomWalk + SikpGram
, 下面咱們來具體介紹下兩種技術。app
Random Walk
隨機遊走,顧名思義,就是從輸入圖中的任意一個結點 開始,隨機選取與其鄰接的下一個結點,直至達到給定長度 , 生成的序列 。在論文中,對於每個頂點 , 都會隨機遊走出 條序列。dom
採用隨機遊走有兩個好處:編輯器
-
「利於並行化」:隨機遊走能夠同時從不一樣的頂點開始採樣,加快整個大圖的處理速度; -
「較強適應性」:能夠適應網絡局部的變化;
Skip Gram
word2vec的skip-gram相信你們都很是熟悉了,這裏就再也不贅述,放一張圖。
DeepWalk
結合上面兩點, deepwalk其實就是首先利用random walk來表示圖結構,而後利用skip-gram模型來更新學習節點表示。算法流程以下所示:
算法有兩層循環,第一層循環採樣 條路徑,第二層循環遍歷圖中的全部結點隨機採樣一條路徑並利用skip-gram模型進行參數更新。
其中第2步構建二叉樹的目的是爲了方便後續 SkipGram模型的層次softmax算法。
參數更新的流程以下:
一個小結
deepwalk能夠說給網絡學習方向打開了一個新思路,有不少優勢:
-
支持數據稀疏場景 -
支持大規模場景(並行化)
可是仍然存在許多不足:
-
遊走是徹底隨機的,但實際上是不符合真實的社交網絡的; -
未考慮有向圖、帶權圖
本文參考資料
DeepWalk: Online Learning of Social Representations: https://arxiv.org/abs/1403.6652
- END -
記得把NewBeeNLP設爲星標哦
等你在看
本文分享自微信公衆號 - NewBeeNLP(NewBeeNLP)。
若有侵權,請聯繫 support@oschina.cn 刪除。
本文參與「OSC源創計劃」,歡迎正在閱讀的你也加入,一塊兒分享。