Содержание[Скрывать][Показывать]
Методы глубокого обучения, известные как «нейронные сети графов» (GNN), работают в области графов. Эти сети в последнее время нашли применение в различных областях, включая компьютерное зрение, рекомендательные системы и комбинаторную оптимизацию, и это лишь некоторые из них.
Кроме того, эти сети можно использовать для представления сложных систем, включая социальные сети, сети взаимодействия белок-белок, графы знаний и другие в нескольких областях исследования.
Неевклидово пространство — это место, где работают графические данные, в отличие от других типов данных, таких как изображения. Для классификации узлов, прогнозирования связей и данных кластера используется анализ графов.
В этой статье мы рассмотрим график Нейронная сеть подробно, его виды, а также привести практические примеры использования PyTorch.
Итак, что такое граф?
Граф — это тип структуры данных, состоящий из узлов и вершин. Связи между различными узлами определяются вершинами. Если направление указано в узлах, говорят, что граф ориентирован; в противном случае он ненаправлен.
Хорошим применением графов является моделирование отношений между различными людьми в социальные сети. При работе со сложными обстоятельствами, такими как ссылки и обмены, графики очень полезны.
Они используются рекомендательными системами, семантическим анализом, анализом социальных сетей и распознаванием образов.
. Создание решений на основе графов — это совершенно новая область, которая предлагает глубокое понимание сложных и взаимосвязанных данных.
Графическая нейронная сеть
Графовые нейронные сети — это специализированные типы нейронных сетей, которые могут работать с графовым форматом данных. Вложение графов и сверточные нейронные сети (CNN) оказывают на них значительное влияние.
Графовые нейронные сети используются в задачах, которые включают прогнозирование узлов, ребер и графов.
- CNN используются для классификации изображений. Точно так же, чтобы предсказать класс, GNN применяются к пиксельной сетке, которая представляет структуру графа.
- Категоризация текста с использованием рекуррентных нейронных сетей. GNN также используются с графовыми архитектурами, где каждое слово во фразе является узлом.
Чтобы прогнозировать узлы, ребра или полные графы, нейронные сети используются для создания GNN. Прогноз на уровне узла, например, может решить такую проблему, как обнаружение спама.
Прогнозирование ссылок является типичным случаем в рекомендательных системах и может быть примером проблемы прогнозирования по краям.
Типы графических нейронных сетей
Существует множество типов нейронных сетей, и в большинстве из них присутствуют сверточные нейронные сети. В этой части мы узнаем о самых известных GNN.
Графические сверточные сети (GCN)
Они сопоставимы с классическими CNN. Он приобретает характеристики, глядя на близлежащие узлы. Функция активации используется GNN для добавления нелинейности после агрегирования векторов узлов и отправки вывода в плотный слой.
По сути, он состоит из свертки графа, линейного слоя и функции активации без обучения. GCN бывают двух основных разновидностей: спектральные сверточные сети и пространственные сверточные сети.
Сети автоматического кодирования графов
Он использует кодировщик, чтобы научиться представлять графы, и декодер, чтобы попытаться восстановить входные графы. Существует слой узкого места, соединяющий кодировщик и декодер.
Поскольку автокодировщики отлично справляются с балансировкой классов, их часто используют для прогнозирования ссылок.
Рекуррентные графовые нейронные сети (RGNN)
В многореляционных сетях, где один узел имеет множество отношений, он изучает оптимальный шаблон распространения и может управлять графами. Чтобы повысить гладкость и уменьшить чрезмерную параметризацию, в этой форме графовой нейронной сети используются регуляризаторы.
Чтобы получить лучшие результаты, RGNN требуют меньше вычислительной мощности. Они используются для генерации текста, распознавания речи, машинного перевода, описания изображений, маркировки видео и суммирования текста.
Закрытые сети нейронных графов (GGNN)
Когда дело доходит до долгосрочных зависимых задач, они превосходят RGNN. Включая узловые, реберные и временные ворота для долгосрочных зависимостей, нейронные сети с вентилируемым графом улучшают нейронные сети с рекуррентным графом.
Ворота функционируют аналогично Gated Recurrent Units (GRU) в том смысле, что они используются для вызова и забвения данных на различных этапах.
Реализация графовой нейронной сети с использованием Pytorch
Конкретная проблема, на которой мы сосредоточимся, — это общая проблема категоризации узлов. У нас есть крупная социальная сеть под названием Musae-GitHub, который был скомпилирован из открытого API для разработчиков GitHub.
Ребра показывают взаимные отношения последователей между узлами, которые представляют разработчиков (пользователей платформы), которые отмечены как минимум в 10 репозиториях (обратите внимание, что слово «взаимный» указывает на ненаправленные отношения).
На основе местоположения узла, репозиториев, отмеченных звездочкой, работодателя и адреса электронной почты извлекаются характеристики узла. Прогнозирование того, является ли пользователь GitHub веб-разработчиком или разработчик машинного обучения это наша задача.
Должность каждого пользователя служила основой для этой функции таргетинга.
Установка ПиТорч
Для начала нам нужно установить PyTorch. Вы можете настроить его в соответствии с вашей машиной из здесь. Вот мой:
Импорт модулей
Теперь импортируем необходимые модули
Импорт и изучение данных
Следующим шагом является чтение данных и построение первых пяти строк и последних пяти строк из файла меток.
Только два из четырех столбцов — идентификатор узла (т. е. пользователя) и ml_target, который равен 1, если пользователь является членом сообщества машинного обучения, и 0 в противном случае — имеют отношение к нам в этой ситуации.
Учитывая, что классов всего два, теперь мы можем быть уверены, что наша задача связана с бинарной классификацией.
В результате значительного дисбаланса классов классификатор может просто предположить, какой класс составляет большинство, а не оценивать недопредставленный класс, что делает баланс классов еще одним важным фактором, который необходимо учитывать.
Построение гистограммы (распределение частот) выявляет некоторый дисбаланс, поскольку классов машинного обучения меньше (метка = 1), чем других классов.
Кодирование функций
Характеристики узлов сообщают нам о функции, связанной с каждым узлом. Реализуя наш метод для кодирования данных, мы можем мгновенно кодировать эти характеристики.
Мы хотим использовать этот метод для инкапсуляции небольшой части сети (скажем, 60 узлов) для отображения. Код указан здесь.
Проектирование и отображение графиков
Мы будем использовать геометрический факел. данные для построения нашего графика.
Для моделирования одного графа с различными (необязательными) свойствами используются данные, представляющие собой простой объект Python. Используя этот класс и следующие атрибуты — все они являются тензорами факелов — мы создадим наш объект графа.
Форма значения x, которое будет присвоено закодированным признакам узлов, такова: [количество узлов, количество признаков].
Форма y — [количество узлов], и она будет применена к меткам узлов.
индекс ребра: чтобы описать неориентированный граф, нам нужно расширить исходные индексы ребер, чтобы учесть существование двух различных направленных ребер, которые соединяют одни и те же два узла, но указывают в противоположных направлениях.
Требуется пара ребер, одно из которых указывает от узла 100 к 200, а другое от 200 к 100, например, между узлами 100 и 200. Если указаны индексы ребер, то именно так можно представить неориентированный граф. [2,2*количество исходных ребер] будет тензорной формой.
Мы создаем наш метод рисования графика для отображения графика. Первым шагом является преобразование нашей однородной сети в граф NetworkX, который затем можно нарисовать с помощью NetworkX.draw.
Создайте нашу модель GNN и обучите ее
Мы начинаем с кодирования всего набора данных, выполняя encode data со значением light=False, а затем вызывая функцию построения графика со значением light=False для построения всего графика. Мы не будем пытаться рисовать этот большой график, поскольку я предполагаю, что вы используете локальную машину с ограниченными ресурсами.
Маски, которые представляют собой бинарные векторы, определяющие, какие узлы принадлежат каждой конкретной маске с использованием цифр 0 и 1, можно использовать для уведомления фазы обучения, какие узлы следует включить во время обучения, и для указания фазе вывода, какие узлы являются тестовыми данными. Факел геометрический.трансформируется.
Разделение на уровне узла можно добавить с помощью свойств обучающей маски, маски val и тестовой маски класса AddTrainValTestMask, которые можно использовать для получения графика и предоставления нам возможности указать, как должны быть построены наши маски.
Мы просто используем 10% для обучения и используем 60% данных в качестве тестового набора, а 30% используем в качестве набора для проверки.
Теперь мы сложим два слоя GCNConv, первый из которых имеет количество выходных объектов, равное количеству объектов на нашем графике в качестве входных объектов.
На втором уровне, который содержит выходные узлы, равные количеству наших классов, мы применяем функцию активации relu и предоставляем скрытые функции.
Индекс ребра и вес ребра — это две из многих опций x, которые GCNConv может принимать в прямой функции, но в нашей ситуации нам нужны только первые две переменные.
Несмотря на то, что наша модель сможет предсказать класс каждого узла в графе, нам все равно нужно определить точность и потери для каждого набора отдельно в зависимости от фазы.
Например, во время обучения мы хотим использовать тренировочный набор только для определения точности и потерь при обучении, и поэтому здесь нам пригодятся наши маски.
Чтобы рассчитать соответствующие потери и точность, мы определим функции замаскированных потерь и замаскированной точности.
Обучение модели
Теперь, когда мы определили цель обучения, для которой будет использоваться факел. Адам — мастер оптимизации.
Мы будем проводить обучение в течение определенного количества эпох, следя за точностью проверки.
Мы также отображаем потери и точность обучения в разные эпохи.
Недостатки графовой нейронной сети
Использование GNN имеет несколько недостатков. Когда использовать GNNa и как повысить производительность наших моделей машинного обучения, нам станет ясно после того, как мы лучше их поймем.
- Хотя GNN представляют собой неглубокие сети, обычно с тремя уровнями, большинство нейронных сетей могут углубляться для повышения производительности. Из-за этого ограничения мы не можем работать на переднем крае работы с большими наборами данных.
- На графах сложнее обучать модель, так как их структурная динамика динамична.
- Из-за высоких вычислительных затрат этих сетей масштабирование модели для производства сопряжено с трудностями. Масштабирование GNN для производства будет сложной задачей, если структура вашего графа огромна и сложна.
Заключение
За последние несколько лет GNN превратились в мощные и эффективные инструменты для решения задач машинного обучения в графовой области. В этой статье дан фундаментальный обзор графовых нейронных сетей.
После этого вы можете приступить к созданию набора данных, который будет использоваться для обучения и тестирования модели. Чтобы понять, как он работает и на что он способен, вы также можете пойти намного дальше и обучить его, используя набор данных другого типа.
Удачного кодирования!
Оставьте комментарий