سؤال

لديّ شبكة عصبية اصطناعية تلعب دور Tic-Tac-Toe - لكنها لم تكتمل بعد.


ما لدي حتى الآن:

  • مصفوفة المكافآت "R [t]" بقيم صحيحة لكل خطوة زمنية أو حركة "t" (1= يفوز اللاعب أ ، 0= تعادل ، -1= يفوز اللاعب ب)
  • يتم نشر قيم الإدخال بشكل صحيح عبر الشبكة.
  • معادلة ضبط الأوزان:

أدخل وصف الصورة هنا


ما هو مفقود:

  • تعلم TD: ما زلت بحاجة إلى إجراء "ينشر" أخطاء الشبكة باستخدام خوارزمية TD (λ).

لكنني لا أفهم هذه الخوارزمية حقًا.


نهجي حتى الآن ...

يجب أن تكون معلمة تحلل التتبع λ "0.1" حيث يجب ألا تحصل الحالات البعيدة على الكثير من المكافأة.

معدل التعلم هو "0.5" في كلا الطبقتين (الإدخال والمخفية).

إنها حالة تأخر المكافأة: تظل المكافأة "0" حتى تنتهي اللعبة. ثم تصبح المكافأة "1" لفوز اللاعب الأول ، و "-1" لفوز اللاعب الثاني أو "0" في حالة التعادل.


أسئلتي:

  • كيف ومتى يتم حساب خطأ الشبكة (خطأ TD)؟
  • كيف يمكنك تنفيذ "backpropagation" للخطأ؟
  • كيف يتم ضبط الأوزان باستخدام TD (λ)؟

شكرًا جزيلاً مقدمًا :)

هل كانت مفيدة؟

المحلول

إذا كنت جادًا في إنجاح هذا الأمر ، فسيكون فهم TD-lambda مفيدًا للغاية.يتوفر كتاب Sutton and Barto "Reinforcement Learning" مجانًا فيبتنسيق HTML ويغطي هذه الخوارزمية بالتفصيل.في الأساس ، ما تفعله TD-lambda هو إنشاء تعيين بين حالة اللعبة والمكافأة المتوقعة في نهاية اللعبة.أثناء ممارسة الألعاب ، تميل الدول التي يُرجح أن تؤدي إلى حالات الفوز إلى الحصول على قيم مكافآت متوقعة أعلى.

بالنسبة إلى لعبة بسيطة مثل tic-tac-toe ، من الأفضل أن تبدأ بتعيين جدول (ما عليك سوى تتبع قيمة المكافأة المتوقعة لكل حالة لعب ممكنة).ثم بمجرد الانتهاء من ذلك ، يمكنك محاولة استخدام NN لرسم الخرائط بدلاً من ذلك.لكني أقترح تجربة مشروع NN منفصل وأبسط أولاً ...

نصائح أخرى

لقد كنت مرتبكًا بشأن هذا أيضًا ، لكنني أعتقد أن هذه هي الطريقة التي يعمل بها:

بدءًا من العقدة النهائية ، تقوم بالتحقق من R و (استلام الإخراج) و E (توقع الإخراج).إذا كانت E= R ، فلا بأس ، وليس لديك أي تغييرات يجب إجراؤها.

إذا كانت E!= R ، سترى كم كانت بعيدة ، بناءً على العتبات وما إلى ذلك ، ثم قم بتحويل الأوزان أو العتبة لأعلى أو لأسفل قليلاً.بعد ذلك ، استنادًا إلى الأوزان الجديدة ، تعود إلى الداخل وتخمن ما إذا كانت مرتفعة جدًا أم منخفضة جدًا أم لا ، وتكرار ذلك بتأثير أضعف.

لم أجرب هذه الخوارزمية مطلقًا ، ولكن هذا هو في الأساس نسخة من الفكرة كما أفهمها.

بقدر ما أتذكر أنك تقوم بالتدريب باستخدام مجموعة نتائج معروفة - لذلك تحسب ناتج إدخال معروف وتطرح منه قيمة الإخراج المعروفة - وهذا هو الخطأ.

ثم تستخدم الخطأ لتصحيح الشبكة - بالنسبة لطبقة واحدة NN معدلة بقاعدة دلتا ، أعلم أن إبسيلون 0.5 مرتفع جدًا - شيء مثل 0.1 أفضل - أبطأ ولكنه أفضل.مع backpropagation ، يكون الأمر أكثر تقدمًا قليلاً - ولكن بقدر ما أتذكر ، فإن وصف المعادلة الرياضية لـ NN معقد ويصعب فهمه - إنه ليس بهذه التعقيد.

ألق نظرة على http://www.codeproject.com/KB/recipes/BP.aspx

أو google لـ "backpropagation c" - ربما يكون من الأسهل فهمه في الكود.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top