Подтвердить что ты не робот

Обучение нейронной сети параллельно, лучше использовать Hadoop или gpu?

Мне нужно обучить нейронную сеть с 2-4 скрытыми слоями, еще не уверенными в структуре фактической сети. Я подумывал тренировать его, используя сокращение карты Hadoop (кластер из 12 шт.) Или gpu, чтобы получить более быстрые результаты. Как вы думаете, что было бы лучше? Также есть ли доступные библиотеки, которые уже реализованы? Благодаря

4b9b3361

Ответ 1

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

Обучение сети с использованием распределенной системы (например, HADOOP)

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

Пример:

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

Обучение сети на графическом процессоре

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

Пример:

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