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

يمكن العثور على الدورة الكاملة باللغة الروسية على هذا الرابط .
دورة اللغة الإنجليزية الأصلية متاحة على هذا الرابط .


ومن المقرر محاضرات جديدة كل 2-3 أيام.

مقابلة مع سيباستيان


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

مقدمة


في الدرس الأخير ، تعلمنا كيفية تطوير شبكات عصبية عميقة قادرة على تصنيف صور عناصر الملابس من مجموعة بيانات Fashion MNIST.



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

model = tf.keras.Sequential([ tf.keras.layers.Flatten(input_shape=(28, 28, 1)), tf.keras.layers.Dense(128, activation=tf.nn.relu), tf.keras.layers.Dense(10, activation=tf.nn.softmax) ]) 

 model.compile(optimizer='adam', loss='sparse_categorical_crossentropy', metrics=['accuracy']) 

 NUM_EXAMPLES = 60000 train_dataset = train_dataset.repeat().shuffle(NUM_EXAMPLES).batch(32) test_dataset = test_dataset.batch(32) 

 model.fit(train_dataset, epochs=5, steps_per_epoch=math.ceil(num_train_examples/32)) 

 test_loss, test_accuracy = model.evaluate(test_dataset, steps=math.ceil(num_test_examples/32)) print(': ', test_accuracy) 

: 0.8782

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

في هذا الدرس ، سوف نتعلم مدى سهولة تطوير مصنف SNA من البداية باستخدام TensorFlow و Keras. سنستخدم نفس مجموعة البيانات Fashion MNIST التي استخدمناها في الدرس السابق. في نهاية هذا الدرس ، قارنا دقة تصنيف عناصر الملابس في الشبكة العصبية السابقة مع الشبكة العصبية التلافيفية من هذا الدرس.

قبل أن تغوص في التطوير ، فإن الأمر يستحق بعض الشيء أعمق في مبدأ عمل الشبكات العصبية التلافيفية.

مفهومان أساسيان في الشبكات العصبية التلافيفية:

  • التفاف
  • عملية أخذ العينات الفرعية (التجميع ، التجميع الأقصى)


دعونا نلقي نظرة فاحصة عليها.

التفاف


في هذا الجزء من درسنا ، سنتعلم تقنية تسمى الإلتواء. دعونا نرى كيف يعمل.

التقط صورة بظلال رمادية ، على سبيل المثال ، تخيل أن أبعاده يبلغ ارتفاعها 6 بكسل وعرضها 6 بكسل.



يفسر الكمبيوتر لدينا الصورة كصفيف ثنائي الأبعاد من البكسل. نظرًا لأن صورنا في ظلال رمادية ، فستكون قيمة كل بكسل في النطاق من 0 إلى 255. 0 - أسود ، 255 - أبيض.

في الصورة أدناه ، نرى تمثيلًا للصورة بحجم 6 بكسل × 6 بكسل وقيم البكسل المقابلة:



كما تعلمون بالفعل ، قبل العمل مع الصور ، ستحتاج إلى تطبيع قيم البيكسل - رفع القيم إلى فاصل زمني من 0 إلى 1. ومع ذلك ، في هذا المثال ، لراحة التوضيح ، سنقوم بحفظ قيم البيكسل للصورة ولن نقوم بتطبيعها.

جوهر الالتواء هو إنشاء مجموعة أخرى من القيم ، والتي تسمى النواة أو المرشح. يمكن رؤية مثال في الصورة أدناه - مصفوفة 3 × 3:



ثم يمكننا مسح صورتنا باستخدام النواة. أبعاد صورنا هي 6x6px ، والقلب 3x3px. يتم تطبيق الطبقة التلافيفية على النواة وكل قسم من صورة الإدخال.

دعنا نتخيل أننا نريد الالتفاف على بكسل بقيمة 25 (3 صفوف ، 3 أعمدة) وأول شيء يجب القيام به هو توسيط النواة على هذا البيكسل:



في الصورة ، يتم تمييز الموضع الأساسي باللون الأصفر. سننظر الآن فقط في قيم البكسل الموجودة في المستطيل الأصفر لدينا ، والتي تتوافق أحجامها مع أحجام جوهر الالتفاف لدينا.

نحن الآن نأخذ قيم بكسل الصورة والنواة ، ونضرب كل بكسل للصورة بالبكسل المطابق للنواة ونضيف كل قيم المنتج ، ونعيّن قيمة البيكسل الناتجة للصورة الجديدة.







نقوم بإجراء عملية مماثلة مع جميع وحدات البكسل في صورتنا. ولكن ماذا يجب أن يحدث للبكسلات على الحدود؟



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



الآن وبعد إجراء المحاذاة مع قيم صفر بكسل ، يمكننا حساب قيمة البكسل النهائي في الصورة المصغرة كما كان من قبل.

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

الآن دعونا نلقي نظرة على المفهوم الثاني للشبكات العصبية التلافيفية - عملية أخذ العينات الفرعية (التجميع ، التجميع الأقصى).

عملية أخذ العينات الفرعية (التجميع ، التجميع الأقصى)


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



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

بعد أن نقرر حجم الشبكة وحجم الخطوة ، نحتاج إلى إيجاد الحد الأقصى لقيمة البيكسل التي تقع في الشبكة المحددة. في المثال أعلاه ، تندرج القيم 1 و 0 و 4 و 8 و 2 و 5 و 20 و 13 و 25 في الشبكة ، والقيمة القصوى هي 25. يتم "نقل" هذه القيمة إلى الصورة الجديدة. يتم إزاحة الشبكة 3 بكسل إلى اليمين وتتكرر عملية تحديد الحد الأقصى للقيمة ونقلها إلى صورة جديدة.



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

دعونا نرى كيف سيعمل هذا في بيثون!

ملخص


أصبحنا على دراية بمفاهيم مثل الإلتفاف وعملية التجميع القصوى.

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

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

بعض المصطلحات التي تمكنا من الوصول إليها:

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

CoLab: تصنيف عناصر الملابس Fashion MNIST باستخدام شبكة عصبية تلافيفية


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

 model = tf.keras.Sequential([ tf.keras.layers.Conv2D(32, (3,3), padding='same', activation=tf.nn.relu, input_shape=(28, 28, 1)), tf.keras.layers.MaxPooling2D((2, 2), strides=2), tf.keras.layers.Conv2D(64, (3,3), padding='same', activation=tf.nn.relu), tf.keras.layers.MaxPooling2D((2, 2), strides=2), tf.keras.layers.Flatten(), tf.keras.layers.Dense(128, activation=tf.nn.relu), tf.keras.layers.Dense(10, activation=tf.nn.softmax) ]) 

جميع التفسيرات التفصيلية لكيفية العمل ، يعدون بإعطائنا في الجزء التالي - 4 أجزاء.

اوه نعم أصبحت دقة النموذج في مرحلة التدريب تساوي 97 ٪ (النموذج "المعاد تدريبه" في epochs=10 ) ، وعند تشغيله من خلال مجموعة البيانات للاختبارات ، أظهر 91 ٪ بالضبط. زيادة ملحوظة في الدقة بالنسبة إلى البنية السابقة ، حيث استخدمنا طبقات متصلة بالكامل فقط - 88٪.

النتائج


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

ملاحظة ملاحظة من مؤلف الترجمة.

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

... ومكالمة تحث على اتخاذ إجراء - اشترك ، ضع علامة زائد وشاركه :)
يوتيوب
برقية
فكونتاكتي

Source: https://habr.com/ru/post/ar454986/


All Articles