Три месяца назад меня выбрали студентом Google Summer of Code для CERN-HSF для работы над проектом Генеративные состязательные сети (GAN) для приложений физики частиц в TMVA (Инструментарий для многомерного анализа). ) библиотека . Путешествие было действительно потрясающим, я получил удовольствие и многому научился, работая в CERN.

ROOT - это модульный научный инструментарий, разработанный ЦЕРН, который предоставляет все функции, необходимые для обработки больших данных, статистического анализа, визуализации и хранения. TMVA - это интегрированный проект ROOT, который предоставляет среду машинного обучения для обучения и оценки приложений многомерной классификации и регрессии в физике высоких энергий.

Основная цель проекта заключалась в создании основы для генерирующих состязательных сетей и разработке модели для сетей GAN в TMVA.

Введение в генеративные состязательные сети

Генеративные состязательные сети - одна из самых интересных моделей глубокого обучения. Две модели обучаются совместно через состязательный процесс:

  1. Генератор учится создавать изображения, которые выглядят настоящими.
  2. Дискриминатор учится определять, является ли изображение настоящим (из набора данных) или поддельным (из генератора).

Модель дискриминатора

Функциональность этой модели аналогична сверточной нейронной сети (CNN). Дискриминатор - это CNN, состоящая из множества скрытых слоев и одного выходного слоя. Дискриминатор изучает, как выглядят реальные изображения и какие функции должны содержать реальные данные, обучая его на реальных данных. Таким образом, выход дискриминатора может быть либо 0, либо 1, где 0 означает, что дискриминатор классифицирует входные данные как поддельные (взятые из генератора), а 1 означает, что он классифицирует входные данные как реальные (взятые из реального распределения).

Модель генератора

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

Затем генератор преобразует этот шум в значимый выходной сигнал. Шум обычно выбирается из распределения в меньшем измерении, чем размерность выходного пространства.

Обучение GAN

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

Слои для GAN

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

В TMVA были такие слои, как Convolution Layer и Maxpooling Layer, которые понижают дискретизацию входного тензора и конвертируют его в тензор более низкой размерности. Следовательно, мы ввели такие слои, как Upsample и Transpose Convolution Layer, которые вместо этого повышают дискретизацию заданного тензора и, таким образом, мы можем получить тензор более высоких измерений.

Структура слоя в TMVA

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

Слой Upsample

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

Работающий

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

Рассмотрим простой пример интерполяции ближайшего соседа, где мы повышаем дискретизацию матрицы A (3x3) до матрицы B более высокой размерности (6x6).

Транспонировать слой свертки

Операция транспонированной свертки эквивалентна вычислению градиента для обычной свертки (обратный проход нормальной свертки). Мы можем использовать его для увеличения размерности тензора вместо использования заранее определенной техники интерполяции.

Работающий

Используемый здесь метод транспонированной свертки лучше всего описывается на примере: Рассмотрим входную матрицу A (2x2) и матрицу ядра B (4x4).

Создание матрицы транспонированной свертки

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

Здесь мы преобразовываем ядро ​​4x4 в ядро ​​7x4.

Преобразование ввода в один вектор-столбец.

Здесь мы сглаживаем входную матрицу (2x2) в вектор-столбец (4x1)

Создание соответствующего выходного вектора

Таким образом, мы генерируем выходной вектор, умножая транспонированную матрицу свертки и входной вектор.

GAN в модулях TMVA DNN

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

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

Будущая работа

  • Реализуйте отдельные функции потерь для генератора и дискриминатора.
  • Добавление поддержки других вариантов GAN для приложений физики высоких энергий.
  • Сравнение результатов с другими стандартными реализациями.

Благодарности

Я хотел бы выразить свою сердечную благодарность всем моим наставникам Лоренцо Монета, Маносу Стергиадису, Сергею Глейзеру, Омару Андресу Сапата Меса, Ситонгу Ан, Стефану Вуншу, Ким Альбертссон и Херардо Гутьеррес за то, что они направляли меня на протяжении всего процесс разработки, помощь в принятии решений по внедрению и решение технических вопросов, а также ценный вклад во время еженедельных встреч.

Я также хотел бы поблагодарить Анушри Ранкават за помощь в понимании существующей кодовой базы и помощь в решении других вопросов реализации.

Google Summer of Code помог мне стать частью такого замечательного сообщества и дал мне возможность поработать над таким захватывающим проектом.

Кроме того, мне очень приятно работать с Сурья Двиведи.

Важные ссылки:

Ссылка на реализацию слоев Upsample и Transpose: PR-4146

Ссылка на код GAN: Внедрение GAN

Другие ссылки: ПР-4275