Обновления SGD в пространстве с асинхронной тренировкой

Я ищу творческие способы, чтобы ускорить время тренировки для моих нейронных сетей, а также, возможно, уменьшить исчезающий градиент. Я рассматривал возможность разбить сеть на разные узлы, используя классификаторы на каждом узле в качестве "бустеров" backprop, а затем размещать узлы друг над другом с редкими соединениями между каждым узлом (столько, сколько я могу обойтись без сети Ethernet). насыщение делает его бессмысленным). Если я сделаю это, я не уверен, что мне придется поддерживать какое-то состояние между узлами и проводить синхронную тренировку на одном и том же примере (возможно, это противоречит цели ускорения процесса), ИЛИ Я могу просто тренироваться на тех же данных, но асинхронно. Я думаю, что могу, и весовое пространство все еще может обновляться и распространяться по моим разреженным соединениям между узлами, даже если они тренируются на разных примерах, но неуверенно. Может кто-то подтвердить это возможно или объяснить, почему нет?

1 ответ

Можно делать то, что вы предлагаете, однако это огромный труд для одного человека. Самым свежим примером, о котором я знаю, является структура "DistBelief", разработанная большой исследовательской / инженерной группой в Google. См. Документ NIPS 2012 года по адресу http://static.googleusercontent.com/media/research.google.com/en//archive/large_deep_networks_nips2012.pdf.

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

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

Обновления параметров обрабатываются отдельным "сервером параметров". Рабочие отправляют вычисления градиента на сервер параметров и периодически получают обновленные значения параметров с сервера.

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

Другие вопросы по тегам