شبکه عصبی کانولوشن (CNN) چیست؟

16991
شبکه عصبی کانولوشن | Convolutional Neural Network

انواع مختلفی از شبکه‌های عصبی برای استفاده در پروژه‌های یادگیری ماشین وجود دارد. به‌عنوان مثال شبکه‌های عصبی بازگشتی (recurrent neural networks)، شبکه‌های عصبی پیش‌خور (feed-forward neural networks)، شبکه‌های عصبی مدولار (modular neural networks) و… شبکه‌ عصبی کانولوشن (Convolutional Neural Network) هم یکی از انواع شبکه‌های عصبی متداول است. اما قبل از پرداختن به جزئیات شبکه‌های عصبی کانولوشن، بهتر است کمی در‌مورد شبکه عصبی معمولی صحبت کنیم.

شبکه عصبی چیست؟

وقتی به یادگیری عمیق (deep learning) که حیطه‌ای از یادگیری ماشین (machine learning) است، اشاره می‌شود، احتمالاً در مورد شبکه عصبی صحبت می‌شود.

شبکه‌های عصبی از مغز ما الگو گرفته‌اند. نود‌هایی (node) وجود دارند که لایه‌ها (layer) را در شبکه تشکیل می‌دهند و دقیقاً مانند نورون‌های مغز ما، نواحی مختلف را به هم متصل می‌کنند.

به ورودی‌های نود‌ها در یک لایه، وزنی اختصاص می‌یابد که تأثیری را که پارامتر بر نتیجه پیش‌بینی کلی دارد، تغییر می‌دهد. از آنجا که وزن‌ها به پیوندهای بین نود‌ها اختصاص داده می‌شوند، ممکن است هر نود تحت‌تأثیر وزن‌های مختلف قرار گیرد.

شبکه عصبی تمام داده‌های آموزش را در لایه ورودی می‌گیرد. سپس داده‌ها را از میان لایه‌های پنهان عبور داده، مقادیر را بر‌اساس وزن هر نود تغییر می‌دهد و در نهایت مقداری را در لایه خروجی برمی‌گرداند.

شبکه عصبی کانولوشن | Convolutional Neural Network
شبکه عصبی با چندین لایه پنهان. هر لایه چندین گره دارد.

تنظیم درست یک شبکه عصبی برای رسیدن به نتایج سازگار و قابل‌اعتماد ممکن است کمی زمان‌بر باشد. آزمایش و آموزش شبکه عصبی، یک فرآیند متعادل‌سازی برای تعیین مهم‌ترین ویژگی‌های مدل است.

بیشتر بخوانید: یادگیری ماشین چیست؟ همه چیز درباره Machine Learning

بیشتر بخوانید: یادگیری عمیق چیست؟ با Deep Learning آشنا شوید

شبکه عصبی کانولوشن (CNN) چگونه متفاوت عمل می‌کند؟

شبکه عصبی کانولوشن نوع خاصی از شبکه عصبی با چندین لایه است که داده‌هایی را که آرایش شبکه‌ای دارند، پردازش کرده و سپس ویژگی‌های مهم آن‌ها را استخراج می‌کند. یک مزیت بزرگ استفاده از CNNها این است که نیازی به انجام پیش‌پردازش زیادی روی تصاویر نیست.

در بیشتر الگوریتم‌هایی که پردازش تصویر را انجام می‌دهند، فیلترها معمولاً توسط یک مهندس بر اساس روش‌های اکتشافی (heuristic) ایجاد می‌شوند. CNNها می‌توانند مهم‌ترین ویژگی فیلترها را بیاموزند و چون به پارامتر‌های زیادی احتیاج نیست، صرفه‌جویی زیادی در وقت و عملیات آزمون و خطا صورت می‌گیرد.

تا زمانی که با تصاویر با ابعاد بالا که هزاران پیکسل دارند کار نکنید، این صرفه‌جویی چندان به چشم نمی‌آید. هدف اصلی الگوریتم CNN این است که با حفظ ویژگی‌هایی که برای فهم آنچه داده‌ها نشان می‌دهند مهم هستند، داده‌ها را به فرم‌هایی که پردازش آن‌ها آسان‌تر است، درآورد. آن‌ها همچنین گزینه خوبی برای کار با مجموعه داده‌های عظیم هستند.

یک تفاوت بزرگ بین CNN و شبکه عصبی معمولی این است که CNNها برای مدیریت ریاضیات پشت‌صحنه، از کانولوشن استفاده می‌کنند. حداقل در یک لایه از CNN، به‌جای ضرب ماتریس از کانولوشن استفاده می‌شود. کانولوشن‌ها تا دو تابع را می‌گیرند و یک تابع را برمی‌گردانند.

CNNها با اعمال فیلتر روی داده‌های ورودی شما کار می‌کنند. چیزی که آن‌ها را بسیار خاص می‌کند، این است که CNNها می‌توانند فیلترها را هم‌زمان با فرایند آموزش، تنظیم کنند. به این ترتیب، حتی وقتی مجموعه داده‌های عظیمی مانند تصاویر داشته باشید، نتایج به‌خوبی و در‌لحظه دقیق‌تر می‌شوند.

از آنجا که می‌توان فیلترها را برای آموزش بهتر CNN تازه‌سازی کرد، نیاز به فیلترهای دستی از بین می‌رود و این انعطاف‌پذیری بیشتری در تعداد و ارتباط فیلترهایی که بر روی مجموعه داده‌ها اعمال می‌شوند، به ما می‌دهد. با استفاده از این الگوریتم، می‌توانیم روی مسائل پیچیده‌تری مانند تشخیص چهره کار کنیم.

کمبود داده یکی از مشکلاتی است که مانع استفاده از CNN می‌شود. با وجود اینکه می‌توان شبکه‌ها را با تعداد داده نسبتاً کمی (تقریباً 10،000) آموزش داد، هر‌چه اطلاعات بیشتری در دسترس باشد، CNN بهتر تنظیم می‌شود.

فقط به خاطر داشته باشید که این داده‌ها باید بدون‌نقص و دارای برچسب باشند تا CNN بتواند از آن‌ها استفاده کند و این چیزی است که باعث می‌شود کار کردن با آن‌ها زمان‌بر و نیازمند منابع سنگین محاسباتی باشد.

شبکه عصبی کانولوشن چگونه عمل می‌کند؟

شبکه‌های عصبی کانولوشن بر‌اساس یافته‌های علوم اعصاب (neuroscience) عمل می‌کنند. آ‌ن‌ها از لایه‌هایی از نورون‌های مصنوعی به نام نود (node) ساخته شده‌اند. این نود‌ها توابعی هستند که مجموع وزنی ورودی‌ها را محاسبه می‌کنند و یک نگاشت فعال‌سازی (activation map) را برمی‌گردانند. این بخشِ کانولوشنی شبکه عصبی است.

شبکه عصبی کانولوشن | Convolutional Neural Network

هر نود در یک لایه توسط مقادیر وزنی آن تعریف می‌شود. وقتی به یک لایه داده‌هایی را می‌دهید، برای مثال یک تصویر، مقادیر پیکسل را می‌گیرد و برخی از ویژگی‌های بصری را جدا می‌کند.

هنگامی که داده‌ها را به CNN می‌دهید، هر لایه نگاشت‌های فعال‌سازی را برمی‌گرداند. این نگاشت‌ها ویژگی‌های مهم مجموعه داده را شناسایی می‌کنند. اگر به CNN تصویری را بدهید، ویژگی‌های مبتنی بر مقادیر پیکسل مانند رنگ‌ها را شناسایی می‌کند و تابع فعال‌سازی را به شما ارائه می‌دهد.

معمولاً در تصاویر، CNN در ابتدا لبه‌های تصویر را پیدا می‌کند. سپس این تعریفِ جزئی از تصویر به لایه بعدی منتقل می‌شود و آن لایه شروع به شناسایی مواردی مانند گوشه‌ها و گروه‌های رنگی می‌کند. سپس این تعریف جدید از تصویر به لایه بعدی منتقل می‌شود و چرخه تا پیش‌بینی ادامه پیدا می‌کند.

همان طور که در تصویر زیر مشخص است، با افزایش تعداد لایه‌ها حداکثر تجمع (max pooling) باید انجام شود. حداکثر تجمع فقط مرتبط‌ترین ویژگی‌ها از لایه موجود در نقشه فعال‌سازی را برمی‌گرداند و به لایه‌های بعدی منتقل می‌کند تا زمانی که به لایه آخر برسید.

آخرین لایه CNN لایه طبقه‌بندی است که مقدار پیش‌بینی‌شده را بر‌اساس نگاشت فعال‌سازی تعیین می‌کند. اگر یک نمونه دست‌خط را به CNN بدهید، لایه‌ی طبقه‌بندی حروف موجود در تصویر را به شما می‌گوید. این همان چیزی است که وسایل نقلیه خودران برای تعیین اینکه یک شیء اتومبیل، شخص و یا یک مانع است، استفاده می‌کنند.

شبکه عصبی کانولوشن | Convolutional Neural Network

آموزش CNN مشابه آموزش بسیاری از الگوریتم‌های دیگرِ یادگیری ماشین است. شما با داده‌های آموزشی که متفاوت از داده‌های تست شما هستند، شروع و وزن‌ها را بر اساس دقت مقادیر پیش‌بینی‌شده تنظیم خواهید کرد. فقط مواظب باشید که مدل را بیش‌برازش (overfit) نکنید.

موارد استفاده از شبکه عصبی کانولوشن

انواع مختلفی از CNNها وجود دارد که می‌توانید بسته به مسئله خود از آن‌ها استفاده کنید.

انواع شبکه عصبی کانولوشن CNN

CNN یک‌بعدی: در این حالت، کرنل CNN در یک جهت حرکت می‌کند. CNNهای یک‌بعدی معمولاً روی داده‌های سری زمانی استفاده می‌شوند.

CNN دو‌بعدی: در این نوع از CNN، کرنل‌ها در دو جهت حرکت می‌کنند. CNN‌های دو‌بعدی در برچسب‌گذاری و پردازش تصویر کاربرد دارند.

CNN سه‌بعدی: این نوع CNN دارای کرنلی است که در سه جهت حرکت می‌کند. محققان از این نوع CNN در تصاویر سه‌بعدی مانند سی‌تی‌اسکن و MRI استفاده می‌کنند.

از آنجایی که بیشتر مسائل با داده‌های تصویر مرتبط هستند، اغلب از CNNهای دو‌بعدی استفاده می‌شود. در ادامه برخی از کاربرد‌هایی که ممکن است از CNNها استفاده شود، آورده شده است.

  • تشخیص تصاویر با پیش‌پردازش کم
  • تشخیص دست‌خط‌های مختلف
  • کاربرد‌های بینایی کامپیوتر (Computer Vision)
  • استفاده در بانک‌داری برای خواندن ارقام در چک
  • استفاده در سرویس‌های پستی برای خواندن کد‌پستی روی پاکت نامه

مطلب مرتبط: یادگیری ماشین در امنیت سایبری

مثالی از CNN در پایتون

به‌عنوان نمونه‌ای از استفاده CNN در یک مسئله واقعی، بیایید اعداد دست‌نویس را با استفاده از مجموعه داده MNIST تشخیص دهیم.

اولین کاری که باید انجام دهیم، تعریف مدل CNN است. سپس اطلاعات آموزش و تست را جدا می‌کنیم و در نهایت از داده‌های آموزش برای آموزش مدل و از داده‌های تست برای آزمایش آن استفاده می‌کنیم.

from keras import layers
from keras import models
from keras.datasets import mnist
from keras.utils import to_categorical

# Define the CNN model
model = models.Sequential()

model.add(layers.Conv2D(32, (5,5), activation='relu', input_shape=(28, 28,1)))
model.add(layers.MaxPooling2D((2, 2)))

model.add(layers.Conv2D(64, (5, 5), activation='relu'))
model.add(layers.MaxPooling2D((2, 2)))

model.add(layers.Flatten())
model.add(layers.Dense(10, activation='softmax'))

model.summary()

# Split the data into training and test sets
(train_images, train_labels), (test_images, test_labels) = mnist.load_data()

train_images = train_images.reshape((60000, 28, 28, 1))
train_images = train_images.astype('float32') / 255

test_images = test_images.reshape((10000, 28, 28, 1))
test_images = test_images.astype('float32') / 255

train_labels = to_categorical(train_labels)
test_labels = to_categorical(test_labels)

# Use the training data to train the model
model.compile(loss='categorical_crossentropy',
              optimizer='sgd',
              metrics=['accuracy'])

model.fit(train_images, train_labels,
          batch_size=100,
          epochs=5,
          verbose=1)

# Test the model's accuracy with the test data
test_loss, test_acc = model.evaluate(test_images, test_labels)

print('Test accuracy:', test_acc)

جمع‌بندی

شبکه‌های عصبی کانولوشن، شبکه‌های عصبی چند‌لایه هستند که در گرفتن ویژگی‌های داده‌ها مهارت دارند. آن‌ها به‌خوبی با تصاویر کار می‌کنند و نیاز به پیش‌پردازش زیادی ندارند.

با استفاده از پیچش‌ها (convolution) و ادغام (pooling)، برای کاهش تصویر به ویژگی‌های اصلی آن، می‌توانید تصاویر را به‌درستی شناسایی کنید.

آموزش مدل‌های CNN با پارامترهای اولیه کمتر، آسان‌تر از سایر شبکه‌های عصبی است. از آنجا که کانولوشن‌ها قادر به کشف تعداد زیادی لایه پنهان برای شما هستند، به تعداد زیادی لایه‌ پنهان نیاز نخواهید داشت.

یکی از نکات جالب در‌مورد CNNها تعداد مسائل پیچیده‌ای است که می‌توان از آن‌ها استفاده کرد. از اتومبیل‌های خودران گرفته تا تشخیص دیابت، CNNها می‌توانند داده‌ها را پردازش کرده و پیش‌بینی‌های دقیقی ارائه دهند.

آموزش برنامه نویسی با کوئرا کالج
کوئرا بلاگ

اشتراک در
اطلاع از
guest

3 دیدگاه‌
قدیمی‌ترین
تازه‌ترین بیشترین واکنش
بازخورد (Feedback) های اینلاین
View all comments
عرفان
عرفان
2 سال قبل

بسیار عالی ممنونم

نسرین نادری
نسرین نادری
2 سال قبل
پاسخ به  عرفان

سلام دوست کوئرایی عزیز

خوشحالیم که این مطلب برای شما مفید بوده

جعفر
جعفر
1 سال قبل

عالی