البرنامج التعليمي للشبكة العصبية الاصطناعية مع أمثلة TensorFlow ANN

ما هي الشبكة العصبية الاصطناعية؟

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

شبكة اعصاب صناعية
شبكة اعصاب صناعية

تتكون الشبكة العصبية الاصطناعية (ANN) من أربعة عناصر رئيسية:

  • طبقات: كل ​​التعلم يحدث في الطبقات. هناك 3 طبقات 1) الإدخال 2) مخفي و 3) الإخراج
  • الميزة والتسمية: إدخال البيانات إلى الشبكة (الميزات) والإخراج من الشبكة (التسميات)
  • فقدان وظيفة: المقياس المستخدم لتقدير أداء مرحلة التعلم
  • محسن: تحسين التعلم عن طريق تحديث المعرفة في الشبكة

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

إذا ألقيت نظرة على الشكل أعلاه، سوف تفهم الآلية الأساسية.

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

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

في تشبيهنا للمسألة الرياضية، فهذا يعني أنك تقرأ فصل الكتاب المدرسي عدة مرات حتى تفهم محتوى الدورة التدريبية بشكل كامل. حتى بعد القراءة عدة مرات، إذا واصلت ارتكاب الأخطاء، فهذا يعني أنك وصلت إلى القدرة المعرفية بالمادة الحالية. تحتاج إلى استخدام كتاب مدرسي مختلف أو اختبار طريقة مختلفة لتحسين درجاتك. بالنسبة للشبكة العصبية، فهي نفس العملية. إذا كان الخطأ بعيدًا عن 100٪ ولكن المنحنى مسطح، فهذا يعني مع التيار archiتيكتشر؛ ولا يمكنه أن يتعلم أي شيء آخر. يجب تحسين الشبكة بشكل أفضل لتحسين المعرفة.

الشبكة العصبية Architecture

الشبكة العصبية الاصطناعية Archiتتكون البنية من فولوwing المكونات:

  • طبقات
  • وظيفة التنشيط
  • فقدان وظيفة
  • محسن

طبقات

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

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

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

الشبكة العصبية Architecture
الشبكة العصبية Architecture

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

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

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

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

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

وظائف التنشيط الأخرى هي:

  • قطعةwise خطي
  • السيني
  • تانه
  • ريلو المتسرب

القرار الحاسم الذي يجب اتخاذه عند بناء شبكة عصبية هو:

  • كم عدد الطبقات في الشبكة العصبية
  • كم عدد الوحدات المخفية لكل طبقة

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

فقدان وظيفة

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

بالنسبة للتصنيف الثنائي، من الشائع استخدام دالة خسارة الإنتروبيا الثنائية. في الانحدار الخطي، يمكنك استخدام متوسط ​​مربع الخطأ.

تعتبر دالة الخسارة مقياسًا مهمًا لتقدير أداء المحسن. أثناء التدريب، سيتم تقليل هذا المقياس. يتعين عليك تحديد هذه الكمية بعناية اعتمادًا على نوع المشكلة التي تتعامل معها.

محسن

دالة الخسارة هي مقياس لأداء النموذج. سيساعد المحسن على تحسين أوزان الشبكة لتقليل الخسارة. هناك أدوات تحسين مختلفة متاحة، ولكن الأكثر شيوعًا هو Stochastic Gradient Descent.

أدوات التحسين التقليدية هي:

  • تحسين الزخم,
  • نيستيروف التدرج المتسارع,
  • أداغراد,
  • آدم الأمثل

حدود الشبكة العصبية

فولوwing هي قيود الشبكة العصبية:

Overfitting

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

هناك مقايضة في التعلم الآلي بين التحسين والتعميم.

يتطلب تحسين النموذج العثور على أفضل المعلمات التي تقلل من فقدان مجموعة التدريب.

ومع ذلك، فإن التعميم يخبرنا كيف يتصرف النموذج بالنسبة للبيانات غير المرئية.

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

حجم الشبكة

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

تنظيم الوزن

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

L1: لاسو: التكلفة تتناسب مع القيمة المطلقة لمعاملات الوزن

L2: ريدج: التكلفة تتناسب مع مربع قيمة معاملات الوزن

أوقع

التسرب هو أسلوب غريب ولكنه مفيد. الشبكة ذات التسرب تعني أنه سيتم ضبط بعض الأوزان بشكل عشوائي على الصفر. تخيل أن لديك مجموعة من الأوزان [0.1، 1.7، 0.7، -0.9]. إذا كانت الشبكة العصبية بها تسرب، فسوف يصبح [0.1، 0، 0، -0.9] مع 0 موزع عشوائيًا. المعلمة التي تتحكم في التسرب هي معدل التسرب. يحدد المعدل عدد الأوزان التي سيتم تعيينها على الأصفار. وجود معدل يتراوح بين 0.2 و 0.5 أمر شائع.

مثال على الشبكة العصبية في TensorFlow

دعونا نرى مثالاً عمليًا للشبكة العصبية الاصطناعية حول كيفية عمل الشبكة العصبية لحل مشكلة تصنيف نموذجية. هناك مدخلان، x1 وx2 بقيمة عشوائية. الإخراج هو فئة ثنائية. الهدف هو تصنيف التسمية بناءً على السمتين. لتنفيذ هذه المهمة، الشبكة العصبية archiيتم تعريف tecture على أنه فولوwing:

  • طبقتين مخفيتين
    • تحتوي الطبقة الأولى على أربع خلايا عصبية متصلة بالكامل
    • الطبقة الثانية تحتوي على خليتين عصبيتين متصلتين بالكامل
  • وظيفة التنشيط هي Relu
  • أضف تنظيم L2 بمعدل تعلم 0.003

الشبكة العصبية في TensorFlow

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

أولًا، تقوم الشبكة بتعيين قيم عشوائية لجميع الأوزان.

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

الشبكة العصبية في TensorFlow

داخل الطبقة المخفية الثانية، تكون الخطوط ملونةwing علامة الأوزان. تحدد الخطوط البرتقالية أوزانًا سالبة والخطوط الزرقاء أوزانًا موجبة

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

توضح صورة مثال ANN أدناه نتائج الشبكة المحسنة. أولاً، لاحظت أن الشبكة قد تعلمت بنجاح كيفية تصنيف نقطة البيانات. يمكنك أن ترى من الصورة من قبل؛ كان الوزن الأولي -0.43 بينما بعد التحسين ينتج وزن -0.95.

الشبكة العصبية في TensorFlow

يمكن تعميم الفكرة على الشبكات ذات الطبقات والخلايا العصبية المخفية. يمكنك اللعب في الصفحة .

كيفية تدريب الشبكة العصبية باستخدام TensorFlow

فيما يلي عملية خطوة بخطوة حول كيفية تدريب شبكة عصبية باستخدام TensorFlow ANN باستخدام مُقدِّر DNNClassifier الخاص بواجهة برمجة التطبيقات.

سوف نستخدم مجموعة بيانات MNIST لتدريب شبكتك العصبية الأولى. تدريب الشبكة العصبية مع TensorFlow ليست معقدة للغاية. تبدو خطوة المعالجة المسبقة تمامًا كما في البرامج التعليمية السابقة. سوف تتصرف على النحو التالي:

  • الخطوة 1: استيراد البيانات
  • الخطوة 2: تحويل البيانات
  • الخطوة 3: بناء الموتر
  • الخطوة 4: بناء النموذج
  • الخطوة 5: تدريب النموذج وتقييمه
  • الخطوة 6: تحسين النموذج

الخطوة 1) استيراد البيانات

أولا وقبل كل شيء، تحتاج إلى استيراد المكتبة اللازمة. يمكنك استيراد مجموعة بيانات MNIST باستخدام scikit learn كما هو موضح في مثال شبكة TensorFlow العصبية أدناه.

مجموعة بيانات MNIST هي مجموعة البيانات شائعة الاستخدام لاختبار التقنيات أو الخوارزميات الجديدة. مجموعة البيانات هذه عبارة عن مجموعة من الصور مقاس 28 × 28 بكسل مع أرقام مكتوبة بخط اليد من 0 إلى 9. حاليًا، أقل خطأ في الاختبار هو 0.27 بالمائة مع لجنة مكونة من 7 شبكات عصبية تلافيفية.

import numpy as np
import tensorflow as tf
np.random.seed(1337)

يمكنك تنزيل scikit learn مؤقتًا على هذا العنوان. انسخ مجموعة البيانات والصقه في مجلد مناسب. لاستيراد البيانات إلى لغة بايثون، يمكنك استخدام fetch_mldata من scikit learn. الصق مسار الملف داخل fetch_mldata لجلب البيانات.

from sklearn.datasets import fetch_mldata
mnist = fetch_mldata(' /Users/Thomas/Dropbox/Learning/Upwork/tuto_TF/data/mldata/MNIST original')
print(mnist.data.shape)
print(mnist.target.shape)

بعد ذلك، يمكنك استيراد البيانات والحصول على شكل مجموعتي البيانات.

from sklearn.model_selection import train_test_split

X_train, X_test, y_train, y_test = train_test_split(mnist.data, mnist.target, test_size=0.2, random_state=42)
y_train  = y_train.astype(int)
y_test  = y_test.astype(int)
batch_size =len(X_train)

print(X_train.shape, y_train.shape,y_test.shape )

الخطوة 2) تحويل البيانات

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

(X-min_x)/(max_x - min_x)

يتعلم Scikit بالفعل وظيفة لذلك: MinMaxScaler()

## resclae
from sklearn.preprocessing import MinMaxScaler
scaler = MinMaxScaler()
# Train
X_train_scaled = scaler.fit_transform(X_train.astype(np.float64))
# test
X_test_scaled = scaler.fit_transform(X_test.astype(np.float64))

الخطوة 3) بناء الموتر

أنت الآن على دراية بطريقة إنشاء الموتر في Tensorflow. يمكنك تحويل مجموعة القطار إلى عمود رقمي.

feature_columns = [tf.feature_column.numeric_column('x', shape=X_train_scaled.shape[1:])]

الخطوة 4) بناء النموذج

• archiتحتوي بنية الشبكة العصبية على طبقتين مخفيتين بواقع 2 وحدة للطبقة الأولى و300 وحدة للطبقة الثانية. نحن نستخدم هذه القيمة بناءً على تجربتنا الخاصة. يمكنك ضبط قيم هذه الأطروحات ومعرفة مدى تأثيرها على دقة الشبكة.

لبناء النموذج، يمكنك استخدام المقدر DNNClassifier. يمكنك إضافة عدد الطبقات إلى وسيطات feature_columns. تحتاج إلى ضبط عدد الفصول على 10 نظرًا لوجود عشرة فصول في مجموعة التدريب. أنت بالفعل على دراية ببناء جملة كائن المقدر. تتميز الوسائط بالأعمدة وعدد الفئات وmodel_dir وهي نفسها تمامًا كما في البرنامج التعليمي السابق. تتحكم الوسيطة الجديدة Hidden_unit في عدد الطبقات وعدد العقد التي سيتم توصيلها بالشبكة العصبية. في الكود أدناه، هناك طبقتان مخفيتان، الأولى تربط 300 عقدة والثانية تحتوي على 100 عقدة.

لإنشاء المقدر، استخدم tf.estimator.DNNClassifier مع المتابعةwing المعلمات:

  • feature_columns: تحديد الأعمدة المراد استخدامها في الشبكة
  • Hidden_units: تحديد عدد الخلايا العصبية المخفية
  • n_classes: تحديد عدد الفئات المراد التنبؤ بها
  • model_dir: تحديد مسار TensorBoard
estimator = tf.estimator.DNNClassifier(
    feature_columns=feature_columns,
    hidden_units=[300, 100], 
    n_classes=10, 
    model_dir = '/train/DNN')

الخطوة 5) تدريب النموذج وتقييمه

يمكنك استخدام الطريقة numpy لتدريب النموذج وتقييمه

# Train the estimator
train_input = tf.estimator.inputs.numpy_input_fn(
    x={"x": X_train_scaled},
    y=y_train,
    batch_size=50,
    shuffle=False,
    num_epochs=None)
estimator.train(input_fn = train_input,steps=1000) 
eval_input = tf.estimator.inputs.numpy_input_fn(
    x={"x": X_test_scaled},
    y=y_test, 
    shuffle=False,
    batch_size=X_test_scaled.shape[0],
    num_epochs=1)
estimator.evaluate(eval_input,steps=None) 

الإخراج:

{'accuracy': 0.9637143,
 'average_loss': 0.12014342,
 'loss': 1682.0079,
 'global_step': 1000}

الحالي archiتؤدي التقنية إلى دقة مجموعة التقييم بنسبة 96 بالمائة.

الخطوة 6) تحسين النموذج

يمكنك محاولة تحسين النموذج عن طريق إضافة معلمات التنظيم.

سوف نستخدم مُحسِّن Adam بمعدل تسرب قدره 0.3 وL1 لـ X وL2 لـ y. في TensorFlow Neural Network، يمكنك التحكم في المُحسِّن باستخدام سلسلة الكائناتwing باسم المحسن. TensorFlow عبارة عن واجهة برمجة تطبيقات مضمنة لمُحسِّن Proximal AdaGrad.

لإضافة التنظيم إلى الشبكة العصبية العميقة، يمكنك استخدام tf.train.ProximalAdagradOptimizer مع المتابعةwing المعلمة

  • معدل التعلم: Learning_rate
  • تسوية L1: l1_regularization_strength
  • تسوية L2: l2_regularization_strength
estimator_imp = tf.estimator.DNNClassifier(
    feature_columns=feature_columns,
    hidden_units=[300, 100],
    dropout=0.3, 
    n_classes = 10,
    optimizer=tf.train.ProximalAdagradOptimizer(
      learning_rate=0.01,
      l1_regularization_strength=0.01, 
      l2_regularization_strength=0.01
    ),
    model_dir = '/train/DNN1')
estimator_imp.train(input_fn = train_input,steps=1000) 
estimator_imp.evaluate(eval_input,steps=None) 

الإخراج:

{'accuracy': 0.95057142,
 'average_loss': 0.17318928,
 'loss': 2424.6499,
 'global_step': 2000}

القيم المختارة لتقليل التركيب الزائد لم تحسن دقة النموذج. النموذج الأول الخاص بك يتمتع بدقة تبلغ 96% بينما النموذج المزود بمنظم L2 يتمتع بدقة تبلغ 95%. يمكنك تجربة قيم مختلفة ومعرفة مدى تأثيرها على الدقة.

نبذة عامة

ستتعلم في هذا البرنامج التعليمي كيفية بناء شبكة عصبية. تتطلب الشبكة العصبية ما يلي:

  • عدد الطبقات المخفية
  • عدد العقد المتصلة بالكامل
  • وظيفة التنشيط
  • محسن
  • عدد الفصول

في TensorFlow ANN، يمكنك تدريب الشبكة العصبية على حل مشكلة التصنيف باستخدام:

  • tf.estimator.DNNClassifier

يتطلب المقدر تحديد:

  • feature_columns=feature_columns,
  • Hidden_units=[300, 100]
  • n_classes=10
  • model_dir

يمكنك تحسين النموذج باستخدام أدوات تحسين مختلفة. في هذا البرنامج التعليمي، تعلمت كيفية استخدام مُحسِّن Adam Grad بمعدل تعلم وإضافة عنصر تحكم لمنع التجاوز.