سؤال

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

شكرًا

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

المحلول

الكثير من العمل في مجال التطور العصبي يتضمن استخدام الشبكات العصبية ذات المدخلات والمخرجات المستمرة.

هناك عدة طرق شائعة:

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

regular sigmoid
(مصدر: natekohl.net)
steep sigmoid
(مصدر: natekohl.net)

  • عقد متعددة لكل قيمة - يعد نشر قيمة واحدة مستمرة على عقد متعددة استراتيجية شائعة لتمثيل المدخلات المستمرة.وتتمتع بميزة توفير المزيد من "الميزات" للشبكة لتلعب بها، على حساب زيادة حجم الشبكة.
    • بينينج - نشر مدخل واحد على عقد متعددة (على سبيل المثال. شبكات RBF, ، حيث تكون كل عقدة بمثابة وظيفة أساسية بمركز مختلف سيتم تنشيطه جزئيًا عن طريق الإدخال).يمكنك الحصول على بعض فوائد المدخلات المنفصلة دون فقدان التمثيل السلس.
    • التمثيل الثنائي - تقسيم قيمة مستمرة واحدة إلى 2ن قطع، ثم قم بإدخال هذه القيمة في الشبكة كنمط ثنائي إلى العقد N.هذا النهج مدمج، ولكنه هش نوعًا ما وينتج عنه مدخلات تتغير بطريقة غير مستمرة.

نصائح أخرى

لا توجد قواعد تتطلب أن يكون الإخراج ( * ) أي وظيفة معينة.في الواقع نحن عادة بحاجة إلى ذلك يضيف يتم تنفيذ بعض العمليات الحسابية في نهاية الوظيفة في حد ذاتها في عقدة معينة، من أجل توسيع نطاق الإخراج وإجباره على نموذج معين.

تتمثل ميزة العمل بمخرجات الكل أو لا شيء و/أو المخرجات المقيسة من 0.0 إلى 1.0 في أنها تجعل الأمور أكثر سهولة في التعامل معها، كما أنها تتجنب مشكلات الفائض وما شابه.

( * ) يمكن فهم "الإخراج" هنا إما على أنه مخرج لعقدة معينة (خلية عصبية) داخل الشبكة أو تلك الخاصة بالشبكة ككل.
كما أشار مارك بيسي، عادةً ما يتلقى الإدخال [للشبكة ككل] والمخرجات [للشبكة] بعض التصفية/التحويل.كما تم التلميح في هذا الرد وفي تعليق مارك، قد يكون من الأفضل أن يكون لديك عقد عادية/قياسية في الطبقات "المخفية" للشبكة، وتطبيق بعض التطبيع/التحويل/التمييز كما هو مطلوب للإدخال و/أو لإخراج الشبكة؛ومع ذلك، فإن مثل هذه الممارسة ليست سوى مسألة عملية وليست مطلبًا حتميًا للشبكات العصبية بشكل عام.

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

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