2010-03-05 3 views
7

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

Я уверенно работаю над ними с помощью Matlab, но только в небольших наборах данных, просто для экспериментов. Мне интересно, будет ли этот подход на основе Matlab масштабироваться? или я должен смотреть на что-то еще? C++/gpu на основе вычислений? java wrapping кода matlab и нажатие его на движок приложения?

Кстати, похоже, что на графических процессорах много интересного, но мало что можно сказать о том, насколько они полезны для приложений машинного обучения с использованием Matlab, &. Самые дешевые CUDA с поддержкой GPU можно купить? это даже стоит проблемы?

ответ

5

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

7

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

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

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

+0

является Matlab, что плохо для SVN, или вы просто думаете, Python, как правило, preferrable? – Jonas

+1

@ Jonas: да, Matlab не рекомендуется, потому что: 1) Это незащищенный продукт с открытым исходным кодом -> Он может работать только в очень ограниченном наборе сред (например, OS = {Windows, Mac}, CPU = {x86} и т. д.). 2) Matlab использует скобки для индексирования в массив и вызова функции -> у вас будут проблемы с чтением вашей достаточно большой программы. 3) Matlab чрезвычайно медленный, потому что входные аргументы функции копируются и не ссылаются, как на Python. – psihodelia

+2

Фактически (1) Matlab работает во всех обычных средах. Например, я использую его на 64-битной Windows, OSX и Linux. (2) Поскольку индексирование в массив в основном вызывает функцию (subsref, которую вы можете перегрузить, если хотите), я не понимаю, почему это должно быть проблемой - и, по крайней мере, для меня, читаемость исходит из структурирования и комментирования кода, а не из круглых скобок, и (3) Matlab делает copy-on-write, что в любом случае будет гораздо более проблематичным для памяти, чем для скорости. Другими словами, проблема с SVN-реализацией Matlab, похоже, не проблема, но вам просто не нравится программа. – Jonas

2

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

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

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

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

+0

ima, спасибо за это - я сделал разумное количество кодирования с помощью java, поэтому я полагаю, что это то, что мне нужно больше изучить для этого проекта. Подавляющее большинство вещей, которые я, кажется, нахожу в сети, довольно евангельские, так или иначе - его трудно найти сбалансированные мнения - так спасибо за ваши комментарии :) – malangi

+1

подробнее о cuda и libsvm: http: // mklab .iti.gr/проект/GPU-LIBSVM –

0

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