Visualização detalhada da convolução do gráfico e teoria da passagem de mensagens

Reproduzido de: Deephub Imba

Neste artigo, estudaremos como construir uma rede neural convolucional gráfica baseada em um mecanismo de passagem de mensagens e criar um modelo para classificar moléculas com visualizações incorporadas.

69d2e5739fcfeb9048401357c93acd5e.png

Suponha que agora exista a necessidade de projetar medicamentos para tratar certas doenças. Há um conjunto de dados de medicamentos que tratam com sucesso uma doença e medicamentos que não funcionam, e agora precisamos projetar um novo medicamento e queremos saber se ele pode tratar a doença. Se uma representação significativa de um medicamento pode ser criada, um classificador pode ser treinado para prever se ele será útil para o tratamento da doença. Nossos medicamentos são fórmulas moleculares, que podem ser representadas graficamente. Os nós deste gráfico são átomos. Os átomos também podem ser descritos por autovetores x (que podem consistir em propriedades atômicas como massa, número de elétrons ou outras). Para classificar moléculas, queremos usar o conhecimento sobre sua estrutura espacial e características atômicas para obter algumas representações significativas.

c0c323bac852c1fec307e0b83d42634e.png

Um exemplo de uma molécula representada graficamente. Os átomos têm seus autovetores X. Os índices no vetor de características representam os índices de nós.

A maneira mais direta é agregar os vetores de recursos, por exemplo, basta obter sua média:

f24b8e9b9d1aabe0fd6cdb2525a6484b.png

Esta é uma solução válida, mas ignora importantes estruturas espaciais moleculares.

convolução do gráfico

Podemos ter outra ideia: representar o gráfico molecular com uma matriz de adjacência e "estender" sua profundidade com autovetores. Obtemos uma imagem falsa [8, 8, N], onde N é a dimensão do vetor de características do nó x. Agora é possível usar redes neurais convolucionais regulares e extrair incorporações moleculares.

8f50917a5a4579fa6c890c0ed87e38fd.png

A estrutura do gráfico pode ser representada como uma matriz de adjacência. Os recursos do nó podem ser representados como canais na imagem (colchetes representam conexões).

Essa abordagem tira proveito da estrutura do gráfico, mas tem uma enorme desvantagem: se você alterar a ordem dos nós, obterá uma representação diferente. Portanto, tal representação não é uma invariante de permutação. Mas a ordem dos nós na matriz de adjacência é arbitrária, por exemplo, você pode alterar a ordem das colunas de [0, 1, 2, 3, 4, 5, 6, 7] para [0, 2, 1, 3 , 5, 4, 7, 6], que ainda é uma matriz de adjacência válida para o gráfico. Então, criar todas as permutações possíveis e empilhá-las juntas nos daria 1625702400 matrizes de adjacência possíveis (8!*8!). A quantidade de dados é muito grande, portanto, uma solução melhor deve ser encontrada.

Mas a questão é: como integrar informações espaciais e fazê-lo de forma eficiente? O exemplo acima pode nos fazer pensar no conceito de convolução, mas deve ser feito em um gráfico.

Então, a convolução do gráfico aparece

O que acontece quando uma convolução regular é aplicada a uma imagem? Os valores dos pixels adjacentes são multiplicados pelos pesos do filtro e adicionados. Podemos fazer algo semelhante no gráfico? Sim, é possível empilhar vetores de recursos de nós na matriz X e multiplicá-los pela matriz de adjacência A e, em seguida, obter o recurso X` atualizado, que incorpora informações sobre os vizinhos mais próximos do nó. Para simplificar, vamos considerar um exemplo com recursos de nó escalar:

1aa1b0cd2a28125c3d3daaf35665f1b2.png

Exemplo de um recurso de nó com valor escalar. A distância de 1 salto é especificada apenas para o nó 0, mas o mesmo é verdadeiro para todos os outros nós.

Cada nó obtém informações sobre seu vizinho mais próximo (também conhecido como distância de 1 salto). A multiplicação na matriz de adjacência propaga recursos de um nó para outro.

O campo receptivo pode ser expandido no domínio da imagem aumentando o tamanho do filtro. No gráfico, mais vizinhos podem ser considerados. Se você multiplicar A^2 por X - as informações sobre os nós a 2 saltos de distância são propagadas para os nós:

ee64b018fa4e9a786ff10e1632c67988.png

O nó 0 agora tem informações sobre o nó 2, que está a 2 saltos de distância. O diagrama ilustra saltos apenas para o nó 0, mas também para todos os outros nós.

Potências mais altas da matriz A se comportam da mesma maneira: a multiplicação por A^n faz com que os recursos se propaguem de nós a n saltos de distância, de modo que o "campo receptivo" pode ser estendido adicionando multiplicação a potências mais altas da matriz de adjacência. Para generalizar esta operação, a função para atualizações de nós pode ser definida como a soma de tais multiplicações com algum peso w:

32afa60f7c8867e5a0fad169a3ccf47f.png

Filtro de convolução de gráfico polinomial. A - matriz de adjacência do gráfico, w - peso escalar, x - recurso de nó inicial, x' - recurso de nó atualizado.

O novo recurso x' é uma mistura de nós de n saltos de distância, a influência da distância correspondente é controlada pelo peso w. Tal operação pode ser pensada como uma convolução gráfica com um filtro P parametrizado por um peso w. Semelhante à convolução em imagens, os filtros de convolução de grafos também podem ter diferentes campos receptivos e agregar informações sobre os vizinhos do nó, mas a estrutura dos vizinhos não é tão regular quanto os kernels de convolução em imagens.

0b9107266eb43e1ebb47646d9c4f14bb.png

Esses polinômios são equivalentes à permutação como as convoluções gerais. O grafo Laplaciano pode ser usado em vez de uma matriz de adjacência para transferir autodiferenças ao invés de autovalores entre nós (matrizes de adjacência normalizadas também podem ser usadas).

A capacidade de representar convoluções gráficas como polinômios pode ser derivada de convoluções gráficas espectrais gerais. Por exemplo, filtros utilizando polinômios de Chebyshev com um grafo Laplaciano fornecem uma aproximação para convolução direta do grafo espectral [1].

E pode ser facilmente generalizado para qualquer dimensão de feições nodais com a mesma equação. Mas no caso de dimensões mais altas, a matriz de recursos do nó X é processada em vez do vetor de recursos do nó. Por exemplo, para N nós e 1 ou M recursos em um nó, obtemos:

86d0b3403b20fa791927ff548f3a7eb7.png

x—vetor de característica do nó, X—característica do nó empilhado, M—dimensão do vetor de característica do nó, N—número do nó.

A dimensão "profundidade" de um vetor de recursos pode ser considerada como "canais" na convolução da imagem.

Mensagens

Agora olhe para a discussão acima de uma maneira diferente. Continuando com uma convolução polinomial simples discutida acima, com apenas dois primeiros termos, seja w igual a 1:

dc1a00e6df79ac63a0291879ee5b3968.png

Agora, se você multiplicar a matriz de recursos do gráfico X por (I + A), obterá o seguinte resultado:

2e44738cb5cdf0360320aacf57c36bf8.png

Para cada nó, a soma dos nós adjacentes é adicionada. Assim, a operação pode ser expressa da seguinte forma:

557abac6cbf4fa7795fce36b2240255d.png

N(i) representa o vizinho de distância de um salto do nó i.

Neste exemplo, "atualizar" e "agregar" são simplesmente funções de soma.

Essa atualização de recurso no nó é chamada de mecanismo de passagem de mensagens. Uma única iteração de tal passagem de mensagens é equivalente à convolução do gráfico com filtro P = I + A. Então, se quisermos propagar informações de nós mais distantes, podemos repetir essa operação várias vezes novamente, aproximando a convolução do gráfico com mais termos polinomiais.

Porém, uma ressalva: se você repetir a convolução do gráfico várias vezes, poderá fazer com que o gráfico seja suavizado demais, onde cada incorporação de nó se torna o mesmo vetor médio para todos os nós conectados.

Então, como melhorar a expressividade da entrega de mensagens? Você pode experimentar as funções de agregação e atualização e, além disso, transformar os recursos do nó:

5da7d0a5ea9e6eb8edd2893e41b018f3.png

W1——Atualiza a matriz de pesos de recursos de nós, W2——Atualiza a matriz de pesos de recursos de nós adjacentes.

As agregações podem ser executadas usando qualquer função invariante de permutação, como soma, máximo, média ou funções mais complexas, como DeepSets.

Por exemplo, uma das formas básicas de avaliar a passagem de mensagens é a camada GCN:

3ca5f66fefaf9ec401b9f7c37861c49b.png

Esta fórmula pode não ser familiar à primeira vista, mas vamos dar uma olhada nela usando as funções "atualizar" e "agregar":

bb85b52b1cf805a24e42139c2afc0a93.png

Uma única matriz W é usada em vez das duas matrizes de peso W1 e W2. A função de atualização é a soma e a função de agregação é a soma dos recursos do nó normalizado, incluindo o recurso do nó i. d - representa o grau do nó.

Isso usa uma matriz de peso W em vez de duas e usa a soma normalizada de Kipf e Welling como agregação e uma soma como função de atualização. As operações de agregação avaliam os vizinhos e o próprio nó i, o que equivale a adicionar loops próprios ao gráfico.

Assim, o GNN com mecanismo de passagem de mensagens pode ser representado como múltiplas funções repetidas de agregação e atualização. Cada iteração de passagem de mensagens pode ser vista como uma nova camada GNN. Todas as operações nas atualizações de nós são diferenciáveis ​​e podem ser parametrizadas com uma matriz de pesos que pode ser aprendida. Agora podemos construir uma rede convolucional de grafos e explorar como ela funciona.

um exemplo prático

Construa e treine uma rede neural gráfica usando as camadas GCN mencionadas acima. Para este exemplo, usarei a biblioteca PyG e o conjunto de dados do gráfico AIDS fornecido em [2]. É composto por 2.000 gráficos que representam compostos moleculares: 1.600 dos quais são considerados inativos contra o HIV e 400 dos quais são ativos contra o HIV. Cada nó tem um vetor de recursos com 38 recursos. Aqui está um exemplo de uma representação de gráfico molecular no conjunto de dados:

31f8bf2aa8d1e04d38e376178eaec133.png

Visualize amostras do conjunto de dados de AIDS usando a biblioteca networkx.

Para simplificar, construiremos um modelo com apenas 3 camadas GCN. A dimensão de embedding final para a visualização do espaço de embedding será 2-d. Para obter os embeddings de gráficos, será usada a agregação média. Para classificar as moléculas, será utilizado um classificador linear simples após a incorporação do gráfico.

b67fe0a847e048577eeeb6664f18e213.png

Gráfico de rede neural com três camadas GCN, pooling médio e classificadores lineares.

Para a primeira iteração de passagem de mensagens (camada 1), os vetores de características iniciais são projetados no espaço de 256 dimensões. Durante a segunda passagem de mensagem (camada 2), o vetor de características é atualizado na mesma dimensão. Durante a terceira passagem de mensagem (camada 3), as feições são projetadas em um espaço 2D e, em seguida, todas as feições dos nós são calculadas para obter a incorporação final do gráfico. Finalmente, esses embeddings são alimentados a um classificador linear. A dimensão 2D foi escolhida apenas para visualização, dimensões maiores definitivamente seriam melhores. Tal modelo pode ser implementado usando a biblioteca PyG:

from torch import nn
from torch.nn import functional as F
from torch_geometric.nn import GCNConv
from torch_geometric.nn import global_mean_pool


class GCNModel(nn.Module):
    def __init__(self, feature_node_dim=38, num_classes=2, hidden_dim=256, out_dim=2):
        super(GCNModel, self).__init__()
        torch.manual_seed(123)
        self.conv1 = GCNConv(feature_node_dim, hidden_dim)
        self.conv2 = GCNConv(hidden_dim, hidden_dim)
        self.conv3 = GCNConv(hidden_dim, out_dim)
        self.linear = nn.Linear(out_dim, num_classes)

    def forward(self, x, edge_index, batch):

        # Graph convolutions with nonlinearity:
        x = self.conv1(x, edge_index)
        x = F.relu(x)
        x = self.conv2(x, edge_index)
        x = F.relu(x)
        x = self.conv3(x, edge_index)

        # Graph embedding:
        x_embed = global_mean_pool(x, batch)

        # Linear classifier:
        x = self.linear(x_embed)

        return x, x_embed

Durante seu treinamento, os embeddings de grafos e os limites de decisão do classificador podem ser visualizados. Você pode ver como a operação de passagem de mensagens permite a geração de embeddings de gráficos significativos usando apenas 3 camadas convolucionais de gráficos. Os embeddings de modelo usando inicialização aleatória aqui não têm uma distribuição linearmente separável:

b7bdf8c2c189c90404dc0e4b1a8ec4fc.png

A figura acima é a incorporação molecular obtida pela propagação direta do modelo inicializado aleatoriamente

Mas durante o treinamento, a incorporação molecular rapidamente se torna linearmente separável:

ac72349a0f7b2aae6e101829fa634ef3.gif

Mesmo camadas convolucionais de 3 gráficos podem gerar incorporações moleculares 2D significativas que podem ser classificadas usando um modelo linear com precisão de ~ 82% no conjunto de validação.

Resumir

Neste artigo, descrevemos como a convolução do grafo é representada como um polinômio e como ela pode ser aproximada usando um mecanismo de passagem de mensagens. Esse método com transformações de recursos adicionais possui recursos de representação poderosos. Este artigo apenas arranhou a superfície das convoluções gráficas e das redes neurais gráficas. Existem mais de uma dúzia de arquiteturas diferentes para camadas convolucionais de gráficos e funções de agregação. E há muitas tarefas que podem ser feitas no grafo, como classificação de nós, reconstrução de arestas, etc. Portanto, se você quiser se aprofundar, o tutorial PyG é um bom lugar para começar.

Autor: Gleb Kumichev

Leitura recomendada:

Meu Compartilhamento de Recrutamento Escolar na Internet de 2022

Meu resumo de 2021

Falando sobre a diferença entre postagem de algoritmo e postagem de desenvolvimento

Resumo do salário de pesquisa e desenvolvimento de recrutamento escolar na Internet

Para séries temporais, tudo o que você pode fazer.

Qual é o problema da sequência espaço-temporal? Quais modelos são usados ​​principalmente para esses problemas? Quais são as principais aplicações?

Número público: carro caracol AI

Mantenha-se humilde, mantenha-se disciplinado, mantenha-se progressivo

86816d3ab748f9fc16e20f4691b1c2ca.png

Envie [Snail] para obter uma cópia do "Hands-on AI Project" (AI Snail Car)

Envie [1222] para obter uma boa nota de escovação de leetcode

Envie [AI Four Classics] para obter quatro e-books clássicos de IA

Acho que você gosta

Origin blog.csdn.net/qq_33431368/article/details/123606183
Recomendado
Clasificación