Каталог статей
предисловие
Начиная с цели использования сверточной сети графа, в этой статье сначала кратко представлены источник и формула сверточной сети графа, а затем используется пример для кодирования сверточной сети графа.
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=)