Índice del contenido[Esconder][Espectáculo]
Las técnicas de aprendizaje profundo conocidas como "redes neuronales gráficas" (GNN) operan en el dominio gráfico. Estas redes han encontrado uso últimamente en una variedad de campos, incluida la visión por computadora, los sistemas de recomendación y la optimización combinatoria, por nombrar algunos.
Además, estas redes se pueden utilizar para representar sistemas complejos, incluidas redes sociales, redes de interacción proteína-proteína, gráficos de conocimiento y otros en varios campos de estudio.
El espacio no euclidiano es donde operan los datos gráficos, en contraste con otros tipos de datos como las imágenes. Para clasificar nodos, predecir enlaces y agrupar datos, se utiliza el análisis gráfico.
En este artículo, examinaremos el gráfico Red neuronal en detalle, sus tipos, así como proporcionar ejemplos prácticos usando PyTorch.
Entonces, ¿qué es Graph?
Un gráfico es un tipo de estructura de datos formada por nodos y vértices. Las conexiones entre los distintos nodos están determinadas por los vértices. Si la dirección se indica en los nodos, se dice que el grafo está dirigido; de lo contrario, no está dirigido.
Una buena aplicación de los gráficos es modelar las relaciones entre varios individuos en un redes sociales. Cuando se trata de circunstancias complejas, como enlaces e intercambios, los gráficos son muy útiles.
Son empleados por sistemas de recomendación, análisis semántico, análisis de redes sociales y reconocimiento de patrones.
. La creación de soluciones basadas en gráficos es un campo completamente nuevo que ofrece una comprensión profunda de datos complejos e interrelacionados.
Red neuronal gráfica
Las redes neuronales gráficas son tipos de redes neuronales especializadas que pueden operar en un formato de datos gráficos. La incrustación de gráficos y las redes neuronales convolucionales (CNN) tienen un impacto significativo en ellos.
Las redes neuronales gráficas se emplean en tareas que incluyen la predicción de nodos, bordes y gráficos.
- Las CNN se utilizan para clasificar las imágenes. De manera similar, para predecir una clase, los GNN se aplican a la cuadrícula de píxeles que representa la estructura del gráfico.
- Categorización de textos mediante redes neuronales de recurrencia. Los GNN también se utilizan con arquitecturas gráficas en las que cada palabra de una frase es un nodo.
Para pronosticar nodos, bordes o gráficos completos, se utilizan redes neuronales para crear GNN. Una predicción a nivel de nodo, por ejemplo, puede resolver un problema como la detección de spam.
La predicción de enlaces es un caso típico en los sistemas de recomendación y podría ser un ejemplo de un problema de predicción de borde.
Graficar tipos de redes neuronales
Existen numerosos tipos de redes neuronales, y las redes neuronales convolucionales están presentes en la mayoría de ellas. Aprenderemos sobre los GNN más conocidos en esta parte.
Graficar redes convolucionales (GCN)
Son comparables a las CNN clásicas. Adquiere características mirando los nodos cercanos. Los GNN utilizan la función de activación para agregar no linealidad después de agregar vectores de nodos y enviar la salida a la capa densa.
En esencia, se compone de convolución gráfica, una capa lineal y una función de activación que no es de aprendizaje. Los GCN vienen en dos variedades principales: redes convolucionales espectrales y redes convolucionales espaciales.
Graficar redes de codificador automático
Utiliza un codificador para aprender a representar gráficos y un decodificador para tratar de reconstruir los gráficos de entrada. Hay una capa de cuello de botella que conecta el codificador y el decodificador.
Dado que los codificadores automáticos hacen un excelente trabajo al manejar el equilibrio de clases, se utilizan con frecuencia en la predicción de enlaces.
Redes neuronales de gráficos recurrentes (RGNN)
En redes multirelacionales, donde un solo nodo tiene numerosas relaciones, aprende el patrón de difusión óptimo y puede administrar los gráficos. Para aumentar la suavidad y reducir la parametrización excesiva, se utilizan regularizadores en esta forma de red neuronal gráfica.
Para obtener mejores resultados, los RGNN requieren menos potencia de procesamiento. Se utilizan para la generación de texto, reconocimiento de voz, traducción automática, descripción de imágenes, etiquetado de video y resumen de texto.
Redes de gráficos neuronales cerradas (GGNN)
Cuando se trata de tareas dependientes a largo plazo, superan a los RGNN. Al incluir puertas temporales, de borde y de nodo en dependencias a largo plazo, las redes neuronales de gráficos controlados mejoran las redes neuronales de gráficos recurrentes.
Las puertas funcionan de manera similar a las unidades recurrentes cerradas (GRU) en el sentido de que se utilizan para recuperar y olvidar datos en varias etapas.
Implementando Graph Neural Network usando Pytorch
El problema específico en el que nos centraremos es un problema común de categorización de nodos. Tenemos una red social considerable llamada musae-github, que se compiló a partir de la API abierta, para desarrolladores de GitHub.
Los bordes muestran las relaciones de seguimiento mutuo entre los nodos, que representan a los desarrolladores (usuarios de la plataforma) que han protagonizado al menos 10 repositorios (tenga en cuenta que la palabra mutua indica una relación no dirigida).
Según la ubicación del nodo, los repositorios destacados, el empleador y la dirección de correo electrónico, se recuperan las características del nodo. Predecir si un usuario de GitHub es un desarrollador web o un desarrollador de aprendizaje automático es nuestra tarea.
El puesto de trabajo de cada usuario sirvió como base para esta función de focalización.
Instalación de PyTorch
Para comenzar, primero debemos instalar PyTorch. Puedes configurarlo según tu máquina desde esta página. Aquí esta el mio:
Importación de módulos
Ahora, importamos los módulos necesarios
Importar y explorar los datos
El siguiente paso es leer los datos y trazar las primeras cinco filas y las últimas cinco filas del archivo de etiquetas.
Solo dos de las cuatro columnas, la identificación del nodo (es decir, el usuario) y ml_target, que es 1 si el usuario es miembro de la comunidad de aprendizaje automático y 0 en caso contrario, son relevantes para nosotros en esta situación.
Dado que solo hay dos clases, ahora podemos estar seguros de que nuestra tarea es un problema de clasificación binaria.
Como resultado de desequilibrios de clase significativos, el clasificador puede simplemente asumir qué clase es la mayoría en lugar de evaluar la clase subrepresentada, lo que hace que el equilibrio de clases sea otro factor crucial a considerar.
Trazar el histograma (distribución de frecuencia) revela cierto desequilibrio porque hay menos clases de aprendizaje automático (etiqueta = 1) que de las otras clases.
Codificación de funciones
Las características de los nodos nos informan de la característica que está asociada a cada nodo. Al implementar nuestro método para codificar datos, podemos codificar instantáneamente esas características.
Queremos utilizar este método para encapsular una pequeña parte de la red (por ejemplo, 60 nodos) para su visualización. El código se encuentra aquí.
Diseño y visualización de gráficos.
Utilizaremos la antorcha geométrica. datos para construir nuestro gráfico.
Para modelar un único gráfico con diferentes propiedades (opcionales), se utilizan datos que son un objeto de Python simple. Al utilizar esta clase y los siguientes atributos, todos los cuales son tensores de antorcha, crearemos nuestro objeto gráfico.
La forma del valor x, que se asignará a las características del nodo codificado, es [número de nodos, número de características].
La forma de y es [número de nodos] y se aplicará a las etiquetas de los nodos.
índice de borde: para describir un gráfico no dirigido, necesitamos expandir los índices de borde originales para permitir la existencia de dos bordes dirigidos distintos que unen los mismos dos nodos pero apuntan en direcciones opuestas.
Se requiere un par de aristas, una que apunte desde el nodo 100 al 200 y la otra desde el 200 al 100, por ejemplo, entre los nodos 100 y 200. Si se proporcionan los índices de las aristas, así es como se puede representar el gráfico no dirigido. [2,2*número de aristas originales] será la forma tensorial.
Creamos nuestro método dibujar gráfico para mostrar un gráfico. El primer paso es transformar nuestra red homogénea en un gráfico NetworkX, que luego se puede dibujar usando NetworkX.draw.
Haz nuestro modelo GNN y entrénalo
Comenzamos codificando todo el conjunto de datos ejecutando encode data con light=False y luego llamando a build graph con light=False para construir el gráfico completo. No intentaremos dibujar este gráfico grande porque supongo que está usando una máquina local que tiene recursos limitados.
Las máscaras, que son vectores binarios que identifican qué nodos pertenecen a cada máscara específica mediante los dígitos 0 y 1, se pueden usar para notificar a la fase de entrenamiento qué nodos deben incluirse durante el entrenamiento y para decirle a la fase de inferencia qué nodos son los datos de prueba. Antorcha transforma.geométrica.
Se puede agregar una división a nivel de nodo usando las propiedades de máscara de entrenamiento, máscara de valor y máscara de prueba de la clase AddTrainValTestMask, que se puede usar para tomar un gráfico y permitirnos especificar cómo queremos que se construyan nuestras máscaras.
Solo utilizamos el 10% para entrenamiento y usamos el 60% de los datos como conjunto de prueba mientras usamos el 30% como conjunto de validación.
Ahora, apilaremos dos capas GCNConv, la primera de las cuales tiene un recuento de características de salida igual al número de características en nuestro gráfico como características de entrada.
En la segunda capa, que contiene nodos de salida iguales al número de nuestras clases, aplicamos una función de activación relu y proporcionamos las características latentes.
El índice de borde y el peso de borde son dos de las muchas opciones x que GCNConv puede aceptar en la función de reenvío, pero en nuestra situación, solo necesitamos las dos primeras variables.
A pesar de que nuestro modelo podrá predecir la clase de cada nodo en el gráfico, aún necesitamos determinar la precisión y la pérdida para cada conjunto por separado según la fase.
Por ejemplo, durante el entrenamiento, solo queremos utilizar el conjunto de entrenamiento para determinar la precisión y la pérdida de entrenamiento y, por lo tanto, aquí es donde nuestras máscaras resultan útiles.
Para calcular la pérdida y la precisión adecuadas, definiremos las funciones de pérdida enmascarada y precisión enmascarada.
Entrenando al modelo
Ahora que hemos definido el propósito de entrenamiento para el cual se utilizará la antorcha. Adam es un maestro optimizador.
Llevaremos a cabo el entrenamiento durante un cierto número de épocas mientras vigilamos la precisión de la validación.
También trazamos las pérdidas y precisiones del entrenamiento a lo largo de diferentes épocas.
Desventajas de Graph Neural Network
El uso de GNN tiene algunas desventajas. Cuándo emplear GNNa y cómo mejorar el rendimiento de nuestros modelos de aprendizaje automático se nos aclarará una vez que tengamos una mejor comprensión de ellos.
- Si bien las GNN son redes poco profundas, generalmente con tres capas, la mayoría de las redes neuronales pueden profundizar para mejorar el rendimiento. No podemos desempeñarnos a la vanguardia en grandes conjuntos de datos debido a esta limitación.
- Es más difícil entrenar un modelo en grafos, ya que su dinámica estructural es dinámica.
- Debido a los altos costos computacionales de estas redes, escalar el modelo para la producción presenta desafíos. Escalar los GNN para la producción será un desafío si la estructura de su gráfico es enorme y complicada.
Conclusión
En los últimos años, las GNN se han convertido en herramientas poderosas y efectivas para problemas de aprendizaje automático en el dominio gráfico. En este artículo se proporciona una descripción general fundamental de las redes neuronales gráficas.
Después de eso, puede comenzar a crear el conjunto de datos que se usará para entrenar y probar el modelo. Para comprender cómo funciona y de lo que es capaz, también puede ir mucho más allá y entrenarlo utilizando un tipo diferente de conjunto de datos.
¡Feliz codificación!
Deje un comentario