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

Вступление:

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

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

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

Представлен новый тип компонента нейронной сети общего назначения: слой смеси экспертов с редкими порциями (MoE). МО:

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

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

Структура МО

  • Состоит из набора 'n' экспертной сети E1, E2… .. En. И стробирующая сеть G, выход которой представляет собой разреженный n-мерный вектор.
  • Эксперты - это нейронные сети, каждая со своими параметрами.
  • G (x): выход закрытой сети
  • Ei (x): выход i-й экспертной сети с учетом входа x

  • Слева Y будет выходом уровня MoE.
  • Чтобы сохранить вычисления при разреженности G (x), всякий раз, когда G (x) = 0, E (x) не вычисляется. Из тысячи экспертов используется лишь несколько человек.
  • Если количество экспертов велико, мы можем сократить объем вычислений, разделив их на двухуровневую иерархическую МО. Первичный стробирующий механизм выбирает редкую комбинацию экспертов, каждый из которых сам по себе является вторичной смесью МО со своим собственным стробирующим механизмом.

Экспериментальная установка архитектуры уровня МО:

  • Каждый эксперт на уровне MoE представляет собой сеть прямого распространения с одним активированным ReLU скрытым слоем размером 1024 и выходным слоем размером 512. Таким образом, каждый эксперт содержит [512 * 1024] + [1024 * 512] = 1M параметров.
  • Выходные данные слоя MoE перед выпадением проходят через сигмовидную функцию.
  • Количество экспертов между моделями варьируется (для экспериментов в статье) с использованием обычных слоев MoE с 4, 32 и 256 экспертами и иерархических слоев MoE с 256, 1024 и 4096 экспертами.
  • Для иерархических уровней MoE коэффициент ветвления первого уровня был равен 16, что соответствует количеству графических процессоров в нашем кластере.
  • Использование стробирования Noisy-Top-K) с k = 4 для обычных слоев MoE и k = 2 на каждом уровне иерархических слоев MoE. Таким образом, каждый пример обрабатывается ровно 4 экспертами, что в сумме составляет 4 млн операций на временной шаг. Два уровня LSTM вносят 2M операций / временной шаг каждый, что дает желаемое общее количество 8M.

Сеть гейтинга

  • Softmax Gating. Очень очевидный, эффективный и наивный механизм разреженного Gating - это Softmax Gating, где мы берем softmax Входа, умноженный на матрицу весов Wg.

  • Стробирование с шумом Top-K: перед тем, как использовать функцию softmax, добавляется гауссовский шум, затем сохраняются только верхние значения k, а остальные устанавливаются равными -∞ (что приводит к тому, что соответствующие значения гейта равны 0). Термин «шум» помогает балансировать нагрузку. Уровень шума на компонент контролируется второй обучаемой весовой матрицей Wnoise.

Обучение стробирующей сети: Чтобы принять во внимание стробирующее поведение, обучение выполняется стробирующей сетью вместе со всей сетью. Если k> 1, то значения ворот K экспертов будут иметь ненулевые производные для обратного распространения.

Проблемы для таких сетей:

Проблема усадки партии

Допустим, у нас есть n экспертов для каждого примера, и теперь, если стробирующая сеть позволяет активировать k экспертов, то при размере пакета b каждый эксперт получает гораздо меньшую партию, примерно кб / n примеров. наивная реализация МО становится очень неэффективной по мере увеличения числа экспертов. Решение состоит в том, чтобы начать с гораздо большего размера batch_size, поэтому вот несколько предлагаемых способов увеличения размера пакета для каждого эксперта.

  • Сочетание параллелизма данных и параллелизма моделей. Параллелизм моделей осуществляется путем хранения копии модели на каждом из графических процессоров, и каждый получатель отдельных пакетов данных и параметров синхронизируется через набор серверов параметров. Теперь мы можем запускать эти разные пакеты синхронно, чтобы их можно было объединить для уровня MoE. Мы распределяем стандартные уровни модели и стробирующей сети в соответствии с обычными схемами параллельного обмена данными, но сохраняем только одну общую копию каждого эксперта. Каждый эксперт на уровне MoE получает комбинированный пакет, состоящий из соответствующих примеров из всех пакетов ввода с параллельными данными. Один и тот же набор устройств функционирует как реплики с параллельными данными (для стандартных уровней и стробирующих сетей) и как сегменты с параллельными моделями (на каждом из которых размещается подмножество экспертов). Если модель распределена по d устройствам, и каждое устройство обрабатывает пакет размером b, каждый эксперт получает пакет из примерно кбд / n примеров. Таким образом, мы добиваемся увеличения размера экспертной партии в d раз.
  • Рекуррентный MoE с увеличенным размером пакета. Матрицу веса RNN или LSTM можно просто заменить на MoE.

Балансировка использования экспертов

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

Заключение и мой взгляд на статью

  • Меня удивляет, что авторы не оценивали использование разных архитектур для каждой экспертной сети. Это был бы первый вариант использования, который приходит мне в голову. Они упоминают эту возможность в статье, но мне бы очень хотелось увидеть эксперименты для этого.
  • Однако кажется, что вы действительно получите большой выигрыш с этой техникой, только если у вас есть невероятный объем памяти графического процессора, доступный вам для всех этих параметров. Количество параметров (и обратное распространение) через все они кажется кошмаром. По сути, если вы работаете в Google, эта статья представляет собой серьезное улучшение языковых моделей. Если вы нас, то получите серьезный инвестиционный капитал.
  • Мне нравится вычислительная эффективность представленной модели. Авторы добиваются крайней редкости, но при этом полностью используют свои графические процессоры. В частности, авторы проектируют сеть таким образом, чтобы между активными и неактивными модулями было очень мало соединений. Если у нас есть, скажем, редко активированная полностью подключенная сеть, большая часть вычислений будет потрачена впустую на сетевые соединения, которые начинаются на активных модулях и заканчиваются на неактивных модулях.
  • Как уже упоминалось, я хотел бы увидеть такую ​​реализацию для задач семантической сегментации и очень надеюсь превзойти SOTA.
  • Как это применить: Tensorflow обладает невероятной поддержкой разреженных тензорных операций. Я думаю, что это можно сделать в тензорном потоке. Отметьте ссылку.