基础知识提要
欧式空间
欧几里得空间中的数据最显著的特征就是有规则的空间结构,比如图片是规则的正方形栅格,语音是规则的一维序列,文本也是规则的序列,这些数据结构能够用一维、二维的矩阵表示。
非欧数据
有很多数据不具备规则的空间结构,这些数据就称为非欧数据。比如推荐系统、电子交易、分子结构或者知识图谱。这些图谱结构每个节点连接都不尽相同,有的节点有三个连接,有的节点有两个连接,是不规则的数据结构。
表示非欧数据的方式之一就是图结构,图结构中的每个节点都有自己的特征信息,图谱中的每个节点还具有结构信息。
图结构
利用图结构来表示非欧数据就显得有效果许多,可以完整得囊括进实际情况中的信息。可是在采用了图结构存储信息之后,如何进行处理呢?如何对图结构做一个表征,使得后续能够计算呢?
一般的想法就是,邻接矩阵有N行,每行N维,节点有N个,每个节点有E维特征,那可不可以直接拼接起来,以节点为单位,对每个节点来说,就有N个邻接点特征(结构特征)以及E个自身特征(节点本身的信息特征)。
这样的表征想法有什么问题呢?首先参数太多了,并且复杂度是O(n);其次图还必须是固定的图,否则更换了图要进行表征, 节点数量都对不上了;其次还容易过拟合。
知识图谱
知识库是一个有向图,图中每一个节点表示的都是一个实体或者概念,每一条边都表示某种关系或者属性,一般是由三元组的形式进行存储。即(头部实体,relation,尾部实体)的形式。把一段话中蕴含的实体之间的关系都抽取出来形成这样一个知识库,也就完成了知识图谱的构建。
GCN
一个图中节点的信息分为两部分,一部分是结构信息,一部分是其自身信息。结构信息是由邻接矩阵体现的。
而卷积神经网络的提出最初也是为了缓解全连接神经网络直接应用于结构化数据中存在的问题,例如不能参数共享,不能随着数据结构的变化而变化,维度和输入特征相关等问题。
由此,图卷积神经网络就是把类似的核心思想吸取过来解决图结构的特征提取问题。
首先给出如下公式(GCN最常见形式)
h
i
(
l
+
1
)
=
σ
(
∑
j
∈
N
i
g
(
h
i
l
,
h
j
l
)
)
\mathbf{h}_{i}^{(l+1)}=\sigma\left(\sum_{j \in N_{i}} g\left(\mathbf{h}_{i}^{l}, \mathbf{h}_{j}^{l}\right)\right)
hi(l+1)=σ⎝⎛j∈Ni∑g(hil,hjl)⎠⎞
其中
h
i
l
h_i^l
hil代表顶点
v
i
v_i
vi在第l层的特征表示,
σ
\sigma
σ表示激活函数例如relu,
N
i
N_i
Ni表示传递消息给顶点
v
i
v_i
vi的所有结点,通常是顶点
v
i
v_i
vi的入边结点。g表示聚合特征的函数,有多种表现形式。
总的来说,GCN接受顶点所有的入边传递过来的上一层其他顶点的特征消息,做出相应的变换,并将其加和起来再非线性一下作为本层的顶点特征,也就是经过提取之后的特征。
把上面的表达式在展开写,用最常见的形式,就变成了下面的形式
h
i
(
l
+
1
)
=
σ
(
W
0
l
h
i
l
+
∑
j
∈
N
l
1
c
i
,
j
w
1
l
h
j
l
)
\mathbf{h}_{i}^{(l+1)}=\sigma\left(\mathbf{W}_{0}^{l} \mathbf{h}_{i}^{l}+\sum_{j \in N_{l}} \frac{1}{c_{i, j}} \mathbf{w}_{1}^{l} \mathbf{h}_{j}^{l}\right)
hi(l+1)=σ⎝⎛W0lhil+j∈Nl∑ci,j1w1lhjl⎠⎞
第一项是自己的特征,第二项是其他节点的特征,c是归一化因子。也可以理解为第一项是所有节点发射信息,第二项是所有节点接受信息。这里的W与节点无关,只和层数有关,也就是说在某一层,所有的节点都共享一种信息提取方式。
由上面的公式可见GCN具有以下的性质:
- 局部参数共享
- 感受域正比于层数
- 层级结构,一层比一层抽象,高级
- 非线性变换(增加模型表达能力)
- 端对端训练(只要给节点标记即可,自适应地汇总结构信息和自身信息)
模型部分
这篇文章提出的模型很简单,总结为下面的表达式
h
i
(
l
+
1
)
=
σ
(
w
0
l
h
i
l
+
∑
r
∈
R
∑
j
∈
N
i
r
1
c
l
,
r
w
r
l
h
j
l
)
\mathbf{h}_{i}^{(l+1)}=\sigma\left(\mathbf{w}_{0}^{l} \mathbf{h}_{i}^{l}+\sum_{r \in R} \sum_{j \in N_{i}^{r}} \frac{1}{c_{l, r}} \mathbf{w}_{r}^{l} \mathbf{h}_{j}^{l}\right)
hi(l+1)=σ⎝⎛w0lhil+r∈R∑j∈Nir∑cl,r1wrlhjl⎠⎞
其中 h i l h_i^l hil代表顶点 v i v_i vi在第l层的特征表示, σ \sigma σ表示激活函数例如relu, N i r N_i^r Nir表示传递消息给顶点 v i v_i vi并且和i之间的关系为r的所有节点,R是边的关系集合。总的来说,GCN接受顶点的所有入边传递来的上一层顶点特征消息,并根据边的关系不同做相应的变换,并将其加和起来,最后通过一个激活函数作为本层的输出。
这里第l层的权重 W r l W_r^l Wrl会因为关系r的变化而变化,那如果每一个关系都有一种表示(有几千几万种关系),这样不仅没法得到充分的训练,还有可能导致过拟合。所以需要通过一些方法来减少参数量。那么如何减少参数量呢?
基分解
可以通过基分解来简化
W
r
l
W_r^l
Wrl,也就是说,认为
W
r
l
W_r^l
Wrl是由一组基(线性无关的向量)通过线性组合而形成的矩阵。即
w
r
l
=
∑
b
=
1
b
a
r
,
b
l
v
b
l
\mathrm{w}_{r}^{l}=\sum_{b=1}^{b} a_{r, b}^{l} \mathrm{v}_{b}^{l}
wrl=b=1∑bar,blvbl
并且组合后得出的 W r l W_r^l Wrl仅和关系r相关。
基函数分解可以看作是不同关系类型之间权重有效共享的一种形式。
块对角分解
块对角分解可以看作是每个关系类型的权重矩阵上的稀疏化
W
r
l
=
diag
(
Q
1
,
r
l
,
…
,
Q
B
,
r
L
)
\mathbf{W}_{r}^{l}=\operatorname{diag}\left(\mathbf{Q}_{1, r}^{l}, \ldots, \mathbf{Q}_{B, r}^{L}\right)
Wrl=diag(Q1,rl,…,QB,rL)
把权重矩阵
W
r
l
W_r^l
Wrl认为是分块对角阵,其中每一块的维度为
Q
B
,
r
l
∈
R
d
l
+
1
B
×
d
l
B
\mathbf{Q}_{B, r}^{l} \in \mathbb{R}^{\frac{d^{l+1}}{B} \times \frac{d^{l}}{B}}
QB,rl∈RBdl+1×Bdl
总结
两种分解都减少了拟合多关系数据所需的参数数量。同时,可以减轻对长尾关系的过度拟合,因为参数的更新在长尾关系和频繁关系之间是共享的(基分解是这样,块分解不是)。
应用
可以解决节点预测和边预测问题。边预测问题中,通过R-GCN得到每个节点的表示e,之后通过下面的函数来预测三元组成立的概率(也就是边预测)
f
(
s
,
r
,
o
)
=
e
s
T
R
r
e
o
f(s, r, o)=\mathbf{e}_{s}^{T} \mathbf{R}_{r} \mathbf{e}_{o}
f(s,r,o)=esTRreo
然后得到目标函数
l
=
∑
(
s
,
r
,
o
,
y
)
∈
ζ
y
log
sigmoid
(
f
(
s
,
r
,
o
)
)
+
(
1
−
y
)
log
(
1
−
sigmoid
(
f
(
s
,
r
,
o
)
)
)
l=\sum_{(s, r, o, y) \in \zeta} y \log \operatorname{sigmoid}(f(s, r, o))+(1-y) \log (1-\operatorname{sigmoid}(f(s, r, o)))
l=(s,r,o,y)∈ζ∑ylogsigmoid(f(s,r,o))+(1−y)log(1−sigmoid(f(s,r,o)))
也就是是和否的二分类问题。
总结一下这篇文章就是提出了一种面向关系图的图卷积方法。