Esta é a implementação oficial do artigo: Sobre o gargalo das redes neurais gráficas e suas implicações práticas (ICLR'2021), que introduz o problema excessivo do GNNS.
Por Uri Alon e Eran Yahav. Veja também o [vídeo], [pôster] e [slides].
Este repositório é dividido em três subprojetos:
tf-gnn-samples
é um clone de https://github.com/microsoft/tf-gnn-samples por Brockschmidt (ICML'2020). Este projeto pode ser usado para reproduzir os experimentos QM9 e Varmisuse da seção 4.2 e 4.2 no artigo. Este subprojeto depende do TensorFlow 1.13. As instruções para o nosso clone são as mesmas do código original, exceto que a reprodução de nossos experimentos (o conjunto de dados QM9 e o Varmisuse) pode ser feito executando o script tf-gnn-samples/run_qm9_benchs_fa.py
ou tf-gnn-samples/run_varmisuse_benchs_fa.py
em vez de seus scripts originais. Para dependências e instruções adicionais, consulte seu Readme original: https://github.com/microsoft/tf-gnn-samples/blob/master/readme.md. A principal modificação que realizamos é usar uma camada totalmente adjacente como a última camada GNN e descrevemos em nosso artigo.gnn-comparison
é um clone de https://github.com/diningphil/gnn-comparison por errica et al. (ICLR'2020). Este projeto pode ser usado para reproduzir os experimentos biológicos (Seção 4.3, os conjuntos de dados de enzimas e NCI1). Este sub-projeto depende de Pytorch 1.4 e Pytorch-Geométrico. Para dependências e instruções adicionais, consulte seu Readme original: https://github.com/diningphil/gnn-comparison/blob/master/readme.md. As instruções para o nosso clone são as mesmas, exceto que adicionamos um sinalizador adicional a cada config_*.yml
, chamado last_layer_fa
, que é definido como True
por padrão, e reproduz nossos experimentos. A principal modificação que realizamos é usar uma camada totalmente adjacente como a última camada GNN.Este projeto foi projetado para ser útil para experimentar novas arquiteturas da GNN e novas soluções para o problema de escalada.
Sinta -se à vontade para abrir um problema com qualquer dúvida.
Este projeto é baseado no Pytorch 1.4.0 e na Biblioteca Geométrica Pytorch.
pip install -r requirements.txt
O arquivo requirements.txt
lista os requisitos adicionais. No entanto, o Pytorch Geométrico pode requer instalação manual e, portanto, recomendamos usar o arquivo requirements.txt
somente depois.
Verifique se a importação das dependências é sem erros:
python -c 'import torch; import torch_geometric'
O treinamento em árvores grandes (profundidade = 8) pode exigir ~ 60 GB de RAM e cerca de 10 GB de memória da GPU. A memória da GPU pode ser comprometida usando um tamanho menor em lote e usando o sinalizador --accum_grad
.
Por exemplo, em vez de correr:
python main.py --batch_size 1024 --type GGNN
O seguinte usa acumulação de gradiente e leva menos memória da GPU:
python main.py --batch_size 512 --accum_grad 2 --type GGNN
Para executar um único experimento do papel, execute:
python main.py --help
E veja as bandeiras disponíveis. Por exemplo, para treinar um ggnn com profundidade = 4, execute:
python main.py --task DICTIONARY --eval_every 1000 --depth 4 --num_layers 5 --batch_size 1024 --type GGNN
Para treinar um GNN em todas as profundidades, execute um dos seguintes:
python run-gcn-2-8.py
python run-gat-2-8.py
python run-ggnn-2-8.py
python run-gin-2-8.py
Os resultados da execução dos scripts acima são (Seção 4.1 no papel):
r: | 2 | 3 | 4 | 5 | 6 | 7 | 8 |
---|---|---|---|---|---|---|---|
Ggnn | 1.0 | 1.0 | 1.0 | 0,60 | 0,38 | 0,21 | 0,16 |
Gat | 1.0 | 1.0 | 1.0 | 0,41 | 0,21 | 0,15 | 0.11 |
GIN | 1.0 | 1.0 | 0,77 | 0,29 | 0,20 | ||
Gcn | 1.0 | 1.0 | 0,70 | 0,19 | 0,14 | 0,09 | 0,08 |
Para experimentar outros tipos de GNN:
GNN_TYPE
aqui, por exemplo: MY_NEW_TYPE = auto()
elif self is GNN_TYPE.MY_NEW_TYPE:
para instanciar o novo objeto do tipo GNN aquimain.py
: python main.py --type MY_NEW_TYPE ...
Se você deseja citar este trabalho, use esta entrada do Bibtex:
@inproceedings{
alon2021on,
title={On the Bottleneck of Graph Neural Networks and its Practical Implications},
author={Uri Alon and Eran Yahav},
booktitle={International Conference on Learning Representations},
year={2021},
url={https://openreview.net/forum?id=i80OPhOCVH2}
}