2010-03-05 44 views
7

Tôi làm việc trên một dự án học máy có thể được mong đợi để thực hiện tính toán tốc độ cao cho máy học bằng SVM (máy hỗ trợ vectơ) và có thể là ANN.Hệ thống SVM (máy học tập) số lượng lớn

Tôi khá thoải mái khi làm việc trên MATLAB với những thứ này, nhưng rất thô sơ trong các tập dữ liệu nhỏ, chỉ để thử nghiệm. Tôi tự hỏi nếu cách tiếp cận dựa trên MATLAB này sẽ mở rộng quy mô? hay tôi nên nhìn vào cái gì khác? C + +/gpu dựa trên máy tính? java gói của mã MATLAB và đẩy nó vào công cụ ứng dụng?

Ngẫu nhiên, dường như có rất nhiều tài liệu về GPU, nhưng không nhiều về mức độ hữu ích của các ứng dụng học máy bằng MATLAB, & tiền GPU tối thiểu CUDA có thể mua được? nó thậm chí còn đáng giá không?

Trả lời

5

Cả hai libsvmSVM light đều có giao diện MATLAB. Bên cạnh đó, hầu hết các nhiệm vụ học tập là song song tầm thường, vì vậy hãy xem các lệnh MATLAB như parfor và phần còn lại của Hộp công cụ tính toán song song.

7

Tôi làm việc về các vấn đề về Nhận dạng mẫu. Hãy để tôi cung cấp cho bạn một số lời khuyên nếu bạn dự định làm việc hiệu quả trên các vấn đề SVM/ANN và nếu bạn thực sự không có quyền truy cập vào cụm máy tính:

1) Không sử dụng Matlab. Sử dụng Python và số lượng lớn các thư viện số thay vì Visualization/Analysis của các tính toán của bạn.
2) Các phần quan trọng tốt hơn để triển khai bằng C. Bạn có thể tích hợp chúng với các kịch bản Python của bạn rất dễ dàng.
3) CUDA/GPU không phải là giải pháp nếu bạn chủ yếu đối phó với các vấn đề phức tạp về thời gian phi chính trị, điển hình trong Học máy, vì vậy nó không mang lại tốc độ tuyệt vời; dot/ma trận sản phẩm chỉ là một phần nhỏ của tính toán SVM - bạn vẫn sẽ phải đối phó với tính năng trích xuất và danh sách/xử lý đối tượng, thay vào đó để tối ưu hóa các thuật toán của bạn và đưa ra các phương pháp thuật toán hiệu quả. Nếu bạn cần song song (ví dụ: đối với ANN), hãy sử dụng các chủ đề hoặc quy trình.
4) Sử dụng trình biên dịch GCC để biên dịch chương trình C của bạn - nó sẽ xây dựng mã thực thi rất nhanh. Để tăng tốc độ tính toán số, bạn có thể thử cờ tối ưu hóa GCC (ví dụ: Mở rộng SIMD)
5) Chạy chương trình của bạn trên bất kỳ CPU hiện đại nào trong Hệ điều hành Linux.

Để có hiệu suất thực sự tốt, hãy sử dụng các cụm Linux.

+0

là Matlab là xấu cho SVN, hay bạn chỉ nghĩ Python nói chung là preferrable? – Jonas

+1

@ Jason: yes, Matlab không được khuyến khích vì: 1) Nó là một sản phẩm nguồn mở không độc quyền -> Nó chỉ có thể chạy trong một môi trường rất hạn chế (ví dụ: OS = {Windows, Mac}, CPU = {x86}, v.v.) 2) Matlab sử dụng dấu ngoặc đơn cho cả hai chỉ mục vào một mảng và gọi một hàm -> bạn sẽ gặp sự cố khi đọc chương trình đủ lớn của mình. 3) Matlab cực kỳ chậm, vì các đối số đầu vào cho một hàm được sao chép và không được tham chiếu như trong Python. – psihodelia

+2

Thực ra (1) Matlab chạy trong mọi môi trường chung. Tôi sử dụng nó trên Windows 64, OSX và Linux, ví dụ. (2) Kể từ khi lập chỉ mục vào một mảng cơ bản gọi một hàm (subsref, mà bạn có thể quá tải nếu bạn muốn), tôi không thấy lý do tại sao điều này phải là một vấn đề - và ít nhất là đối với tôi, khả năng đọc đến từ cấu trúc và bình luận mã, không phải từ dấu ngoặc đơn, và (3) Matlab thực hiện copy-on-write, mà dù sao đi nữa cũng sẽ là vấn đề về bộ nhớ nhiều hơn tốc độ. Nói cách khác, có vẻ như không phải là một vấn đề với việc thực hiện SVN của Matlab, nhưng bạn chỉ không thích chương trình. – Jonas

2

Tôi sẽ khuyên bạn không nên sử dụng Matlab cho bất kỳ thứ gì ngoài việc tạo mẫu. Khi dự án trở nên phức tạp và rộng hơn, tỷ lệ mã của riêng bạn sẽ tăng lên so với chức năng được cung cấp bởi MATLAB và hộp công cụ. Dự án càng phát triển, bạn càng ít được hưởng lợi từ MATLAB và bạn càng cần nhiều tính năng, thư viện và - nhiều thực hành, quy trình và công cụ nhập khẩu hơn nữa của các ngôn ngữ mục đích chung.

Mở rộng giải pháp matlab bằng cách giao tiếp với mã không phải MATLAB, và tôi đã thấy dự án MATLAB biến thành nothin nhiều hơn một mô-đun gọi keo được viết bằng ngôn ngữ đa năng. Gây đau hàng ngày cho mọi người liên quan.

Nếu bạn cảm thấy thoải mái với Java, tôi khuyên bạn nên sử dụng nó cùng với một số thư viện toán tốt (ít nhất, bạn luôn có thể giao diện MKL). Ngay cả với các tối ưu hóa Matlab gần đây, MKL + JVM nhanh hơn nhiều - việc mở rộng và bảo trì vượt quá so sánh.

C++ với nội tại cụ thể của bộ vi xử lý có thể mang lại hiệu suất tốt hơn, nhưng ở mức giá thời gian phát triển và khả năng bảo trì. Việc bổ sung thêm CUDA sẽ làm tăng thêm hiệu suất, nhưng số lượng công việc và kiến ​​thức cụ thể khó có giá trị.Chắc chắn không phải nếu bạn không có kinh nghiệm trước đó với GPU calcucations. Ngay sau khi bạn đi xa hơn bộ vi xử lý đơn, sẽ hiệu quả hơn nếu thêm một CPU khác hoặc hai hệ thống hơn là đấu tranh với các tính toán của GPU.

+0

ima, cảm ơn vì điều đó - tôi đã thực hiện một số tiền hợp lý của mã hóa với java, vì vậy tôi cho rằng đó là một cái gì đó tôi cần phải nhìn vào nhiều hơn cho dự án này. đại đa số thứ tôi dường như tìm thấy trên mạng là khá phúc âm, theo cách này hay cách khác - khó tìm được ý kiến ​​cân bằng - vì vậy cảm ơn ý kiến ​​của bạn :) – malangi

+1

thêm về cuda và libsvm: http: // mklab .iti.gr/project/GPU-LIBSVM –

0

Không có gì bây giờ sẽ vượt quá giới hạn. libsvm có một công cụ để lựa chọn tập hợp con, để chọn một tập hợp các điểm dữ liệu để đào tạo. quên về ANN, nó sẽ không khái quát và không có lý thuyết nào giúp chọn số lượng các nút ẩn, vv .. Nó phải được tối ưu hóa theo cách thủ công rất nhiều và có thể bị kẹt trong minima địa phương .. Đi với SVM chỉ

Các vấn đề liên quan