Сверточная сеть графов ASGCN (GCN)



предисловие

Начиная с цели использования сверточной сети графа, в этой статье сначала кратко представлены источник и формула сверточной сети графа, а затем используется пример для кодирования сверточной сети графа.


1. Теоретическая часть

1.1 Для чего нужна графовая сверточная сеть?

Будь то CNN или RNN, они сталкиваются с обычными данными. Перед лицом нерегулярных данных, таких как графики, исходная сеть не может быть выровнена для извлечения признаков. Однако такие данные, как графики, широко распространены в обществе, и метод должен быть Для извлечения графовых данных появление графовых сверточных сетей только что решило эту проблему.
вставьте сюда описание изображения

1.2 Процесс построения графовой сверточной сети

Часть вывода включает в себя знания, связанные с коммуникацией. Основное ядро ​​состоит в том, что свертка во временной области эквивалентна умножению в частотной области. Операция свертки во временной области эквивалентна частотной области для умножения, а затем результат умножения преобразуется в область времени. Сила GCN заключается в том, что даже если он не обучен, функции, извлеченные GCN, очень хороши, даже если параметры W полностью инициализированы случайным образом.

1.3 Формула графовой сверточной сети

Чтобы узнать о происхождении формулы, обратитесь к документу Сверточные сети графов (GCN) для подробного введения , Простая структура сети показана на рисунке ниже.
вставьте сюда описание изображения
Формула расчета между слоями свертки графа
: )}=\sigma ( \tilde{D}^{-\frac{1}{2}}\tilde{A}\tilde{D}^{-\frac{1}{2}}H ^{(l )}W^{(l)} )}ЧАС( л + 1 )"="с (Д~21А~Д~21ЧАС( л ) Вт( л ) )
, где:

А ~ \тильда{А}А~ :А ~ = А + I \tilde{A}=A+IА~"="А+I , A — матрица смежности графа, I — единичная матрица,
D ~ \tilde{D}Д~ :D ~ \tilde{D}Д~A ~ \тильда{A}АМатрица степеней (матрица степеней) ~ представляет число степеней каждого узла,D ii = ∑ j = 1 i A ij D_{ii}=\sum_{j=1}^iA_{ij}ДII"="дж = 1яАя;
H: характеристика каждого слоя, для входного слоя это X;
σ \sigmaσ : нелинейная функция активации,
W: весовой параметр слоя соединения;

2. Реализация кода

Формула расчета сверточного слоя в ASGCN:
hil = R el U ( ∑ j = 1 n A ij W lgjl ) di + 1 + bl ) \pmb{h_i^{l}=RelU(\frac{\sum_{ j=1 }^{n} A_{ij} W^lg_{j}^{l})}{d_i+1}+b^l)}часял"="Р е л У (дя+1дж = 1нАяВтл гДжл)+бм )
Построить код по формуле расчета следующим образом:

import torch
import torch.nn as nn
import torch.nn.functional as F

class GraphConvolution(nn.Module):
    """
    Simple GCN layer, similar to https://arxiv.org/abs/1609.02907
    """
    def __init__(self, in_features, out_features):
        super(GraphConvolution, self).__init__()
        self.in_features = in_features
        self.out_features = out_features
        self.weight = nn.Parameter(torch.FloatTensor(in_features, out_features))
        self.bias = nn.Parameter(torch.FloatTensor(out_features))

    def forward(self, text, adj):
        hidden = torch.matmul(text, self.weight) # 权重self.weight随机产生
        denom = torch.sum(adj, dim=1, keepdim=True) + 1  # 加一保证做除法时分母不为零
        output = torch.matmul(adj, hidden) / denom
        output = F.relu(output + self.bias)
        print(output)
        return output
def main():
    # 假设该句子经过构建依赖树后的邻接矩阵为adj
    adj =torch.tensor([
        [1., 1., 0., 0., 0., 0., 0., 1., 0., 0.],
        [1., 1., 0., 0., 0., 0., 0., 0., 0., 0.],
        [0., 0., 1., 0., 0., 0., 0., 0., 0., 0.],
        [0., 0., 0., 1., 0., 0., 0., 0., 0., 0.],
        [0., 0., 0., 1., 1., 0., 0., 0., 0., 0.],
        [0., 0., 0., 0., 0., 1., 0., 0., 0., 0.],
        [0., 0., 0., 0., 0., 0., 1., 0., 0., 0.],
        [0., 0., 0., 0., 0., 0., 0., 1., 0., 0.],
        [0., 0., 0., 0., 0., 0., 0., 0., 1., 0.],
        [0., 0., 0., 0., 0., 1., 0., 0., 0., 1.],
    ])
    # 假设一个句子中有10个单词,从前向后单词对应的索引为[0, 1, 2, 3, 3, 4, 6,0, 1, 2]
    input = torch.tensor([0, 1, 2, 3, 3, 4, 6,0, 1, 2], dtype=torch.long)
    embedding = torch.nn.Embedding(10, 50)
    x = embedding(input)  # 生成每个单词对应的词嵌入,维度为50
    gc1 = GraphConvolution(50, 10)
    gc1(x, adj)
if __name__ == '__main__':
    main()

输出:
тензор([[1.1561e+19, 6.8794e+11, 2.7253e+20, 3.0866e+29, 1.1547e+19, 4.1988e+07,3.0357e+32, 1.1547e+19, 6.4069e+02 , 4.3066e+21],
[1.1561e+19, 6.8794e+11, 2.7253e+20, 3.0866e+29, 1.1547e+19, 4.1988e+07,3.0357e+32, 1.1547e+19, 6.4069e +02, 4.3066e+21],
[1.1561e+19, 6.8794e+11, 2.7253e+20, 3.0866e+29, 1.1547e+19, 4.1988e+07,3.0357e+32, 1.1547e+19, 6.4069e+02, 4.3066e+21],
[1.1561e+19, 6.8794e+11, 2.7253e+20, 3.0866e+29, 1.1547e+19, 4.1988e+07,3.0357e+32, 1.1547e+ 19
; e+19, 6.4069e+02, 4.3066e+21],
[1.1561e+19, 6.8794e+11, 2.7253e+20, 3.0866e+29, 1.1547e+19, 4.1988e+07, 3.0357e+32 , 1.1547e+19, 6.4069e+02, 4.3066e+21],
[1.1561e+19, 6.8794e+11, 2.7253e+20, 3.0866e+29, 1.1547e+19, 4.1988e+07,3.0357e+32, 1.1547e+19, 6.4069e+02, 4.3066e+21 ],
[1.1561e+19, 6.8794e+11, 2.7253e+20, 3.0866e+29, 1.1547e+19, 4.1988e+07,3.0357e+32, 1.1547e+19, 6.4069e+02, 4.3066e +21],
[1.1561e+19, 6.8794e+11, 2.7253e+20, 3.0866e+29, 1.1547e+19, 4.1988e+07, 3.0357e+32, 1.1547e+19, 6.4069e+02, 4.3066e+21],
[1.1561e+19, 6.8794e+11, 2.7253e+20, 3.0866e+29, 1.1547e+19, 4.1988e+07,3.0357e+32, 1.1547e+19, 6.4069e+ 02, 4.3066e+21]],
grad_fn=)


Рекомендации

  1. Понимание и подробный вывод сверточной сети графов GCN Graph Convolutional Network (спектральная область GCN)
  2. Подробное введение в сверточные сети графов (GCN)

Supongo que te gusta

Origin blog.csdn.net/qq_40940944/article/details/128709733
Recomendado
Clasificación