Система SVM (машинного обучения) большого объема - PullRequest
7 голосов
/ 05 марта 2010

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

Мне вполне комфортно работать с Matlab с ними, но в основном в небольших наборах данных, просто для экспериментов. Мне интересно, масштабируется ли этот подход на основе Matlab? или я должен искать что-то еще? Вычисления на основе C ++ / GPU? Java-упаковка кода Matlab и вставка его в движок приложения?

Между прочим, по-видимому, существует много литературы по графическим процессорам, но не так много о том, насколько они полезны для приложений машинного обучения, использующих matlab, и самые дешевые графические процессоры с поддержкой CUDA можно купить? стоит ли даже хлопот?

Ответы [ 5 ]

7 голосов
/ 12 марта 2010

Я работаю над проблемами распознавания образов. Позвольте мне дать вам несколько советов, если вы планируете эффективно работать над проблемами SVM / ANN и если у вас действительно нет доступа к кластеру компьютеров:

1) Не используйте Matlab. Вместо этого используйте Python и его большое количество числовых библиотек для визуализации / анализа ваших вычислений.
2) Критические разделы лучше реализовать с помощью C. Вы можете легко интегрировать их с вашими скриптами Python.
3) CUDA / GPU не является решением, если вы в основном сталкиваетесь с проблемами неполиномиальной сложности времени, что типично для машинного обучения, поэтому оно не дает большого ускорения; Точечные / матричные продукты - лишь малая часть вычислений SVM - вам все равно придется иметь дело с извлечением признаков и обработкой списков / объектов, вместо этого попробуйте оптимизировать свои алгоритмы и разработать эффективные алгоритмические методы. Если вам нужен параллелизм (например, для ANN), используйте потоки или процессы.
4) Используйте компилятор GCC для компиляции вашей C-программы - он создаст очень быстрый исполняемый код. Для ускорения численных вычислений вы можете использовать флаги оптимизации GCC (например, потоковые расширения SIMD)
5) Запустите вашу программу на любом современном процессоре под ОС Linux.

Для действительно хорошей производительности используйте кластеры Linux.

5 голосов
/ 05 марта 2010

Оба libsvm и SVM light имеют интерфейсы Matlab. Кроме того, большинство задач обучения тривиально распараллеливаемы, поэтому взгляните на команды matlab, такие как parfor и остальные инструменты Parallel Computing Toolbox.

2 голосов
/ 14 марта 2010

Я бы посоветовал не использовать Matlab для чего-либо, кроме прототипирования. Когда проект станет более сложным и обширным, доля вашего собственного кода будет расти по сравнению с функциональностью, предоставляемой Matlab и наборами инструментов. Чем более развитым становится проект, тем меньше вы получаете выгоду от Matlab и тем больше вам нужны функции, библиотеки и, что более важно, методы, процессы и инструменты языков общего назначения.

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

Если вы знакомы с Java, я бы порекомендовал использовать его вместе с хорошей математикой (по крайней мере, вы всегда можете взаимодействовать с MKL). Даже с недавней оптимизацией Matlab, MKL + JVM намного быстрее - масштабирование и ремонтопригодность не поддаются сравнению.

C ++ с присущей процессору характеристикой может обеспечить лучшую производительность, но за счет затрат времени на разработку и ремонтопригодности. Добавление CUDA еще больше повышает производительность, но объем работы и специальных знаний вряд ли стоит того. Конечно, нет, если у вас нет опыта вычислений на GPU. Как только вы выйдете за пределы одного процессора, гораздо эффективнее добавить в систему еще один или два процессора, чем бороться с вычислениями на GPU.

0 голосов
/ 11 ноября 2016

Здесь вы можете найти некоторые полупараметрические приближения, которые могут очень быстро работать с большими объемами данных:

http://www.dabi.temple.edu/budgetedsvm/

https://robedm.github.io/LIBIRWLS/

0 голосов
/ 15 марта 2011

Ничто на данный момент не будет превышать лимит. У libsvm есть инструмент для выбора подмножества, чтобы выбрать набор точек данных для обучения. забудьте об ANN, он не будет обобщать, и нет теории, которая поможет выбрать количество скрытых узлов и т. д. Он должен быть много оптимизирован вручную и может быть пойман в ловушку в локальных минимумах. Идем только с SVM

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