تعلم الآلة باستخدام C++: القوة والأداء
على الرغم من هيمنة Python في مجال علم البيانات، تظل لغة C++ لغة لا غنى عنها لأنظمة الإنتاج حيث تكون سرعة المعالجة، وانخفاض استهلاك الذاكرة، والعمل في ظل موارد محدودة (الأنظمة المدمجة، والروبوتات، والخوادم عالية التحميل) أمورًا حاسمة. توفر مكتبات تعلم الآلة بلغة C++ خوارزميات جاهزة، محسّنة لبنية المعالجات الحديثة، وتسمح بدمج نماذج تعلم الآلة مباشرة في الكود دون طبقة وسيطة للمفسر.
في هذه المقالة، سنستعرض المكتبات الرئيسية لـ C++ لتعلم الآلة، ونقاط قوتها، ونقدم أمثلة عملية على الكود.
1. Shark — مكتبة مرنة للشبكات العصبية والتحسين
Shark هي واحدة من أقدم وأكثر مكتبات C++ توثيقًا لتعلم الآلة. تحتوي على تطبيقات:
- المدركات متعددة الطبقات والشبكات العصبية الالتفافية (CNN)؛
- طرق التحسين (النزول المتدرج، L-BFGS، CMA-ES)؛
- خوارزميات التجميع (k-means، DBSCAN)؛
- النماذج الخطية وأشجار القرار.
تستخدم Shark مكتبة Eigen للجبر الخطي، مما يضمن أداءً عاليًا. مثال على تدريب الانحدار الخطي:
#include <shark/Data/Dataset.h>#include <shark/Algorithms/Trainers/LinearRegression.h>
int main() { // إنشاء البيانات: y = 2*x + 1 + ضوضاء shark::RegressionDataset data = generateData(100); shark::LinearRegression trainer; shark::LinearModel<shark::RealVector> model; trainer.train(model, data);
std::cout << "المعاملات: " << model.parameterVector() << std::endl; return 0;}المزايا: توثيق ممتاز، دعم GPU (عبر OpenCL)، مجتمع نشط.
2. Dlib — أداة متعددة الاستخدامات للرؤية الحاسوبية وتعلم الآلة
تُعرف Dlib في المقام الأول بخوارزميات التعرف على الوجوه واكتشاف الأشياء، لكن وحدة تعلم الآلة الخاصة بها لا تقل قوة. تتضمن:
- طرق آلات المتجهات الداعمة (SVM) بنوى مختلفة؛
- الغابات العشوائية وتعزيز التدرج؛
- الشبكات العصبية العميقة (مع دعم cuDNN)؛
- خوارزميات تقليل الأبعاد (t-SNE، PCA).
مثال على تدريب مصنف SVM:
#include <dlib/svm.h>
int main() { typedef dlib::matrix<double, 2, 1> sample_type; std::vector<sample_type> samples; std::vector<double> labels;
// ملء البيانات (فئتان) samples.push_back({1.0, 2.0}); labels.push_back(1); samples.push_back({3.0, 4.0}); labels.push_back(-1);
dlib::svm_c_linear_trainer<dlib::linear_kernel<sample_type>> trainer; trainer.set_c(10.0); auto decision_func = trainer.train(samples, labels);
std::cout << "التنبؤ لـ (0,0): " << decision_func({0.0, 0.0}) << std::endl; return 0;}المزايا: واجهة برمجة تطبيقات موحدة لجميع الخوارزميات، تكامل ممتاز مع OpenCV، توافق عبر المنصات.
3. Shogun — مكتبة علمية تركز على الطرق النووية
Shogun هي مكتبة قوية، تم تطويرها في المقام الأول للباحثين. ميزاتها:
- أكثر من 60 تطبيقًا للدوال النووية (RBF، متعددة الحدود، سلاسل نصية)؛
- دعم التعلم الهيكلي (HMM، CRF)؛
- واجهات لـ Python، R، Java، Octave؛
- أدوات تصور مدمجة.
مثال على استخدام انحدار العملية الغاوسية:
#include <shogun/regression/GaussianProcessRegression.h>#include <shogun/kernel/GaussianKernel.h>
int main() { auto features = some_real_features(); // بياناتك auto labels = some_regression_labels(); auto kernel = std::make