كيفية إنشاء شبكة عصبية: العمارة والمعلمات والكود

نشرت: 2021-02-12

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

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

جدول المحتويات

هندسة الشبكة العصبية

تتكون الشبكة العصبية الاصطناعية من الخلايا العصبية الاصطناعية التي تسمى أيضًا "العقد". ترتبط هذه العقد ببعضها البعض بحيث يتم إنشاء شبكة أو شبكة. يتم تعيين قيمة لقوة هذه الاتصالات مع بعضها البعض. هذه القيمة تقع بين -1 إلى 1.

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

مصدر

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

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

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

تحديد المعلمات

وظيفة التنشيط

هناك العديد من وظائف التنشيط للاختيار من بينها والتي يمكن استخدامها في الشبكة العصبية على أساس المشكلة الموجودة.

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

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

تعمل وظيفة التنشيط
رابط مفقود

هناك 3 أنواع من وظائف التنشيط:
ثنائي- س <0 ص = 0 ، س> 0 ص = 1
الخطي- س = ص
غير خطي - أنواع مختلفة: Sigmoid و TanH و Logistic و ReLU و Softmax إلخ.

المصدر: مدونة

النوع: ReLU
رابط مفقود

الخوارزمية

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

1) شبكة التغذية الأمامية هي شبكة غير متكررة تحتوي على مدخلات ومخرجات وطبقات مخفية ؛ حيث يمكن للإشارات أن تتحرك في اتجاه واحد فقط. يتم نقل بيانات الإدخال إلى طبقة معدات المعالجة حيث تقوم بإجراء العمليات الحسابية. يقوم كل عامل معالجة بحسابه بناءً على وزن المدخلات. يتم حساب القيم الجديدة ثم تغذي قيم الإدخال الجديدة الطبقة التالية.

تستمر هذه العملية حتى تمر عبر جميع الطبقات وتحدد النتيجة. تُستخدم وظيفة النقل المحدود أحيانًا لقياس ناتج الخلايا العصبية في طبقة الإخراج. تُعرف شبكات Feed Forward وتشمل شبكات Perceptron (المباشرة وغير المباشرة). غالبًا ما تُستخدم شبكات التغذية الأمامية لاستخراج البيانات.

2) تحتوي شبكة Feed-Back (على سبيل المثال ، شبكة عصبية متكررة أو RNN) على آليات رجعية مما يعني أنه يمكن أن يكون لها إشارات تتحرك في كلا الاتجاهين باستخدام الفخاخ / الحلقات. كل الاتصالات الممكنة بين الخلايا العصبية مسموح بها.

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

تمرين

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

لكن علينا أولاً تدريب نموذجنا على تعلم الأوزان حقًا ، وبالتالي فإن إجراء التدريب يعمل على النحو التالي:

  1. تحديد وتهيئة الأوزان بشكل عشوائي لجميع العقد. توجد طرق تهيئة ذكية مضمنة في TensorFlow و Keras (Python).
  2. لكل مثال تدريبي ، قم بإجراء تمريرة للأمام باستخدام الأوزان الحالية ، واحسب ناتج كل عقدة تنتقل من اليسار إلى اليمين. الناتج النهائي هو قيمة العقدة الأخيرة.
  3. قارن الناتج النهائي مع الهدف الفعلي داخل بيانات التدريب ، وقياس الخطأ باستخدام دالة الخسارة.
  4. قم بإجراء تمريرة عكسية من اليمين إلى اليسار وانشر الخطأ المحسوب في الخطوة الأخيرة لكل عقدة فردية باستخدام backpropagation.
  5. احسب مساهمة وزن كل خلية عصبية في الخطأ ، واضبط أوزان الاتصال وفقًا لذلك باستخدام النسب المتدرج. انشر تدرجات الخطأ للخلف بدءًا من الطبقة الأخيرة.

كود بايثون للشبكة العصبية

الآن بعد أن فهمنا كيف يتم إنشاء الشبكة العصبية من الناحية النظرية ، دعونا نطبق نفس الشيء باستخدام Python.

الشبكة العصبية في بايثون
سنستخدم Keras API مع Tensorflow أو Theano الخلفي لإنشاء شبكتنا العصبية.

تركيب المكتبات
ثيانو
>>> تثبيت نقطي - ترقية - بدون إدارة بوابة + بوابة: //github.com/Theano/Theano.git

Tensorflow و Keras
>>> pip3 تثبيت Tensorflow
>>> نقطة تثبيت - ترقية Keras

قم باستيراد المكتبات

استيراد كراس
من keras.models استيراد تسلسلي
من keras.layer استيراد كثيف

بدء الشبكة العصبية الاصطناعية

النموذج = متسلسل ()

ينشئ طبقات الإدخال والمخفية-

model.add (كثيف (input_dim = 2 ، unit = 10 ، activation = 'relu' ، kernel_initializer = 'uniform'))

يضيف هذا الرمز طبقة الإدخال وطبقة واحدة مخفية إلى الشبكة المتسلسلة
Dense (): يتيح لنا إنشاء شبكة عصبية متصلة بكثافة
input_dim: شكل أو عدد العقد في طبقة الإدخال
الوحدات: عدد الخلايا العصبية أو العقد في الطبقة الحالية (الطبقة المخفية)
التنشيط: يتم تطبيق وظيفة التنشيط على كل عقدة. "relu" تعني الوحدة الخطية المصححة
kernel_initializer: أوزان عشوائية أولية للطبقة

الطبقة الثانية المخفية
model.add (كثيف (الوحدات = 20 ، التنشيط = 'relu' ، kernel_initializer = 'موحد'))

يقوم الكود بإنشاء وإضافة طبقة مخفية أخرى إلى النموذج مع 20 عقدة ووظيفة التنشيط الخطي المصححة. يمكن إضافة المزيد من الطبقات بطريقة مماثلة اعتمادًا على المشكلة والتعقيد.

طبقة الإخراج
model.add (كثيف (الوحدات = 1 ، التنشيط = 'sigmoid' ، kernel_initializer = 'uniform'))

تعد طبقة الإخراج المفردة مع Sigmoid أو softmax هي وظائف التنشيط الشائعة الاستخدام لطبقة الإخراج.

تجميع ANN:
model.compile (Optizer = 'adam'، loss = 'binary_crossentropy'، metrics = ['resolution'])

يتم تجميع ANN بوظيفة مُحسِّن ووظيفة خسارة قبل التدريب.

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

ملاءمة النموذج مع بيانات التدريب:
model.fit (X_train، Y_train، batch_size = 64، العهود = 30)

هذا الرمز سيخلق النموذج

خاتمة

يمكننا الآن إنشاء شبكة عصبية اصطناعية (على لغة بايثون) من البداية حيث فهمنا المعلمات المختلفة التي يمكن تغييرها وفقًا للمشكلة الموجودة.

إذا كنت مهتمًا بمعرفة المزيد حول تقنيات التعلم العميق ، والتعلم الآلي ، فراجع IIIT-B & upGrad's دبلوم PG في التعلم الآلي والذكاء الاصطناعي المصمم للمهنيين العاملين ويقدم أكثر من 450 ساعة من التدريب الصارم ، وأكثر من 30 دراسة حالة و المهام ، وحالة خريجي IIIT-B ، وأكثر من 5 مشاريع تتويجا عملية ومساعدة وظيفية مع كبرى الشركات.

تعلم دورة ML من أفضل الجامعات في العالم. احصل على درجة الماجستير أو برنامج PGP التنفيذي أو برامج الشهادات المتقدمة لتسريع مسار حياتك المهنية.

قيادة الثورة التكنولوجية التي يقودها الذكاء الاصطناعي

تقدم بطلب للحصول على برنامج الشهادة المتقدمة في تعلم الآلة و البرمجة اللغوية العصبية