Графические нейронные сети - их потребности, реальные приложения и базовая архитектура с библиотекой NetworkX
В этом посте мы собираемся исследовать относительно новую область глубокого обучения, которая включает графы - очень важную и широко используемую структуру данных. Этот пост охватывает основы графов, объединение графов и глубокого обучения, а также базовое представление о графовых нейронных сетях и их приложениях. Мы также кратко обсудим, как строить графики с помощью библиотеки Python под названием NetworkX.
Итак, приступим!
Что такое графики?
В мире информатики графы - это тип структуры данных, состоящий из двух компонентов: узлов (или вершин) и ребер, которые соединяют два узла. Таким образом, граф можно определить как набор слабо связанных между собой узлов через ребра.
Узлы графа могут быть однородными, причем все узлы имеют аналогичную структуру, или гетерогенные узлы, имеющие разные типы структуры. Ребра определяют отношения одного узла с другим. Ребра могут быть двунаправленными (от одного узла u к другому v и наоборот) или однонаправленным (от одного узла u к другому узлу v). Края также могут быть взвешены - имея вес, присвоенный ребру, который может отражать стоимость или важность ребра.
Пример: Предположим, что граф рассматривается как сеть городов, где наблюдаемые города являются узлами, а дороги, соединяющие их, являются ребрами. Теперь могут быть различные типы соответствующих проблем, которые могут быть решены с помощью графиков, например, определение кратчайшего расстояния между городами (где дороги также могут быть взвешены в соответствии с состоянием дорог или дорожным движением) или поиск городов, которые хорошо связаны друг с другом и т. д.
Что такое графические нейронные сети (GNN)?
Графы обладают огромной выразительной способностью и поэтому привлекают много внимания в области машинного обучения. С каждым узлом связано вложение, определяющее узел в пространстве данных. Графические нейронные сети относятся к архитектурам нейронных сетей, которые работают с графом. Задача GNN - для каждого узла в графе изучить вложение, содержащее информацию о его окрестности (узлы, напрямую подключенные к целевому узлу через ребра). Это встраивание затем можно использовать для решения различных задач, таких как маркировка узлов, прогнозирование узлов, прогнозирование границ и т. Д.
Таким образом, после того, как с каждым узлом связаны вложения, мы можем преобразовывать ребра, добавляя уровни нейронной сети прямого распространения и комбинируя графы и нейронные сети.
Потребность в графических нейронных сетях
Потребность в графических нейронных сетях возникла из-за того, что многие доступные нам данные находятся в неструктурированном формате. Неструктурированные данные - это данные, которые не были обработаны или не имеют заранее определенного формата, что затрудняет их анализ. Примерами таких данных являются аудио, электронные письма и сообщения в социальных сетях. Чтобы понять смысл этих данных и сделать из них выводы, нам нужна структура, которая определяет отношения между этими точками неструктурированных данных. Существующие архитектуры и алгоритмы машинного обучения не очень хорошо работают с данными такого типа. Основными преимуществами графовых нейронных сетей являются:
- Графическая структура данных оказалась чрезвычайно успешной в области информатики при работе с неструктурированными данными.
- Графики полезны для определения абстрактных понятий, таких как отношения между сущностями. Поскольку каждый узел в графе определяется своими соединениями и соседями, нейронные сети графа могут эффективно фиксировать отношения между узлами.
Таким образом, разработка GNN для обработки данных, таких как данные социальных сетей, которые являются сильно неструктурированными, представляет собой захватывающее объединение графиков и машинного обучения, которое имеет большой потенциал.
Реальные приложения графической нейронной сети
GNN, представленные недавно в 2018 году, по-прежнему имеют множество реальных приложений, поскольку их архитектура перекликается с нерегулярностью данных, собранных из различных источников. В настоящее время GNN являются горячей темой для:
Анализ социальных сетей - прогнозирование похожих сообщений, прогнозирование тегов и рекомендация контента пользователям.
Естественные науки - GNN также приобрели популярность при изучении молекулярных взаимодействий, таких как белок-белковые взаимодействия.
Рекомендательные системы. Разнородный график можно использовать для отслеживания отношений между пользователями и товарами, чтобы рекомендовать покупателю соответствующие товары.
Глубокое обучение - для экспертов, экспертами. Мы используем наш многолетний опыт, чтобы каждую неделю доставлять в ваш почтовый ящик лучшие ресурсы по глубокому обучению.
Как работают графические нейронные сети?
После того, как у нас будет базовая структура нейронной сети графа (узлы с их вложениями и ребра со слоями прямого распространения), мы можем перейти к пониманию того, как на самом деле работают GNN.
Основная идея состоит в том, чтобы изучить вложения соседей путем агрегирования информации от соседей узла по ребрам с помощью нейронных сетей.
Агрегация соседства или передача сообщений
Передача сообщений относится к передаче и получению информации между узлами о своем окружении. Рассмотрим целевой узел, имеющий свои начальные вложения: он получает информацию от своих соседей, передаваемую через граничные нейронные сети. Данные с этих ребер агрегируются (используются многие методы, такие как максимальное объединение, усреднение и т. Д.) И передаются в блок активации узла, чтобы получить новый набор вложений для узла. Каждый узел в начальной настройке имеет функции x_v. Вложения для каждого узла после передачи сообщения можно определить как:
Где x_ne [v] обозначает элементы соседей v, x_co [v] - элементы края, подключенные к v, h_ne [v] - вложение соседей v.
На приведенном выше рисунке hₐ⁽¹⁾ - это начальное вложение узла, hNₐ⁽¹⁾ - это агрегированные вложения его соседей. Их объединение и передача блоку активации или фильтру узла обеспечит новое внедрение для узла A, которое также будет содержать информацию о его соседях. Таким образом, каждый узел получает новый набор вложений для себя, который определяет его положение в графе. С помощью различных итераций или K уровней передачи сообщений узел узнает все больше и больше о своем окружении, а также о своих удаленных соседях.
В конце концов, каждый узел имеет приблизительное представление о полном графе (или его части, в зависимости от количества итераций и рассматриваемого расстояния / пути или слоев между узлами).
Пример. Рассмотрим график с сообщениями в социальных сетях в качестве узлов. Теперь, если эти узлы имеют вложения и помечены такими тегами, как романтика, наука, комедия и т. Д., Мы получаем новый пост, и нам нужно предоставить ему тег. Используя существующую сеть и вложения, агрегирование окрестностей поможет нам предсказать метки и вложения для невидимого узла.
Преимущество: вместо повторного запуска всего алгоритма мы можем просто использовать вложения соседей для определения местоположения нового сообщения. Следовательно, рекомендации на основе GNN могут быть более эффективными и масштабируемыми, чем другие традиционные алгоритмы рекомендаций машинного обучения для работы с большими наборами данных.
Типы графических нейронных сетей
Графики используются с различными существующими архитектурами нейронных сетей для получения многообещающих результатов для различных задач машинного обучения. Две наиболее доминирующие сети кратко обсуждаются ниже.
Сверточные сети с графами (GCN)
Сверточные нейронные сети (CNN) широко используются для задач классификации и сегментации изображений. Сверточная операция относится к применению пространственного фильтра к входному изображению и получению в результате карты признаков.
Подробнее о CNN можно прочитать здесь.
GCN относятся к применению пространственно перемещающегося фильтра к узлам графа, который содержит вложения или данные, относящиеся к каждому узлу, чтобы получить представление функции каждого узла. Сложение ряда сверточных слоев, таких как обычная CNN, также может быть выполнено для включения информации из более крупных районов.
Сети графического автокодировщика
Автокодировщики - это нейронные сети, которые состоят из двух сетей, объединенных через слой узких мест: кодировщика, который понижает дискретизацию входных данных, пропуская их через сверточные фильтры, чтобы обеспечить компактное представление признаков изображения, и декодер который принимает представление, предоставленное кодировщиком, в качестве входных данных и пытается воссоздать входные данные в соответствии с тем же.
Подробнее об автокодировщиках можно прочитать здесь.
Автокодировщики графов пытаются запомнить компактное представление графа, а затем заново построить граф с помощью декодера. Их можно использовать для изучения вложений графа и, следовательно, можно использовать для прогнозирования вложений для невидимых узлов и для классификации новых узлов по существующим категориям внутри графа.
Также были разработаны другие виды нейронных сетей с графами, такие как нейронные сети с пространственными и временными графами, нейронные сети с генеративными графами, нейронные сети с рекуррентными графами и т. д.
Построение графиков с помощью NetworkX
NetworkX, как упоминается в документации, представляет собой «пакет Python для создания, управления и изучения структуры, динамики и функций сложных сетей». Давайте узнаем, как строить графики с помощью NetworkX:
Установите NetworkX:
pip install networkx
Создание графика:
import networkx as nx G = nx.Graph() #defines an empty graph
Добавление узлов к графику:
#adds node 1 G.add_node(1) #adds nodes from any iterable like list G.add_nodes_from([2, 3])
Добавление ребер в граф:
#adding an edge from first node to another G.add_edge(1, 2) #adding edges from a list G.add_edges_from([(1, 2), (1, 3)]) #adding a weighted edge G.add_edge(1, 2, weight=4.5)
Таким образом мы можем построить график, над которым хотим работать. Вот простой пример поиска кратчайшего пути между двумя узлами:
import networkx as nx G = nx.Graph() G.add_edge('A', 'B', weight=5) G.add_edge('B', 'D', weight=3) G.add_edge('A', 'C', weight=4) G.add_edge('C', 'D', weight=5) nx.shortest_path(G, 'A', 'D', weight='weight') ['A', 'B', 'D']
Библиотеки, поддерживающие графические нейронные сети
Для создания и анализа структуры графа могут использоваться следующие библиотеки Python:
Для создания графовых нейронных сетей большое внимание и поддержку привлекают следующие библиотеки:
Заключение
В этом посте мы прошли путь к пониманию графов и графических нейронных сетей. Графические нейронные сети представляют собой интуитивно понятное решение для понимания неструктурированных данных и полезны для многих реальных приложений. Мы также научились строить графики с нуля с помощью библиотеки NetworkX. Построение эффективного графа влияет на выход сети.
Надеюсь, вам понравилась эта статья, и, пожалуйста, дайте мне знать, что вы думаете.
До следующего раза!
Примечание редактора. Heartbeat - это онлайн-публикация и сообщество, созданное авторами и посвященное предоставлению первоклассных образовательных ресурсов для специалистов по науке о данных, машинному обучению и глубокому обучению. Мы стремимся поддерживать и вдохновлять разработчиков и инженеров из всех слоев общества.
Независимая редакция, Heartbeat спонсируется и публикуется Comet, платформой MLOps, которая позволяет специалистам по обработке данных и группам машинного обучения отслеживать, сравнивать, объяснять и оптимизировать свои эксперименты. Мы платим участникам и не продаем рекламу.
Если вы хотите внести свой вклад, отправляйтесь на наш призыв к участникам. Вы также можете подписаться на наши еженедельные информационные бюллетени (Deep Learning Weekly и Comet Newsletter), присоединиться к нам в » «Slack и подписаться на Comet в Twitter и LinkedIn для получения ресурсов, событий и гораздо больше, что поможет вам быстрее создавать лучшие модели машинного обучения.