Многопоточное обратное распространение - PullRequest
1 голос
/ 06 января 2012

Я написал класс обратного распространения в VB.NET - он хорошо работает - и я использую его в проекте C # для искусственного интеллекта.

Но у меня дома AMD Phenom X3 и Intel i5 в школе. и моя нейронная сеть не многопоточная.

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

Ответы [ 2 ]

3 голосов
/ 06 января 2012

JeffHeaton рекомендует использовать упругое распространение (RPROP) вместо обратного распространения. Вот примеры того, как сделать многопоточный RPROP (MPROP):

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

Обновление:

Упругое распространение обычно превосходит обратное распространение значительный фактор. Кроме того, RPROP не имеет параметров, которые должны быть установленным Обратное распространение требует, чтобы скорость обучения и импульс значение уточняется. Нахождение оптимальной скорости обучения и импульса Значение для обратного распространения может быть трудным. Это не обязательно с устойчивое распространение. (источник: Encog Machine Learning )

0 голосов
/ 29 декабря 2013

Я пытался реализовать несколько потоков для пакетной обработки RPROP, но казалось, что это всегда медленнее, чем использование одного потока.Я попытался реализовать отдельно на уровне цикла «#pragma omp parallel» и вычисляя ошибки, градиенты и веса в отдельных потоках.В моей интерпретации кажется, что вычисления, выполняемые в каждом потоке, слишком малы, чтобы вычислить результат, выполненный при переключении потоков и синхронизации результатов (мьютекс). Мне интересно, сделал ли я что-то не так?Мой вывод заключается в том, что было бы разумнее запускать однопоточные RPROP, одновременно обрабатывая несколько нейронных сетей в отдельных потоках.В большинстве реализаций обычно подразумевается несколько взаимосвязанных NN, так что это имеет смысл.

...