Aprendizaje profundo nova: Figura convolución GCN red neuronal

Aprendizaje profundo nova: Figura convolución GCN red neuronal

Autor: Jin Canción

introducción

El aprendizaje profundo siempre ha estado en varios domina modelo clásico, como la CNN, RNN, etc., independientemente de su CV o de otro campo de la PNL han logrado excelentes resultados, y así es como la GCN se queda sin? Debido a que nos encontramos con una gran cantidad de problemas de la CNN, RNN no se pueden resolver o ineficaces - gráfico de la estructura de datos.

Imágenes o lenguaje, pertenecen a los espaciales europea de datos, por lo que la única dimensión del concepto, las características de la estructura de datos del espacio euclidiano es muy regular. Pero en la vida real, de hecho, hay muchas, muchas estructuras de datos irregulares, típica es la vista de la estructura, también conocida como topología, como las redes sociales, la estructura molecular química, mapas de conocimiento, y así sucesivamente; incluso el lenguaje, de hecho, su interior es complejo estructura de árbol, sino también un punto de vista de la estructura, y como la imagen, haciendo reconocimiento del objetivo, en realidad sólo preocupados por algunos de los puntos clave de la imagen de dos dimensiones, la estructura de puntos es un diagrama de éstos.

El diagrama de estructura general es muy irregular, se puede considerar infinitas dimensiones de datos A, por lo que hay invariancia traducción . Las estructuras circundantes pueden cada nodo es único, esta estructura de datos, y mucho fracaso convencional instantánea CNN, RNN. Así que muchos estudiosos del siglo pasado comenzaron a estudiar cómo hacer frente a este tipo de datos. Aquí surgido muchas maneras, por ejemplo, GNN, DeepWalk, node2vec etc., GCN es único, donde hablan GCN, otra disposición discutir más adelante.

GCN, red neural Figura convolución, de hecho, con efecto como de CNN, es un extractor de características, pero su objeto es los datos del mapa. GCN exquisitamente diseñado un método de extracción de características a partir de los datos de los mapas, por lo que podemos usar estas características para llevar a cabo los datos de la figura clasificación nodo (nodo de clasificación), clasificación figura (clasificación gráfico), la predicción borde (Link predicción) , además Incidentalmente obtenido puede ser embebido gráfico que muestra (gráfico incrustación que) , visible ampliamente utilizado. Así que ahora la gente está cerebro hoyos de par en par, para permitir que GCN para brillar en diversos campos.
En este artículo se va a utilizar la tarea de clasificación más sencilla GCN hacer en las redes sociales Boxing Club, de modo que no hay contacto con los zapatos de los niños a entender rápidamente.

0.5 Descripción del problema

En primer lugar, una breve serie de datos.

Club de Karate de Zachary es una descripción de la red de relaciones sociales de los miembros del club de karate de la Universidad, presentados por Wayne W. Zachary en el documento "Un modelo de información de flujo de conflictos y la fisión en pequeños grupos", es un ejemplo común de una red social. Esto incluye 34 miembros del club de karate, un conflicto entre el administrador y el instructor Sr. Hola Juan una ventaja de este club en dos, la mitad de sus miembros en todo el Sr. Hola estableció un nuevo club, la otra mitad son o bien se encontraron usuarios el nuevo entrenador, ya sea para dar el karate. Por lo tanto, la red social correspondiente, el nodo está también dividido en dos grupos, uno perteneciente al Sr. Hi (instructor), pertenecientes a otro grupo John A (Administrator), donde el nodo 0 representa el Sr. Hola, John nodo 33 en nombre de A.

Podemos utilizar el acceso directo de datos Club de Karate de Zachary NetworkX, este administrador de tiempo John A se llama Oficial. La tarea consiste en predecir qué lado se añadirá a cada nodo (0or33). La visualización de la red social son los siguientes:

1. Crear un gráfico

En primer lugar, crear una red de cerca de club de boxeo

import dgl
import numpy as np

def build_karate_club_graph():
    # All 78 edges are stored in two numpy arrays. One for source endpoints
    # while the other for destination endpoints.
    src = np.array([1, 2, 2, 3, 3, 3, 4, 5, 6, 6, 6, 7, 7, 7, 7, 8, 8, 9, 10, 10,
        10, 11, 12, 12, 13, 13, 13, 13, 16, 16, 17, 17, 19, 19, 21, 21,
        25, 25, 27, 27, 27, 28, 29, 29, 30, 30, 31, 31, 31, 31, 32, 32,
        32, 32, 32, 32, 32, 32, 32, 32, 32, 33, 33, 33, 33, 33, 33, 33,
        33, 33, 33, 33, 33, 33, 33, 33, 33, 33])
    dst = np.array([0, 0, 1, 0, 1, 2, 0, 0, 0, 4, 5, 0, 1, 2, 3, 0, 2, 2, 0, 4,
        5, 0, 0, 3, 0, 1, 2, 3, 5, 6, 0, 1, 0, 1, 0, 1, 23, 24, 2, 23,
        24, 2, 23, 26, 1, 8, 0, 24, 25, 28, 2, 8, 14, 15, 18, 20, 22, 23,
        29, 30, 31, 8, 9, 13, 14, 15, 18, 19, 20, 22, 23, 26, 27, 28, 29, 30,
        31, 32])
    # Edges are directional in DGL; Make them bi-directional.
    u = np.concatenate([src, dst])
    v = np.concatenate([dst, src])
    # Construct a DGLGraph
    return dgl.DGLGraph((u, v))

Imprimir los nodos y los bordes de un gráfico que acaba de definir

G = build_karate_club_graph()
print('We have %d nodes.' % G.number_of_nodes())
print('We have %d edges.' % G.number_of_edges())

Visualización con nuevo gráfico NetworkX

import networkx as nx
# Since the actual graph is undirected, we convert it for visualization
# purpose.
nx_G = G.to_networkx().to_undirected()
# Kamada-Kawaii layout usually looks pretty for arbitrary graphs
pos = nx.kamada_kawai_layout(nx_G)
nx.draw(nx_G, pos, with_labels=True, node_color=[[.7, .7, .7]])

2. características impartidas a los bordes y nodos

mapa de la red neuronal característica hará que el entrenamiento conjunto de nodos y bordes.

En este ejemplo, dado que las características no dimensión nodo se obtiene mediante la incorporación de método se caracteriza por uno en caliente 5

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

embed = nn.Embedding(34, 5)  # 34 nodes with embedding dim equal to 5
G.ndata['feat'] = embed.weight

Imprimir a cabo para verificar el nodo de función

# print out node 2's input feature
print(G.ndata['feat'][2])

# print out node 10 and 11's input features
print(G.ndata['feat'][[10, 11]])

3. Definir una red de convolución de la figura.

La figura sencilla definición de un marco de red neuronal de convolución.

  • En $ $ capas L, cada nodo v yo l v_i ^ l Con un vector nudo h yo l H_i ^ l representación;
  • El propósito de cada capa es GCN polimérico cada nodo v yo l v_i ^ {l} Los vecinos que en yo u_i Vector utiliza para generar la siguiente capa representa v yo l + 1 v_i ^ {l + 1} Y entonces una función de activación no lineal.

Los pasos anteriores pueden ser vistos como un todo de paso de mensajes paradigma: cada nodo para recibir información de los nodos vecinos para actualizar su propia nodo representa. Un ejemplo gráfico de esto es:

DGL bibliotecas proporcionan una capa de aplicación GCN

from dgl.nn.pytorch import GraphConv

Definido modelo GCN GCN contiene dos capas

class GCN(nn.Module):
    def __init__(self, in_feats, hidden_size, num_classes):
        super(GCN, self).__init__()
        self.conv1 = GraphConv(in_feats, hidden_size)
        self.conv2 = GraphConv(hidden_size, num_classes)

    def forward(self, g, inputs):
        h = self.conv1(g, inputs)
        h = torch.relu(h)
        h = self.conv2(g, h)
        return h

# The first layer transforms input features of size of 5 to a hidden size of 5.
# The second layer transforms the hidden layer and produces output features of
# size 2, corresponding to the two groups of the karate club.
net = GCN(5, 5, 2)

4. Preparar y los datos de inicialización

Utilizando uno en caliente nodo vector de inicialización. Debido a que es una configuración semi-supervisado, sólo el instructor (Nodo 0) y el presidente del club (nodo 33) se le asigna una etiqueta, para conseguir los siguientes:

inputs = embed.weight
labeled_nodes = torch.tensor([0, 33])  # only the instructor and the president nodes are labeled
labels = torch.tensor([0, 1])  # their labels are different

5. Formación y presentación visual

Y el modelo de entrenamiento paso a medida PyTorch

  • Crear el optimizador,
  • Introduzca los datos de entrada,
  • Cálculo de la pérdida,
  • El uso de retropropagación modelo de optimización
import itertools

optimizer = torch.optim.Adam(itertools.chain(net.parameters(), embed.parameters()), lr=0.01)
all_logits = []
for epoch in range(50):
    logits = net(G, inputs)
    # we save the logits for visualization later
    all_logits.append(logits.detach())
    logp = F.log_softmax(logits, 1)
    # we only compute loss for labeled nodes
    loss = F.nll_loss(logp[labeled_nodes], labels)

    optimizer.zero_grad()
    loss.backward()
    optimizer.step()

    print('Epoch %d | Loss: %.4f' % (epoch, loss.item()))

Este es un ejemplo muy simple pequeña, ni siquiera dividir validación y de prueba. Por lo tanto, debido a que el modelo de salida final del vector de dos dimensiones para cada nodo, podemos fácilmente en 2D visualización espacio de este proceso a cabo, muestra el código siguiente el estado dinámico del proceso de formación de principio a fin todos los nodos son lineales proceso separable.

import matplotlib.animation as animation
import matplotlib.pyplot as plt

def draw(i):
    cls1color = '#00FFFF'
    cls2color = '#FF00FF'
    pos = {}
    colors = []
    for v in range(34):
        pos[v] = all_logits[i][v].numpy()
        cls = pos[v].argmax()
        colors.append(cls1color if cls else cls2color)
    ax.cla()
    ax.axis('off')
    ax.set_title('Epoch: %d' % i)
    nx.draw_networkx(nx_G.to_undirected(), pos, node_color=colors,
            with_labels=True, node_size=300, ax=ax)

fig = plt.figure(dpi=150)
fig.clf()
ax = fig.subplots()
draw(0)  # draw the prediction of the first epoch
plt.close()

A continuación se muestra el modelo de proceso dinámico Después de un período de formación puede predecir con exactitud nodo pertenece a qué grupo.

ani = animation.FuncAnimation(fig, draw, frames=len(all_logits), interval=200)

Proyecto Enlaces de combate: https://momodel.cn/workspace/5e8b3a29142d1d72944d121f/app

referencias:

Acerca de ##
Mo (URL: https: //momodel.cn) es un soporte de Python inteligencia artificial en línea modelar plataforma que puede ayudar a desarrollar rápidamente, la formación y el modelo de implementación.

Recientes Mo están relacionados con el aprendizaje de máquina de cursos de iniciación y actividades de intercambio de tesis en curso, el público está invitado a revisar nuestros números para la información más actualizada!

Publicado 36 artículos originales · ganado elogios 4 · Vistas a 10000 +

Supongo que te gusta

Origin blog.csdn.net/weixin_44015907/article/details/105362963
Recomendado
Clasificación