تعلم الآلة من الصفر مع ML-From-Scratch. أصبح تعلم Machine Learning اليوم أسهل بكثير من السابق. فهناك مكتبات جاهزة تستطيع من خلالها إنشاء نموذج للتصنيف أو الانحدار ببضعة أسطر فقط، كما أصبحت أدوات الذكاء الاصطناعي قادرة على كتابة أجزاء كبيرة من الكود نيابة عن المطور. لكن هذه السهولة تطرح مشكلة أخرى: يمكنك تشغيل خوارزمية بنجاح دون أن تفهم فعلًا ما الذي يحدث داخلها.
هنا تظهر قيمة تعلم الآلة من الصفر. فبدل التعامل مع الخوارزمية باعتبارها صندوقًا أسود تستدعيه من مكتبة جاهزة، يمكنك دراسة طريقة بنائها خطوة بخطوة، ومعرفة كيف تستقبل البيانات وتحسب النتائج وتصحح الأخطاء وتحدّث قيمها.

ولمن يريد تجربة ذلك عمليًا، يوجد على GitHub مشروع مفتوح المصدر شهير باسم ML-From-Scratch، يحاول تنفيذ عدد كبير من خوارزميات Machine Learning باستخدام Python وNumPy بطريقة تركز على وضوح آلية عمل الخوارزمية أكثر من الأداء أو السرعة.
ما هو مشروع ML-From-Scratch؟
ML-From-Scratch هو مستودع مفتوح المصدر أنشأه المطور Erik Linder-Norén، وفكرته بسيطة: تنفيذ مجموعة من خوارزميات تعلم الآلة الأساسية من البداية باستخدام Python.
ولا يحاول المشروع منافسة مكتبات مثل Scikit-learn أو TensorFlow من حيث السرعة أو الكفاءة. صاحب المشروع نفسه يوضح أن الهدف هو عرض طريقة عمل الخوارزميات الداخلية بصورة شفافة وسهلة الوصول، وهو تحديدًا ما يجعل المستودع مفيدًا لمن يريد تعلم الآلة من الصفر بدل الاكتفاء باستخدام الأدوات الجاهزة.
ويتمتع المشروع بانتشار كبير على GitHub؛ إذ تجاوز 32 ألف نجمة وله آلاف النسخ المتفرعة Forks، ما يجعله واحدًا من أشهر المستودعات المرتبطة بفكرة Machine Learning From Scratch.
ماذا ستجد داخل المستودع؟
المشروع أكبر من مجرد مثال صغير على Linear Regression. فهو يحتوي على تطبيقات لمجموعة واسعة من خوارزميات تعلم الآلة، ابتداءً من الخوارزميات الأساسية وصولًا إلى نماذج أكثر تعقيدًا.
ضمن التعلم الموجّه ستجد مثلًا Linear Regression وLogistic Regression وDecision Trees وRandom Forest وNaive Bayes وSupport Vector Machine وK-Nearest Neighbors وحتى XGBoost. أما في التعلم غير الموجّه، فيضم K-Means وDBSCAN وPCA وGaussian Mixture Models وAutoencoder وGenerative Adversarial Networks.
كما توجد أجزاء مخصصة للشبكات العصبية والتعلم العميق، بما فيها Convolutional Neural Networks وRecurrent Neural Networks، إضافة إلى مثال على Deep Q-Network ضمن التعلم المعزز.
هذه المجموعة تجعل تعلم الآلة من الصفر أكثر عملية، لأنك لا تقرأ شرحًا نظريًا للخوارزمية فقط، بل تستطيع الانتقال إلى ملفاتها البرمجية ومشاهدة طريقة تنفيذها.
لماذا نتعلم الخوارزمية إذا كانت المكتبات تنفذها عنا؟
قد يبدو بناء Linear Regression يدويًا أمرًا غير ضروري عندما تستطيع استخدام مكتبة جاهزة وتشغيل النموذج في ثوانٍ. وهذا صحيح إذا كان هدفك الوحيد إنتاج تطبيق يعمل. لكن الأمر يختلف عندما يكون هدفك التعلم.
عندما تستخدم مكتبة جاهزة، قد تمر عليك أوامر التدريب والتنبؤ دون أن تعرف كيف تم حساب الأوزان أو الخطأ أو الـGradient. أما عندما تدرس التنفيذ البرمجي للخوارزمية، تبدأ المصطلحات النظرية بالتحول إلى عمليات تستطيع رؤيتها داخل الكود.
وهذا أحد الأسباب التي تجعل تعلم الآلة من الصفر مفيدًا للطلاب والمطورين الذين يريدون تجاوز مرحلة استخدام النماذج إلى مرحلة فهمها.
وإذا كنت ما تزال في بداية Python، فمن الأفضل أولًا أن تكون مرتاحًا مع المفاهيم الأساسية للغة، ويمكنك البدء من مقالنا عن مفهوم المتغيرات في لغة Python قبل الانتقال إلى الأكواد الأكثر تعقيدًا.
قراءة الكود جزء من التعلم
هناك جانب آخر يجعل ML-From-Scratch مثيرًا للاهتمام: أنت لا تتعلم Machine Learning فقط، وإنما تتدرب أيضًا على قراءة مشاريع Python حقيقية.
في البرمجة الاحترافية، القدرة على قراءة كود كتبه شخص آخر لا تقل أهمية عن القدرة على كتابة الكود بنفسك. لذلك من المفيد أثناء دراسة المستودع ألا تنظر فقط إلى النتيجة النهائية للخوارزمية، وإنما إلى تنظيم الملفات، أسماء الدوال، تمرير البيانات وتسلسل العمليات.
وهذا يرتبط مباشرة بفكرة ناقشناها سابقًا في انكور حول كيفية كتابة كود سهل القراءة، لأن وضوح الشيفرة يصبح أكثر أهمية عندما يكون الكود نفسه وسيلة لشرح مفهوم رياضي أو خوارزمية.
يمكن مثلًا اختيار Logistic Regression، قراءة ملف التنفيذ الخاص بها، ثم محاولة ربط كل جزء من الكود بما تعلمته نظريًا عن دالة Sigmoid وحساب الخطأ وتعديل الأوزان. عندها يصبح تعلم الآلة من الصفر تمرينًا يجمع الرياضيات والبرمجة والتحليل في الوقت نفسه.
كيف تبدأ باستخدام ML-From-Scratch؟
لا تحتاج إلى دراسة المستودع كاملًا من البداية إلى النهاية. الأفضل أن تختار خوارزمية تعرف فكرتها الأساسية ثم تتبع تنفيذها داخل المشروع.
يمكن البدء بـLinear Regression، ثم Logistic Regression، وبعدها Decision Trees وK-Means. وبعد أن تصبح مرتاحًا مع طريقة كتابة الخوارزميات يمكنك الانتقال إلى الشبكات العصبية أو CNN وRNN.
يوفر المشروع كذلك أمثلة تشغيل جاهزة، منها Polynomial Regression وتصنيف الصور باستخدام CNN وDBSCAN وGAN وDeep Reinforcement Learning، لذلك يمكنك تشغيل المثال ثم العودة إلى الملفات التي تقف خلفه لمعرفة كيف تم بناء النموذج.
يمكن الوصول إلى مستودع ML-From-Scratch على GitHub والبدء بتصفّح مجلد mlfromscratch والأمثلة الموجودة داخله.
لكن لا تستخدم المشروع كبديل للمكتبات الحديثة
من المهم التفريق بين المشروع التعليمي والمكتبة المخصصة للاستخدام الفعلي. ML-From-Scratch صُمم أساسًا لشرح آلية عمل الخوارزميات وليس لتحقيق أفضل أداء ممكن، وهذا أمر يذكره المشروع نفسه بوضوح. لذلك إذا كنت تطور تطبيقًا حقيقيًا، فمكتبات مثل Scikit-learn أو PyTorch أو TensorFlow ستكون عادة الخيار الأكثر منطقية.
هناك أيضًا Issues وPull Requests حديثة تشير إلى بعض الأخطاء ومشكلات التوافق في أجزاء من المشروع، بما فيها مشكلات مرتبطة بـLogistic Regression واعتماديات قديمة. لذلك من الأفضل التعامل مع الكود كمادة للدراسة والفهم وليس كقاعدة جاهزة لبناء نظام إنتاجي حديث.
وهذه النقطة مهمة خصوصًا في الوقت الذي أصبحت فيه أدوات الذكاء الاصطناعي قادرة على كتابة الكود بشكل متزايد. فقد تناولنا سابقًا في انكور كيف يُغيّر الذكاء الاصطناعي طريقة كتابتنا للبرمجة، لكن قدرة الذكاء الاصطناعي على إنتاج الشيفرة لا تلغي الحاجة إلى فهمها. بل قد تجعل المعرفة بما يحدث خلف الكود أكثر أهمية حتى تتمكن من اكتشاف الأخطاء وتقييم الحل الذي حصلت عليه.
هل يستحق ML-From-Scratch التجربة؟
إذا كان هدفك فقط تدريب نموذج بسرعة، فربما لن تحتاج إليه. أما إذا كنت تريد فهم ما يحدث وراء fit() وpredict()، فهنا تكمن قيمته الحقيقية.
تعلم الآلة من الصفر لا يعني أنك ستبني جميع نماذجك المستقبلية يدويًا، بل يعني أنك تفكك بعض الخوارزميات مرة واحدة لتفهم الأساس الذي تعتمد عليه الأدوات التي ستستخدمها لاحقًا.
لهذا يمكن النظر إلى ML-From-Scratch باعتباره مختبرًا تعليميًا أكثر من كونه مكتبة برمجية. افتح خوارزمية واحدة، اقرأ الكود، عد إلى الرياضيات التي تقف خلفها، ثم حاول تعديل التنفيذ بنفسك. بهذه الطريقة يصبح تعلم الآلة من الصفر تجربة عملية بدل أن يبقى مجموعة من المصطلحات والمعادلات النظرية.




