Una breve introducción a Graph Neural Networks

Una breve introducción a Graph Neural Networks

Graph Neural Network (GNN) es un método de aprendizaje profundo para procesar datos estructurados por gráficos. Este tutorial presentará los conceptos básicos, los modelos principales, los escenarios de aplicación y la implementación del código de la red neuronal gráfica en detalle.

¿Qué es una red neuronal gráfica?

Graph Neural Networks (GNN) es un tipo de modelo de red neuronal para procesar datos con estructura gráfica, que es diferente de las redes neuronales tradicionales (como redes neuronales convolucionales, redes neuronales recurrentes, etc.) en el procesamiento de estructuras de datos regulares (como imágenes). , secuencia de tiempo), las redes neuronales de grafos se especializan en el procesamiento de datos estructurados en grafos irregulares, como redes sociales, grafos de conocimiento, etc. Los datos de estructura gráfica son una red relacional compleja compuesta de nodos y bordes, donde los nodos representan entidades y los bordes representan relaciones entre entidades. A diferencia de las redes neuronales tradicionales, las redes neuronales gráficas deben considerar la relación entre los nodos, por lo que se necesita una nueva forma de representar los nodos y los bordes.

La idea central de la red neuronal gráfica es agregar las características de cada nodo con las características de los nodos que lo rodean para formar una nueva representación de nodo. Este proceso se puede implementar a través del paso de mensajes, donde cada nodo recibe mensajes de sus nodos vecinos y agrega estos mensajes en una nueva representación de nodo. Este método se puede repetir muchas veces para obtener información más completa sobre la estructura del gráfico.

La estructura de una red neuronal gráfica generalmente consta de varias capas, y cada capa contiene operaciones como la incorporación de nodos, el paso de mensajes y la agrupación. En la operación de incrustación de nodos, las características de cada nodo se convierten en una representación vectorial de baja dimensión para facilitar el aprendizaje y el procesamiento por parte de la red neuronal. En una operación de paso de mensajes, cada nodo recibe información sobre sus nodos vecinos y agrega esta información en una nueva representación de nodo. En la operación de agrupación, las representaciones de nodos se fusionan en una representación de todo el gráfico para facilitar la predicción de tareas a nivel de gráfico.

En la actualidad, la red neuronal gráfica se ha utilizado ampliamente en muchos campos, como el análisis de redes sociales, el descubrimiento de fármacos, el sistema de recomendación, etc. Al mismo tiempo, han surgido muchas variantes de modelos de redes neuronales gráficas, como Graph Convolutional Network (GCN), Graph Attention Network (GAT), etc., para adaptarse a diferentes tareas y tipos de datos.

Conceptos básicos de redes neuronales gráficas

Bien, agregaré cada sección.

1. Gráfico

Un gráfico es una estructura matemática que utiliza vértices (Vertex) y aristas (Edge) para representar entidades y sus relaciones. Un gráfico se puede representar como G = (V, E), donde V es el conjunto de vértices y E es el conjunto de aristas. En un gráfico, los vértices representan entidades y los bordes representan relaciones entre entidades. Por ejemplo, en una red social, los vértices pueden representar usuarios y los bordes pueden representar relaciones de seguimiento o amistad entre usuarios.

Hay dos tipos de gráficos: gráficos dirigidos y gráficos no dirigidos. En un gráfico no dirigido, los bordes no tienen dirección; en un gráfico dirigido, los bordes tienen dirección. Además, los gráficos también pueden tener pesos, que representan la fuerza de las relaciones entre entidades. Los gráficos con pesos a menudo se denominan gráficos ponderados.

2. Matriz de adyacencia

La matriz de adyacencia A es una matriz que representa la relación entre vértices en el gráfico. Sea V el conjunto de vértices, y el tamaño de A es |V|×|V|. Para un grafo no dirigido, el elemento A(i, j) = 1 de A significa que el vértice i y el vértice j son adyacentes, es decir, hay una arista; A(i, j) = 0 significa que el vértice i y el vértice j son no adyacente. La matriz de adyacencia de un gráfico dirigido representa los bordes dirigidos.

La matriz de adyacencia se puede usar para representar la estructura del gráfico y también se puede usar para implementar el algoritmo del gráfico. A través de la matriz de adyacencia podemos consultar rápidamente si existe una arista entre dos vértices, así como información como el tipo y peso de la arista.

Además, la matriz de adyacencia se puede considerar como una representación de un gráfico. En comparación con otras representaciones (como la lista de adyacencia, la lista de bordes, etc.), la matriz de adyacencia se puede utilizar para describir gráficos densos, con una alta utilización del espacio y un alto consulta eficiencia ventaja.

3. Señal gráfica

Una señal gráfica es una señal definida en un vértice gráfico, que puede considerarse como una característica del vértice. Para un conjunto de vértices V, podemos representar la señal del gráfico como una matriz X |V|×d, donde d es la dimensión característica.

Las señales gráficas pueden representar atributos o características de los vértices. Por ejemplo, en las redes sociales, cada vértice se puede representar como un vector que contiene atributos del usuario, como género, edad, ocupación, etc. En las moléculas químicas, cada átomo se puede representar como un vector que contiene propiedades químicas como la afinidad electrónica, la carga, etc.

Las señales gráficas se pueden usar para analizar y procesar datos estructurados en gráficos, como clasificar, agrupar y predecir gráficos. Por lo general, necesitamos combinar la señal del gráfico con la estructura topológica del gráfico, para hacer un mejor uso de las características de los datos de la estructura del gráfico. Por ejemplo, en redes neuronales convolucionales de gráficos, podemos extraer representaciones de características de nodos a través de la operación de convolución de señales gráficas y matrices de adyacencia.

4. Convolución de gráfico

La convolución de grafos es una operación que extiende el concepto de convolución tradicional a datos estructurados en grafos. La convolución gráfica generalmente se expresa como una función entre la matriz de adyacencia A y la señal gráfica X: f(A, X). A través de esta función, la transferencia de información y la extracción de características se pueden realizar en el gráfico. A diferencia de las convoluciones tradicionales, las convoluciones de gráficos tienen en cuenta la topología de los nodos en el gráfico, capturando así las relaciones y dependencias entre los nodos.

Hay varias formas de implementar la convolución de gráficos, las más comunes son los métodos basados ​​en el dominio espectral y los métodos basados ​​en el dominio espacial. Los métodos basados ​​en el dominio espectral explotan los valores propios y los vectores propios de la matriz laplaciana del gráfico para definir la operación de convolución. Los métodos basados ​​en el dominio espacial utilizan la matriz de adyacencia y las características del nodo para las operaciones de convolución.

La convolución de gráficos se puede utilizar para muchas tareas en datos estructurados por gráficos, como clasificación de nodos, clasificación de gráficos, predicción de enlaces, etc. En las redes neuronales de gráficos, la convolución de gráficos es una operación central que puede ayudar a extraer representaciones de características en datos estructurados por gráficos, lo que permite un análisis y procesamiento de datos estructurados por gráficos más eficiente y preciso.

Modelo de red neuronal de gráfico principal

1. GCN (redes convolucionales gráficas)

GCN es un método de convolución de gráficos basado en el dominio espectral. Utiliza la matriz laplaciana del gráfico para realizar la transferencia de información y la extracción de características realizando operaciones de convolución en los vectores de características. La idea central de GCN es realizar la transferencia de información a través del producto de la matriz de adyacencia A y la señal gráfica X.

En GCN, los vectores propios de cada nodo se ponderan y promedian con los vectores propios de sus nodos vecinos. Los pesos están determinados por los valores en la matriz de adyacencia A. Específicamente, la operación de convolución de GCN se puede expresar como:

Z = f(A, X) = D⁻¹ A X W

donde D es la matriz de grados de A y W es la matriz de peso aprendible.

GCN se ha utilizado ampliamente en la clasificación de nodos, la clasificación de gráficos, la predicción de enlaces y otras tareas, y ha logrado buenos resultados. Sin embargo, la limitación de GCN es que su operación de convolución solo considera los nodos vecinos de primer orden y no puede capturar relaciones de mayor alcance e información global. Por lo tanto, investigaciones posteriores propusieron muchas versiones mejoradas de redes convolucionales de gráficos, como GAT y GraphSAGE que se presentan a continuación.

2. GAT (redes de atención gráfica)

GAT es un método de convolución de gráficos basado en el dominio espacial. GAT introduce un mecanismo de atención, de modo que el modelo puede asignar diferentes pesos a diferentes bordes, para capturar mejor la relación entre los nodos. En GAT, el vector de características de cada nodo se pondera y promedia con los vectores de características de sus nodos vecinos, y el mecanismo de atención calcula el peso.

Específicamente, la operación de convolución de GAT se puede expresar como:

Z = f(A, X) = CONCAT(ATTENTION(A, X)W)

Entre ellos, ATENCIÓN es una función para calcular el peso de la atención y CONCAT es una operación de conexión. La función ATENCIÓN generalmente incluye dos pasos: primero calcula la similitud entre cada nodo vecino y el nodo actual, y luego usa la función softmax para convertir la similitud en peso. De esta forma, el peso de cada nodo vecino puede ser diferente, para expresar mejor la relación entre nodos.

El mecanismo de atención de GAT permite que el modelo se adapte mejor a diferentes estructuras y tareas de gráficos, y ha logrado buenos resultados en muchas tareas, como la clasificación de gráficos, la clasificación de nodos y la predicción de enlaces.

3. GraphSAGE (muestra de gráfico y agregado)

GraphSAGE es un método de convolución de gráficos basado en el dominio espacial, que propone una estrategia de muestreo y agregación de vecinos, lo que permite que el modelo maneje datos de gráficos a gran escala. En GraphSAGE, los vectores propios de cada nodo se agregan con los vectores propios de sus vecinos. A diferencia de GCN y GAT, GraphSAGE no promedia ni pondera el promedio de todos los nodos vecinos, sino que adopta una determinada estrategia de muestreo de vecinos y solo considera los nodos vecinos de primer orden o de orden k de un nodo para la agregación, lo que reduce la complejidad computacional.

Específicamente, la operación de convolución de GraphSAGE se puede expresar como:

Z = f(A, X) = AGGREGATE(NEIGHBORS(A, X)) W

Entre ellos, VECINOS es una función de muestreo de vecinos, que se utiliza para muestrear aleatoriamente algunos nodos de los vecinos de un nodo como entrada de agregación; AGREGAR es una función de agregación, que se utiliza para agregar los vectores de características de los nodos vecinos, como valor medio, valor máximo, etc.; W es la matriz de peso aprendible de .

GraphSAGE puede manejar datos de gráficos a gran escala y ha logrado buenos resultados en tareas como clasificación de nodos, clasificación de gráficos y predicción de enlaces. Sus estrategias de muestreo y agregación vecinas también son tomadas prestadas y mejoradas por muchas redes convolucionales de gráficos posteriores.

Escenarios de aplicación de redes neuronales gráficas

Las redes neuronales gráficas se utilizan ampliamente en muchos campos, entre los que se incluyen principalmente:

  1. Clasificación de nodos: prediga la categoría de los nodos en el gráfico, como predecir las etiquetas de interés de los usuarios en las redes sociales.
  2. Predicción de enlaces: prediga si hay bordes entre los nodos en el gráfico, como predecir la relación entre las entidades en el gráfico de conocimiento.
  3. Clasificación de gráficos: prediga la categoría de todo el gráfico, como predecir la actividad de las moléculas en las redes biomoleculares.
  4. Generación de gráficos: Genere gráficos con ciertas propiedades, como generar redes que satisfagan características topológicas específicas.

Código

El siguiente es un código de ejemplo para entrenar una red neuronal convolucional gráfica utilizando el conjunto de datos Cora, implementado mediante la biblioteca geométrica PyTorch:

import torch
import torch.nn as nn
import torch.nn.functional as F
import torch.optim as optim
from torch_geometric.datasets import Planetoid
from torch_geometric.nn import GCNConv

# 判断是否有可用的GPU,如果有就使用GPU,否则使用CPU
device = torch.device('cuda' if torch.cuda.is_available() else 'cpu')

# 加载Cora数据集
dataset = Planetoid(root='data/Cora', name='Cora')

# 定义一个GCN模型
class GCN(nn.Module):
    def __init__(self, input_dim, hidden_dim, output_dim):
        super(GCN, self).__init__()
        # 第一个图卷积层
        self.conv1 = GCNConv(input_dim, hidden_dim)
        # 第二个图卷积层
        self.conv2 = GCNConv(hidden_dim, output_dim)
        # 全连接层
        self.fc = nn.Linear(output_dim, dataset.num_classes)
        
    def forward(self, x, edge_index):
        # 第一次图卷积,使用ReLU激活函数
        x = F.relu(self.conv1(x, edge_index))
        # 第二次图卷积
        x = self.conv2(x, edge_index))
        # Dropout操作,防止过拟合
        x = F.dropout(x, training=self.training)
        # 全连接层
        x = self.fc(x)
        # 使用log_softmax进行分类
        return F.log_softmax(x, dim=1)

# 创建GCN模型实例,并将模型移动到设备上(GPU或CPU)
model = GCN(dataset.num_features, 16, dataset.num_classes).to(device)

# 定义优化器和损失函数
optimizer = optim.Adam(model.parameters(), lr=0.01)
criterion = nn.NLLLoss()

# 定义训练函数
def train(model, optimizer, criterion, data):
    model.train()
    optimizer.zero_grad()
    out = model(data.x.to(device), data.edge_index.to(device))
    loss = criterion(out[data.train_mask], data.y[data.train_mask].to(device))
    loss.backward()
    optimizer.step()

# 定义测试函数
def test(model, data):
    model.eval()
    out = model(data.x.to(device), data.edge_index.to(device))
    pred = out.argmax(dim=1)
    acc = pred[data.test_mask].eq(data.y[data.test_mask].to(device)).sum().item() / data.test_mask.sum().item()
    return acc

# 进行模型训练和测试,并输出测试集准确率
for epoch in range(200):
    train(model, optimizer, criterion, dataset[0])
    test_acc = test(model, dataset[0])
    print('Epoch: {:03d}, Test Acc: {:.4f}'.format(epoch, test_acc))

En el código anterior, primero importe bibliotecas relacionadas con PyTorch y Planetoidclases de conjuntos de datos y GCNConvclases de capas de convolución de gráficos. Luego, determine si hay una GPU disponible; de ​​ser así, use la GPU; de lo contrario, use la CPU. A continuación, cargue el conjunto de datos de Cora y defina una GCNclase para crear un modelo de red neuronal convolucional gráfica. En GCNla clase, se definen dos capas convolucionales de gráficos y una capa completamente conectada, y forwardla propagación directa del modelo se completa en el método. A continuación, se crea un modelo instanciado y se mueve al dispositivo (GPU o CPU). Luego, se definen las funciones de optimización y pérdida, así como las funciones de entrenamiento y prueba. Finalmente, el modelo se entrena y prueba en un bucle, y se genera la precisión del conjunto de prueba.

Resumir

Este tutorial presenta los conceptos básicos, los modelos principales y los escenarios de aplicación de Graph Neural Network (GNN), así como códigos de muestra para implementar GCN usando PyTorch y PyTorch Geometric. Entre ellos, un gráfico es una estructura matemática que utiliza vértices y aristas para representar entidades y sus relaciones, una matriz de adyacencia es una matriz que representa la relación entre los vértices de un gráfico, una señal de gráfico es una señal definida en un vértice de gráfico , y la convolución de grafos es una convolución tradicional Operaciones extendidas a estructuras de grafos. Los principales modelos GNN incluyen GCN basado en dominio espectral, GAT y GraphSAGE basado en dominio espacial. Los GNN se utilizan ampliamente en campos como la clasificación de nodos, la predicción de enlaces, la clasificación de gráficos y la generación de gráficos. A través del estudio de este tutorial, los lectores pueden comprender mejor GNN y aplicar GNN para resolver problemas en problemas prácticos.

Supongo que te gusta

Origin blog.csdn.net/qq_36693723/article/details/130856632
Recomendado
Clasificación