في 2018، هزمت Google بطل لعبة GO بشبكتها العصبية AlphaGo، وكان هناك ضجة كبيرة. أصبحت مكتبات تعلم الآلة مفتوحة المصدر الممتازة متاحة، مستخدمةً معالجات الرسوميات المنزلية لتسريع عملية التدريب.
اتخذت قرار المحاولة مع Abak، لكن عندما بدأت لأول مرة، بالكاد كنت أعرف ما هي الشبكة العصبية. كان لدي إغراء صغير في الجامعة (1996)، لكن مع نقص البيانات ومعالج الرسوميات والهدف، كان من الصعب معالجة الأمر. علاوة على ذلك: من ناحية الرياضيات، الشبكات العصبية موضوع ثقيل، وتحتاج الكثير من الإلهام.
بعد الكثير من البحث المكثف والمهووس، تمكنت من بناء نموذج وجعله يتعلم.
واقفًا على أكتاف العمالقة، كانت محاولتي الأولى التعلم من الدكتور جيرالد تيساورو، الذي طوّر TD-Gammon في التسعينيات. إذا كنت أتذكر جيدًا، كان هذا أول تطبيق عملي لخوارزمية التعلم المعزز.
لكن بما أن Abak لعبة ثنائية الأبعاد، لم أستطع استخدام النموذج المقترح واضطررت لتطوير نموذجي الخاص. قررت استخدام مخرجات بعض الخوارزميات كجزء من النموذج، كمعلومات خبيرة، ليكون التعلم أسهل على الشبكة العصبية. شعرت بأنني أغش بذلك.
إليك مقارنة بين كلا النموذجين، نموذج Backgammon ونموذج Abak.
نموذج TD المستخدم على نطاق واسع في Backgammon يصف الأعمدة. لكل عمود من اللوحة، تُستخدم 4 مدخلات لوصفه.
- بدون قطع: [0,0,0,0]
- قطعة واحدة: [1,0,0,0]
- قطعتان: [1,1,0,0],
- ثلاث قطع: [1,1,1,0]
- أكثر من ثلاث قطع: [1,1,1,1].
يحتوي على 28 من هذه المجموعات (واحدة لكل عمود من اللوحة) للإشارة إلى كل فريق، فـ 28*2*4 مدخلات إجمالاً، بالإضافة إلى بعض المدخلات لعدّ القطع على الحاجز. لسوء الحظ، أكتب هذا من الذاكرة، التي قد لا تكون دقيقة.
نموذج Abak مختلف جدًا. يصف القطع، ولكل منها مجموعة من الميزات. في النسخ الأحدث، أضفت وصفًا مبسطًا للوحة كتكملة، بنتائج لم تكن مذهلة، لكن الميزات لا تزال موجودة.
نموذج وصف اللعبة يتكون من أربعة أجزاء [477 مدخل]:
- وصف القطع (14x30): يتضمن الوصف إحصائيات للقطعة، المسافة، الارتفاع، إلخ. لا يتضمن الفئة، التي تُورَث من موقعها في النموذج.
- حالة الفريق (4x2): إحصاء لبعض ميزات القطع أو الحالة.
- خريطة القوة (24x2).
- حالة اللعبة: من يرمي التالي! (1).
يمكنك الاطلاع على وصف كامل للنموذج أدناه.
الإصدارات:
1.- Python Cumpy (TD-V1).
أول إصدار من هذا الذكاء الاصطناعي دُرّب بلغة Python الخالصة باستخدام Cumpy، مكتبة شبيهة بـ Numpy تعمل على معالج الرسوميات. أردت التعلم من الصفر، فرغم أنني لعبت قليلاً مع Tensorflow، قررت أن أذهب عاريًا (حسنًا، مجهزًا بتركيبة Python و Cumpy الرائعة).
الميزات:
- شبكة واحدة تقدّر فرص فوز الفريق 0 باللعبة.
- غير مدركة للنقاط.
- لم تكن تمتلك علم "من يرمي التالي".
- لم تكن تمتلك خريطة القوة.
- طبقة مخفية واحدة، مع منشطات سيجمويد.
- استغرقت 45,000 لعبة لتتغلب على ذكائي الاصطناعي السابق المكتوب بمعلومات خبيرة (GOFAI).
- تعلمت لـ 4,500,000 لعبة. وفازت 75% من الحالات على GOFAI.
- كانت في الإنتاج لمدة عامين.
2.- Tensorflow (TD-V2).
معاناتي مع الإصدار 1 كانت أنه لم يكن جيدًا في حساب فرص الفوز لأنه دُرّب بدون علم "من يرمي التالي". بطريقة ما، كانت نتائج الشبكة العصبية جيدة جدًا لاختيار حركة جيدة، لكن رياضيًا لم تكن متسقة. الإصدار 2 أصلح هذه المشكلة وأضاف شبكة جديدة لحساب فرص انتهاء اللعبة بنقطة 1 أو 2 أو 3.
اخترت Tensorflow هذه المرة لتدريب النموذج الجديد لأنني أردت تعلم إطار عمل، ووجدت مثالاً ممتازًا للبدء به.
الميزات:
- شبكة واحدة لحساب فرص فوز الفريق 0 باللعبة.
- شبكة واحدة لحساب احتمالية انتهاء اللعبة بنقطة 1 أو 2 أو 3.
- تتضمن خريطة القوة الجديدة.
- طبقتان مخفيتان، بمنشطات مختلفة: Leaky RELU للطبقات المخفية وسيجمويد في طبقة الإخراج.
- استغرقت 12,000 لعبة للفوز 50% من الوقت على TD-V1.
- تعلمت لـ 350,000 لعبة ووصلت إلى معدل فوز 80% ضد TD-V1.
3.- الإصدار 3: قيد الانتظار.
كالخطوة الأخيرة في عملية اتخاذ القرار لاختيار أفضل حركة، هناك خوارزمية بسيطة تبحث عن أفضل عدالة [%W*%p1+%W*%p2+%W*%p3].
اعتمادًا على هدف المباراة، وعدد النقاط اللازمة لكل لاعب للفوز، وقيمة المكعب، يتم ترجيح مخرجات الشبكات بشكل مختلف.
أود أن أصنع شبكة عصبية تتعامل مع ذلك. سيكون ذلك الإصدار 3. ليس قيد التطوير الآن.
نموذج الشبكة العصبية لـ Abak:
وصف القطعة (14 مدخل × 30 قطعة):
- المسافة إلى الداخل x/25
- عدد القطع فوقها x/4
- عدد القطع تحتها x/4
- على الحاجز [0,1]
- في الداخل [0,1]
- آمنة (على مسافة = 0). [0,1]
- تقوم بحجب مع قطعة أخرى [0,1]
- قابلة للمحاصرة بواسطة الكاهن [0,1]
- محاصرة بواسطة الكاهن [0,1]
- تقوم بالمحاصرة (هذا المدخل فقط لكل كاهن) [0,1]
- خطر التعرض للضرب في المنطقة القريبة (6 مواقع للأمام) [0..1]
- خطر التعرض للضرب في المنطقة البعيدة (12 موقعًا للأمام) [0..1]
- خطر المحاصرة بواسطة الكاهن [0..1]
- فرص الحركة [0..1]
مدخلات متعلقة باللعبة لكل فريق (4x2):
- عدد القطع على الحاجز. x/15
- عدد القطع الآمنة. x/15
- جميع القطع في الداخل. [0,1]
- عدد القطع الآمنة 0. [0,1]
خريطة القوة: (24*2):
أخيرًا، خريطة قوة، مشابهة لما اقترحه الدكتور تيساورو لـ Backgammon، لكن مبسطة. لكل موقع ولكل فريق، هناك رقم بين 0 و1، يمثل مدى قوة ذلك الحجب:
- 0.0إذا فارغ.
- 0.1إذا كانت هناك قطعة واحدة.
- 0.5إذا كانت تلك القطعة حارسًا.
- 1.0إذا كانت هناك قطعتان أو أكثر.