القائمة الرئيسية

الصفحات

التعلم العميق وإستخداماته في الرؤية الحاسوبية - الجزء الثاني

التعلم العميق وإستخداماته في الرؤية الحاسوبية - الجزء الثاني
سنقوم في هذا الجزء بالتوضيح بالتفصيل الشبكة العصبية ANNs

التعلم العميق وإستخداماته في الرؤية الحاسوبية - الجزء الثاني

التعلم العميق وأستخداماته في الرؤية الحاسوبية - الجزء الثاني

Deep Learning For Computer Vision-Part 2


                              

المهندس حسن فنجان عداي





بسم إلله الرحمن الرحيم

تطرقنا في الجزء الأول الى موضوع الرؤية الحاسوبية (Computer vision)  وذكرنا بشكل موجز تعريفها وكذلك مجالات إستخدامها, وذكرنا أيضاً علاقتها المترابطة مع موضوع معالجة الصور (Image processing) وذكرنا كذلك الفرق بينهما. إعتباراً من هذا الجزء سوف نبدأ بدراسة موضوع التعلم العميق (Deep learning) بشكل مفصل إن شاء ألله, حيث نبدأ بدراسة الشبكات العصبية الإصطناعية (Artificial Neural Networks)  ويرمز لها إختصاراً (ANN)  والتي تعتبر الأساس الذي يبتني عليه التعلم العميق.


الشبكات العصبية الإصطناعية

(Artificial Neural Networks)

مثلما إستوحى الإنسان فكرة الطيران من خلال الطيور وتمكن من صنع الطائرات وقام بتطويرها وتحسين أداءها عبر مراحل مختلفة إلى أن أصبحت بمستواها الحالي, كذلك كان الباحثون في مجال علوم الحاسوب يبحثون عن طريقة لجعل النماذج الحاسوبية أكثر ذكاءاً ولها القدرة على التعلم, وقد تمكن هؤلاء الباحثون من إيجاد طريقة علمية لمحاكاة عملية التعلم عند الإنسان, وهذه الطريقة مستوحاة من الشبكات العصبية البايولوجية الموجودة في مخ الإنسان. وكما أن صناعة الطائرات لم تكن مقيدة بالشكل الخارجي ولا بالآليات الموجودة عند الطيور أي إنً الطائرة ليس بالضرورة أن يكون جناحاها يرفرفان وكذلك بقية مكوناتها وإنما إستفاد الباحثون في مجال الطيران من الفكرة الأساسية أما المظهر الخارجي وآليات العمل فقد تمً التصرف بها حسب الضرورة. وفي موضوع الشبكات العصبية الإصطناعية (sANN) فقد أخد العلماء الفكرة الأساسية لعملية التعلم من الخلايا البايولوجية Biological Neurons وقاموا بتطويرها حسب الضرورة ولقد أصبحت بشكلها الحالي تختلف كثيراً عن الشبكات البايولوجية ولقد جرت مناقشات لإستبدال إسم الوحدة الأساسية للشبكة وهي ال (neuron)  إلى إسم آخر كأن يكون (unit).

الخلايا العصبية البايولوجية

(Biological Neurons)

قبل ان نناقش الخلايا العصبية الإصطناعية دعونا نبدأ أولاً بإلقاء نظرة بسيطة على الخلايا العصبية البايولوجية الموجودة في دماغ الإنسان.

يتكون دماغ الإنسان من عدد كبير جداً من الخلايا العصبية, كل خلية عصبية تتكون من:
1- نواة (Nucleus).
2- نهايات عصبية مستقبلة للإشارة (Dendritic branches).
3- محور عصبي (Axon).
4- تشابك عصبي (Synapse).
5- نهايات عصبية مرسلة للإشارة (Synaptic terminals), ومكونات أخرى معقدة.
تتلقى الخلايا العصبية البيولوجية نبضات كهربائية قصيرة تسمى إشارات من خلايا عصبية أخرى عبر النهايات العصبية المستقبلة للإشارة (Dendritic branches). عندما تتلقى الخلايا العصبية عددًا كافيًا من الإشارات من الخلايا العصبية الأخرى في غضون بضعة أجزاء من الثانية ، فإنها تطلق إشاراتها الخاصة,
هذه الإشارات ممكن أن تذهب إلى خلية أخرى عن طريق المحور العصبي (Axon) وبعدها عن طريق النهايات العصبية المرسلة للإشارة (Synaptic terminals). إنً عملية التعلم تتم عن طريق عملية تحديث للاوزان (weights)  الخاصة بهذه النهايات.
وهكذا ، يبدو أن الخلايا العصبية البيولوجية الفردية تتصرف بطريقة بسيطة إلى حد ما ، ولكنها منظمة في شبكة واسعة من مليارات الخلايا العصبية (يشتمل دماغ الإنسان على مايقارب 10 مليارات خلية عصبية ومايقارب 60 تريليون إرتباطات متشابكة بينهما) ، كل خلية عصبية مرتبطة عادة بآلاف الخلايا العصبية الأخرى. يمكن إجراء العمليات الحسابية المعقدة للغاية من خلال شبكة واسعة من الخلايا العصبية البسيطة إلى حد ما. الرسم التالي يبين مكونات الخلية العصبية البايولوجية وكذلك عملية الإرتباط بين خليتين وطريقة نقل البيانات من أحدهما إلى الأخرى.




 شكل رقم (1)  خليتان عصبيتان بايولوجيتان, موضحاً فيه مكونات كل خلية مع طريقة الإرتباط بينهما


الخلايا العصبية الإصطناعية

 (Artificial Neurons)

تتكون الشبكة العصبية الإصطناعية من عدد من المعالجات البسيطة للغاية تسمى الخلايا (neurons), والتي تكون مستوحاة من الخلية العصبية البايولوجية للدماغ. ترتبط هذه الخلايا مع بعضها بروابط خاصة. تستقبل كل خلية عصبية عدد من إشارات الإدخال (input)  من خلال إتصالاتها, وتخرج منها إشارة إخراج (output) واحدة فقط. تتشكل الشبكة العصبية الإصطناعية من طبقات (layers)  كل طبقة تتكون من خلية واحدة أو أكثر  (بعض الحالات تتكون من مئات أو آلاف من الخلايا). في بعض الحالات الخاصة ممكن أن تتشكل الشبكة من طبقة واحدة. والشكل (2) يوضح شبكة عصبية إصطناعية تضم ثلاث طبقات.هناك ملاحظة مهمة وهي إن الطبقة الأولى (input layer)  لاتقوم بأية معالجة للإشارة حيث تقوم فقط بعملية توزيع لإشارات الدخول على الخلايا الموجودة ضمن الطبقة (hidden layer).

شكل رقم (2) شبكة عصبية إصطناعية تتكون من ثلاث طبقات.


الخلية العصبية الإصطناعية (neuron)  كأبسط عنصر معالجة في الشبكة

يمكن تلخيص عمل الخلية العصبية الإصطناعية المفردة, هي أنها اولاً تستقبل إشارات متعددة من روابط الإدخال الخاصة بها, ثمً تقوم بإدخال قيم الأوزان (weights)  على قيم البيانات الداخلة, ثمً تقوم بتنشيط القيمة الناتجة عن طريق إستخدام (Activation function)ثم يتم حساب القيمة الجديدة لإشارة الإخراج (Output signal)وإرسالها عبر إرتباطات الإخراج (Y). يمكن أن تكون إشارة الإدخال آتية من قاعدة بيانات أو عبارة عن مخرجات من خلايا عصبية أخرى, وكذلك يمكن أن تكون إشارة الإخراج إمَا حلاً نهائياً للمشكلة أو تستخدم كمدخلات إلى خلايا عصبية أخرى. يوضح الشكل رقم (3)  خلية عصبية نموذجية.


شكل رقم (3) رسم تخطيطي لخلية عصبية إصطناعية (neuron).


العمليات الحسابية داخل الخلية العصبية

 (Internal computation of neuron)

الخطوة الأولى التي تقوم بها أي خلية عصبية هي إجراء عملية ضرب كل قيمة مدخلة (x) في الوزن (w)  الخاص به وكما موضح بالمعادلة التالية:


حيث إن (X) يمثل المجموع الجبري لحاصل ضرب كل قيمة مدخلة (x1, x2, x3, ..., xn)  مع مايماثلها من قيم الأوزان (w1, w2, w3, ..., wn). (أنظر الشكل 3).
الخطوة الأخرى هو إستعمال دالة التنشيط (Activation function)  والعتبة (thresholding)  وهناك أنواع من دوال التنشيط والتي تم تجربتها بنجاح في مجال الخلايا العصبية الإصطناعية وهي :
1- Sign function :
    بعد أن يتم الحصول على قيمة (X) من المعادلة رقم (1) تقارن مع قيمة العتبة (Threshold ɵ ), فإذا كانت قيمة (X)  أكبر من قيمة (ɵ) أو مساوية لها  يكون مقدار القيمة الخارجة (Y) هو (1), أما إذا كانت قيمة (X) أصغر من قيمة (ɵ) فسوف يكون مقدار القيمة الخارجة (Y) هو (1-). وكما موضح في الصيغة التالية:

ويمكن كتابة الصيغة النهائية لما يجري داخل الخلية من عمليات للحصول على القيمة الخارجة (Y) كما في المعادلة الآتية:




2- Step function :

    بعد أن يتم الحصول على قيمة (X) من المعادلة رقم (1) تقارن مع ال (0) , فإذا كانت قيمة (X) أكبر من أو مساوية إلى أل (0) يكون مقدار قيمة الإخراج (Y) هو (1), أما إذا كانت قيمة (X) أصغر من (0) فسوف يكون مقدار (Y) هو (0), وكما موضح بالصيغة التالية:  


  إنً الدالتين السابقتين وهما (Sign function & Step function) يطلق عليهما دوال الحدود الصعبة (Hard limit functions) حيث غالباً مايتم إستخدامهن في خلايا صنع القرار (decision-making neurons) في مهمات تمييز الأشياء (classification) وكذلك في مهمات التعرف على الأنماط (Pattern recognition).
3- Sigmoid function:
    تقوم بتحويل أي قيمة ل(X) والتي تتراوح مابين (∞+ & ∞-) إلى قيم معقولة تتراوح مابين (0 & 1) وكما موضح في الصيغة التالية:

هذه الدالًة تستخدم في شبكات الإنتشار الخلفي (Back-propagation networks) والتي سوف ندرسها لاحقاً إن شاء ألله.
4- Linear function:
    في هذه الدالة تكون قيمة (Y) الخارجة منها مساوية لقيمة (X) الداخلة, وكما موضح في الصيغة التالية:

إنً الخلايا التي تستخدم هذه الدالة (Linear function) غالباً ماتستعمل في مهمات التقريب الخطي (linear approximation).

المستقبِل أو عنصر الإدراك

 (The Perceptron)

في العام (1958) قام العالِم (Frank Rosenblatt) بإنشاء خوارزمية تدريب والتي شكلت الطريقة الأولى التي يمكن من خلالها تدريب شبكة عصبية إصطناعية بسيطة (ANN) , حيث قام هذا العالِم بتسمية هذه الشبكة البسيطة (Perceptron).
أي أنً ال (Perceptron) هو أبسط أنواع الشبكات العصبية حيث يستخدم خلية عصبية إصطناعية (neuron) واحدة ومجموعة أوزان (synaptic weights) وكذلك تحتوي على وحدة ال (Hard limiter) والتي يتم فيها تقييم القيمة الداخلة إليها (X) لإجل حساب القيمة الخارجة (Y).
الشكل رقم (4) يوضح (Two - input perceptron) ذات طبقة واحدة (single layer).


شكل رقم (4).

يتكون هذا النموذج (perceptron)  من عنصر جمع  خطي (Linear combiner)  والذي يقوم بعملية جمع جبري للقيم الداخله إليه والتي هي عبارة عن القيم الخارجية الداخلة إلى النموذج مضروبةً بأوزانها (x1.w1, x2.w2, ....). إنَ القيمة الخارجة من هذه الوحدة (Linear combiner) والتي هي
(weighted sum  of the inputs) سوف تذهب إلى وحدة ال (Hard limiter) والتي هي عبارة عن دالًة تنشيط (Activation function)  نوع (Sign function)  ومع وجود ال (  ɵ Thresholding)  فإن قيمة الإخراج (Y)  هي (+1)   في حالة كون قيمة الدخول اكبر من (0), وتكون (1-) في حلة كون قيمة الدخول أصغر من (0) أي سالبة.
إنً عمل ال (perceptron) هنا هو القيام بعملية تصنيف (Classification) للقيم الداخلة إليه عن طريق ال(Inputs)  وجعل كل قيمة داخلة إليه مصنفة الى إحدى صنفين (مثلاً A1 and A2), ولذا فإنَ فضاء الصفات أو الأبعاد (n-dimensional space) ينقسم هنا الى قسمين (بإعتبار إنَه لدينا صنفان فقط هما A1 and A2)  والقاسم بينهما هو ال (hyperplane) ويسمى أيضاً (decision boundary) والذي يتم حساب نقاطه لكي يمكننا رسمه حسب المعادلة التالية والتي تسمَى (linearly separable):



من المعادلة أعلاه (Eq. 3نلاحظ أنَ قيمة (Xالخارجة من هذه المعادلة تكون دائماً صفر أي لاتنتمي إلى المجموعتين, وبالتالي تكون كل نقطة من هذا المستقيم (أو المستوي إذا كان عدد الأصناف ثلاثة) في منتصف المسافة الفاصلة بين المجموعتين تقريباً. فائدة ال(ɵ) هنا هي لعمل الإزاحة المطلوبة للحد الفاصل (decision boundary) وحسب الضرورة. والشكل رقم (5) يوضح عملية تصنيف البيانات الداخلة إلى ال perceptron 
الى مجموعتين (من الممكن أن تكون أكثر من مجموعتين) وكذلك يوضح الحد الفاصل (Decision boundary)
 


الشكل رقم (5).

كيف يتم تدريب النموذج perceptron على عملية التصنبف Classification ؟

تتم عملية التدريب (أو التعليم) لهذا النموذج عن طريق إجراء بعض التعديلات على الأوزان (w1, w2, ...)
لأجل تقليل الفارق بين القيمة الخارجة من النموذج (Yactual) و القيمة الحقيقية (المأخوذة من مجموعة بيانات التدريب) Ydesired. إنَ قيم الأوزان الإبتدائية يتم إختيارها عشوائياً مابين (- 0.5) إلى (+ 0.5), بعدها يتم تعديلها تباعاً إثناء عملية التدريب للحصول على قيمة (Y)  مناسبة.
إنَّ عملية تحديث الأوزان في ال(perceptron) تعتبر بسيطة نسبياًّ بإعتبار أنَّه يعتبر شبكة ذات طبقة واحدة (single layer) أما إذا كانت الشبكة تحتوي على أكثر من طبقة واحدة (multi layers) فسوف تكون عملية التحديث أكثر تعقيداً.
توضيح بعض المصطلحات المتعلقة بعملية التدريب.
Iteration (P) : يمثل خطوة واحدة من خطوات التدريب تتمثل بإدخال بيانات التدريب وتحديث الأوزان.
Actual output (Y) : يمثل القيمة الخارجة من النموذج (perceptron).
Desired output Yd : يمثل القيمة الحقيقية الموجودة في مجموعة بيانات التدريب.
Error (e) : يمثل الفارق بالقيمة بين (Y) و (Yd).
نقوم أولاً بحساب قيمة ال (e) كما في المعادلة الآتية:




حيث e(p) تمثل قيمة الخطأ في حالة خطوة التدريب التي تمثلها (p).
((Yd(pتمثل القيمة الحقيقية في حالة خطوة التدريب التي تمثلها (p). 
(Y(p تمثل القيمة الخارجة من النموذج في حالة خطوة التدريب التي تمثلها p
إذا كانت قيمة (e(p موجبة فيجب زيادة القيمة الخارجة من النموذج (Y(p لكي يقترب الخطأ من الصفر,
أما إذا كانت سالبة فيجب تقليل  (Y(p . يجب أن نعلم إلى أن كل قيمة موزونة داخلة إلى ال (Linear combinerتساهم في عملية حساب (Y(pلذا يجب أن ننتبه إلى إشارتها, فإذا كانت إشارة (Xi(p موجبة فإنَّ أي زيادة في وزنها (wi(p تؤدي إلى زيادة القيمة الخارجة من النموذج (Y(p , أما إذا كانت إشارة (Xi(p سالبة فإنَّ أي زيادة في وزنها تؤدي إلى نقصان قيمة (Y(p . المعادلة التالية تمثل قاعدة التدريب والتعلم بالنسبة إلى النموذج perceptron :
 

حيث إنَّ  (Wi(P+1 تمثل قيمة الوزن المعني للخطوة اللاحقة من التدريب. حيث إنَّ Wi  ممكن أن تكون W1, W2, ..., Wn.
 (Wi(P  تمثل قيمة نفس الوزن في الخطوة السابقة.
α  تسمى معدل التعلم (learning rate) , وتأخذ قيمة موجبة أقل من الواحد. الغرض من إستخدامها هو الحصول على حالة إستقرار في التعليم (التخلص من حالة التذبذب التي تحصل إثناء مراحل التدريب).
إنَّ هذه المعادلة تسمى perceptron learning rule وقد تمت صياغتها من قبل العالم Rosenblatt في العام 1960 . ومن خلال هذه المعادلة تمّت صياغة خوارزمية التعلم والتدريب للنموذج perceptron .



خوارزمية التدريب والتعلم للنموذج perceptron على مهمة التصنيف Classification :

تنقسم هذه الخوارزمية إلى الخطوات التالية:
الخطوة 1 :  Initialization تهيئة القيم المطلوبة : نقوم بوضع قيم عشوائية لكل من (W1, W2, . . ., Wn)
 وكذلك (ɵ) على شرط أن تتراوح هذه القيم مابين (- 0.5) و (+ 0.5).
الخطوة 2 : Activation التنشيط : وذلك بإدخال قيم (X1(p), X2(p), . . ., Xn(p  مضروبةً بأوزانها على دالة التنشيط (step activation function), ثمَّ نقوم بحساب قيمة (Y(p للخطوة رقم 1 (iteration p = 1)  وحسب المعادلة التالية :



حيث (n)  تمثل عدد المداخيل إلى الشبكة, و (Xi(p تمثل أحد هذه المداخيل عند بداية التدريب (أي عند خطوة التدريب p), و (Wi(p  تمثل الوزن لهذا المدخل عند نفس خطوة التدريب.
الخطوة 3 : Weight training أو تدريب الأوزان : وهي عملية تحديث الأوزان الخاصة بالبيرسبترون.
           نقوم أولاً بحساب الفرق بالوزن لكل وزن من الأوزان الموجودة بالبيرسبترون :


حيث إنَّ α هو معدل التعلم وقد بيناه سلفاً.

بعدها نقوم بتحديث كل وزن من الأوزان ليصبح الوزن الجديد الذي سوف يستخدم في الخطوة اللاحقة
(p + 1). حساب الوزن الجديد يتم حسب المعادلة التالية:


حيث إنَّ :
(Wi(p+1: يمثل الوزن الجديد بعد التحديث لأحد المداخيل Xi.
(Wi(p: يمثل الوزن لنفس المدخل قبل التحديث.
(p) wiΔ : يمثل الفرق بالوزن الذي تمَّ إستخراجه من المعادلة (Eq. 7).
الخطوة 4 : Iteration  أي تكرار خطوات التدريب :
نقوم بتكرار عملية التدريب لعدة مرات إبتداءاً من الخطوة (2) إلى أن يتم تطابق القيمة الخارجة  من البيرسبترون (Y(p)) مع القيمة (Yd(p المأخوذة من مجموعة بيانات التدريب.


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

 Multilayer Neural Networks

إنَّ البيرسبترون المتعدد الطبقات هو عبارة عن شبكة عصبية تتكون من طبقة إدخال (Input layer)  وطبقة إخراج (Output layer) ولكن توجد بينهما طبقة واحدة على الأقل تسمّى الطبقة المخفيَّة (Hidden layer).   والشكل رقم(6) يوضح بيرسبترون متعدد الطبقات ذات طبقتين مخفيتين.


شكل رقم (6).

نلاحظ إنَّ الطبقة الأولى (Input layer) ذات شكل مختلف كونها لاتقوم بأية حسابات ولا معالجات حيث إنَّ كل عقدة (node) تقوم فقط بتوزيع الإشارة الداخلة إليها إلى جميع الخلايا التي توجد في الطبقة التي بعدها.

وظيفة طبقة الإخراج (Outputlayer)  هو إستلام الإشارة الخارجة من الطبقة المخفية ( second hidden layer) وتقوم بإنشاء نمط أو إشارة الإخراج للشبكة بالكامل.
تقوم الخلايا العصبية (neurons) الموجودة في أي طبقة مخفية بإكتشاف المزايا (features) الموجودة في الإشارات الداخلة إليها  وتعبر عنها من خلال قيم الأوزان لتلك الطبقة, ثم يتم إستخدام هذه المزايا من قبل طبقة الإخراج لتحديد النمط (pattern)  في عملية التصنيف (classification).
بإستخدامنا لشبكة تحتوي على طبقة مخفية واحدة يمكننا الحصول على إشارة خارجة تمثل دالة مستمرة (continuous function) فقط, أما إذا إستخدمنا شبكة ذات طبقتين مخفيتين فيمكننا الحصول على إشارة خارجة تمثل حتى الدوال غير المستمرة (discontinuous functions).
هل من الممكن إستخدام أكثر من طبقتين مخفيتين في شبكة عصبية إصطناعية ؟
على المستوى التجاري تضم الشبكات العصبية الإصطناعية (ANNs) ثلاث أو أحياناً أربع طبقات تتضمن طبقة واحدة أو طبقتين مخفيتين (), كل طبقة مخفية تضم مابين (10 إلى 1000) من النيورونات . أما على مستوى التجارب فمن الممكن أن تضم الشبكات العصبية الإصطناعية خمس أو ست طبقات  تحتوي على ثلاث أو أربع طبقات مخفية  تستخدم ملايين الخلايا العصبية (neurons), لكن معظم التطبيقات العملية تستخدم ثلاث طبقات مخفية فقط, لأنَّ كل طبقة إضافية تزيد من عبء الحسابات بشكل كبير.

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

multilayer neural networks learning

هناك المئات من خوارزميات التعليم أو التدريب للشبكات العصبية ذات الطبقات المتعددة, ولكن أشهر هذه الخوارزميات واحدة تسمى خوارزمية الإنتشار الخلفي (back-propagation) والتي تم وضعها من قبل العالمين (Bryson and Ho, 1969) ولكن تم تجاهلها في حينها بسبب الحسابات الكثيرة الموجودة فيها, ولكن في منتصف الثمانينيات تم إقرارها لتصبح من أشهر خوارزميات تدريب هذا النوع من الشبكات.
عملية التدريب في هذه الخوارزمية تشبه إلى حد بعيد عملية التدريب في خوارزمية تدريب البيرسبترون, حيث يتم إدخال أنماط التدريب (input patterns) تباعاً إلى الشبكة, حيث تقوم الشبكة بعملية حساب النمط الخارج (output pattern), فإذا كان هناك خطأ في قيم النمط الخارج (او بمعنى آخر هناك فرق مابين قيم النمط الخارج من الشبكة مع قيم النمط القياسي المأخوذ من مجموعة بيانات التدريب (Data set) فسوف يتم تحديث الأوزان (وحسب مسؤولية كل وزن عن الخطأ) إلى أن يتم التطابق بين قيم النموذجين. إنَّ البيرسبترون يوجد فيه وزناً واحداً لكل قيمة داخلة وتوجد قيمة خارجة واحدة, أما هنا في الشبكة متعددة الطبقات فتوجد أوزان متعددة كل وزن له مساهمة ما في أكثر من قيمة خروج واحدة.
 في الشبكات العصبية ذات الإنتشار الخلفي (back-propagation) تحتوي خوارزمية التعلم على مرحلتين:

أولاً ، يتم تقديم نمط إدخال التدريب (training input pattern) إلى طبقة إدخال الشبكة (network input layer). تقوم الشبكة بعد ذلك بنشر نمط الإدخال (propagates the input pattern) من طبقة إلى أخرى حتى يتم إنشاء نمط الإخراج (output pattern) بواسطة طبقة الإخراج (output layer). إذا كان هذا النمط مختلفًا عن المخرجات المرغوبة ، فسيتم حساب خطأ ثم يتم نشره للخلف (propagated backwards) عبر الشبكة من طبقة الإخراج إلى طبقة الإدخال. يتم تعديل الأوزان عند نشر الخطأ. كما هو الحال مع أي شبكة عصبية أخرى ، يتم تحديد شبكة الانتشار الخلفي من خلال الروابط بين الخلايا العصبية (بنية الشبكة) ، ودالة التنشيط (activation function) التي تستخدمها الخلايا العصبية ، وخوارزمية التعلم  التي تحدد الإجراء لضبط الأوزان . عادةً ما تكون شبكة الانتشار الخلفي عبارة عن شبكة متعددة الطبقات لها ثلاث أو أربع طبقات. ترتبط الطبقات تمامًا (fully connected)، أي أن كل خلية عصبية في كل طبقة متصلة بكل خلية عصبية أخرى في الطبقة التي أمامها.
يتم حساب القيمة الخارجة من كل نيورون (neuron)  كما هي الحال في خوارزمية تعليم البيرسبترون. أولاً نقوم بعملية حساب مجموع القيم الموزونة الداخلة لكل خلية (net weighted input) كما مر سابقاً:



حيث إنَّ (n) تمثل عدد المداخيل (number of inputs), و (ɵ) تمثل قيمة العتبة (threshold) المستخدمة في الخلية العصبية (neuron).
الخطوة التالية نقوم بإدخال هذه القيمة X  على دالة التنشيط activation function ولكن بخلاف شبكة البيرسبترون فإن الخلايا الموجودة في شبكة الإنتشار الخلفي back propagation تستعمل sigmoid activation function كدالَّة تنشيط, والمبينة في المعادلة رقم (9) التالية:


حيث إنَّ قيمة (Y) الخارجة منها تسوي الصفر عندما تكون قيمة X = -∞ , وتكون قيمة (Y) واحد عندما تكون قيمة  X = +∞ .

إشتقاق قانون التعلم الخاص بالشبكات ذات الإنتشار الخلفي

(back-propagation networks learning law)

لأجل أن نقوم بإشتقاق قانون التعلم الخاص بمثل هذا النوع من الشبكات نفترض أنَّ لدينا شبكة عصبية إصطناعية ذات ثلاث طبقات وكما موضحة بالشكل (7) أدناه:


الشكل رقم (7). شبكة عصبية إصطناعية ذات ثلاث طبقات.

إنَّ الرموز (i) و (j) و (k) تشير إلى الخلايا (neurons) الموجودة في طبقة الإدخال و الطبقة المخفية وطبقة الإخراج على التوالي.
إنَّ إشارات الدخول (X1, X2, ..., Xn) تنتشر (propagated)  من خلال الشبكة من اليسار إلى اليمين (السهم الأزرق), أما إشارات الخطأ (e1, e2, el) فإنها تنتشر من اليمين إلى اليسار (السهم الأخضر).
الرمز (Wij)  يشير إلى الوزن الموجود في الرابط بين الخلية (i) الموجودة في طبقة الإدخال (input layer) والخلية (j) الموجودة في الطبقة المخفية (hidden layer), والرمز (Wjk) يشير إلى الوزن الموجود في الرابط بين الخلية (j) الموجودة في الطبقة المخفية والخلية (k) الموجودة في طبقة الإخراج (output layer).
بعد أن نقوم بحساب قيم إشارات الإخراج (output signals) والتي سوف نفصِّلها لاحقاً, نبدأ بحساب قيم الخطأ (error signals) إنطلاقاً من طبقة الإخراج  ثم نقوم بنشرها (تحويلها) إلى الطبقة المخفية. إنَّ إشارة الخطأ الخارجة من النيورون (k) الموجود في طبقة الإخراج (output layer) وفي خطوة التدريب (iteration p) نحصل عليها من المعادلة التالية:



حيث إنَّ : (ek(p هي إشارة الخطأ الخارجة من النيورون (k) في خطوة التدريب (p).

(Ydk(p هي إشارة الإخراج المطلوبة من النيورون (k) في خطوة التدريب (p) والتي تؤخذ من مجموعة بيانات التدريب (training data set ).
(Yk(p هي إشارة الإخراج الفعلية الخارجة من النيورون (k) في خطوة التدريب (p).
بعدها نقوم بتحديث قيمة الوزن (Wjk) وذلك بنفس الطريقة المستخدمة في شبكة البيرسبترون التي مرت علينا سلفاً في المعادلة (Eq. 7), وحسب المعادلة التالية:

حيث إنَّ (Wjk(p + 1 يمثل الوزن الجديد الذي سيستخدم في الخطوة اللاحقة (P + 1).

وإنًّ Δwjk(p + 1) يمثل معامل التصحيح للوزن (Wjk).

عندما قمنا بحساب معامل التصحيح للوزن في شبكة البيرسبترون إستخدمنا إشارة الدخول Xi كأحد العوامل, أما هنا فالأمر مختلف حيث إنَّ إشارات الدخول للنيورونات الموجودة في طبقة الإخراج (output layer) تختلف عن إشارات الدخول إلى النيورونات الموجودة في طبقة الإدخال (input layer). فإذا كان الأمر كذلك فما عسانا أن نفعل للحصول على إشارات الدخول للنيورونات الموجودة في طبقة الإخراج.

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

وفي مثالنا هذا سوف نستخدم إشارة الإخراج للنيورون (j)  الموجود في الطبقة المخفية والتي سوف نرمز لها Yj كإشارة إدخال للنيورون (k)  بدلاً عن Xi في حالة البيرسبترون. وبالتالي يحسب معامل تصحيح الوزن للشبكة المتعددة الطبقات (Δwjk(p كما في المعادلة التالية:

حيث إنَّ α هو معدل التعلم (learning rate) وقد بيناه سلفاً. وإنَّ



هو مشتقة الخطأ (Error gradient) عند النيورون k  الموجود في طبقة الإخراج (Output layer) عند خطوة التدريب (p).


حساب مشتقة الخطأ

 (Error Gradient)

يتم حساب قيمة ال error gradient عن طريق ضرب قيمة الخطأ (e) للنيرون المعني في مشتقة دالة التنشيط (sigmoid activation function) عند النقطة التي تمثلها مجموع القيم الموزونة الداخلة لنفس النيورون 
(The net wighted input to neuron X) وكما مبينة في المعادلة (13) أدناه:


حيث إنَّ yk(p) هو قيمة الإخراج للنيورون (k) خلال خطوة التدريب (p), وإنَّ xk(p) هو مجموع القيم الموزونة الداخلة لنفس النيورون (k). وبعد قيامنا بإشتقاق دالة سيغمويد (sigmoid activation function) تصبح المعادلة (13) كما في الهيئة الآتية:



ولزيادة التوضيح نقول إنَّ دالة سيغمويد تتكون من بسط ومقام وهذا هو شكلها:


ونحن نعلم إنَّ مشتقة الدالة المتكونة من بسط ومقام تكون كالتالي:
لذلك سوف تكون المشتقة لهذه الدالة كالآتي:


وبالتبسيط تصبح كالآتي:
ثمَّ بالتبسيط أكثر تصبح المشتقة كالآتي :


ويكون الشكل النهائي لمشتقة الخطأ (error gradient) هو حسب المعادلة (14) الآتية :




ملاحظة : إنَّ السبب في إستخدامنا دالة السيغمويد (sigmoid activation function) هو إنَّه توجد لها مشتقة, بخلاف دالة ال(step function)  أو دالة أل (Sign function).

حساب معامل تصحيح الأوزان

  الخاص بالنيورونات التابعة للطبقة المخفية

(weight correction)

لحساب ال weight correction الخاص بالخلايا العصبية التابعة للطبقة المخفية (hidden layer)  نستخدم نفس المعادلة كما في طبقة الإخراج (output layer)  وكما في المعادلة رقم (15) الآتية :
حيث إنَّ 

 يمثل ال error gradient الخاص بالنيورون (j) الموجود في الطبقة المخفية, والذي يمكن حساب قيمته كالآتي:

عوضنا عن قيمة الخطأ (error signal) أو (ej(p بالمقدار : 
 
حيث لايمكننا معرفة Ydesired للخلايا العصبية التابعة للطبقة المخفية لكي نستطيع إستخراج قيمة الخطأ (e).
(l) هنا يمثل عدد الخلايا العصبية في طبقة الإخراج (output layer).
كذلك فإنَّ :

حيث (n)  تمثل عدد النيورونات في طبقة الإدخال (number of neurons in the input layer).

ويمكن تلخيص خوارزمية التعلم للشبكة العصبية الإصطناعية (ANN) ذات الطبقات المتعددة بالخطوات التالية:
الخطوة – 1 : تهيئة القيم المطلوبة Initialisation :
     نختار قيم عشوائية موزعة بإنتظام لكل من الأوزان والعتبة (weights and threshold) لكل خلية عصبية وحسب النطاق :
حيث إنَّ (Fi) تمثل عدد المداخيل لكل نيورون (neuron i) في الشبكة.
الخطوة – 2 : عملية تنشيط الخلايا Activation :
    تبدأ عملية تنشيط الشبكة العصبية ذات النشر الخلفي (back-propagation) وذلك بتسليط المدخلات
(X1(p), X2(p), .., Xn(p وكذلك قيم الإخراج (desired outputs) المأخوذة من ال (Data set) وهي 
(Yd1(p), Yd2(p), ..., Ydn(p حيث يتم إستخدام هذه القيم كما يلي :

a يتم حساب قيم الإخراج (actual outputs) لكل نيورون موجود في الطبقة المخفية, وحسب العلاقة التالية:



   حيث إنَّ (n) تمثل عدد مداخيل النيورون (j) الموجود في طبقة ال (hidden layer), و (sigmoid) هي دالة التنشيط المستخدمة هنا.
b نقوم بحساب قيم الإخراج (actual outputs) للنيورونات الموجودة في طبقة الإخراج (output layer), وحسب العلاقة التالية:



حيث (m) تمثل عدد المداخيل (inputs) في الخلية العصبية (neuron k) الموجودة في طبقة الإخراج (output layer).
الخطوة – 3 : تدريب الأوزان Weight training:
     إنَّ عملية تحديث الأوزان في الشبكة العصبية ذات النشر الخلفي تكون عن طريق نشر قيم الخطأ (errors) المرتبطة بنيورونات الإخراج (output neurons) حيث ترسل بشكل خلفي الى الطبقات المخفية.
وتكون الطريقة حسب الترتيب التالي:
a يتم أولاً حساب ال(error gradient) للنيورونات الموجودة في طبقة الإخراج (output layer), وحسب العلاقة التالية:


b ثمَّ نقوم بحساب ال (error gradient) للنيورونات التابعة للطبقة المخفية (hidden layer) وحسب العلاقة التالية:


الخطوة – 4 : تكرار خطوات التدريب Iteration:
    نقوم بالخطوة الثانية من التدريب  (p + 1) وذلك بتسليط قيم السطر الثاني من مجموعة التدريب (Training data set) على الشبكة, ثمَّ نكرر العملية إبتداءاً من (الخطوة - 2) ولعدة مرات إلى أن يتم الحصول على قيمة خطأ مقبولة.
وبهذا نكون قد إنتهينا من هذه الدراسة المتواضعة عن الشبكات العصبية الإصطناعية (ANNs) والمتعلقة بالجانب النظري للموضوع وسوف نقوم في المقالة القادمة إن شاء ألله ببعض التطبيقات العملية بإستخدام لغة بايثون وبمساعدة بعض المكتبات, حيث نقوم ببناء بعض الشبكات البسيطة أولاً ثمَّ نتدرج إلى أن نبني بعض الشبكات الأكثر تعقيداً لأجل زيادة في فهم الموضوع, ومن ألله التوفيق.
خاتمة:
قمنا في هذه المقالة بتوضيح لبعض جوانب الخلايا العصبية الإصطناعية وكذلك لمحة بسيطة عن الخلايا العصبية البايولوجية الموجودة في دماغ الإنسان والتي تعتبر مصدر الإلهام للباحثين في مجال علوم الحاسوب لكي يقوموا بعمل محاكات بسيطة لطريقة التعلم والتدريب لدى الإنسان وتطبيقها في نموذج حاسوبي لكي تصبح لدى هذا النموذج مقدرة على التعلم. وكذلك قمنا بشرح موجز لبعض خوارزميات التعلم للشبكات العصبية. 






المهندس حسن فنجان عداي




هل اعجبك الموضوع :

تعليقات