[سؤال]: كيف يمكن تعليم شبكة عصبية العملية xor ؟

السلام عليكم


هذه الأيام أبحث في موضوع الشبكات العصبية

وعلمت بأن الشبكة مكونة من طبقة المدخلات (inputs) والطبقات المخفية (hidden) و طبقة المخرجات (output) وكل طبقة مكونة من خلايا

فهمت كيف يمكن تعليم خلية واحدة عن طريق إعطائها مدخلات والمُخرج المتوقع

لاكن المشكلة في كيف يمكن تعليم خلية داخل شبكة (مجموعة من الخلايا)

حيث مثلا خلية في الطبقة hidden يمكن أن نعطيها مدخلات وستعيد مخرجات ولكن الإشكال في أننا لا نعرف المخرج الصحيح الذي نريده

يرجى الدخول لحسابك أو تسجيل حساب لتستطيع إضافة تعليق
حساب جديد دخول

التعليقات

شاهد هذين الفيديون يشرحون لك تركيب الشبكات العصبية و كيف تتعلم

و

و بالنسبة لمشكلة Xor هذه الفيديو يشرح مشكلة XOR و كيفية حلها رياضيا

شاهدت فيديو xor لكن ال weights هو من قام بإعطائها صحيحة منذ البداية للشبكة

المشكلة في حالة لم تكن ال weights صحيحة كيف نجعل الشبكة تغير ال weights الخاصة بكل خلية شيئا فشيئا إلى أن تصبح الشبكة صحيحة ؟

يوجد شيء يسمي cost function و هو ان تقوم بحساب معدل الخطأ بين النتيجة المرادة و النتيجة الحالية، و ثم تقوم هذه التحديث الاوزان عشوائية لتقليل قيمة cost function و توجد العديد من الطرق لعمل التحديث مثل Gradient Descent لكي تكون اقل عشوائية و بطريقة مقادة لتقليل الخطأ

شرح مبسط لها

و الفيديو الثاني فوق يشرحها بشكل جيد ايضا

قلت فوق ان التحديثات عشواية، و لكن اعتقد انني لم اوضح كلامي بشكل صحيح

مثلا w1 = 3.7

و عند تحديثه نقوم بزيادة عدد معين او تقليل هذا العدد المعين من الوزن

العدد المعين يسمي معدل التعلم، مثلا ليكن 0.1

فإن الناتج بعد التحدث سيكون 3.8 او 3.6 و من يقرر كيف سيقوم بالتحديث هو معادلة Gradient Descent.

يبدو أن هذا عملية إيجاد الأوزان ، تواجه مشكلة مدة المعالجة الطويلة كلما زاد عدد الأوزان

على كل سأبحث في الموضوع أكثر

شكرا على التوضيح

اجل و لكن يوجد العديد من الطرق لتسريع العملية برمجيا، و رياضيا، لذا مدة المعالجة لتحديث الاوزان ليست كبيرة جدا، مثلا الشبكة التي اعمل عليها تحتوي على اكثر من 120 مليون وزن، و لكن عملية التحديث تحتاج الى اقل من 0.2 ثانية لكل عملية تدريب واحدة.

في الشبكات العصبية لديك فقط معطيين

المدخلات للطبقة الأولى و المخرجات المتوقعة من الطبقة الأخيرة،

فكرة تدريب الشبكة تكون عن طريق اللعب بقيم الاوزان لكل نقطة في الشبكة إلى أن تصل لقيم مناسبة ،

بداية يمكنك اختيار قيم الاوزان بعشوائية، و من ثم تقوم بادخال المدخلات للطبقة الأولى في الشبكة و انتاج النتائج من الطبقة الاخيرة، ومن ثم تحسب قيمة الخطأ بين النتائج التي حصلت عليها و النتائج الصحيحة التي تتوقعها -طريقة الحساب تختلف باختلاف التطبيقات و الشبكات و المعادلات المستخدمة- و من ثم تقوم و باستعمال احد المعادلات الحسابية المعنية بإيجاد القيم الصغرى للدوال -gradient decent على سبيل المثال- لتعديل قيم الاوزان بشكل افضل

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

تماما أوضحت الفكرة

الآن المشكلة التي يعمل مطورو الذكاء الصناعي على حلها هي إجاد خوارزميات عوض إستخدام ال brute force

شكرا على التوضيح

هذا ملخص يشرح خوارزمية الإنتشار الإرتدادي (Back propagation)

ابحث عن google tensorflow .