Conteúdo[Esconder][Mostrar]
As técnicas de aprendizado profundo conhecidas como “redes neurais gráficas” (GNNs) operam no domínio gráfico. Ultimamente, essas redes encontraram uso em uma variedade de campos, incluindo visão computacional, sistemas de recomendação e otimização combinatória, para citar alguns.
Além disso, essas redes podem ser usadas para representar sistemas complexos, incluindo redes sociais, redes de interação proteína-proteína, grafos de conhecimento e outros em diversas áreas de estudo.
O espaço não euclidiano é onde os dados gráficos operam, em contraste com outros tipos de dados, como imagens. Para classificar nós, prever links e dados de cluster, a análise de grafos é usada.
Neste artigo, examinaremos o gráfico Rede neural detalhadamente, seus tipos, além de fornecer exemplos práticos usando o PyTorch.
Então, o que é Gráfico?
Um grafo é um tipo de estrutura de dados composta de nós e vértices. As conexões entre os vários nós são determinadas pelos vértices. Se a direção é indicada nos nós, diz-se que o grafo é direcionado; caso contrário, é não direcionado.
Uma boa aplicação de gráficos é modelar as relações entre vários indivíduos em um rede social. Ao lidar com circunstâncias complexas, como links e trocas, os gráficos são muito úteis.
Eles são empregados por sistemas de recomendação, análise semântica, análise de redes sociais e reconhecimento de padrões.
. A criação de soluções baseadas em gráficos é um campo totalmente novo que oferece uma compreensão perspicaz de dados complexos e inter-relacionados.
Rede Neural do Gráfico
As redes neurais gráficas são tipos de redes neurais especializadas que podem operar em um formato de dados gráfico. A incorporação de gráficos e as redes neurais convolucionais (CNNs) têm um impacto significativo sobre eles.
As Redes Neurais de Gráficos são empregadas em tarefas que incluem a previsão de nós, arestas e gráficos.
- As CNNs são usadas para classificar imagens. Da mesma forma, para prever uma classe, os GNNs são aplicados à grade de pixels que representa a estrutura do gráfico.
- Categorização de texto usando redes neurais de recorrência. GNNs também são usados com arquiteturas de grafos onde cada palavra em uma frase é um nó.
Para prever nós, arestas ou grafos completos, as redes neurais são usadas para criar GNNs. Uma previsão no nível do nó, por exemplo, pode resolver um problema como a detecção de spam.
A previsão de link é um caso típico em sistemas de recomendação e pode ser um exemplo de um problema de previsão de borda.
Tipos de rede neural de gráfico
Existem vários tipos de redes neurais, e as Redes Neurais Convolucionais estão presentes na maioria delas. Vamos aprender sobre as GNNs mais conhecidas nesta parte.
Redes convolucionais de gráfico (GCNs)
Eles são comparáveis às CNNs clássicas. Adquire características olhando para nós próximos. A função de ativação é usada por GNNs para adicionar não linearidade após agregar vetores de nós e enviar a saída para a camada densa.
É composto de convolução de gráfico, uma camada linear e uma função de ativação de não-aluno, em essência. GCNs vêm em duas variedades principais: Redes Convolucionais Espectrais e Redes Convolucionais Espaciais.
Redes de codificador automático de gráfico
Ele usa um codificador para aprender a representar gráficos e um decodificador para tentar reconstruir os gráficos de entrada. Existe uma camada de gargalo conectando o codificador e o decodificador.
Como os codificadores automáticos fazem um excelente trabalho ao lidar com o equilíbrio de classes, eles são frequentemente utilizados na previsão de links.
Redes Neurais de Gráficos Recorrentes (RGNNs)
Em redes multi-relacionais, onde um único nó possui inúmeras relações, ele aprende o padrão de difusão ótimo e pode gerenciar os grafos. A fim de aumentar a suavidade e reduzir a parametrização excessiva, os regularizadores são usados nesta forma de rede neural gráfica.
Para obter melhores resultados, os RGNNs requerem menos poder de processamento. Eles são utilizados para geração de texto, reconhecimento de fala, tradução automática, descrição de imagem, marcação de vídeo e resumo de texto.
Redes de gráfico neural fechado (GGNNs)
Quando se trata de tarefas dependentes de longo prazo, eles superam os RGNNs. Ao incluir portas de nó, borda e temporais em dependências de longo prazo, as redes neurais de grafo fechado aprimoram as redes neurais de grafo recorrentes.
As portas funcionam de forma semelhante às Unidades Recorrentes Gated (GRUs), pois são usadas para recuperar e esquecer dados em vários estágios.
Implementando Rede Neural Graph usando Pytorch
O problema específico em que nos concentraremos é um problema comum de categorização de nós. Temos uma rede social considerável chamada musae-github, que foi compilado a partir da API aberta, para desenvolvedores do GitHub.
As bordas mostram os relacionamentos de seguidores mútuos entre os nós, que representam os desenvolvedores (usuários da plataforma) que marcaram presença em pelo menos 10 repositórios (observe que a palavra mútuo indica um relacionamento não direcionado).
Com base na localização do nó, repositórios com estrela, empregador e endereço de e-mail, as características do nó são recuperadas. Prever se um usuário do GitHub é um desenvolvedor web ou um desenvolvedor de aprendizado de máquina é nossa tarefa.
O cargo de cada usuário serviu de base para essa função de segmentação.
Instalando o PyTorch
Para começar, primeiro precisamos instalar PyTorch. Você pode configurá-lo de acordo com sua máquina em SUA PARTICIPAÇÃO FAZ A DIFERENÇA. Aqui é minha:
Importando módulos
Agora, importamos os módulos necessários
Importar e explorar os dados
A etapa seguinte é ler os dados e plotar as primeiras cinco linhas e as últimas cinco linhas do arquivo de rótulos.
Apenas duas das quatro colunas — o id do nó (ou seja, usuário) e ml_target, que é 1 se o usuário for membro da comunidade de aprendizado de máquina e 0 caso contrário — são relevantes para nós nessa situação.
Dado que existem apenas duas classes, agora podemos ter certeza de que nossa tarefa é uma questão de classificação binária.
Como resultado de desequilíbrios de classe significativos, o classificador pode apenas supor qual classe é a maioria em vez de avaliar a classe sub-representada, tornando o equilíbrio de classe outro fator crucial a ser considerado.
A plotagem do histograma (distribuição de frequência) revela algum desequilíbrio porque há menos classes de aprendizado de máquina (rótulo=1) do que das outras classes.
Codificação de Recurso
As características dos nós nos informam sobre a característica que está associada a cada nó. Ao implementar nosso método para codificar dados, podemos codificar instantaneamente essas características.
Queremos utilizar esse método para encapsular uma pequena parte da rede (digamos, 60 nós) para exibição. O código está listado aqui.
Projetando e exibindo gráficos
Vamos utilizar a tocha geométrica. dados para construir nosso gráfico.
Para modelar um único gráfico com propriedades diferentes (opcionais), são usados dados que são um objeto Python simples. Utilizando esta classe e os seguintes atributos - todos os quais são tensores de tocha - vamos criar nosso objeto de gráfico.
A forma do valor x, que será alocado às feições dos nós codificados, é [número de nós, número de feições].
A forma de y é [número de nós] e será aplicada aos rótulos dos nós.
índice de arestas: Para descrever um grafo não direcionado, precisamos expandir os índices de arestas originais para permitir a existência de duas arestas direcionadas distintas que ligam os mesmos dois nós, mas apontam em direções opostas.
Um par de arestas, uma apontando do nó 100 a 200 e outra de 200 a 100, é necessária, por exemplo, entre os nós 100 e 200. Se os índices de aresta forem fornecidos, então é assim que o grafo não direcionado pode ser representado. [2,2*número de arestas originais] será a forma tensorial.
Criamos nosso método de desenhar gráfico para exibir um gráfico. O primeiro passo é transformar nossa rede homogênea em um gráfico NetworkX, que pode ser desenhado usando NetworkX.draw.
Faça nosso modelo GNN e treine-o
Começamos codificando todo o conjunto de dados executando dados de codificação com light=False e, em seguida, chamando construct graph com light=False para construir o gráfico inteiro. Não tentaremos desenhar esse gráfico grande porque presumo que você esteja usando uma máquina local com recursos limitados.
As máscaras, que são vetores binários que identificam quais nós pertencem a cada máscara específica usando os dígitos 0 e 1, podem ser usadas para notificar à fase de treinamento quais nós devem ser incluídos durante o treinamento e informar à fase de inferência quais nós são os dados de teste. Tocha geometric.transforms.
Uma divisão em nível de nó pode ser adicionada usando as propriedades de máscara de treinamento, máscara val e máscara de teste da classe AddTrainValTestMask, que podem ser usadas para obter um gráfico e nos permitir especificar como queremos que nossas máscaras sejam construídas.
Apenas utilizamos 10% para treinamento e usamos 60% dos dados como conjunto de teste enquanto usamos 30% como conjunto de validação.
Agora, vamos empilhar duas camadas GCNConv, a primeira das quais tem uma contagem de recursos de saída igual ao número de recursos em nosso gráfico como recursos de entrada.
Na segunda camada, que contém nós de saída iguais ao número de nossas classes, aplicamos uma função de ativação relu e fornecemos as características latentes.
Edge index e edge weight são duas das muitas opções x que GCNConv pode aceitar na função forward, mas em nossa situação, precisamos apenas das duas primeiras variáveis.
Apesar do fato de que nosso modelo será capaz de prever a classe de cada nó no gráfico, ainda precisamos determinar a precisão e a perda para cada conjunto separadamente dependendo da fase.
Por exemplo, durante o treinamento, queremos apenas utilizar o conjunto de treinamento para determinar a precisão e a perda de treinamento e, portanto, é aqui que nossas máscaras são úteis.
Para calcular a perda e a precisão apropriadas, definiremos as funções de perda mascarada e precisão mascarada.
Treinando o modelo
Agora que definimos o propósito de treinamento para o qual a tocha será usada. Adam é um otimizador mestre.
Conduziremos o treinamento por um certo número de épocas, observando a precisão da validação.
Também traçamos as perdas e acurácias do treinamento ao longo de diferentes épocas.
Desvantagens da Rede Neural de Gráfico
O uso de GNNs tem algumas desvantagens. Quando empregar o GNNa e como melhorar o desempenho de nossos modelos de aprendizado de máquina ficarão claros para nós depois que tivermos uma melhor compreensão deles.
- Embora as GNNs sejam redes superficiais, normalmente com três camadas, a maioria das redes neurais pode se aprofundar para melhorar o desempenho. Não podemos ter um desempenho de ponta em grandes conjuntos de dados devido a essa limitação.
- É mais difícil treinar um modelo em grafos, pois sua dinâmica estrutural é dinâmica.
- Devido aos altos custos computacionais dessas redes, dimensionar o modelo para produção apresenta desafios. Dimensionar os GNNs para produção será um desafio se sua estrutura gráfica for enorme e complicada.
Conclusão
Nos últimos anos, as GNNs se tornaram ferramentas poderosas e eficazes para problemas de aprendizado de máquina no domínio gráfico. Uma visão geral fundamental das redes neurais gráficas é dada neste artigo.
Depois disso, você pode começar a criar o conjunto de dados que será usado para treinar e testar o modelo. Para entender como ele funciona e do que é capaz, você também pode ir muito mais longe e treiná-lo usando um tipo diferente de conjunto de dados.
Boa Codificação!
Deixe um comentário