مرحباً بالجميع، في هذا المقال سنكمل معًا الدورة التدريبية الخاصة بتعلم الآلة باستخدام PyTorch وScikit-learn. من الضروري الاطلاع على المقالات السابقة قبل قراءة هذا المقال، لأن كل شيء مبني على ما سبقه.
في هذا المقال، سنناقش موضوعًا مهمًا وسؤالًا لطالما طرحته على نفسي في بداية تعلمي لمجال تعلم الآلة: بما أن لغة بايثون لغة برمجة بطيئة، فلماذا هي لغة الذكاء الاصطناعي الأولى؟ فكل تطبيقات الذكاء الاصطناعي حاليًا تستخدم بايثون، ومن المعروف أن الذكاء الاصطناعي يتطلب لغة برمجة سريعة جدًا، وبايثون ليست كذلك. فلماذا نستخدمها؟ هذا هو السؤال الذي سنجيب عليه. وفي نهاية المقال، سنقوم بتثبيت البرنامج الذي سنبدأ العمل عليه في الفصول الثلاثة الأولى من دورة تعلم الآلة. لنبدأ.
تشبيه لفهم المشكلة
للإجابة على هذا السؤال، دعونا نستخدم مثالًا بسيطًا لتوضيح الفكرة وتسهيل فهمها. لنفترض أن لغة بايثون هي بمثابة طاهٍ يعمل في منزلك. هذا الطاهي يعرف وصفات كثيرة جدًا، تمامًا كما أن لغة بايثون تعرف تقنيات برمجية كثيرة.
هذا الطاهي يستطيع العمل في مطابخ مختلفة، فيمكنه العمل في مطبخ لإعداد البيتزا، أو مطبخ للمشويات، وغيرها الكثير. بالمثل، لغة بايثون يمكن استخدامها في مجالات متعددة مثل علم البيانات (المرتبط بالذكاء الاصطناعي عمومًا)، وتطوير الويب، والأتمتة، وتقريبًا كل شيء في الوقت الحالي.
ولكن، لغة بايثون بطيئة. لماذا؟ لأنها تنفذ كل شيء بنفسها. فالطاهي في مثالنا يقوم بإعداد كل الوصفات يدويًا، دون الاعتماد على أدوات حديثة مثل الخلاط الكهربائي أو الفرن الحديث التي تسرّع عملية الطهي. إنه يعتمد على الطريقة اليدوية والأدوات التقليدية التي لا تزيد من سرعة الطهي. بنفس الطريقة، عندما نستخدم بايثون بمفردها في الذكاء الاصطناعي، تكون بطيئة جدًا لأنها في الحقيقة لغة مفسَّرة (Interpreted Language)، وسنفهم معنى ذلك بعد قليل.
كيف تتغلب بايثون على بطئها؟
السؤال المهم الآن هو: بما أن بايثون بطيئة، كيف يمكننا جعلها سريعة؟ وبما أن الطاهي بطيء، كيف نجعله سريعًا؟
الحل هو أن يعتمد الطاهي على الأدوات الحديثة مثل الخلاط والفرن الحديث لتسريع عملية الطهي. أما بالنسبة لبايثون، فكيف نجعلها سريعة؟ الحل يكمن في أن بايثون، على الرغم من كونها بطيئة في الأساس، فإنها عند تنفيذ المهام التي تتطلب سرعة عالية، تقوم باستدعاء مكتبات أخرى مبنية على لغات برمجة سريعة مثل C أو Fortran. تخاطب بايثون هذه المكتبات قائلة: “خذي هذه المهمة، نفذيها بسرعة، وأعيدي لي النتيجة”.
هذه المكتبات مثل Scikit-learn
، PyTorch
، وNumPy
، وسنتعرف على وظائفها لاحقًا. ما يهم هنا هو فهم المفهوم العام.
ملخص هذا الجزء:
لغة بايثون بطيئة ولكنها تُستخدم بكثرة في الذكاء الاصطناعي. ولكي تكون سريعة في تطبيقات الذكاء الاصطناعي، فإنها تعتمد على مكتبات مبنية بلغات برمجة سريعة مثل Scikit-learn
، PyTorch
، وNumPy
وغيرها.
لغات مفسرة (Interpreted) مقابل لغات مترجمة (Compiled)
لنتعمق في التفاصيل أكثر. بايثون هي ما نسميه لغة مفسَّرة (Interpreted Language). ماذا يعني ذلك؟ لو كان لديك كود برمجي مكون من 10 أسطر، فإن اللغة المفسَّرة تقرأ كل سطر على حدة، ثم تنفذه، ثم تنتقل إلى السطر التالي لتقرأه وتنفذه، وهكذا. هي تنفذ الكود سطرًا بسطر، ولهذا السبب هي بطيئة.
يشبه هذا تمامًا المترجم الفوري الذي يستمع إلى الجملة منك ثم يترجمها في الوقت الفعلي. بايثون تفعل نفس الشيء؛ تأخذ السطر الأول، تترجمه، ثم تنفذه، وهكذا.
أما لغات البرمجة مثل C، فهي ليست كذلك. لغة C تقرأ الأسطر العشرة معًا، ثم تترجمها كلها إلى تعليمات تفهمها الآلة (Machine Instructions)، وبعد ذلك تنفذها دفعة واحدة. لهذا السبب، تُسمى لغة C لغة مترجمة (Compiled Language)، لأنها تأخذ الكود بأكمله وتحوله باستخدام المترجم (Compiler) ثم تشغله مرة واحدة.
في بايثون، يمكنك رؤية نتيجة كل سطر بعد تنفيذه مباشرة. أما في لغات مثل C، فلا يوجد هذا الأمر؛ البرنامج بأكمله يُترجم وتظهر النتيجة النهائية في الآخر.
وبما أن بايثون لغة مفسَّرة ويمكننا رؤية نتيجة كل سطر على حدة، فإن عملية تصحيح الأخطاء (Debugging) تكون سهلة جدًا. فإذا كان هناك خطأ في الكود، من السهل تحديد مكانه وتعديله.
لماذا نفضل بايثون على C؟
بما أن بايثون بطيئة، لماذا لا نستخدم لغة C مباشرة؟ أعتقد أننا أجبنا على هذا السؤال جزئيًا، ولكن دعونا نلخص الأسباب:
- سهولة اللغة: بايثون لغة سهلة جدًا لأنها مفسَّرة، وكتابة الكود فيها تشبه كتابة نص عادي، مما يجعلها سهلة الفهم مقارنة بلغة C.
- المرونة (Flexibility): هي لغة برمجة واحدة ولكن يمكنك استخدامها في مجالات كثيرة جدًا، مثل تطبيقات الويب والذكاء الاصطناعي وغيرها.
- الإنتاجية (Productivity): يمكنك كتابة كود صغير جدًا وبسرعة، وهذا الكود الصغير قادر على تنفيذ مهام كبيرة. وبما أن الكود صغير، فإن الأخطاء (Bugs) والمشاكل التي قد تحدث فيه تكون أقل، مما يعني أن إنتاجيتك كمبرمج ستزيد عند استخدام بايثون مقارنة بلغة C.
لهذه الأسباب، تعد بايثون من أشهر لغات البرمجة المستخدمة في الذكاء الاصطناعي.
خلاصة القول: بايثون لغة برمجة بطيئة، ولكن لجعلها سريعة، نجعلها تستخدم أدوات أو مكتبات أخرى مبنية على لغات سريعة مثل C وFortran. فعندما تحتاج بايثون إلى تنفيذ مهمة بسرعة، مثل عملية رياضية معقدة، فإنها تستعين بمكتبات خارجية للقيام بهذه المهام.
التحضير لبيئة العمل: تثبيت Anaconda
الآن، سننتقل إلى تجهيز بيئة العمل. في بداية الدورة، ذكرنا أننا سنستخدم محرر Cursor
، وهو برنامج قوي جدًا. ولكن للتسهيل في الفصول الثلاثة الأولى، سنستخدم Anaconda
، وتحديدًا برنامج Spyder
. هذا الخيار سيكون أسهل للمبتدئين في مجال تعلم الآلة. بعد الفصول الثلاثة الأولى، سيكون لديك المعرفة الكافية للانتقال إلى Cursor
وتعلم كيفية استخدام Docker
وContainers
لتشغيل خوارزميات تعلم الآلة. لا تقلق إذا لم تفهم هذه المصطلحات الآن، فستفهمها مستقبلًا.
ما هي Anaconda؟
Conda
هي مدير حزم (Package Manager) مفتوح المصدر مخصص للغة بايثون، وهو مهم جدًا إذا كنت ستتعامل مع أي شيء يتعلق بعلم البيانات، الرياضيات، أو الهندسة. يعمل على أنظمة تشغيل متعددة مثل ويندوز، لينكس، وماك.
لتثبيت Conda
على جهازك والبدء في كتابة أكواد بايثون، لديك ثلاثة خيارات:
- Anaconda: هو برنامج يحتوي على
Conda
بالإضافة إلى جميع الحزم العلمية (Scientific Packages) مثبتة مسبقًا. على سبيل المثال، مكتبات مثلNumPy
وScikit-learn
التي سنستخدمها لاحقًا تكون مثبتة بالفعل. حجمه كبير نوعًا ما، ولكنه مناسب جدًا للمبتدئين، وهو ما سنستخدمه. - Miniconda: هو نفس
Anaconda
ولكن بدون أي حزم مثبتة مسبقًا. ستحتاج إلى تثبيت كل حزمة تريدها بنفسك. - Miniforge: يشبه
Miniconda
ولكنه يعتمد على مستودع (Repository) مختلف يتم تحديثه باستمرار بمكتبات جديدة.
في البداية، سنستخدم Anaconda
لأنه الأسهل للمبتدئين.
المكتبات التي سنستخدمها
في دورة تعلم الآلة هذه، سنستخدم المكتبات التالية:
- NumPy: من أشهر المكتبات للتعامل مع المصفوفات متعددة الأبعاد (Multi-dimensional Arrays).
- Pandas: مكتبة مبنية على
NumPy
للتعامل مع البيانات المجدولة (Tabular Data). - Matplotlib: نستخدمها لرسم وتصوير البيانات والنتائج (Data Visualization).
- Scikit-learn: سنستخدمها من الفصل الثالث حتى الفصل الحادي عشر.
- PyTorch: مكتبة مهمة جدًا سنستخدمها من الفصل الثاني عشر حتى نهاية الدورة.
خطوات تثبيت Anaconda
- اذهب إلى جوجل واكتب
Anaconda
. - ادخل إلى الموقع الرسمي، قد يُطلب منك إدخال بريدك الإلكتروني والموافقة على الشروط.
- بعد إرسال النموذج، سيبدأ تنزيل ملف التثبيت تلقائيًا.
- بعد اكتمال التنزيل، افتح الملف بالضغط عليه مرتين.
- اتبع خطوات التثبيت بالضغط على
Next
حتى النهاية لإكمال عملية التثبيت.
بدء استخدام سبايدر (Spyder)
بعد تثبيت Anaconda
، افتح قائمة “ابدأ” (Start Menu) واكتب Anaconda Navigator
ثم افتح البرنامج. قد يستغرق البرنامج بعض الوقت ليفتح في المرة الأولى.
داخل البرنامج، ستجد العديد من التطبيقات. ليس من الضروري تسجيل الدخول. ابحث عن Spyder
واضغط على Launch
.
سيفتح برنامج Spyder
بواجهة تشبه إلى حد كبير واجهة MATLAB
. ستكون هذه الواجهة سهلة جدًا لنا كبداية في دورة تعلم الآلة، وسنستمر في استخدامها لأول ثلاثة فصول فقط. بعد ذلك، سننتقل إلى Cursor
وسنعمل بداخله على Jupyter Notebook
، الذي يشبه إلى حد كبير Google Colab
.
واجهة Spyder:
- على اليسار: هنا تكتب كود بايثون الخاص بك.
- في الأعلى على اليمين: يمكنك عرض المتغيرات (Variables)، الملفات (Files)، أو الرسوم البيانية (Plots).
- في الأسفل على اليمين: يوجد الكونسول (Console)، الذي يعمل كطرفية (Terminal).
عندما نبدأ في تنفيذ الأكواد، سنرى بالتفصيل ما يظهر في كل جزء وكيفية استخدامه.
بهذا نكون قد أنهينا الفصل الأول من الكتاب الذي نعمل منه. الفصل القادم سيكون عن تدريب خوارزمية تعلم آلة بسيطة للتصنيف (Classification). سأحاول إنهاء فصل كل أسبوع لنسرّع من وتيرة الدورة وننتقل إلى الموضوعات المتقدمة مثل المحولات (Transformers) ومعالجة اللغات الطبيعية (NLP).