Представьте, что вы можете вводить свои данные прямо в модель машинного обучения и обучать ее, не прибегая к ручной маркировке. Представьте, что прогнозы в средах с разреженными данными можно улучшить без необходимости маркировать дополнительные данные или даже изменять структуру модели. Благодаря Deep Graph Infomax - алгоритму машинного обучения графов, который использует структуру графа для понимания закономерностей в данных, связанных с каждым узлом, - это долгожданная реальность.

Deep Graph Infomax - это процедура обучения без присмотра. Типичная контролируемая задача сопоставляет входные данные с входными метками, чтобы изучить закономерности в данных, которые связаны с метками. Deep Graph Infomax пропускает метки и вместо этого направляет модель, чтобы узнать, как точки входных данных связаны в виде графика, понимая, что следует или не следует связывать. Таким образом, его можно использовать как для неконтролируемых представлений этих точек, так и для предварительного обучения модели для повышения производительности частично контролируемых задач без сильно размеченных данных.

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

Библиотека StellarGraph реализует Deep Graph Infomax как гибкую процедуру обучения для большинства моделей, поддерживаемых StellarGraph, как один из нескольких методов, которые работают без присмотра. StellarGraph - это удобная библиотека с открытым исходным кодом для машинного обучения графов, построенная на Tensorflow Keras.

Пошаговое руководство: истинное или поврежденное

Основная идея состоит в том, чтобы научиться различать узлы двух графов:

  • Настоящий граф, состоящий из реальных узлов и соединяющих их ребер, а также векторов признаков, связанных с каждым узлом.
  • Поврежденный граф, узлы и ребра которого каким-то образом изменены.

Процедура обучения Deep Graph Infomax начинается с графика G и состоит из четырех компонентов:

  • Процедура повреждения C. Процедура повреждения изменяет истинный входной граф G на измененную версию H = C (G). Бумага предлагает случайным образом перемешать характеристики узлов между узлами: H имеет те же ребра, что и G, но функции, связанные с каждым узлом, различаются.
  • Кодировщик E. Кодировщик берет входной граф и вычисляет вектор внедрения v для каждого узла. Обычно это некая графическая модель машинного обучения, такая как GCN или GraphSAGE.
  • Считывание R. При считывании отдельные векторы внедрения для каждого узла в графике сворачиваются в один суммарный вектор s для весь граф, например s = R (E (G)). Это может быть просто сумма или среднее значение, или что-то более сложное.
  • Дискриминатор D. Дискриминатор сравнивает вектор внедрения узла с итоговым вектором графа, например D (v, s), чтобы получить " оценка »от 0 до 1 для каждого вектора внедрения узла.

Начиная с входного «истинного» графика G, прямой проход модели Deep Graph Infomax очень точно отражает эти компоненты:

  1. Поврежденный G на новый график: H = C (G)
  2. Закодируйте каждый узел обоих этих графиков: E (G) и E (H).
  3. Обобщите истинный график в итоговый вектор: s = R (E (G))
  4. Оцените закодированные векторы внедрения как G, так и H, используя дискриминатор и суммарный вектор G s: D (v, s) для v в E (G) и E (H)
  5. Сопоставьте все оценки в функции потерь (уравнение (1) в документе), которая пытается максимизировать D (v, s), если v - вектор внедрения истинного узла и минимизирует его, если v - вектор внедрения поврежденного узла.

После обучения дискриминатор будет давать оценки, близкие к 1 для истинных узлов, и оценки, близкие к 0 для поврежденных узлов. Как часть этого, веса модели кодировщика обучаются, чтобы быть полезными для этого шага различения. После завершения обучения модель кодировщика можно использовать независимо для прямого вычисления векторов внедрения узлов.

Алгоритмическое описание сообщает нам отдельные шаги, но не дает нам четкого представления о том, что происходит.

Интуиция: определение разумных связей

Deep Graph Infomax учится определять, какие узлы следует подключать. Из-за перетасовки функций узлов узлы в конечном итоге соединяются «странным» образом. Модель учится различать узлы с разумными соединениями и узлы со странными или неожиданными соединениями.

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

Например, в (биологическом) генеалогическом дереве с возрастом, включенным в качестве данных, окрестность узла (человека) будет связана с двумя старшими узлами (родителями) и нулем или более младшими узлами (детьми). Если края направлены от родителя к ребенку, существуют правила, например, что родители должны быть старше детей. Даже без направления ребер все еще существуют правила, такие как подключение только к двум более старым узлам. Есть и более мягкие тенденции, например, возрасты должны быть достаточно далеко друг от друга, но не слишком далеко, что отражает разумный диапазон возрастов, когда у людей есть дети.

Если функции (возраст) перемешать, эти правила и закономерности, вероятно, исчезнут. Вычисленные векторы внедрения модели E суммируют окрестности каждого узла, и они будут отражать это изменение.

Суммарный вектор s служит точкой отсчета для сравнения, как «среднее» истинное соседство.

Что за приложение?

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

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

Наконец, модель E, обученная Deep Graph Infomax, также может быть дополнительно обучена и настроена. Модель уже фиксирует полезную информацию, поэтому, опять же, для получения хороших результатов необходимо меньше меток. Это превращает контролируемую задачу в частично контролируемую, где обучение с помощью меток извлекает выгоду из существующих шаблонов, уже захваченных Deep Graph Infomax.

С чего начать?

В StellarGraph для использования Deep Graph Infomax требуется три части:

  • Базовая модель и ее генератор данных (это кодировщик E)
  • Генератор поврежденных данных для перетасовки функций (это функция повреждения C)
  • Сама модель Deep Graph Infomax, которая координирует весь процесс, включая кодирование, суммирование и различение (это включает как считываемое R, так и дискриминатор D).

Учитывая входные данные на графике G, каждая из этих точек преобразуется непосредственно в короткий фрагмент кода. Существует рассказанная демонстрация, которая описывает процедуру, которую мы резюмируем здесь.

Базовая модель создается таким же образом для обучения без учителя с помощью Deep Graph Infomax и для обучения с учителем любым обычным способом. Например, мы можем построить однослойную модель GCN:

base_generator = FullBatchNodeGenerator(graph)
base_model = GCN(
    layer_sizes=[128],
    activations=["relu"], 
    generator=base_generator
)

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

corrupted_generator = CorruptedGenerator(base_generator)

Наконец, мы создаем саму модель Deep Graph Infomax, используя базовую модель GCN и поврежденный генератор. Эта модель in_out_tensors дает входные и выходные данные, необходимые для построения модели Tensorflow Keras, которую можно обучить с помощью обычных API, таких как fit:

infomax = DeepGraphInfomax(base_model, corrupted_generator)
dgi_in, dgi_out = infomax.in_out_tensors()
dgi_model = tf.keras.Model(inputs=dgi_in, outputs=dgi_out)

После обучения базовой модели с помощью Deep Graph Infomax ее можно использовать для создания отдельной модели Keras. Затем эту модель можно дополнительно настроить с помощью fit или использовать для вычисления векторов внедрения с помощью predict:

embedding_in, embedding_out = base_model.in_out_tensors()
embedding_model = tf.keras.Model(
    inputs=embedding_in, 
    outputs=tf.squeeze(embedding_out, axis=0)
)

Вот и все! С помощью пары строк кода мы подключили базовую модель GCN к Deep Graph Infomax, чтобы ее можно было обучать без присмотра, а затем использовали обученную модель для получения векторов встраивания узлов. Это тот же самый базовый процесс, который используется при точной настройке обученной модели для сквозной классификации узлов.

В итоге -

Deep Graph Infomax - это процедура для обучения графовых моделей машинного обучения без присмотра. Он обучает модель захватывать закономерности в соединениях между узлами и их функциями, сравнивая истинные узлы с поврежденными / перетасованными узлами. Он делает это без каких-либо ручных меток, но может быть полезен в качестве процедуры инициализации или предварительного обучения, когда есть некоторые помеченные данные.

StellarGraph реализует его как процедуру обучения для многих своих моделей машинного обучения графов. Запустите pip install stellargraph и перейдите к демонстрациям Deep Graph Infomax для встраивания вычислительных узлов и для предварительного обучения для сред с дефицитом данных.

Алгоритм Deep Graph Infomax изначально был реализован в StellarGraph Кираном Рикардо. Мы работаем над обобщением нашей поддержки Deep Graph Infomax для простой работы с другими алгоритмами, такими как Relational GCN, Cluster-GCN и даже обобщение от узлов к целым графам.

Эта работа проводится при поддержке CSIRO’s Data61, ведущей австралийской сети цифровых исследований.