Tensor神經網絡進行知識庫推理

本文是我關於論文《Reasoning With Neural Tensor Networks for Knowledge Base Completion》的學習筆記。算法

1、算法簡介

網絡的結構爲:網絡

$$g(e_1,R,e_2)=u^T_Rf(e_1^TW_R^{[1:k]}e_2+V_R\begin{bmatrix} e_1 \\ e_2 \\ \end{bmatrix}+b_R)~~~~~~~~~~~(1)$$函數

其中$g$爲網絡的輸出,也即對該關係$R$ 的打分。$e_1$,$e_2$爲兩個實體的特徵向量,維度都爲$d$,初始化能夠是隨機值,也能夠是經過第三方工具訓練後的向量,在訓練中還需不斷調整。工具

右邊括號中扣除第一部分(Tensor部分),整個網絡就是一典型的三層bp網絡。$f=tanh$是隱層激活函數,輸出層激活函數爲$pureline$,第一層權重爲$V$,偏置爲$b$,第二層權重爲$u$。學習

右括號第一項爲Tensor項。$W_R^{[1:k]}\in R^{d\times d \times k}$是張量,每一個$W_R^i$是$d\times d$矩陣,稱做一個$slice$,網絡中共有$k$個$slice$,對應神經網絡隱層節點個數。$h_i=[e_1^TW_R^{[1:k]}e_2]_i=e_1^TW_R^i e_2$。spa

論文中給出的對應圖示爲:blog

利用這個網絡能夠進行知識庫推理學習。給定訓練樣本$(e_i,R_k,e_j)$。實體特徵已給定,對應輸入;關係類型$R$ 對應訓練後的網絡參數,即網絡權重和張量值的集合,每一個關係$R$ 對應一個參數集合,樣本中含有多個關係。內存

訓練時要構建負例樣本,構建的方法爲從正例中隨機把一個實體替換掉。最終的損失函數爲:it

$$J(\Omega)=\sum^N_{i=1}\sum^C_{c=1}max(0,1-g(T^{(i)})+g(T_c^{(i)}))+\lambda ||\Omega||^2_2~~~~~~~~~~~~~(2)$$io

其中$\Omega$是全部參數的集合${u,W,V,b,E}$。第1,3,4是通常的bp網絡的權重參數,最後一個是實體的特徵向量,是輸入,第二個是張量。$T_c^{(i)}$是第$i$個樣本對應的反例。

根據損失函數算出上述參數的偏導數,按通常的梯度降低法或L-BFGS等算法訓練網絡,訓練出來的一個參數集對應一個關係。

文中給出的對應圖示爲:

一個關係對是一個命題,咱們要斷定一個命題的置信度。把實體向量(已知)傳入具體網絡(關係參數已知)輸出的結果即爲置信度。

 

2、等價變換

咱們觀察公式$e_1^T\times W \times e_2$,記第一個特徵向量$e_1$爲$x$,第二個爲$y$,皆爲列向量(本文中全部向量如未說明,皆爲列向量)。該公式改寫爲:

$$f(x,y;W)=x^T\times W \times y=\sum W\otimes (x\times y^T)~~~~~~~~~~~~~(3)$$

其中$\otimes$圈乘符號,兩矩陣對應元素相乘做爲新矩陣,$\times$爲矩陣叉乘,$\sum$對矩陣的全部元素求和。

此函數可等價表示爲:

$$f(x,y;W)=\sum_{i,j} w_{ij}x_i y_j$$

每一個矩陣$W$對應一個$slice$,對應函數用$f_i$表示,共$k$個。

此時咱們利用一個技巧,把矩陣$W$壓扁,拉長成一個向量$s$,$s=(w_{1,1},w_{2,1},...,w_{k,k})^T;$而後把矩陣$x\times y^T$也壓扁,拉長成一個向量$z$,$z=(x_1y_1,x_2y_1,...,x_ky_k)^T$。保持原矩陣元素不變,而後二維降成一維。矩陣和拉長後的向量之間能夠相互轉換,生成網絡結構時咱們把矩陣拉長成爲向量,在訓練時計算梯度要把向量還原爲矩陣。

砸扁拉長以後,上述公式變爲:

$$f(x,y;W)=s^Tz$$

很顯然的是,$z$做爲兩個原始向量的$x$,$y$的二次項$x_iy_j$集合,$s$是二次項係數,函數$f$是關於$x,y$的二次多項式。

每一個片(slice)對應一個矩陣記爲$W_i$,忽略關係下標$R$;對應一個長向量$s_i$;對應一個函數$f_i$,全部片的向量組成一個矩陣:

$$S=\begin{bmatrix} s_1^T \\ s_2^T \\ ...\\s_k^T\end{bmatrix}$$

這個矩陣$S$我稱之爲張量矩陣,與張量$W_R^{[1:k]}$等價,此時公式$(1)$中的張量項表示爲:

$$e_1^TW_R^{[1:k]}e_2=\begin{bmatrix} f_1 \\ f_2 \\ ...\\f_k\\ \end{bmatrix}=S\times z$$

到此爲止,忽略關係下標,咱們重寫公式$(1)$所表示的網絡結構爲:

$$g=u^T(\begin{bmatrix} V \\ S \\\end{bmatrix}\times \begin{bmatrix} x \\ y \\ z\\\end{bmatrix}+b)~~~~~~~~~~~~~(4)$$

這就是一個經典的三層bp神經網絡了,輸入層爲$x,y$以及它們的二次向量$z$,第一層權重矩陣爲原權重矩陣$V$與張量矩陣$S$的合體。

等價變換以後,咱們實現這個模型就變得方便多了!

 

3、引伸應用

經過修改該網絡的輸入內容,損失函數,能夠做爲推薦系統的模型,特徵訓練等其它方面的應用。

 

4、思考

該模型的本質是在經典的bp神經網絡的輸入層中加入了二次項,從而大大的提升了推斷的準確率。

若是把學習的數據當作一個物體的話,傳統的bp神經網絡看到的只是物體的邊界,而後根據邊界的線性特徵進行學習,對物體的內部特徵一無所知。也即傳統網絡是基於一維的數據進行學習,在該模型中,加入了輸入數據的二次項,等同於把物體進行2維展開,看過《三體》的應該對其中把原子進行高維展開而後在上面雕刻電路圖的宏大場景記憶猶新。物體從1維展開爲2維,其信息量應該從$I^1\rightarrow I^2$,信息以維度級別暴增。

如此看來,咱們日常的專志於增長樣本的特徵個數,只是在同維度的範圍內增長信息量,並無改變維度的層次。

以此類推,咱們能夠在此基礎上繼續展開到3維(3次項),4維(4次項),。。。,固然,計算量與內存也是須要解決的問題。

或者是,咱們不去改變輸入信息的維度,你展開,或者不展開,數據都在那裏,蘊含的信息都沒有變。咱們不改變輸入,而改變咱們的大腦(網絡)的學習模式。結構決定性質,目前的神經網絡的全部節點都是加和節點,咱們或許能夠擴展一下,增長一類新的節點,叫乘和節點,這種節點並非對全部輸入進行加權加和,而是加權相乘即$\sum w_ix_i \rightarrow \prod (w_i+x_i)$。直覺上來講,這應該是跟本文中的模型等價的,這兩種模型能夠相互轉換。

相關文章
相關標籤/搜索