【論文筆記】M-Walk: Learning to Walk over Graphs using Monte Carlo Tree Search

本文用了強化學習,在知識圖譜上游走,尋找目標節點。

一、簡介

大概意思就是,在知識圖譜G上,給出一個起始節點和查詢(query)n_{s},q,然後找到目標節點n_{T}

G=(N,\varepsilon ) 圖G包含節點N=\{n_{i}\}和邊\varepsilon =\{e_{ij}\}

如下圖,給出起始節點Obama,query:citizenship,目標節點是USA。

 

 

我們要學習一個方法f(G,n_{s},q)來預測n_{T}

我們我們將f作爲強化學習力的agent。他要學習搜索策略(search policy)

訓練的時候,我們給出(n_{s},q,n_{T}),讓f自己學習路徑,如果他走到n_{T},就給他一個正的reward,或者0分。學完後只給出n_{s},q,預測n_{T}

 

所以設計了一個神經網絡的agent,叫M-walk。用RNN將歷史路徑轉化爲一個向量,用來學policy和Q function 。reward稀疏,所以用帶蒙特卡洛樹搜索的RNN,生成路徑。

 

二、用馬爾科夫決策過程來進行圖的遊走

(S,A,R,P) s是state,a是action,r是reward function,p是state transition probability

初始狀態s0和下一個狀態的表示,如上圖所示。

\varepsilon _{n_{t}}是連接點nt的所有邊,N_{n_{t}}是nt的所有鄰居節點。

si由1)該節點和連接它的邊、它的鄰居 2)t-1時刻的動作 3)初始query q構成。

 

集合S由所有可能出現的st構成。

在狀態st,agent有以下動作可以選擇:1)選擇\varepsilon _{n_{t}}中的一條邊,他連接到點n_{t+1} 2)選擇STOP,則n_{t}就是要預測的n_{T}

動作集合由下圖表示

輸出

 

如果輸出是n_{T}(即輸出了正確的答案),則reward=1,否則爲0.

這可以看出來,reward是非常稀疏的,只有走到正確的位置纔有reward。但是由於圖是已知靜態確定的,所以如果確定了上一個狀態和動作,那麼下一個狀態時確定的。(文中說這有助於解決reward稀疏。)

 

π是policy(給出狀態s,選擇動作a),Q是Q function(在狀態s下選擇動作a,它的Q value是多少,即之後的長期收益是多少)

 

三、M-walk agent

3.1π和Q的神經網路結構

用RNN獲得當前狀態st的表達ht

ht分爲三個部分:

1) 將上個時間的狀態、動作、當前節點,綜合。

2)綜合了nt的鄰居n'節點,以及nt和n'之間的邊e,代表第n'個候選動作(包括STOP動作)

3)  綜合了\varepsilon _{n_{t}}N_{n_{t}},用來判斷STOP的概率。

 

所以π和Q的計算。

u0是將hst,hAt通過一個full-connected neural network。(這裏沒說這兩個h要怎麼整合到一起,可能是拼接吧)

un'是hst和hn't做內積(即點乘,對應位相乘,求和)

u0(STOP的分數),un'(鄰居的分數)都是一個數字

Q是對每個數字做sigmoid

π是做溫度參數爲τ的softmax

關於溫度參數

 

3.2 訓練算法

傳統的使用蒙特卡羅方法的REINFORCE,需要sample一個完整的序列,sample的效率很低,而且reward稀疏。所以sample的時候使用PUCT算法的變體。

 

π是上面提到的策略分數(softmax算的),c和β用來控制探索的程度。N是visit count。W是走(s-a)這條邊上的蒙特卡羅樹的total action reward。

PUCT算法最開始傾向於選擇在狀態s下出現少的action(式子的前半部分), 後來傾向於選擇分數高的(式子的後半部分)。

當PUCT算法選擇了STOP,或者到達了最大探索數(應該是強行選擇STOP),則停止。使用

用下面的式子,更新上一個式子中的N和W。γ是衰減因子(discount factor).

主要目標就是多生成reward爲正的路徑。

然後用DQN網絡,尋找更好的π就是max Q

 

 3.3預測算法

已知(ns,q)求nT。利用π在G上尋找nT。

我們利用上面已經生成好的蒙特卡羅樹。但是可能有多路徑到達同一個節點n。走不同路徑,就有不同的

這些路徑上各個葉子狀態sT。怎麼比較選擇哪個n(n需要綜合多條路徑),需要算一個分數,排序。

N是蒙特卡羅樹的總模擬數量

求和是在所有有關同一個節點n上的子狀態sT,是對於同一個候選n的平均權重。

在所有的候選節點中,我們選擇score最大的。

 

3.4 RNN encoder

 qt約等於右邊的(因爲s0的原因)

所以st大約可以寫成

st由兩部分組成 1)\varepsilon _{n_{t}}  N_{n_{t}}代表候選動作(包括STOP) 2)qt代表歷史

所以用兩個不同的神經網絡去編碼他們

前面說過,ht分爲三個部分:

1) 將上個時間的狀態、動作、當前節點,綜合。

2)綜合了nt的鄰居n'節點,以及nt和n'之間的邊e,代表第n'個候選動作(包括STOP動作)

3)  綜合了\varepsilon _{n_{t}}N_{n_{t}},用來判斷STOP的概率。

求 2)的方法很簡單,就是邊和點的表達通過full-connected neural network

求 3) 的方法,就是max 2)的結果,因爲每一次的節點數可能都不一樣,這樣可以得到統一的結果

求1) 就是編碼qt 使用gru的思想

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章