论文阅读:DeepWalk
DeepWalk[1]這篇文章挺有意思的, 主要是講怎么用Deep Learning的方法學(xué)圖結(jié)構(gòu), 學(xué)出每個(gè)節(jié)點(diǎn)的隱含表示(比較像LSA、LDA、word2vec那種)。 發(fā)在了14年的KDD上, 咱們看到的是預(yù)覽版本。
github地址作者也放出來了, github地址
下面大致講一下文章是怎么弄得, 是個(gè)閱讀筆記。
一、 介紹,優(yōu)點(diǎn)
先說概念, 學(xué)出來什么樣。 圖a是輸入圖, 圖b是輸出。
例子是將一個(gè)輸入的圖轉(zhuǎn)化成了2維表示。 輸入是圖和圖的自身結(jié)構(gòu),輸出是二維表示。 例子應(yīng)該是做的比較好的, 基本將本來是cluster的弄得也比較近, 不過這點(diǎn)比較容易。
優(yōu)點(diǎn):1) 與傳統(tǒng)cluster、降維方法比, 這個(gè)方法的優(yōu)點(diǎn)是可以調(diào)試, 也就代表著這東西可以堆數(shù)據(jù), 因而在知識(shí)圖譜,在社交網(wǎng)絡(luò)上是有應(yīng)用的。
2) 與傳統(tǒng)cluster比能學(xué)到維度,能進(jìn)一步利用。
3) 與降維比, 其實(shí)沒什么優(yōu)點(diǎn), 但是圖結(jié)構(gòu)本身沒有什么比較正常、有可以大規(guī)模使用的降維方法。
應(yīng)用: 1. 社交網(wǎng)絡(luò)學(xué)習(xí)特征;2. 知識(shí)圖譜學(xué)習(xí)表示;3. 推薦系統(tǒng)學(xué)習(xí)低維度關(guān)聯(lián)性。
二、 隨機(jī)游走和語言模型
1. 隨機(jī)游走
假設(shè)節(jié)點(diǎn)$v_i$處的隨機(jī)游走是$W_{v_i}$,則全過程表示為$W_{v_i}^1,W_{v_i}^2,W_{v_i}^3,cdots,W_{v_i}^k$。
為什么要用隨機(jī)游走:增加隨機(jī)性,加速,可調(diào),之類的。
2. zipfs law
這篇文章主要是說用word2vec的思想學(xué)圖的, 所以一個(gè)非常重要的問題是, 詞和圖的節(jié)點(diǎn)像不像, 對(duì)于社交網(wǎng)絡(luò)或者知識(shí)圖譜來說,是沒問題的, 見下圖。
這說明詞頻和社交網(wǎng)絡(luò)大致相等, 主要是要有那個(gè)比較劇烈的曲線。 這玩意也被叫做zipf 定律, 可以看統(tǒng)計(jì)自然語言處理,上面有詳細(xì)說明。
3. 語言模型
語言模型主要是學(xué)詞序列。詞序列為:$W_1^n = (w_0,w_1,cdots ,w_n)$。
學(xué)的時(shí)候主要是學(xué)$Pr(w_n | w_0,w_1,cdots, w_{n-1})$ , 最常見的方法當(dāng)然是n-gram, 現(xiàn)在新興的是word2vec。
對(duì)于word2vec這樣的模型來說, 既然是詞向量, 那么學(xué)的也是概率表示,即:
$$Pr(w_n | Phi(w_0), Phi(w_1),cdots, Phi(w_{n-1})) $$
隨著路徑長度增加, 學(xué)習(xí)難度會(huì)變困難。 一個(gè)比較好的(這段平心而論,我沒看懂)方式是,用一個(gè)詞去預(yù)測整個(gè)文章,且忽略詞順序。 優(yōu)化問題如下
$$min(Phi) -log Pr ({w_{i-w},cdots, v_{i-1},v_{i+1} , cdots, v_{i+w} } | Phi(v_i) )$$
由于順序被忽略了, 所以比較適合圖學(xué)習(xí), 因而有了這篇論文。 其實(shí)還是得感謝Minklov, 呵呵。
三、 訓(xùn)練方法
將圖節(jié)點(diǎn)表示為詞表(V)。
算法分兩部分:1. 隨機(jī)游走;2.更新過程
隨機(jī)游走, 對(duì)圖G,隨機(jī)采樣1節(jié)點(diǎn)$v_i$, 作為根節(jié)點(diǎn)$W_{v_i}$, 然后一直向周圍采樣,直到達(dá)到最大路徑長度t。 算法如下:
其中3-9行是核心, 用skip-gram去更新。 skip-gram算法圖如下:
這玩意也就是通常說的隨機(jī)梯度。 后面還加了個(gè)層次softmax,用于加速。
核心流程: 1. 隨機(jī)游走, 2. 用sgd學(xué)向量。 我倒是感覺其實(shí)最有意思的是隨機(jī)游走那段。
四、 代碼賞析
talk is cheap, show me the code。
文件基本上沒幾個(gè), 非常少, __init__ 沒啥用, main主要是調(diào)參數(shù)的, 這個(gè)沒啥講的, 自己看好了。
先看random walk怎么寫的, 這是graph類的一個(gè)函數(shù), graph就是封裝了一個(gè)字典。 這個(gè)好水, 就是直接隨了n個(gè)點(diǎn)。 然后加進(jìn)去。
然后是skip-gram,如下:
就是封裝了一下gensim的word2vec類,自己連動(dòng)手都沒。
核心訓(xùn)練過程,就下面這句
五、整體評(píng)價(jià)、實(shí)驗(yàn)結(jié)果
實(shí)驗(yàn)還行, 這玩意主要的有點(diǎn)是能學(xué)出結(jié)構(gòu), 實(shí)驗(yàn)不是特別搓就行。
評(píng)價(jià): 從技術(shù)的層面上,沒啥,random walk倒是用的很新穎。 沒有跟spreading activation比較過。
參考文獻(xiàn):
[1] Perozzi B, Al-Rfou R, Skiena S. DeepWalk: Online Learning of Social Representations[J]. arXiv preprint arXiv:1403.6652, 2014.
總結(jié)
以上是生活随笔為你收集整理的论文阅读:DeepWalk的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 虚拟机安装MacOS系统教程
- 下一篇: 怎么创建具有真实纹理的CG场景岩石?