شبکه عصبی کانولوشن چیست؟ آموزش مبتدی برای یادگیری ماشینی و یادگیری عمیق

شکل ۱: شبکه عصبی کانولوشن
شکل ۱: شبکه عصبی کانولوشن


منتشر‌شده در: freecodecamp به تاریخ 4 فوریه 2021
لینک منبع: What Is a Convolutional Neural Network? A Beginner's Tutorial for Machine Learning and Deep Learning

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

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

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

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

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

شکل 2: شبکه عصبی با چندین لایه پنهان. هر لایه دارای چندین گره است.
شکل 2: شبکه عصبی با چندین لایه پنهان. هر لایه دارای چندین گره است.


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

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

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

مطالعه مقاله تفاوت‌های داده‌کاوی و متن‌کاوی توصیه می‌شود.

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

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

شکل 3: پردازش تصاویر در شبکه عصبی کانولوشن
شکل 3: پردازش تصاویر در شبکه عصبی کانولوشن


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

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

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

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

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

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

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

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

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

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

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

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

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

شکل 4: طبقه‌بندی تصویری شبکه تنسور
شکل 4: طبقه‌بندی تصویری شبکه تنسور


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

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

شاید به مطالعه مقاله الگوریتم‌های تشخیص جامعه نیز علاقمند باشید.

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

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

انواع مختلف CNN

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

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

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

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

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

نمونه‌ای از 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)

نتیجه‌گیری

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

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

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

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