天天看點

sgd 參數 詳解_論文筆記(三):TransH的詳解與實作

附言:最近由于主要将經曆花在對于KGE與SPARQL的結合上,導緻TransH的文章解讀一再拖延,近期已大緻完成這方面工作,後期會專門出一個介紹一下KGE與SPARQL結合的文章。

前言:書讀百遍不如抄書一遍!通過複現各類模型,可以幫助更好的了解模型的細節,并加深記憶,為後面的學習鋪平道路. 首先先附上論文原文位址:

TransH 原文​citeseerx.ist.psu.edu

TransH 是Zhen Wang 等人在2014年提出的一種對于TransE模型(TransE論文詳解,請移步我之前的文章論文筆記(一):TransE論文詳解及代碼複現)的改進方案,這個模型的具體思路是将三元組中的關系(relation, 或者 predicate),抽象成一個向量空間中的超平面(Hyperplane),每次都是将頭結點或者尾節點映射到這個超平面上,再通過超平面上的平移向量計算頭尾節點的內插補點。

這樣做的目的,主要是因為TransE模型在反射,一對多,多對一等關系中處理的效果并不好。舉個例子,在一個對多的關系中,頭結點由一個向量表示,它在一個關系中指向多個不同的節點,而這個關系也是由一個vector表示的;理想情況下,如果h + r - t = 0,這就會導緻指向的多個節點所計算出來的向量都是相同的值,這明顯是有問題的。而且同時,這也造成一個節點在連接配接不同relations中時,都使用一個相同的vector表示。而在TransH中,為了改善上述問題,引入超平面來代替原有關系向量,進而使得同一個節點在不同關系超平面的向量表示不盡相同。

我們可以通過先下面這圖來進一步加深對這個超平面概念的了解:

sgd 參數 詳解_論文筆記(三):TransH的詳解與實作

TransH簡單示例

根據上圖,我們可以得一個三元組元素的數學表示,h和t分别代表頭結點和尾節點的向量,而關系超平面由平面的法向量

sgd 參數 詳解_論文筆記(三):TransH的詳解與實作

以及平面上的平移向量

sgd 參數 詳解_論文筆記(三):TransH的詳解與實作

表示。

具體的算法實作,對于一個三元組,我們首先需要将h和t映射到我們的超平面上,進而得到映射向量

sgd 參數 詳解_論文筆記(三):TransH的詳解與實作

sgd 參數 詳解_論文筆記(三):TransH的詳解與實作

, 具體公式如下:

sgd 參數 詳解_論文筆記(三):TransH的詳解與實作
sgd 參數 詳解_論文筆記(三):TransH的詳解與實作

其中簡單說明下

sgd 參數 詳解_論文筆記(三):TransH的詳解與實作

的含義,這裡

sgd 參數 詳解_論文筆記(三):TransH的詳解與實作

表示h在

sgd 參數 詳解_論文筆記(三):TransH的詳解與實作

方向上投影的長度(帶正負号),乘以

sgd 參數 詳解_論文筆記(三):TransH的詳解與實作

即h在

sgd 參數 詳解_論文筆記(三):TransH的詳解與實作

上的投影。

得到投影之後我們就可以根據下面的score function來求得三元組的內插補點:

sgd 參數 詳解_論文筆記(三):TransH的詳解與實作

這個公式中所期望的結果為,如果三元組關系是正确的,則結果數值較小,反之則結果數值較大.

為了實作上述所期望的結果,作者引入了margin-base ranking function 作為損失函數來訓練模型:

sgd 參數 詳解_論文筆記(三):TransH的詳解與實作

其中

sgd 參數 詳解_論文筆記(三):TransH的詳解與實作

看做 max(0, x),

sgd 參數 詳解_論文筆記(三):TransH的詳解與實作

表示正确三元組的集合,

sgd 參數 詳解_論文筆記(三):TransH的詳解與實作

表示負例的集合,

sgd 參數 詳解_論文筆記(三):TransH的詳解與實作

為margin值用于區分正例與負例。這個loss通過Mini-SGD進行訓練,需要強調的一點是, 訓練過程中,需要讓

sgd 參數 詳解_論文筆記(三):TransH的詳解與實作

盡可能的小,

sgd 參數 詳解_論文筆記(三):TransH的詳解與實作

盡可能大。

除此之外,在最小化loss function的過程中,模型還需要遵循三個軟限制原則:

sgd 參數 詳解_論文筆記(三):TransH的詳解與實作

公式一是保證所有實體的embedding都歸一化。

公式二則用于保證

sgd 參數 詳解_論文筆記(三):TransH的詳解與實作

sgd 參數 詳解_論文筆記(三):TransH的詳解與實作

正交垂直,保證dr在超平面上;

公式三則保證法向量的模為1。

為了展現上面三個限制條件,需要對loss function進行修改,加上對公式一和公式二的限制:

sgd 參數 詳解_論文筆記(三):TransH的詳解與實作

其中C表示軟限制的權重,它也是訓練過程中的一個超參數。

而公式三則是在每次Mini-SGD後,對

sgd 參數 詳解_論文筆記(三):TransH的詳解與實作

結果進行歸一化實作。

最後,TransH與TransE還有一點不同之處,在于負例的生成。現實中的知識圖譜不完整,需要減少假負例(即替換了一個節點後的三元組,恰好是整個知識圖譜中存在的另一個三元組)的出現,是以需要根據頭尾節點關系,進行節點替換,比如,對于一對多的關系,我們更多的替換頭結點而不是尾節點,這樣才能避免假負例出現的情況,具體的标準如下。

對于一個關系r, 我們首先要統計兩個數值,即這個關系每個頭結點平均對應的尾節點數,記做 tph;及這個關系每一個尾節點平均對應的頭節點數,記做 hpt 。最後通過公式

sgd 參數 詳解_論文筆記(三):TransH的詳解與實作

來表示頭結點沒被替換的機率,而尾節點替換的機率為 1-p。

相比于transE, TransH新增了很多參數,使得loss 在sgd中秋梯度變得更為複雜,下面簡單介紹下,各個參數梯度求解結果。首先Loss 可以分解為一下三個式子

sgd 參數 詳解_論文筆記(三):TransH的詳解與實作
sgd 參數 詳解_論文筆記(三):TransH的詳解與實作
sgd 參數 詳解_論文筆記(三):TransH的詳解與實作

其中Loss1的各參數求導如下

sgd 參數 詳解_論文筆記(三):TransH的詳解與實作
sgd 參數 詳解_論文筆記(三):TransH的詳解與實作
sgd 參數 詳解_論文筆記(三):TransH的詳解與實作
sgd 參數 詳解_論文筆記(三):TransH的詳解與實作
sgd 參數 詳解_論文筆記(三):TransH的詳解與實作
sgd 參數 詳解_論文筆記(三):TransH的詳解與實作
代碼實作

TransH代碼實作​github.com

也不知道自己咋想的,非要自己用手推梯度來實作模型,雖然也實作了,但是訓練用時有點久,後來使用Pytorch.nn.Embedding來重新實作了一遍,模型收斂的效果以及運作的速度明顯比自己完全造輪子好很多,是以前前後後實作了三個版本,有需要的可以到github上自取~