Новый фреймворк может изучать встраивание графов в большие графовые структуры.

Недавно я начал новый информационный бюллетень, посвященный образованию в области искусственного интеллекта. TheSequence - это информационный бюллетень, ориентированный на искусственный интеллект (то есть без рекламы, без новостей и т. Д.), На чтение которого уходит 5 минут. Цель состоит в том, чтобы держать вас в курсе проектов, исследовательских работ и концепций машинного обучения. Пожалуйста, попробуйте, подписавшись ниже:



Графы - одна из фундаментальных структур данных в приложениях машинного обучения. В частности, методы встраивания графов представляют собой форму обучения без учителя, поскольку они изучают представления узлов, используя собственную структуру графа. Данные обучения в основных сценариях, таких как прогнозы в социальных сетях, обнаружение паттернов Интернета вещей (IOT) или моделирование последовательности лекарств, естественным образом представляются с помощью структур графов. Любой из этих сценариев может легко создать графы с миллиардами взаимосвязанных узлов. Несмотря на то, что богатство и встроенные возможности навигации структур графов являются отличной площадкой для моделей машинного обучения, их сложность создает серьезные проблемы с масштабируемостью. Неудивительно, что поддержка крупномасштабных структур данных графа в современных средах глубокого обучения все еще довольно ограничена. Недавно Facebook представил PyTorch BigGraph, новый фреймворк, который значительно ускоряет и упрощает встраивание графов для очень больших графов в модели PyTorch.

В некоторой степени структуры графа можно рассматривать как альтернативу помеченному набору обучающих данных, поскольку связи между узлами могут использоваться для вывода определенных отношений. Это подход, которому следуют методы встраивания графа без учителя, которые изучают векторное представление каждого узла в графе, оптимизируя цель, заключающуюся в том, что вложения для пар узлов с ребрами между ними расположены ближе друг к другу, чем пары узлов без общего ребра. Это похоже на то, как обучаются вложения слов, такие как word2vec, в тексте.

Большинство методов встраивания графов приводят к весьма ограниченным результатам при применении к большим структурам графов. В качестве примера: модель с двумя миллиардами узлов и 100 параметрами внедрения на узел (выраженными как числа с плавающей запятой) потребует 800 ГБ памяти только для хранения своих параметров, поэтому многие стандартные методы превышают объем памяти типичных стандартных серверов. To представляет собой серьезную проблему для моделей глубокого обучения и является источником фреймворка BigGraph от Facebook.

PyTorch BigGraph

Цель PyTorch BigGraph (PBG) - позволить моделям встраивания графов масштабироваться до графов с миллиардами узлов и триллионами ребер. PBG достигает этого, используя четыре основных строительных блока:

  • разбиение графа, чтобы модель не нужно было полностью загружать в память
  • многопоточные вычисления на каждой машине
  • распределенное выполнение на нескольких машинах (необязательно), все одновременно работают с непересекающимися частями графа
  • пакетная выборка негативов, позволяющая обрабатывать ›1 миллион кромок в секунду на машину и 100 негативов на каждую кромку.

PBG устраняет некоторые недостатки традиционных методов встраивания графов, разбивая структуру графа на произвольно разделенные на P разделы, размер которых позволяет разместить два раздела в памяти. Например, если у края есть источник в разделе p1 и место назначения в разделе p2, то оно помещается в корзину (p1, p2). В той же модели ребра графа затем делятся на сегменты P2 в зависимости от их исходного и целевого узла. После того, как узлы и ребра разделены, обучение может выполняться по одному сегменту за раз. Обучение ведра (p1, p2) требует, чтобы вложения только для разделов p1 и p2 были сохранены в памяти. Структура PBG гарантирует, что в корзинах есть по крайней мере один предварительно обученный раздел внедрения.

Еще одна область, в которой PBG действительно вводит новшества, - это распараллеливание и распределение тренировочных механизмов. PBG использует примитивы распараллеливания PyTorch для реализации модели распределенного обучения, которая использует структуру разбиения блоков, показанную ранее. В этой модели отдельные машины координируются для обучения на непересекающихся бакетах с использованием сервера блокировки, который распределяет бакеты для рабочих, чтобы минимизировать обмен данными между различными машинами. Каждая машина может обучать модель параллельно, используя разные ковши.

На предыдущем рисунке модуль Trainer на машине 2 запрашивает сегмент у сервера блокировки на машине 1, который блокирует разделы этого сегмента. Затем тренер сохраняет все разделы, которые он больше не использует, и загружает новые разделы, которые ему нужны, на серверы сегментированных разделов и с них, после чего он может освободить свои старые разделы на сервере блокировки. Затем ребра загружаются из общей файловой системы, и обучение происходит в нескольких потоках без межпоточной синхронизации. В отдельном потоке небольшое количество общих параметров постоянно синхронизируется с сервером сегментированных параметров. Контрольные точки модели иногда записываются обучающими в общую файловую систему. Эта модель позволяет распараллеливать набор P-ковшей с использованием до P / 2 машин.

Одним из косвенных нововведений PBG является использование методов групповой отрицательной выборки. Традиционные модели встраивания графов строят случайные «ложные» ребра в качестве отрицательных обучающих примеров наряду с истинно положительными ребрами. Это значительно ускоряет обучение, потому что только небольшой процент весов должен обновляться с каждой новой выборкой. Однако отрицательные выборки в конечном итоге приводят к увеличению производительности при обработке графа и в конечном итоге «искажают» истинные края случайными исходными или целевыми узлами. PBG представляет метод, который повторно использует один пакет из N случайных узлов для создания искаженных отрицательных выборок для N обучающих ребер. По сравнению с другими методами внедрения, этот метод позволяет нам обучаться на множестве отрицательных примеров для каждого истинного ребра с небольшими вычислительными затратами.

Чтобы повысить эффективность использования памяти и вычислительные ресурсы на больших графах, PBG использует один пакет исходных или целевых узлов Bn выборки для построения нескольких отрицательных примеров. В типичной настройке PBG берет пакет из B = 1000 положительных фронтов из обучающего набора, и разбивает его на куски по 50 граней. Целевые (эквивалентно, исходные) вложения из каждого фрагмента объединяются с 50 встраиваниями, равномерно выбираемыми из типа конечной сущности. Внешний продукт 50 положительных результатов на 200 выбранных узлов равняется 9900 отрицательным примерам.

Подход пакетной отрицательной выборки напрямую влияет на скорость обучения моделей. Без пакетной обработки скорость обучения обратно пропорциональна количеству отрицательных выборок. Пакетная тренировка улучшает это уравнение, обеспечивая постоянную скорость тренировки.

Facebook оценил PGB с использованием различных наборов данных графиков, таких как LiveJournal, данные Twitter и данные взаимодействия пользователей YouTube. Кроме того, для тестирования PBG использовался граф знаний Freebase, который содержит более 120 миллионов узлов и 2,7 миллиарда ребер, а также меньшее подмножество графа Freebase, известное как FB15k, которое содержит 15 000 узлов и 600 000 ребер и обычно используется в качестве эталон для методов вложения множественных отношений. Эксперименты FB15k показали, что PBG работает аналогично современным моделям встраивания графов. Однако при сравнении с полным набором данных Freebase PBG показывает, что потребление памяти улучшается более чем на 88%.

PBG - один из первых методов, который может масштабировать, обучать и обрабатывать данные графа до структур с миллиардами узлов и триллионами ребер. Первая реализация PBG была открыта в GitHub, и мы должны ожидать интересных публикаций в ближайшем будущем.