1 摘要
1.1 简介
文章提出了一种名为超图神经网络的框架,用于高维数据的表示学习。
该方法英文称呼为 Hypergraph Neural Networks,简写为 HGNN。
1.2 问题描述
- 传统的 GNN 是用于低维数据的表示学习的,没有办法对高维复杂数据进行建模。
- 超图可以对复杂数据进行建模,挖掘数据中的高维关系。
- 但是对超图进行表示学习,这仍没有解决方案。
因此,文章作者提出了 HGNN 方法/框架来解决这一问题。
2 超图
2.1 图和超图对比
图和超图最大的区别在于:图中边的度为 2,而超图中边的度可以是任意值(原文说了一个词,特别好:degree-free)。
文章中给出了一个示例:
上面部分,是一个图(Graph),下面部分是这个图对应的邻接矩阵(adjacency matrix)。
补充:帮助忘记怎么得到邻接矩阵的小伙伴回忆一下,加深印象。
- 图中的圆圈表示顶点,不同的颜色对不同的顶点加以区分;短线表示边,不同的颜色对不同的边加以区分。图中共有 8 个顶点,记为 { n 1 , n 2 , n 3 , … , n 8 } \{n_1,n_2,n_3, \dots, n_8\} {n1,n2,n3,…,n8};共有 6 条边。
- 每个顶点,如 n 1 n_1 n1,可以连接其他 7 个顶点以及自身,共 8 个顶点。将顶点 n 1 n_1 n1 连接其他顶点的情况排成一行,那么 8 个顶点连接情况就是 8 行,因此就组成了 8 行 8 列的矩阵(8*8)。
- 如果顶点 n i n_i ni 和顶点 n j n_j nj 相连,那么邻接矩阵的第 i i i 行第 j j j 列位置 ( i , j ) (i, j) (i,j) 上的元素值应该为 1;否则为 0。(前提:所有的顶点按顺序排列。)
- 这个矩阵的第一行第一个元素表示顶点 n 1 n_1 n1 连接顶点 n 1 n_1 n1 的情况,第一行的第二个元素表示顶点 n 1 n_1 n1 连接顶点 n 2 n_2 n2 的情况;其余的以此类推。
- 观察图, n 1 n_1 n1(蓝色)连接了 n 5 n_5 n5(灰色)和 n 6 n_6 n6(青色),因此第一行的第五个元素、第六个元素值应该为 1,第一行的其他位置元素值为 0。矩阵的其他位置的值,采取同样的策略赋值。
- 对于无向图,邻接矩阵是对称的;对于有向图,邻接矩阵一般不对称。
原文中说有多组超边(Hyperedge group 1/2/3/…/N),我理解的应该多种输入数据的形式。
观察上面这个超图,顶点和上面图中的顶点,是一模一样的。常用 V V V 表示顶点集合,由此 V = { n 1 , n 2 , … , n 8 } V=\{n_1,n_2,\dots, n_8\} V={n1,n2,…,n8}。超边和图中的边就稍微有些不同了。上面提到,图中有 6 条边,颜色对边进行了区分。超图这里也是用颜色对超边进行了区分。
补充:作者牛逼。这图的审美,真的太棒了。
好了,话说回来,不同的超边使用了不同的颜色。超图中有三种颜色的超边,黑色、红色、深绿色,分别用符号 e 1 e_1 e1、 e 2 e_2 e2、 e 3 e_3 e3 来表示。
构建关联矩阵(incidence matrix):行表示顶点,8 个顶点, n 1 n_1 n1、 n 2 n_2 n2、 … \dots …、 n 8 n_8 n8;列表示超边,3 条超边, e 1 e_1 e1、 e 2 e_2 e2、 e 3 e_3 e3。如果某一个顶点属于某一条超边,则关联矩阵对应位置的值为 1;否则为 0。
- 超边 e 1 e_1 e1 包含顶点 n 2 n_2 n2、 n 4 n_4 n4、 n 8 n_8 n8,所以 ( n 2 , e 1 ) (n_2, e_1) (n2,e1)、 ( n 4 , e 1 ) (n_4, e_1) (n4,e1)、 ( n 8 , e 1 ) (n_8, e_1) (n8,e1) 位置上的值为 1, e 1 e_1 e1 列其他位置上的值为 0。
- 超边 e 2 e_2 e2 包含顶点 n 1 n_1 n1、 n 6 n_6 n6、 n 7 n_7 n7,所以 ( n 1 , e 2 ) (n_1, e_2) (n1,e2)、 ( n 6 , e 2 ) (n_6, e_2) (n6,e2)、 ( n 7 , e 2 ) (n_7, e_2) (n7,e2) 位置上的值为 1, e 2 e_2 e2 列其他位置上的值为 0。
- 超边 e 3 e_3 e3 包含顶点 n 3 n_3 n3、 n 5 n_5 n5、 n 7 n_7 n7,所以 ( n 3 , e 3 ) (n_3, e_3) (n3,e3)、 ( n 5 , e 3 ) (n_5, e_3) (n5,e3)、 ( n 7 , e 3 ) (n_7, e_3) (n7,e3) 位置上的值为 1, e 3 e_3 e3 列其他位置上的值为 0。
- 不知道大家发现没有,顶点 n 7 n_7 n7 在两条超边 e 2 e_2 e2、 e 3 e_3 e3 都存在。
同理,可以得到第
N
N
N 种数据形式下的关联矩阵
H
N
H_N
HN。
然后将这
N
N
N 个关联矩阵
{
H
1
,
H
2
,
…
,
H
N
}
\{H_1, H_2, \dots, H_N\}
{H1,H2,…,HN} 拼接起来,得到了最后的
H
H
H。也即是说:
H
=
⋃
i
=
1
N
H
i
.
H = \bigcup^N_{i=1} H_i.
H=i=1⋃NHi.
解读:一般的数据超图只有一个,也即是说只有一个 H H H。而论文中提到了 N N N 个 H i H_i Hi 进行拼接得到一个 H H H,应该是为了更好地利用多模态的数据。即考虑了多种数据的形式。
多模态数据 —— Multi-modal data。
2.2 超图性质
如果想详细了解这些知识,可以参看我的另外一篇博客:超图(Hypergraph)基础——论文细品——《Learning with hypergraphs: Clustering, classification, and embedding》
符号 | 含义 |
---|---|
G = ( V , E , W ) \mathcal{G}=(\mathcal{V}, \mathcal{E}, \mathbf{W}) G=(V,E,W) | 超图 |
V \mathcal{V} V | 顶点集合 |
E \mathcal{E} E | 超边集合 |
W \mathbf{W} W | 超边权重组成的对角矩阵 |
v ∈ V v \in \mathcal{V} v∈V | 顶点集中的一个顶点 |
e ∈ E e \in \mathcal{E} e∈E | 超边集中的一条超边 |
H \mathbf{H} H | 关联矩阵 |
h ( v , e ) h(v, e) h(v,e) | 关联矩阵中顶点 v v v 对超边 e e e 的元素值 |
d ( v ) d(v) d(v) | 顶点 v v v 的度 |
δ ( e ) \delta(e) δ(e) | 超边 e e e 的度 |
D v \mathbf{D}_v Dv | 顶点度组成的对角矩阵 |
D e \mathbf{D}_e De | 超边度组成的对角矩阵 |
-
关联矩阵
H \mathbf{H} H 是超图 G \mathcal{G} G 的关联矩阵,其中每个元素可以表示为:
h ( v , e ) = { 1 , if v ∈ e , 0 , if v ∉ e . h(v, e) = \begin{cases} 1, \text{ if } v \in e, \\ 0, \text{ if } v \not \in e. \end{cases} h(v,e)={1, if v∈e,0, if v∈e. -
顶点度
对于顶点集中的任意顶点 v ∈ V v \in \mathcal{V} v∈V,其度表示为:
d ( v ) = ∑ e ∈ E w ( e ) h ( v , e ) . d(v) = \sum_{e \in \mathcal{E}} w(e) h(v, e). d(v)=e∈E∑w(e)h(v,e). -
超边度
对于超边集中的任意超边 e ∈ E e \in \mathcal{E} e∈E,其度表示为:
δ ( e ) = ∑ v ∈ V h ( v , e ) . \delta(e) = \sum_{v \in \mathcal{V}} h(v, e). δ(e)=v∈V∑h(v,e). -
顶点度对角矩阵
进一步地,使用 D e \mathbf{D}_e De 表示所有超边的度组成的对角矩阵。 -
超边度对角矩阵
进一步地,使用 D v \mathbf{D}_v Dv 表示所有顶点的度组成的对角矩阵。
3 HGNN
3.1 问题
考虑超图中顶点的分类问题,那么在超图中顶点标签应该是平滑的。
批注:原文是这么说的,我不太理解。
"Here let us consider the node(vertex) classification problem on hypergraph, where the node labels should be smooth on the hypergraph structure. "
那么问题就进行了转化,变成了如下形式:
arg
min
f
{
R
e
m
p
(
f
)
+
Ω
(
f
)
}
,
\arg \min_{f} \{ \mathcal{R}_{emp} (f) + \Omega(f) \},
argfmin{Remp(f)+Ω(f)},
其中
Ω
(
f
)
\Omega(f)
Ω(f) 是超图正则项,
R
e
m
p
(
f
)
\mathcal{R}_{emp}(f)
Remp(f) 表示监督经验损失,
f
(
⋅
)
f(\cdot)
f(⋅) 表示分类方法。
解读:机器学习中常用的优化函数形式,损失(误差)+ 正则项。
进一步地,正则项
Ω
(
f
)
\Omega(f)
Ω(f) 定义为:
Ω
(
f
)
=
1
2
∑
e
∈
E
∑
{
u
,
v
}
∈
V
w
(
e
)
h
(
u
,
e
)
h
(
v
,
e
)
δ
(
e
)
(
f
(
u
)
d
(
u
)
−
f
(
v
)
d
(
v
)
)
2
.
\Omega(f) = \frac{1}{2} \sum_{e \in \mathcal{E}} \sum_{\{u, v\} \in \mathcal{V}} \frac{w(e)h(u, e)h(v,e)}{\delta(e)} \left ( \frac{f(u)}{\sqrt{d(u)}} - \frac{f(v)}{\sqrt{d(v)}} \right )^2.
Ω(f)=21e∈E∑{u,v}∈V∑δ(e)w(e)h(u,e)h(v,e)(d(u)f(u)−d(v)f(v))2.
记
θ
=
D
v
−
1
/
2
H
W
D
e
−
1
H
T
D
v
−
1
/
2
,
\theta = \mathbf{D}^{-1/2}_v \mathbf{HW}\mathbf{D}^{-1}_e \mathbf{H}^{\rm{T}} \mathbf{D}^{-1/2}_v,
θ=Dv−1/2HWDe−1HTDv−1/2,
Δ
=
I
−
Θ
.
\mathbf{\Delta} = \mathbf{I - \Theta}.
Δ=I−Θ.
Δ
\mathbf{\Delta}
Δ 是一个半正定矩阵(positive semi-definite),通常称为 超图拉普拉斯。
进一步地,正则项可以重写为:
Ω
(
f
)
=
f
T
Δ
.
\Omega(f) = f^{\rm{T}} \mathbf{\Delta}.
Ω(f)=fTΔ.
3.2 算法框架
解读:
- 输入数据为 m m m 种类型 ,也即是多模态数据。
- 每种数据类型分为训练数据和测试数据。每种数据类型都是单独划分的。
- 为每种数据类型构建/生成一组超边,共计 m m m 组。
- 将 m m m 组超边合并起来,具体操作方法是关联矩阵。
- 从输入数据中的到节点的特征,
- 将超图和节点特征作为输入,经过 HGNN 超图卷积,更新节点特征表示。
- 最后的节点特征来计算标签,实现分类的目的。
3.3 实现
在论文的视觉对象分类任务中, N N N 个视觉对象数据的特征可以表示为 X = [ x 1 , … , x n ] T \mathbf{X} = [\mathbf{x}_1, \dots, \mathbf{x}_n]^{\rm{T}} X=[x1,…,xn]T。
解读:我理解的是有 N N N 个输入数据,每个数据的特征可以用 n n n 维向量来表示。
思考许久,仍然不知道这个是怎么实现 K K K 个最近邻的欧氏距离计算的。和研究人工智能领域的小伙伴讨论过后,一致得出一个结论:论文中写错了, X = [ x 1 , … , x n ] T \mathbf{X} = [\mathbf{x}_1, \dots, \mathbf{x}_n]^{\rm{T}} X=[x1,…,xn]T 是不正确,正确的应该是 X = [ x 1 , … , x N ] T \mathbf{X} = [\mathbf{x}_1, \dots, \mathbf{x}_N]^{\rm{T}} X=[x1,…,xN]T。
修改过后
X = [ x 1 … x N ] T = [ x 1 … x N ] \begin{aligned} \mathbf{X} &= \begin{bmatrix}\mathbf{x}_1 & \dots & \mathbf{x}_N \end{bmatrix} ^{\rm{T}} \\ &= \begin{bmatrix} \mathbf{x}_1 \\ \dots \\ \mathbf{x}_N \\ \end{bmatrix} \\ \end{aligned} X=[x1…xN]T= x1…xN
那么此时,计算任意两个视觉对象之间的欧氏距离 d ( x i , x j ) d(\mathbf{x}_i, \mathbf{x}_j) d(xi,xj) 就非常合理了。通过计算每个 x i \mathbf{x}_i xi 与其他 x j \mathbf{x}_j xj 之间的欧氏距离,来寻找 K K K 个最近邻居。这个对象本身以及它的 K K K 个最近邻居组成了一条超边,该超边包含 K + 1 K+1 K+1 个顶点,这条超边对应到关联矩阵中有 K + 1 K+1 K+1 个位置的值为 1。这样,上下文形成了紧密的逻辑联系。原文描述的是两个特征之间的欧氏距离,这个点非常奇怪。如果按照原文的说法,是无法串联到一块儿的。所以我认为原文这里有一些小问题。
以上是我自己的粗浅理解,不一定是正确的,大家看个乐子就好。
接着,用欧氏距离函数来计算两两特征之间的距离 d ( x i , x j ) d(\mathbf{x}_i, \mathbf{x}_j) d(xi,xj)。这个距离被用于超图的构建过程中。
补充:欧氏距离
对于两个点 p p p 和 q q q,在 n n n 维空间中的坐标分别是 ( p 1 , p 2 , … , p n ) (p_1, p_2, \dots, p_n) (p1,p2,…,pn) 和 q 1 , q 2 , … , q n ) q_1, q_2, \dots, q_n) q1,q2,…,qn),两点之间的欧氏距离 d ( p , q ) d(p, q) d(p,q) 表示为
d ( p , q ) = ( p 1 − q 1 ) 2 + ( p 2 − q 2 ) 2 + ⋯ + ( p n − q n ) 2 . d(p, q) = \sqrt{(p_1-q_1)^2 + (p_2-q_2)^2 + \dots + (p_n-q_n)^2}. d(p,q)=(p1−q1)2+(p2−q2)2+⋯+(pn−qn)2.
超图构建 过程
- 每个顶点表示一个视觉对象;
- 每条超边连接一个顶点和它的 K K K 个最近邻居。也即是说,每条超边包含 ( K + 1 ) (K+1) (K+1) 个顶点。
- 因为有 N N N 个视觉对象,每个对象是一个顶点,因此有 N N N 个顶点;每个顶点都会对应一条超边,因此有 N N N 条超边,并且每条超边有 ( K + 1 ) (K+1) (K+1) 个顶点。
- 体现到超图的关联矩阵上,就是 H \mathbf{H} H 是一个 N × N N \times N N×N 矩阵 —— H ∈ R N × N \mathbf{H} \in \mathbb{R}^{N \times N} H∈RN×N,其中有 N × ( K + 1 ) N \times (K+1) N×(K+1) 个位置的元素值为 1,其他元素为 0,
解读:我就简单解释一下最后一条吧。
(1) 关联矩阵 H \mathbf{H} H,以矩阵的形式展示了顶点 V \mathcal{V} V 和超边 E \mathcal{E} E 之间的关系。
假设 V \mathcal{V} V 中有 m m m 个顶点, E \mathcal{E} E 中有 n n n 条超边。翻译翻译,就是 ∣ V ∣ = m \lvert \mathcal{V} \rvert =m ∣V∣=m, ∣ E ∣ = n \lvert \mathcal{E} \rvert =n ∣E∣=n。那么 H \mathbf{H} H 就是一个 m × n m \times n m×n 的矩阵。翻译翻译,就是 H ∈ R m × n \mathbf{H} \in \mathbb{R}^{m \times n} H∈Rm×n。
因为 HGNN 的超图中,有 N N N 个顶点,有 N N N 条超边,因此 H \mathbf{H} H 就是一个 N × N N \times N N×N 的矩阵。翻译翻译,就是 H ∈ R N × N \mathbf{H} \in \mathbb{R}^{N \times N} H∈RN×N。
(2) 那么后面的 N × ( K + 1 ) N \times (K +1) N×(K+1) 个元素值为 1 又是怎么得到的呢?
选择任意一条超边,体现在 H \mathbf{H} H 中就是任意一列。然后这条超边包含了 ( K + 1 ) (K+1) (K+1) 个顶点,体现在 H \mathbf{H} H 中就是这一列有 ( K + 1 ) (K+1) (K+1) 个元素的值为 1( H \mathbf{H} H 的定义)。那么有 N N N 条超边,所以就会有 N × ( K + 1 ) N \times (K+1) N×(K+1) 个元素值为 1。自然,剩下的元素值就为 0 咯。
顶点分类 过程
在超图构建完成后,得到
H
\mathbf{H}
H 和
D
e
\mathbf{D}_e
De,就可以进行神经网络的训练了。
HGNN 使用的是两层网络,使用 softmax 函数来预测标签,交叉熵损失用作反向传播来更新参数集
Θ
\mathbf{\Theta}
Θ。
未完待续……