Это официальная реализация статьи: на узком месте нейронных сетей графиков и ее практических последствиях (ICLR'2021), которые вводят проблему с чрезмерной квадратной квалификацией GNN.
Ури Алон и Эран Яхав. См. Также [Видео], [плакат] и [слайды].
Этот репозиторий разделен на три подпроекта:
tf-gnn-samples
-это клон https://github.com/microsoft/tf-gnn-samples от Brockschmidt (ICML'2020). Этот проект может быть использован для воспроизведения экспериментов QM9 и Varmisuse раздела 4.2 и 4.2 в статье. Этот субпроект зависит от Tensorflow 1.13. Инструкции для нашего клона такие же, как и их исходный код, за исключением того, что воспроизведение наших экспериментов (набор данных QM9 и Varmisuse) можно выполнить, выполнив сценарий tf-gnn-samples/run_qm9_benchs_fa.py
или tf-gnn-samples/run_varmisuse_benchs_fa.py
вместо их оригинальных сценариев. Для получения дополнительных зависимостей и инструкций см. Их оригинальный Readme: https://github.com/microsoft/tf-gnn-samples/blob/master/readme.md. Основная модификация, которую мы выполнили,-это использование полностью смешанного слоя в качестве последнего слоя GNN, и мы описываем в нашей статье.gnn-comparison
является клоном https://github.com/diningphil/gnn-comparison от Errica et al. (ICLR'2020). Этот проект может быть использован для воспроизведения биологических экспериментов (раздел 4.3, наборы данных ферментов и NCI1). Этот субпроект зависит от Pytorch 1.4 и Pytorch-Geometric. Для получения дополнительных зависимостей и инструкций см. Их оригинальный Readme: https://github.com/diningphil/gnn-comparison/blob/master/readme.md. Инструкции для нашего клона одинаковы, за исключением того, что мы добавили дополнительный флаг в каждую config_*.yml
-файл, называемый last_layer_fa
, который по умолчанию устанавливается на True
и воспроизводит наши эксперименты. Основная модификация, которую мы выполнили,-это использование полностью зависимого слоя в качестве последнего слоя GNN.Этот проект был разработан, чтобы быть полезным для экспериментов с новыми архитектурами GNN и новыми решениями для проблемы с перепрышением.
Не стесняйтесь открывать проблему с любыми вопросами.
Этот проект основан на Pytorch 1.4.0 и геометрической библиотеке Pytorch.
pip install -r requirements.txt
В файле requirements.txt
перечислены дополнительные требования. Тем не менее, геометрическая геометрика Pytorch может потребовать ручной установки, и, таким образом, мы рекомендуем использовать файл requirements.txt
только после этого.
Убедитесь, что импорт зависимостей идет без ошибок:
python -c 'import torch; import torch_geometric'
Обучение на больших деревьях (глубина = 8) может потребовать ~ 60 ГБ оперативной памяти и около 10 ГБ памяти графического процессора. Память графического процессора может быть скомпрометирована с использованием меньшего размера партии и с помощью флага --accum_grad
.
Например, вместо работы:
python main.py --batch_size 1024 --type GGNN
Следующее использует накопление градиента и принимает меньше памяти графического процессора:
python main.py --batch_size 512 --accum_grad 2 --type GGNN
Чтобы запустить один эксперимент из бумаги, запустите:
python main.py --help
И увидеть доступные флаги. Например, чтобы обучить GGNN с глубиной = 4, запустите:
python main.py --task DICTIONARY --eval_every 1000 --depth 4 --num_layers 5 --batch_size 1024 --type GGNN
Чтобы тренировать GNN на всех глубинах, запустите одну из следующих действий:
python run-gcn-2-8.py
python run-gat-2-8.py
python run-ggnn-2-8.py
python run-gin-2-8.py
Результаты запуска вышеупомянутых сценариев: раздел 4.1 в статье):
R: | 2 | 3 | 4 | 5 | 6 | 7 | 8 |
---|---|---|---|---|---|---|---|
Ггнн | 1.0 | 1.0 | 1.0 | 0,60 | 0,38 | 0,21 | 0,16 |
Газ | 1.0 | 1.0 | 1.0 | 0,41 | 0,21 | 0,15 | 0,11 |
ДЖИН | 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 |
Чтобы экспериментировать с другими типами GNN:
GNN_TYPE
здесь, например: MY_NEW_TYPE = auto()
elif self is GNN_TYPE.MY_NEW_TYPE:
создать экземпляр нового объекта типа GNN здесьmain.py
: python main.py --type MY_NEW_TYPE ...
Если вы хотите привести эту работу, используйте эту запись 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}
}