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

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

الدماغ

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

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

هذا ما نفعله لا شعوريًا طوال اليوم. نرى الأنماط ونسميها ونقوم بالتنبؤات ونتعرف عليها لكن كيف نفعل ذلك؟ كيف يمكننا تفسير كل ما نراه؟

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

بينما تبدأ الرؤية في العين ، فإن التفسير الفعلي لما نراه يحدث في الدماغ ، في القشرة البصرية الأولية .

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

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

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

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

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

أجهزة الكمبيوتر "ترى" بطريقة مختلفة عما نفعل. عالمهم يتكون من أرقام فقط. يمكن تمثيل كل صورة كمصفوفات ثنائية الأبعاد من الأرقام ، تُعرف بالبكسل.

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

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

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

في ورقتهم ، وصفوا نوعين أساسيين من الخلايا العصبية البصرية في الدماغ يعمل كل منهما بطريقة مختلفة: الخلايا البسيطة ( الخلايا S ) والخلايا المعقدة ( الخلايا C ).

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

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

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

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

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

في وقت لاحق ، في عام 1998 ، تم تقديم الشبكات العصبية التلافيفية في ورقة كتبها بنجيو ، لو كون ، بوتو وهافنر. كانت أول شبكة عصبية تلافيفية تسمى LeNet-5 وكانت قادرة على تصنيف الأرقام من الأرقام المكتوبة يدويًا.

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

هندسة معمارية

في الجزء المتبقي من هذه المقالة ، سوف آخذك عبر بنية شبكة CNN وأعرض لك تطبيق Python أيضًا.

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

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

تحتوي شبكات CNN على مكونين:

  • الطبقات المخفية / جزء استخراج الميزة

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

  • جزء التصنيف

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

# before we start building we import the libraries
import numpy as np
from keras.layers import Conv2D, Activation, MaxPool2D, Flatten, Densefrom keras.models import Sequential

ميزة استخراج

الالتفاف هو أحد اللبنات الأساسية لشبكة CNN. يشير مصطلح الالتفاف إلى الجمع الرياضي بين وظيفتين لإنتاج دالة ثالثة. يدمج مجموعتين من المعلومات.

In the case of a CNN, the convolution is performed on the input data with the use of a filter or kernel (these terms are used interchangeably)to then produce a feature map.

We execute a convolution by sliding the filter over the input. At every location, a matrix multiplication is performed and sums the result onto the feature map.

In the animation below, you can see the convolution operation. You can see the filter (the green square) is sliding over our input (the blue square) and the sum of the convolution goes into the feature map (the red square).

The area of our filter is also called the receptive field, named after the neuron cells! The size of this filter is 3x3.

For the sake of explaining, I have shown you the operation in 2D, but in reality convolutions are performed in 3D. Each image is namely represented as a 3D matrix with a dimension for width, height, and depth. Depth is a dimension because of the colours channels used in an image (RGB).

We perfom numerous convolutions on our input, where each operation uses a different filter. This results in different feature maps. In the end, we take all of these feature maps and put them together as the final output of the convolution layer.

Just like any other Neural Network, we use an activation function to make our output non-linear. In the case of a Convolutional Neural Network, the output of the convolution will be passed through the activation function. This could be the ReLU activation function.

Stride is the size of the step the convolution filter moves each time. A stride size is usually 1, meaning the filter slides pixel by pixel. By increasing the stride size, your filter is sliding over the input with a larger interval and thus has less overlap between the cells.

The animation below shows stride size 1 in action.

Because the size of the feature map is always smaller than the input, we have to do something to prevent our feature map from shrinking. This is where we use padding.

A layer of zero-value pixels is added to surround the input with zeros, so that our feature map will not shrink. In addition to keeping the spatial size constant after performing convolution, padding also improves performance and makes sure the kernel and stride size will fit in the input.

After a convolution layer, it is common to add a pooling layer in between CNN layers. The function of pooling is to continuously reduce the dimensionality to reduce the number of parameters and computation in the network. This shortens the training time and controls overfitting.

The most frequent type of pooling is max pooling,which takes the maximum value in each window. These window sizes need to be specified beforehand. This decreases the feature map size while at the same time keeping the significant information.

Thus when using a CNN, the four important hyperparameters we have to decide on are:

  • the kernel size
  • the filter count (that is, how many filters do we want to use)
  • stride (how big are the steps of the filter)
  • padding
# Images fed into this model are 512 x 512 pixels with 3 channels
img_shape = (28,28,1)
# Set up the model
model = Sequential()
# Add convolutional layer with 3, 3 by 3 filters and a stride size of 1# Set padding so that input size equals output size
model.add(Conv2D(6,2,input_shape=img_shape))
# Add relu activation to the layer 
model.add(Activation('relu'))
#Pooling
model.add(MaxPool2D(2))

A nice way of visualizing a convolution layer is shown below. Try to look at it for a bit and really understand what is happening.

Classification

After the convolution and pooling layers, our classification part consists of a few fully connected layers. However, these fully connected layers can only accept 1 Dimensional data. To convert our 3D data to 1D, we use the function flatten in Python. This essentially arranges our 3D volume into a 1D vector.

The last layers of a Convolutional NN are fully connected layers. Neurons in a fully connected layer have full connections to all the activations in the previous layer. This part is in principle the same as a regular Neural Network.

#Fully connected layers
# Use Flatten to convert 3D data to 1Dmodel.add(Flatten())
# Add dense layer with 10 neuronsmodel.add(Dense(10))
# we use the softmax activation function for our last layermodel.add(Activation('softmax'))
# give an overview of our model
model.summary
_________________________________________________________________Layer (type) Output Shape Param # =================================================================conv2d_1 (Conv2D) (None, 27, 27, 6) 30 _________________________________________________________________activation_1 (Activation) (None, 27, 27, 6) 0 _________________________________________________________________max_pooling2d_1 (MaxPooling2 (None, 13, 13, 6) 0 _________________________________________________________________flatten_1 (Flatten) (None, 1014) 0 _________________________________________________________________dense_1 (Dense) (None, 10) 10150 _________________________________________________________________activation_2 (Activation) (None, 10) 0 =================================================================Total params: 10,180Trainable params: 10,180Non-trainable params: 0__________________________________________________________________

Training

Training a CNN works in the same way as a regular neural network, using backpropagration or gradient descent. However, here this is a bit more mathematically complex because of the convolution operations.

If you would like to read more about how regular neural nets work, you can read my previous article.

"""Before the training process, we have to put together a learning process in a particular form. It consists of 3 elements: an optimiser, a loss function and a metric."""
model.compile(loss='sparse_categorical_crossentropy', optimizer = 'adam', metrics=['acc'])
# dataset with handwritten digits to train the model onfrom keras.datasets import mnist
(x_train, y_train), (x_test, y_test) = mnist.load_data()
x_train = np.expand_dims(x_train,-1)
x_test = np.expand_dims(x_test,-1)
# Train the model, iterating on the data in batches of 32 samples# for 10 epochs
model.fit(x_train, y_train, batch_size=32, epochs=10, validation_data=(x_test,y_test)
# Training...
Train on 60000 samples, validate on 10000 samplesEpoch 1/1060000/60000 [==============================] - 10s 175us/step - loss: 4.0330 - acc: 0.7424 - val_loss: 3.5352 - val_acc: 0.7746Epoch 2/1060000/60000 [==============================] - 10s 169us/step - loss: 3.5208 - acc: 0.7746 - val_loss: 3.4403 - val_acc: 0.7794Epoch 3/1060000/60000 [==============================] - 11s 176us/step - loss: 2.4443 - acc: 0.8372 - val_loss: 1.9846 - val_acc: 0.8645Epoch 4/1060000/60000 [==============================] - 10s 173us/step - loss: 1.8943 - acc: 0.8691 - val_loss: 1.8478 - val_acc: 0.8713Epoch 5/1060000/60000 [==============================] - 10s 174us/step - loss: 1.7726 - acc: 0.8735 - val_loss: 1.7595 - val_acc: 0.8718Epoch 6/1060000/60000 [==============================] - 10s 174us/step - loss: 1.6943 - acc: 0.8765 - val_loss: 1.7150 - val_acc: 0.8745Epoch 7/1060000/60000 [==============================] - 10s 173us/step - loss: 1.6765 - acc: 0.8777 - val_loss: 1.7268 - val_acc: 0.8688Epoch 8/1060000/60000 [==============================] - 10s 173us/step - loss: 1.6676 - acc: 0.8799 - val_loss: 1.7110 - val_acc: 0.8749Epoch 9/1060000/60000 [==============================] - 10s 172us/step - loss: 1.4759 - acc: 0.8888 - val_loss: 0.1346 - val_acc: 0.9597Epoch 10/1060000/60000 [==============================] - 11s 177us/step - loss: 0.1026 - acc: 0.9681 - val_loss: 0.1144 - val_acc: 0.9693

Summary

In summary, CNNs are especially useful for image classification and recognition. They have two main parts: a feature extraction part and a classification part.

The main special technique in CNNs is convolution, where a filter slides over the input and merges the input value + the filter value on the feature map. In the end, our goal is to feed new images to our CNN so it can give a probability for the object it thinks it sees or describe an image with text.

You can find the entire code here.

المزيد من التوصيات المتعلقة بالدماغ ؟

  • اقرأ هذا المقال الرائع حقًا عن الدماغ والمزيد.
  • أوصي أيضًا بهذا الكتاب عن الذكاء والدماغ.
  • "كيف تصنع عقل" لراي كورزويل.