سؤال

أريد أن ألعب Tic-Tac-Toe باستخدام شبكة عصبية اصطناعية. التكوين الخاص بي للشبكة كما يلي: لكل من 9 الحقول، يمكنني استخدام نموذج الإدخال 2. لذلك لدي 18 من الخلايا العصبية المدخلات، بالطبع. بالنسبة لكل مجال، لدي خلايا عصبية مدخلات واحدة لقطعة من اللاعبين 1 و 1 من الخلايا العصبية لقطعة من اللاعب 2. بالإضافة إلى ذلك، لدي خلايا ناتجة واحدة مما يعطي تقييما لموضع اللوحة الحالية. كلما ارتفعت قيمة الإخراج، كلما كان ذلك أفضل موقف للاعب 1. الجزء السفلي هو، كلما كان ذلك أفضل للاعبين 2.

لكن مشكلتي هي: كيف يمكنني رمي تلك الشبكة العصبية؟ كانت فكرتي هي استخدام صفيف [1-18] لعملية الخلايا العصبية المدخلات. قيم هذه الصفيف هي أوزان الإدخال. ستمشي من خلال الصفيف باستخدام حلقة. كلما كان هناك خلايا عصبية يتم تنشيطها، أقدم الوزن إلى قيمة الإخراج. لذلك قيمة الإخراج هي مجموع أوزان الخلايا العصبية المدخلات المنشط:

Output = SUM(ActivatedInputNeurons)

هل تعتقد أن هذه طريقة جيدة لبرمجة الشبكة؟ هل لديك أفكار أفضل؟

آمل أن تتمكن من مساعدتي. شكرا مقدما!

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

المحلول

حسنا، لديك طبقة مدخلات من 18 الخلايا العصبية، وطبقة إخراج من الخلايا العصبية 1. هذا حسن. ومع ذلك، تحتاج إلى إعطاء صافي النص العصبي الفرصة لوضع المدخلات في العلاقة. لذلك، تحتاج إلى طبقة وسيطة واحدة على الأقل. أود أن أقترح استخدام 9 الخلايا العصبية في الطبقة الوسيطة. يجب توصيل كل من هذه كل من الخلايا العصبية المدخلات، وينبغي توصيل عصبي الإخراج بكل وسيط. كل اتصال من هذا القبيل لديه وزن، وكل عصبي يحتوي على مستوى تنشيط.

ثم، تذهب من خلال جميع الخلايا العصبية، وهي طبقة في وقت واحد. يتم تنشيط طبقة الإدخال للتو مع حالة مجلس الإدارة. لجميع الخلايا العصبية الإضافية، تذهب من خلال كل اتصالاتها ومجموعها على نتاج مستوى تنشيط الخلايا العصبية المتصلة ووزن الاتصال. أخيرا، تقوم بحساب مستوى التنشيط عن طريق تطبيق وظيفة Sigmoid على هذا المبلغ.

هذا هو مبدأ العمل. الآن، تحتاج إلى تدريب هذه الشبكة للحصول على نتائج أفضل. هناك العديد من الخوارزميات لهذا، سيتعين عليك القيام ببعض googling والقراءة. أخيرا، قد ترغب في ضبط عدد الخلايا العصبية والطبقات عندما لا تصبح النتائج مقنعة بسرعة كافية. على سبيل المثال، يمكنك تقليل طبقة الإدخال إلى 9 خلايا من الخلايا العصبية وتفعيلها مع +1 ل X و -1 ل A O. ربما توفر طبقة وسيطة أخرى نتائج أفضل، أو زيادة عدد الخلايا العصبية لطبقة.

نصائح أخرى

لا أفهم بشكل خاص كيف تتوقع الحصول على ملخص مغزى لحالة المجلس من الخلايا العصبية الإخراج. وأود أن ننظر إلى وجود:

    I I I             O O O
    I I I      x      O O O
    I I I             O O O
9 input neurons  9 output neurons

في شبكة متصلة بالكامل، أي 81 الأوزان. ثم تدريب عصابات الناتج عن الرغبة النسبية للعب في هذا الموقف.

إلقاء نظرة على مشروع TIC الخاص بي. لقد حل هذه المشكلة مع كل من الشبكة العصبية والخوارزمية الوراثية. شفرة المصدر متاحة بحرية.

http://www.roncemer.com/tic-tac-toe-an-eximent-in-machine-learning.

أعتقد أنك يجب أن تنفذ "تقليدية" آن تغذية باستخدام وظائف النقل، كما يتيح لك تدريبه باستخدام الانتشار الخلفي. يشير الشفرة لهؤلاء عادة إلى كونها بضعة أسطر من التعليمات البرمجية، وشيء مثل هذا:

SetupInputs();
for (l = 1 .. layers.count)
    for (i = 0 .. layers[l].count)
        sum = 0
        for (j = 0 .. layers[l-1].count)
            sum += layers[l-1][j] * weights[l-1][j]
        layers[l][i] = TransferFunction(sum)

هذا مشروع بداية ممتازة لترميز منظمة العفو الدولية، لكن الخروج مع حل كامل سيكون وسيلة كبيرة من الإجابة لذلك.

كما هو الحال مع معظم البرامج، أوصي باستخدام تصميم موجه نحو الكائنات. على سبيل المثال: تحديد Neuron الطبقة التي لديها المدخلات والأوزان وظيفة الإخراج. ثم، إنشاء العديد من هذه Neuron الكائنات من أجل بناء شبكتك.

انظر مقال ويكيبيديا الشبكات العصبية الاصطناعية لنقطة بداية جيدة.

حظا سعيدا مع الكود! يبدو وكأنه الكثير من المرح.

إنها ليست إجابة مباشرة على سؤالك، ولكن يجب أن يكون لديك إلقاء نظرة على الإطار / الأداة التالية: SNNS. أو نظيره جافا javanns.. وبعد أنا متأكد من أن هناك ستجد إجابة لسؤالك.

بعد إضافة الأوزان، تحتاج إلى تطبيع المبلغ باستخدام وظيفة، عادة ما يستخدم الأشخاص Tanh، إذا كنت ترغب في السماح بأرقام سلبية.

تعديل:

هنا هو جافا متعدد الطبقات perceptron التنفيذ الذي عملت عليه قبل بضع سنوات. تم استخدام هذا واحد للحصول على الداما، ولكن مع إدخال أقل يمكنك استخدامه للحصول على الداما أيضا.

أيضا، تحتاج إلى أن تكتشف طريقة لتعليمها للفوز، ولكن هذه مشكلة أخرى

ستوفر الوقت إذا كنت تستخدم مكتبة الشبكة العصبية مثل FANN أو Neuroph.

طريقة واحدة لتشفير المدخلات الخاصة بك هي 9 من الخلايا العصبية المدخلات. الناتج هو أيضا جيدة ليكون 9 الخلايا العصبية. ما لا أرى في عمليات الإخبأ الأخرى هو حجم الطبقة الخفية. أفترض أنك ستستخدم MLP مع 3 طبقات تقليدية. حجم الطبقة الخفية هو لغز دائما. سأحاول 10 الخلايا العصبية الخفية.

إذا كانت وظيفة النقل هي Sigmoid، فيمكنك ترميز الإدخال كما يلي:

0.0 - يا لاعب.

1.0 - X Player.

0.5 - فارغة.

سيكون إخراج آن 9 أرقام حقيقية. في هذه الحالة، سيتم احتلال بعض الخلايا بالفعل. يمكنك البحث عن أعلى قيمة الإخراج التي تتوافق مع خلية فارغة.

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