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