إسماعيل بن علا

Pong RL

لعبة Pong من البكسلات بسبع طرق للتعلم المعزز العميق

التعلم المعزز · أكتوبر 2026 · مكتمل

سبع طرق للتعلم المعزز العميق تتعلم Pong من البكسلات وحدها، جنباً إلى جنب، على الإطارات نفسها وبالنتيجة نفسها.

التقنياتPyTorchNumPyGymnasiumMatplotlibpytest

Pong RL — نظرة عامة

نظرة عامة

Pong من البكسلات هي المسألة التي جعلت التعلم المعزز العميق (Deep Reinforcement Learning) مشهوراً، وكانت مقالة Karpathy ‏«Pong from Pixels» نقطة انطلاقي: دفتر مقرر دراسي يتضمن تدرج السياسة الذي كتبه بـ numpy وإعادة كتابة بـ PyTorch. وتحويله إلى حزمة تطلّب إصلاح إحدى عشرة مشكلة في ذلك الدفتر، أهمها دالة خسارة كانت تعطي تدرجاً صفرياً لكل فعل DOWN.

ثم بنيتُ كل طريقة رئيسية على الإطارات المعالجة مسبقاً نفسها: تدرج السياسة لـ Karpathy ‏(MLP على فروق الإطارات)، وREINFORCE مع خط أساس متعلَّم، وA2C مع 16 مباراة متوازية، وPPO مع GAE ونسبة مقصوصة، وDQN برأسي double وdueling وإعادة التشغيل ذات الأولوية وعوائد n-step. كل قاعدة تعلم ملف واحد من 60 إلى 120 سطراً؛ أما اللعبة وشبكة CNN والتقييم والتسجيل فمشتركة.

ولأن وكيل البكسلات يحتاج إلى ملايين إطارات Atari ليفوز، كتبتُ نسخة Pong بـ numpy بحجم 40x40 بالأفعال الثلاثة نفسها وتخطي الإطارات وخصم مبرمَج، تُعالج مسبقاً إلى إطارات ثنائية 20x20. تتعلمها كل طريقة في 2 إلى 6 دقائق على خيط معالج واحد، فتصبح الفروق مرئية: تهزم عائلة DQN الخصم بعد 75k-100k خطوة، وPPO بعد 125k، بينما تحتاج طرق مونت كارلو إلى 175k حتى 400k. والشيفرة نفسها تتدرب على ALE/Pong-v5 في دفتر Kaggle / Colab.

السؤال

حين ترى سبع طرق للتعلم المعزز العميق الإطارات المعالجة مسبقاً نفسها وتُقيَّم بالتقييم نفسه، إلى أي حد يغيّر خط الأساس المتعلَّم والاستيفاء الذاتي وإعادة تشغيل التجارب (experience replay) عددَ العينات اللازمة للفوز في Pong؟

أهم الميزات

كيف يعمل

  1. المعالجة المسبقة للإطار

    تُقص إطارات ALE وتُصغَّر بمعامل 2 وتُحوَّل إلى قيم ثنائية تماماً كما في دالة prepro لدى Karpathy ‏(80x80). وتُصغَّر اللعبة الصغيرة من 40x40 إلى 20x20 بأخذ الحد الأقصى على كتل 2x2، كي لا تختفي الكرة ذات الحجم 2x2 أبداً.

  2. ترميز الحركة

    يُظهر إطار واحد أين الكرة لا إلى أين تتجه. يطرح diff الإطار السابق فيصبح الجسم المتحرك بقعة +1 بجوار بقعة -1؛ ويحتفظ stack بآخر 4 إطارات ويترك للشبكة مقارنتها.

  3. التعلم بثلاث طرق

    ينتظر pg وreinforce انتهاء المباريات ويستخدمان عوائد مونت كارلو (تُعاد تهيئتها عند كل نقطة)، مع V(s) متعلَّمة أو دونها. ويستوفي a2c وppo ذاتياً بعد 5 أو 64 خطوة باستخدام ناقد، مع إعادة PPO استخدام كل دفعة لـ 4 حقب بقص للنسبة عند 10%. وتنحدر عائلة DQN بقيمة Q نحو شبكة هدف من مخزن إعادة تشغيل بخسارة Huber وتصرّف epsilon-greedy.

  4. التقييم على إرسالات ثابتة

    تُعاد تهيئة النسخة i من اللعبة بالبذرة 10000 + i، فتواجه كل طريقة الإرسالات نفسها وضجيج الخصم نفسه؛ يأخذ وكلاء تدرج السياسة عينات من أفعالهم، وتلعب عائلة DQN بـ argmax Q.

  5. المقارنة

    يدرّب scripts/compare_all.py الطرق السبع واحدة تلو الأخرى، ويبني جدول النتائج والمنحنيات مقابل الخطوات والدقائق وصورة GIF بلوح لكل طريقة.

أمثلة

بذرة المباراة نفسها على نسخة Pong الصغيرة، والوكيل هو المضرب الأخضر على اليمين: DQN بأوزان عشوائية (يساراً) يخسر 0-5؛ والبنية نفسها بعد 3.6 دقيقة من تدريب DQN على خيط معالج واحد (يميناً) تفوز 5-0.
لوح لكل طريقة على بذرة مباراة مشتركة بعد تشغيلها الوارد في جدول النتائج: الوكيل غير المدرَّب يخسر 2-5، ومتغيرات DQN الثلاثة تفوز 5-0، وPPO وpg ‏5-3، وREINFORCE ‏5-1، وA2C ‏5-4 (وكلاء تدرج السياسة يأخذون عينات من أفعالهم، لذا فالمباراة الواحدة عينة مشوَّشة من نتيجة الـ 30 مباراة).
منحنيات التعلم على نسخة Pong الصغيرة، نتيجة التدريب (يساراً) والتقييم الدوري على 10 مباريات (يميناً) مقابل خطوات البيئة: تتجاوز عائلة DQN الصفر أولاً، ثم PPO، ثم A2C وREINFORCE، وأخيراً pg الخاص بـ Karpathy عند نحو 400k خطوة.
منحنيات التعلم على نسخة Pong الصغيرة، نتيجة التدريب (يساراً) والتقييم الدوري على 10 مباريات (يميناً) مقابل خطوات البيئة: تتجاوز عائلة DQN الصفر أولاً، ثم PPO، ثم A2C وREINFORCE، وأخيراً pg الخاص بـ Karpathy عند نحو 400k خطوة.
المعالجة المسبقة في اللعبة الصغيرة: الإطار الخام 40x40، والإطار الثنائي 20x20، وفرق الإطارات حيث تصبح الكرة المتحركة زوجاً +1 / -1.
المعالجة المسبقة في اللعبة الصغيرة: الإطار الخام 40x40، والإطار الثنائي 20x20، وفرق الإطارات حيث تصبح الكرة المتحركة زوجاً +1 / -1.
ALE/Pong-v5 مع وكيل PPO من تشغيل التحقق المحلي ذي 4,096 خطوة: بالكاد تدرَّب، فيخسر كما هو متوقع؛ وهو يُظهر فقط أن الشيفرة نفسها تعمل على لعبة Atari.

المدخل

pong-train --algo dqn && pong-eval runs/dqn/model.pt --episodes 30

المخرج

mean score +4.60 ± 0.55 over 30 games, win rate 100% (180,000 steps, 3.6 min on one CPU thread)

تشغيل DQN الذي يقف وراء جدول النتائج؛ النتيجة هي النقاط المكتسبة ناقص النقاط المفقودة في مباراة حتى 5، على إرسالات ثابتة (البذور 10000-10029).

التقنيات المستخدمة

ما تعلمته

الحدود

الكلمات المفتاحية

التعلم المعزز · Pong من البكسلات · Atari · تدرج السياسة · REINFORCE · A2C · PPO · DQN · dueling DQN · إعادة تشغيل التجارب ذات الأولوية · عوائد n-step · تكديس الإطارات · Arcade Learning Environment · Gymnasium · PyTorch