А.И .: Как бы я обучил нейронную сеть на нескольких машинах? - PullRequest
11 голосов
/ 15 апреля 2011

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

Я думал, что для каждой части сети сервер может отправить, может быть, 1000 наборов данных для обучения сети ... но ... у вас будет примерно такое же время вычислений, как и у меня я не могу тренироваться на разных наборах данных одновременно (что я и хочу делать).

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

Я приветствую все идеи.

Ответы [ 5 ]

5 голосов
/ 30 апреля 2011

Цитирование http://en.wikipedia.org/wiki/Backpropagation#Multithreaded_Backpropagation:

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

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

Это, по сути, то, что описывают здесь другие ответы.

2 голосов
/ 25 апреля 2011

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

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

1 голос
/ 25 апреля 2011

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

Здесь - этоссылка на вопрос о пакетном обучении.

1 голос
/ 15 апреля 2011

Я предполагаю, что у вас более 1 тренировочного комплекта, и у вас золотой стандарт.Кроме того, я предполагаю, что у вас есть какой-то способ хранения состояния нейронной сети (будь то список весов вероятности для каждого узла или что-то в этом роде).

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

1 голос
/ 15 апреля 2011

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

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

...