加入收藏 | 设为首页 | 会员中心 | 我要投稿 河北网 (https://www.hebeiwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 运营 > 正文

怎样操作图卷积收集对图举办深度进修(上)

发布时间:2020-01-26 22:41:09 所属栏目:运营 来源:站长网
导读:副问题#e# 基于图的呆板进修是一项坚苦的使命,由于图的布局很是伟大,并且信息量也很大。这篇文章是关于怎样用图卷积收集(GCNs)对图举办深度进修的系列文章中的第一篇,GCNs是一种强盛的神经收集,旨在直接处理赏罚图并操作其布局信息。 在这篇文章中,我将
副问题[/!--empirenews.page--]

基于图的呆板进修是一项坚苦的使命,由于图的布局很是伟大,并且信息量也很大。这篇文章是关于怎样用图卷积收集(GCNs)对图举办深度进修的系列文章中的第一篇,GCNs是一种强盛的神经收集,旨在直接处理赏罚图并操作其布局信息。

在这篇文章中,我将先容GCNs,并举例声名怎样通过GCN的潜匿层撒播信息。我们将看到GCN怎样聚合来自前几层的信息,以及该机制怎样天生图中节点的有效特性暗示。

什么是图卷积收集?

GCNs是一种很是强盛的用于图形呆板进修的神经收集系统布局。究竟上,它们很是强盛,纵然是随机启动的2层GCN也可以天生收集中节点的有效特性暗示。下图声名白由这种GCN发生的收集中每个节点的二维暗示。请留意,纵然没有任何实习,收集中节点的相对靠近度也保存在二维暗示中。

怎样操作图卷积收集对图举办深度进修(上)

矫正式地说,图卷积收集(GCN)是一种对图举办运算的神经收集。给定一个图G=(V,E),GCN作为输入

  • 一个输入特性矩阵N×F特性矩阵X,个中N是节点数,F是每个节点的输入特性数以及
  • 图布局的N×N矩阵暗示,如[1]的连接矩阵A

因此,GCN中的潜匿层可以被写为H= f (H,A)),个中 H= X和f是一个撒播[1]。每一层H对应于一个N×F特征矩阵,个中每一行是一个节点的特性暗示。在每一层,行使撒播法则f将这些特性聚合起来形成下一层的特性。这样,特性在每一层变得越来越抽象。在这个框架中,GCN的变体只在撒播法则f[1]的选择上有所差异。

一个简朴的撒播法则

最简朴的撒播法则之一是[1]:

f(H,A)=σ(AHW)

个中W是第i层的权重矩阵,σ长短线性激活函数,如ReLU函数。权重矩阵的维数为F × F;换句话说,权重矩阵的第二维度的巨细抉择了下一层的特性数。假如您认识卷积神经收集,则此操纵相同于过滤操纵,由于这些权重在图中的节点之间共享。

简化

让我们从最简朴的条理来研究撒播法则。若是

i=1,s.t.f是输入特性矩阵的函数,

σ是恒等式函数,而且

选择重量s.t.AHW=AXW=AX。

一个简朴的图形示例

作为一个简朴的例子,我们将行使下图:

怎样操作图卷积收集对图举办深度进修(上)

一个简朴的有向图。

下面是它的numpy连接矩阵暗示。

A = np.matrix([
    [0, 1, 0, 0],
    [0, 0, 1, 1],
    [0, 1, 0, 0],
    [1, 0, 1, 0]],
    dtype=float
)

接下来,我们必要成果!我们按照节点的索引为每个节点天生2个整数特性。这样便于往后手动确认矩阵计较。

In [3]: X = np.matrix([
            [i, -i]
            for i in range(A.shape[0])
        ], dtype=float)
        X

Out[3]: matrix([
           [ 0.,  0.],
           [ 1., -1.],
           [ 2., -2.],
           [ 3., -3.]
        ])

应用撒播法则

好吧!我们此刻有一个图,它的连接矩阵a和一组输入特性X。让我们看看当我们应用撒播法则时会产生什么:

In [6]: A * X
Out[6]: matrix([
            [ 1., -1.],
            [ 5., -5.],
            [ 1., -1.],
            [ 2., -2.]]

产生了什么事?每个节点(每一行)的暗示此刻是其相邻特性的总和!换句话说,图卷积层将每个节点暗示为其邻域的荟萃。我勉励你本身搜查一下计较功效。留意,在这种环境下,假如存在V到N的边,则节点N是节点V的邻人。

哦哦!题目就在面前!

你也许已经发明白题目:

节点的聚合暗示不包罗其自身的成果!该暗示是邻人节点特性的聚合,因此只有具有自轮回的节点才会在聚合中包括本身的特性。[1]

具有大角度的节点在其特性暗示中将具有大值,而具有小角度的节点将具有小值。这也许导致梯度消散或爆炸[1,2],但对付凡是用于实习此类收集且对每个输入特性的比例(或取值范畴)敏感的随机梯度降落算法也是有题目的。

在下面,我将别离接头这些题目。

添加Self-Loops

要办理第一个题目,只需向每个节点添加一个self-loop[1,2]。在实践中,这是通过在应用撒播法则之前将单元矩阵I添加到连接矩阵A来实现的。

In [4]: I = np.matrix(np.eye(A.shape[0]))
        I

Out[4]: matrix([
            [1., 0., 0., 0.],
            [0., 1., 0., 0.],
            [0., 0., 1., 0.],
            [0., 0., 0., 1.]
        ])

In [8]: A_hat = A + I
        A_hat * X
Out[8]: matrix([
            [ 1., -1.],
            [ 6., -6.],
            [ 3., -3.],
            [ 5., -5.]])

因为节点此刻是其自身的邻人,因此在总结其邻人的特性时会包括该节点的自身特性!

类型化特性暗示

通过将连接矩阵A与反度矩阵D相乘,可以通过节点度对特性暗示举办类型化[1]。因此,我们的简化撒播法则如下所示:

f(X,A) =DAX

让我们看看会产生什么。起首计较次数矩阵。

In [9]: D = np.array(np.sum(A, axis=0))[0]
        D = np.matrix(np.diag(D))
        D
Out[9]: matrix([
            [1., 0., 0., 0.],
            [0., 2., 0., 0.],
            [0., 0., 2., 0.],
            [0., 0., 0., 1.]
        ])

在应用法则之前,让我们看看在转换连接矩阵之后会产生什么。

之前

A = np.matrix([
    [0, 1, 0, 0],
    [0, 0, 1, 1],
    [0, 1, 0, 0],
    [1, 0, 1, 0]],
    dtype=float
)

之后

In [10]: D**-1 * A
Out[10]: matrix([
             [0. , 1. , 0. , 0. ],
             [0. , 0. , 0.5, 0.5],
             [0. , 0.5, 0. , 0. ],
             [0.5, 0. , 0.5, 0. ]
])

(编辑:河北网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读