LINUX.ORG.RU

Многопоточная тренировка нейросети

 ,


1

3

Есть желание распаралелить обучения сети. Сейчас код приблизительно такого вида:

итерация(Набор_тренировочных_данных) {
  подготовка
  для каждого вектора x из Набор_тренировочных_данных {
    установить x как вход;
    посчитать ошибку сети, обновить веса
   }
}
пока что думаю распаралелить внутренний цикл.
Возможно есть другие варианты?

cast observer

//UPD:
или лучше параллельно обновлять веса для каждого нейрона слоя:

★★★★

Форум - General
multicore, нейронные сети, нейросеть

omich ()
Ответ на: комментарий от omich

linux.org.ru
multicore, нейронные сети, нейросеть

fixed that for ya

anonymous ()

Я рекомендую другой подход. Такая задача решается как умножение матриц. А вот они очень легко умножаются и оптимизируются под локальные кеши на GPU. Можешь так и в стократный прирост попасть на нормальной видяхе

vertexua ★★★☆☆ ()

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

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

Сходу могу вспомнить слегка похуистический, но невроятно хорошо работающий на практике подход: http://videolectures.net/nipsworkshops2011_recht_lockfree/ http://lear.inrialpes.fr/workshop/osl2013/slides/osl2013_richtarik.pdf http://www.eecs.berkeley.edu/~brecht/papers/hogwildTR.pdf

Более обоснованный, но гараздо менее популярный подход для обучения НС основан на разделении переменных, смотри ADMM S.Boyd. Вообще ADMM очень широко используется в других параллельных методах, например SVM.

http://stanford.edu/~boyd/papers/admm_distr_stats.html

Еще что-то читал у гугла, где они обновляют двойственное решение без локов, но статью пока что-то не нашел.

maggotroot ()

Модели НС с которыми я работал у меня не удавалось распараллелить.

Была идея следующая. Разбить вычисление данных по возможности на независимые циклы или хотя бы условно независимые. Далее сделать ряд тестов: с распараллеливанием и без, сравнить результаты.

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

observer ★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.