Подробное введение в принципы и алгоритмы распределенного глубокого обучения

машинное обучение

вводить

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

Примечание. Статья составлена ​​компанией «Глубокое обучение и НЛП», оригинальный адрес:Джо Дэй Герман Says.com/ramblings/ The…

Параллелизм модели

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

Давайте начнем с простого примера, чтобы более четко проиллюстрировать концепцию. Предположим, что есть персептрон, как показано на рисунке 1. Чтобы распараллелить более эффективно, мы можем думать о нейронной сети как о графе зависимостей, цель которого — минимизировать количество механизмов синхронизации, предполагая, что у нас есть неограниченные ресурсы. Кроме того, механизмы синхронизации необходимы только тогда, когда узел имеет несколько зависимостей переменных. Переменная зависимость — это зависимость, которая может изменяться с течением времени. Например, смещение является статической зависимостью, поскольку значение смещения остается постоянным во времени. В персептроне, показанном на рис. 1, распараллеливание очень простое. Вычисления с несколькими входами X (x1, x2, x3...) могут выполняться параллельно.

Рисунок 1:Нарежьте персептрон с помощью распараллеливания модели. В этом методе каждый входной узел отвечает за прием входных данных Xi и умножение их на соответствующий вес Wi. После умножения результат отправляется на вывод результата для накопления и суммирования, и получается вывод. Конечно, выходному узлу нужен механизм синхронизации, чтобы гарантировать согласованность времени результата. Механизм синхронизации реализуется путем ожидания результата, от которого зависит вычисление y.

Параллелизм данных

Параллелизм данных — это совершенно другой подход к оптимизации параметров. Общая идея распараллеливания данных для сокращения времени обучения заключается в использовании n воркеров для одновременного вычисления n разных блоков данных (разделов, партиций) параллельно для оптимизации параметров центральной модели. В этом случае поместите n копий модели на n обрабатывающих узлов, т.е. каждый узел (или процесс) имеет копию модели. Затем каждый рабочий использует указанный блок данных для обучения локальной копии модели. Однако возможно, чтобы все работники работали в унисон одновременно, оптимизируя одну и ту же цель. Есть несколько способов достижения этой цели, которые подробно обсуждаются в последующих главах.

Тем не менее, распространенный способ добиться этого — использовать централизованный сервер параметров. Сервер параметров отвечает за сбор обновлений параметров от различных рабочих процессов и обработку запросов параметров от каждого рабочего процесса. Процесс распределенного обучения сначала разбивает набор данных на n сегментов. Каждый отдельный блок будет закреплен за конкретным воркером. Затем каждый рабочий процесс выбирает мини-пакеты данных из своих сегментов для обучения локальной модели. После одного (или нескольких) мини-пакетов каждый рабочий процесс свяжется с сервером параметров для отправки запросов на обновление переменных. Этот запрос на обновление обычно представляет собой градиент ∇fi(x). Наконец, сервер параметров собирает градиенты всех этих обновлений параметров, усредняет (обновляет) их и отправляет обновленные значения каждому воркеру. На рис. 2 показан описанный выше процесс.

фигура 2:Схематическая иллюстрация подхода с параллельными данными. В этом подходе задействовано n рабочих (не обязательно на разных машинах), и каждому рабочему присваиваются блоки данных (разделы) набора данных. Используя этот блок данных, каждый работник i будет проходить мини-пакет данных, генерируя градиенты ∇fi(x). Затем градиент ∇fi(x) отправляется на сервер параметров, а сервер параметров PS собирает градиент и обновляет его в соответствии с определенным механизмом обновления.

Введение в методы распараллеливания

В этом разделе мы обсудим несколько методов параллельного градиентного спуска (GD). Это не интуитивно понятная задача, потому что градиентный спуск по своей сути является последовательным алгоритмом, где каждая точка данных (экземпляр) указывает направление к минимумам. Однако использование большого набора данных для обучения модели с большим количеством параметров приведет к чрезмерному времени обучения. Если вы хотите сократить время обучения, лучше всего купить лучшее или, скорее, более подходящее оборудование (например, GPU). Однако, это не всегда возможно. По этой причине существует несколько способов достижения градиентного распараллеливания. В следующих подразделах мы представим некоторые из наиболее часто используемых методов параллельного градиентного спуска, объясним основные принципы этих методов и способы их использования.

Синхронный метод распараллеливания данных

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

изображение 3:В среде с синхронными параллельными данными n рабочих вычислений выполняются параллельно (не обязательно на разных машинах). В начале процесса обучения каждый рабочий получает последнюю центральную переменную. Затем каждый работник начнет собственное местное обучение. После локального завершения вычисления градиента рабочий процесс отправляет рассчитанную информацию об обновлении (градиент или параметризацию, в зависимости от алгоритма) на сервер параметров. Однако из-за множества неизвестных факторов в системе некоторые рабочие процессы могут серьезно задерживаться, в результате чего другие рабочие процессы будут ждать без задач, занимая при этом значительные ресурсы памяти, что приведет к увеличению времени обучения модели.

Однако из-за смоделированного рабочим процессом поведения системы (неопределенности) рабочий процесс может задержать отправку обновлений локальных параметров через определенный период времени. В основном это зависит от ситуации с балансировкой нагрузки системы, эта задержка может быть весьма значительной. Таким образом, этот подход с параллельными данными подтверждает старую поговорку: «Подход с синхронными параллельными данными может быть очень эффективным только в том случае, если самый слабый работник в кластере также очень эффективен».

средняя модель

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

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

Рисунок 4:В этом сценарии у нас есть 4 независимых воркера, каждый со случайно инициализированной моделью. Чтобы упростить ситуацию, предположим, что мы можем получить градиент непосредственно из функции потерь E(θ). При усреднении модели каждый воркер применяет градиентный спуск только в своей локальной модели, не взаимодействуя с другими воркерами. По прошествии эпохи, как показано на среднем графике, эти модели усредняются для получения центральной модели. В следующую эпоху центральная модель будет использоваться как исходная модель для всех рабочих.

EASGD

EASGD или эластичный средний SGD. EASGD — это распределенная схема оптимизации, предназначенная для снижения издержек связи с серверами параметров. Это отличается от асинхронных методов, таких как DOWNPOUR, которые в большинстве случаев требуют небольшого окна связи для правильной сходимости. Проблема с небольшим окном связи заключается в том, что процесс обучения необходимо остановить, чтобы поддерживать градиенты модели в актуальном состоянии с сервером параметров, что ограничивает пропускную способность процесса обучения. Конечно, количество параметров в модели также является важным фактором. Например, вполне возможно, что модель с параметрами со значением 100 МБ может серьезно повлиять на эффективность обучения, если предполагается синхронизация с сервером параметров после каждых 5 пакетных вычислений. Кроме того, из-за распределенного характера исследование близлежащего пространства параметров каждым работником фактически улучшает статистические характеристики модели при непрерывном градиентном спуске. Однако в настоящее время у нас нет ни доказательств, ни подтверждающих это утверждение, ни опровергающих его. Мы заметили, что после одной эпохи статистическая производительность модели обычно (значительно) меньше, чем у модели, обученной с Адамом (последовательное обучение) и ADAG (распределенное обучение). Однако, если мы позволим EASGD достичь того же времени обучения, что и ADAG после Адама, мы все равно сможем получить такую ​​же или немного худшую производительность модели. Так что есть свидетельства того, что, по крайней мере, в случае с EASGD это утверждение не совсем верно. Однако это требует дополнительных исследований.

EASGD устраняет ограничение пропускной способности связи, применяя «силу упругости» между параметрами рабочего и центральной переменной. Кроме того, каждому работнику разрешено полностью исследовать пространство параметров вокруг него из-за гибкого изменения и сокращения связи с сервером параметров. Как упоминалось выше, дополнительные исследования могут быть полезны для улучшения статистических характеристик модели. Однако мы считаем, что, как и усреднение модели, этот подход полезен только тогда, когда рабочие находятся вблизи центральной переменной, что мы продемонстрируем в экспериментальной части. Однако, в отличие от усреднения модели, рабочие не синхронизированы с центральной переменной. Возникает вопрос: как EASGD гарантирует, что работники по-прежнему занимают центральное место? Как насчет ближней переменной? Потому что при усреднении модели исследование слишком большого пространства параметров фактически ухудшает производительность центральной переменной и может препятствовать сходимости, поскольку между рабочими процессами покрываются существенно разные пространства параметров, как показано на рисунке 4. Однако, если значение параметра эластичности слишком велико, разведки вообще не произойдет.

Чтобы полностью понять смысл уравнения EASGD, как показано в уравнениях 1 и 2, мы представим рисунок 5 для подробной иллюстрации, которая раскрывает природу силы упругости. Есть два вектора: градиент ∇f и разница эластичности ηρ(θti - θtc), где η — скорость обучения, а ρ — параметр эластичности. Когда параметр упругости ρ мал, модель может дополнительно исследовать пространство параметров. Это видно из рисунка 5. Когда вектор ρ мал, упругая разность ηρ(θti – θtc) также относительно мала (если только расстояние между рабочим и центральной переменной не очень велико). Следовательно, притяжение между центральной переменной и рабочим мало, поэтому пространство параметров можно исследовать более широко.

Рисунок 5:Рабочая переменная w исследует пространство параметров для оптимизации C. Однако степень разведанности пропорциональна коэффициенту упругости ρ и величине разности (θti – θtc). В общем, когда ρ мало, модель может проводить больше исследований. Следует отметить, что при усреднении модели слишком большое исследование фактически ухудшает статистическую производительность модели (как показано на первом участке рисунка 4), потому что рабочие не достигают равномерно подходящего параметра модели. Особенно, если учесть, что центральная переменная обновляется с использованием среднего значения рабочих переменных, как показано в уравнении 2.

Теперь, исходя из уравнения 1 и приведенного выше описания, мы можем представить, что некоторые работники выполняют обновление параметров i-го шага в окне связи, а накопленный градиент больше или равен силе упругости. Таким образом, это препятствует дальнейшему изучению пространства параметров работником (как и ожидалось). Однако очевидным побочным эффектом является то, что расчеты градиента, показанные ниже, явно тратятся впустую, поскольку они компенсируются разностью эластичности, как показано на рисунке 5. Как показано в уравнении 3.

Самый простой способ решить проблему вычислительных потерь, описанную в уравнении 3, — упростить проверку условий после каждого мини-пакетного вычисления. Когда это условие выполнено, используйте ∑i−η∇f(xt+i; θt+i) для связи с сервером параметров. Таким образом, никакие вычисления не будут потрачены впустую, и, кроме того, это также ограничит гиперпараметры, поскольку окно связи теперь контролируется (косвенно) гиперпараметром ρ. По сути, основная идея ADAG (упомянутая далее в этой статье) также может быть применена к этой схеме, чтобы еще больше улучшить качество обновлений градиента и сделать схему оптимизации менее чувствительной к другим гиперпараметрам, например, количеству параллельных рабочие.

Параллельные методы асинхронных данных

Чтобы преодолеть серьезную проблему с задержкой, вызванную загруженными рабочими процессами в синхронном параллелизме данных, и, таким образом, еще больше сократить время обучения, простой способ — удалить синхронное ограничение. Однако это привело к другим последствиям, некоторые из которых не очень очевидны. Простейшим концептуально является устаревание параметров. Устаревание параметра относится к времени задержки между тем, когда рабочий получает параметр (извлекает) из центральной переменной, и затем передает параметр в следующий раз в центральную переменную. Интуитивно это означает, что рабочий обновляет параметры модели, используя градиенты на основе предыдущих параметров модели. Как показано на рисунке 6. w1 в момент времени t1, из центрального Переменная получает параметры локально для расчета.Когда локальный расчет завершен, градиент передается в центральную переменную для обновления параметров в момент времени t2.Разница во времени между t2 и t1 называется устареванием параметра w1. Поскольку между t1 и t2 w2 отправил обновление градиента, поэтому в t2 обновление параметра w1 задерживается, что нецелесообразно.

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

ПРИМЕЧАНИЕ. Следующие абзацы не нужно читать, если вам это действительно не нужно. Но, чтобы расширить: увеличение числа параллельных рабочих действует как добавление большего импульса.

Другим менее интуитивным побочным эффектом является импульс, вызванный асинхронностью. Грубо говоря, это означает, что добавление дополнительных рабочих к проблеме также добавляет неявный импульс процессу оптимизации. Этот скрытый импульс является результатом модели очередей, необходимой для асинхронности. Обратите внимание, что некоторые методы, такие как Hogwild! Синхронизированные блокировки не нужны, поскольку они предполагают редкие обновления градиента. Однако распределенный SGD также подходит для обновлений плотного градиента. Мы также подтверждаем точку зрения автора о том, что добавление большего количества асинхронных рабочих процессов фактически снижает статистическую производительность модели при использовании неустаревшего асинхронного алгоритма. Кроме того, модель поведения асинхронного алгоритма примерно описывается уравнением 4. Это означает, что неявный импульс, генерируемый асинхронно, равен (1 - 1/н).

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

Асинхронный EASGD

Схема обновления для асинхронного EASGD очень похожа на синхронную EASGD, но есть некоторые важные детали. В следующих абзацах мы будем использовать вектор -ηρ(θti - θtc) для представления упругой разности, следуя тому, как он был представлен в исходной статье. Помните, что в синхронной версии вектор фактически используется для реализации стратегии исследования пространства параметров. Это означает, что в уравнении 1 задача этого вектора не состоит в том, чтобы удерживать рабочих вдали от центральной переменной. Это именно то, что происходит, когда эластичная разница применяется к рабочим, как показано на рисунке 5.

В асинхронной версии эластичная разница имеет ту же функциональность. Однако он также будет использоваться для обновления центральной переменной. Как упоминалось в предыдущем абзаце, эластичная разность фактически используется для ограниченного исследования пространства параметров. Однако, если мы отрицаем эластичную разницу, которая равна + ηρ(θti - θtc), тогда эластичную разницу можно использовать для оптимизации центральной переменной (обратная стрелка на рисунке 5), сохраняя при этом коммуникационное ограничение, которое является чем-то вроде EASGD. работает над.

DOWNPOUR

В DOWNPOUR каждый раз, когда рабочий вычисляет градиент (или последовательность градиентов), градиент связывается с сервером параметров. Когда сервер параметров получает запрос на обновление градиента от рабочего процесса, он объединяет обновление с центральной переменной, как показано на рис. 7. В отличие от EASGD, DOWNPOUR не предполагает каких-либо коммуникационных ограничений. Что еще более важно, DOWNPOUR не будет сходиться, если не будет происходить частая связь с сервером параметров (чтобы уменьшить дисперсию рабочих операций) (это также связано с проблемой импульса, вызванной асинхронностью, см. рис. 8). Это точно такая же проблема, о которой говорилось выше. Если мы позволим рабочим исследовать «слишком много» пространства параметров, тогда все рабочие не будут работать вместе, чтобы обслуживать центральный сервер. переменной, чтобы найти хорошее решение. Кроме того, DOWNPOUR не имеет встроенного механизма сохранения окрестности центральной переменной. Следовательно, если вы увеличите размер окна связи, вы пропорционально увеличите длину градиента, отправляемого на сервер параметров. Следовательно, чтобы сделать дисперсию рабочих в пространстве параметров «меньше», центральную переменную необходимо обновлять более агрессивно.


Рисунок 7:Анимация DOWNPOUR 20 параллельных рабочих (синий) с одинаковой скоростью обучения, пытающихся оптимизировать одну цель (центральная переменная, красный) по сравнению с обычным последовательным градиентным спуском (зеленый). Как упоминалось выше, из этой анимации мы можем наблюдать, что есть импульс, вызванный асинхронным характером параллельных рабочих процессов, как мы обсуждали выше.

Рисунок 8:Анимация DOWNPOUR с 40 параллельными рабочими. В этом случае неявный импульс, создаваемый количеством рабочих, приводит к расхождению алгоритма.

ADAG

Отметим, что большое окно связи связано со снижением производительности модели. Используя некоторые модели (например, DOWNPOUR, показанные выше), мы заметили, что этот эффект смягчается при нормализации кумулятивного градиента с использованием окна связи. Есть и несколько положительных эффектов, например, нет нормализации количества параллельных воркеров, поэтому преимущества распараллеленного градиентного спуска (скорость сходимости) не теряются. Побочным эффектом этого является то, что дисперсия, создаваемая каждым работником по отношению к центральной переменной, также остается небольшой, следовательно, для центральной переменной цель имеет положительный эффект! Кроме того, благодаря нормализации модель также менее чувствительна к гиперпараметрам, особенно к размеру окна связи. Однако при этом большое окно связи также обычно снижает производительность модели, поскольку позволяет работникам исследовать больше пространства параметров на основе выборок в сегменте данных. В первом прототипе мы адаптировали DOWNPOUR, чтобы он соответствовал этой идее. Мы наблюдали следующие результаты. Во-первых, мы наблюдаем значительное улучшение производительности модели, даже сравнимое с алгоритмами последовательной оптимизации, такими как Адам. Во-вторых, по сравнению с DOWNPOUR мы можем увеличить коммуникацию в 3 раза. окно. Таким образом, ресурсы ЦП могут использоваться более эффективно, а общее время обучения может быть дополнительно сокращено. Наконец, нормализация накопленных градиентов позволяет увеличить окно связи. Таким образом, мы смогли соответствовать времени обучения EASGD и добиться примерно таких же (иногда лучших, иногда худших) результатов.

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

Суммировать

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

Рекомендованный контент в прошлом

Old Tie, приглашаю вас бесплатно изучить искусственный интеллект! ! !

Perfect backflip_Boston Dynamics выпускает новейшего робота Atalas в 2017 году

Некоторые опыты и предложения по выбору подходящей видеокарты для глубокого обучения

Стэнфордский университет-2017-осень-последний обмен курсами по базовой теории глубокого обучения

National Taiwan University-Hongyi Li-2017 (осень) Последние приложения для глубокого и машинного обучения, а также обмен углубленными и структурированными исследовательскими курсами

Массачусетский технологический институт - 2017 - Обмен видеокурсами по глубокому обучению и автономному вождению

История развития и статус применения глубокого обучения

Нормализация веса ускорителя сети глубокого обучения_WN

Блок активации GTU, GLU на основе Gate Mechanism

Резюме модели 23 - Введение в различные типы свертки в сверточных нейронных сетях

Резюме модели-12 Обучение представлению в глубоком обучении_Обучение представлению

Модель глубокого обучения-13 Обзор технологии трансферного обучения

Deep Reinforcement Learning Deep Reinforcement Learning_Paper Collection

Вариационный автоэнкодер_ Принцип анализа вариационного автоэнкодера