مبانی CNN در یادگیری عمیق
شبکه عصبی کانولوشن چیست؟
شبکههای عصبی کانولوشن که با نامهای CNN یا ConvNets نیز شناخته میشوند، نوعی شبکه عصبی مصنوعی پیشخور هستند که ساختار اتصال آن از سازماندهی قشر بینایی حیوانات الهام گرفته شده است.خوشه های کوچکی از سلول ها در قشر بینایی به مناطق خاصی از میدان بینایی حساس هستند. سلول های عصبی منفرد در مغز تنها زمانی واکنش نشان می دهند که جهت گیری های خاصی از لبه ها وجود داشته باشد. برخی از نورون ها زمانی که لبه های عمودی نشان داده می شوند فعال می شوند، در حالی که برخی دیگر با نشان دادن لبه های افقی یا مورب تحریک می شوند.
شبکه عصبی کانولوشنال نوعی شبکه عصبی مصنوعی است که در یادگیری عمیق برای ارزیابی اطلاعات بصری استفاده می شود. این شبکه ها می توانند طیف وسیعی از وظایف شامل تصاویر، صداها، متون، فیلم ها و سایر رسانه ها را انجام دهند. پروفسور Yann LeCunn از آزمایشگاه Bell اولین شبکه های کانولوشن موفق را در اواخر دهه 1990 ایجاد کرد.
شبکههای عصبی کانولوشنال (CNN)
دارای یک لایه ورودی، یک لایه خروجی، لایههای پنهان متعدد و میلیونها پارامتر هستند که به آنها اجازه میدهد اشیا و الگوهای پیچیده را یاد بگیرند. از فرآیندهای کانولوشن و ادغام برای نمونهبرداری فرعی ورودی داده شده قبل از اعمال تابع فعالسازی استفاده میکند، جایی که همه آنها لایههای پنهانی هستند که تا حدی به هم متصل هستند و لایه کاملاً متصل در انتها منجر به لایه خروجی میشود. شکل خروجی شبیه به اندازه تصویر ورودی است.
پیچیدگی فرآیند ترکیب دو تابع برای تولید خروجی تابع دیگر است. تصویر ورودی با استفاده از فیلترها در CNN ها پیچیده می شود که منجر به یک نقشه ویژگی می شود. فیلترها وزن ها و بایاس هایی هستند که به صورت تصادفی بردارهایی در شبکه تولید می شوند. CNN به جای داشتن وزن ها و سوگیری های جداگانه برای هر نورون، از وزن ها و سوگیری های یکسان برای همه نورون ها استفاده می کند. فیلترهای زیادی را می توان ایجاد کرد که هر کدام جنبه متفاوتی از ورودی را جلب می کند. کرنل ها نام دیگری برای فیلترها هستند.
لایه کانولوشنال
در شبکه های عصبی کانولوشن، عناصر اصلی ساختمان لایه های کانولوشن هستند. این لایه اغلب شامل بردارهای ورودی مانند تصویر، فیلترها مانند آشکارساز ویژگی و بردارهای خروجی مانند نقشه ویژگی است. تصویر پس از عبور از یک لایه کانولوشن به یک نقشه ویژگی، که به عنوان نقشه فعال سازی نیز شناخته می شود، انتزاع می شود.
نقشه ویژگی = تصویر ورودی x آشکارساز ویژگی
ورودی توسط لایه های کانولوشن پیچیده می شود، که سپس خروجی را به لایه بعدی منتقل می کند. این مشابه پاسخ یک نورون به یک محرک منفرد در قشر بینایی است. هر نورون کانولوشنال فقط داده ها را برای میدان گیرنده ای که به آن اختصاص داده شده پردازش می کند.
کانولوشن یک تابع گروه بندی در ریاضیات است. پیچیدگی در CNN ها زمانی اتفاق می افتد که دو ماتریس (آرایه های مستطیلی از اعداد که در ستون ها و ردیف ها چیده شده اند) برای ایجاد یک ماتریس سوم ترکیب شوند.
در لایههای کانولوشنیک CNN، از این پیچیدگیها برای فیلتر کردن دادههای ورودی و یافتن اطلاعات استفاده میشود.عنصر مرکزی هسته بالای پیکسل منبع قرار می گیرد. پس از آن، پیکسل منبع با مجموع وزنی از خود و پیکسل های همسایه جایگزین می شود.
اشتراک پارامتر و اتصال محلی دو اصل مورد استفاده در CNN ها هستند. همه نورونها در یک نقشه ویژگی، وزنهایی را به اشتراک میگذارند که به اشتراک پارامتر معروف است. اتصال محلی به این ایده اشاره دارد که هر عصبی تنها به بخشی از تصویر ورودی متصل است (بر خلاف شبکه عصبی که در آن همه نورون ها به طور کامل متصل هستند). این باعث کاهش تعداد پارامترهای سیستم و سرعت بخشیدن به محاسبه می شود.
پدینگ و گام برداشتن
بالشتک زدن و گام برداشتن بر نحوه انجام فرآیند پیچش تأثیر می گذارد. از padding و stride می توان برای افزایش یا کاهش ابعاد (ارتفاع و عرض) بردارهای ورودی/خروجی استفاده کرد.
Padding اصطلاحی است که در شبکههای عصبی کانولوشن برای توصیف تعداد پیکسلهایی که به یک تصویر هنگام پردازش توسط هسته CNN اضافه میشود، استفاده میشود. برای مثال، اگر padding در یک CNN روی صفر تنظیم شود، هر پیکسل ارزش افزوده مقدار صفر خواهد داشت. اگر لایه صفر روی یک تنظیم شود، یک حاشیه یک پیکسلی با مقدار پیکسل صفر به تصویر اضافه می شود.
Padding با افزایش ناحیه پردازش یک شبکه عصبی کانولوشنال کار می کند. هسته یک فیلتر شبکه عصبی است که در تصویر حرکت می کند، هر پیکسل را اسکن می کند و داده ها را به فرمت کوچکتر یا بزرگتر تبدیل می کند. بالشتک به قاب تصویر اضافه می شود تا به هسته در پردازش تصویر کمک کند و با فراهم کردن فضای بیشتری برای کرنل برای پوشش تصویر کمک کند. افزودن بالشتک به تصویر پردازش شده توسط CNN تجزیه و تحلیل تصویر دقیق تری را فراهم می کند.
Stride تعیین می کند که چگونه فیلتر روی ماتریس ورودی پیچید، یعنی چند پیکسل جابجا شود. هنگامی که گام روی 1 تنظیم می شود، فیلتر در یک زمان روی یک پیکسل حرکت می کند و زمانی که گام روی 2 تنظیم شود، فیلتر در یک زمان روی دو پیکسل حرکت می کند. هرچه مقدار گام کوچکتر باشد، خروجی کوچکتر است و بالعکس.
ادغام
هدف آن کاهش تدریجی اندازه فضایی نمایش برای کاهش تعداد پارامترها و محاسبات در شبکه است. لایه ادغام هر نقشه ویژگی را جداگانه بررسی می کند.
در زیر چند روش برای ادغام آورده شده است:
Max-pooling : مهم ترین عنصر را از نقشه ویژگی انتخاب می کند. ویژگی های مهم نقشه ویژگی در لایه حداکثر جمع شده ذخیره می شود. این روش محبوب ترین روش است زیرا بهترین نتایج را ایجاد می کند.
میانگین ادغام : مستلزم محاسبه میانگین برای هر منطقه از نقشه ویژگی است.
ادغام به تدریج بعد فضایی نمایش را کاهش می دهد تا تعداد پارامترها و محاسبات در شبکه را کاهش دهد و همچنین از اضافه برازش جلوگیری کند. اگر ادغام وجود نداشته باشد، خروجی همان وضوح ورودی را دارد.
ReLU
تابع فعالسازی خطی اصلاحشده یا به اختصار ReLU، یک تابع خطی تکهای است که اگر ورودی مثبت باشد، مستقیماً ورودی را خروجی میکند. در غیر این صورت، خروجی آن صفر است. از آنجایی که مدلی که از آن استفاده میکند سریعتر آموزش داده میشود و به طور کلی عملکرد بالاتری تولید میکند، به تابع فعالسازی پیشفرض برای بسیاری از انواع شبکههای عصبی تبدیل شده است.
در انتهای CNN، یک لایه کاملاً متصل از نورون ها وجود دارد. مانند شبکههای عصبی معمولی، نورونها در یک لایه کاملاً متصل به تمام فعالسازیهای لایه قبلی ارتباط کامل دارند و به طور مشابه کار میکنند.
پس از آموزش، بردار ویژگی از لایه کاملاً متصل برای طبقهبندی تصاویر به دستههای مجزا استفاده میشود. هر واحد فعال سازی در لایه بعدی به تمام ورودی های این لایه کوپل می شود.
برازش بیش از حد اتفاق می افتد زیرا تمام پارامترها در لایه کاملاً متصل اشغال شده اند. اضافه برازش را می توان با استفاده از استراتژی های مختلف کاهش داد، از جمله ترک تحصیل.Soft-max یک لایه
فعال سازی است که معمولاً روی آخرین لایه شبکه اعمال می شود که به عنوان یک طبقه بندی کننده عمل می کند. این لایه مسئول دسته بندی ورودی ارائه شده به انواع مجزا است. خروجی غیر عادی
شبکه با استفاده از تابع softmax به یک توزیع احتمال نگاشت می شود.
پیاده سازی پایه پایتون
واردات برخی از کتابخانه های مربوطه
import NumPy as np %matplotlib inline import matplotlib.image as mpimg import matplotlib.pyplot as plt import TensorFlow as tf tf.compat.v1.set_random_seed(2019)
در حال بارگیری مجموعه داده های MNIST
(X_train،Y_train)،(X_test،Y_test) = keras.datasets.mnist.load_data()
مقیاس گذاری داده های ما
X_train = X_train / 255 X_test = X_test / 255
#صاف کردن :
X_train_flattened = X_train.reshape(len(X_train)، 28*28) X_test_flattened = X_test.reshape(len(X_test)، 28*28)
طراحی شبکه عصبی :
model = keras.Sequential([ keras.layers.Dense(10, input_shape=(784,), activation='sigmoid') ]) model.compile(optimizer='adam', loss='sparse_categorical_crossentropy', metrics=['accuracy']) model.fit(X_train_flattened, Y_train, epochs=5)
خروجی :
Epoch 1/5 1875/1875 [==============================] - 8s 4ms/step - loss: 0.7187 - accuracy: 0.8141 Epoch 2/5 1875/1875 [==============================] - 6s 3ms/step - loss: 0.3122 - accuracy: 0.9128 Epoch 3/5 1875/1875 [==============================] - 6s 3ms/step - loss: 0.2908 - accuracy: 0.9187 Epoch 4/5 1875/1875 [==============================] - 6s 3ms/step - loss: 0.2783 - accuracy: 0.9229 Epoch 5/5 1875/1875 [==============================] - 6s 3ms/step - loss: 0.2643 - accuracy: 0.9262
نتیجه
هدف از این مقاله ارائه مروری بر شبکه های عصبی کانولوشنال و کاربردهای اصلی آنها بود. این شبکه ها، به طور کلی، نتایج طبقه بندی و تشخیص عالی را ایجاد می کنند. آنها همچنین برای رمزگشایی صدا، متن و ویدئو استفاده می شوند. اگر وظیفه در دست یافتن یک الگو در یک سریال است، شبکه های کانولوشن انتخاب بسیار خوبی هستند.
موفق باشید
دیدگاهتان را بنویسید