شبكه هاي عصبي كانولوشن
شبکه عصبی کانولوشن (Convolutional Neural Network) یکی از مهمترین الگوریتمهای یادگیری عمیق است که ابتدا در حوزه پردازش تصویر معرفی شد و سپس به سایر حوزههای مرتبط با پردازش سیگنالها نیز گسترش یافت. در این شبکه، ورودی به شکل یک تصویر یا سیگنال صوتی برای پردازش و آنالیز به شبکه داده میشود. سپس با استفاده از لایههای کانولوشنی، ویژگیهای مختلفی از ورودی استخراج میشود.
- لایه های شبکه عصبی کانولوشن
- لایه ورودی
- لایه کانولوشن
. کانولوشن تک بعدی
. کانولوشن دو بعدی
- لایه ادغام
- لایه مسطح ساز
- لایه تمام اتصال - الگوریتم آموزشی CNN
- شبکه عصبی CNN در متلب
مزایای استفاده از شبکه کانولوشن شامل قابلیت استخراج ویژگیهای بالاتر از دادههای ورودی، کاهش تعداد پارامترها در شبکه، قابلیت تشخیص الگو در دادههای بزرگ و عدم نیاز به پیشپردازش دادهها قبل از ورود به شبکه است. به طور کلي در حوزه هاي زير پر کاربرد مي باشد:
- تشخیص الگو
- پردازش زبان طبیعی
- پردازش سیگنال
- پردازش تصوير
تشخیص چهره، تشخیص اشیاء، ترجمه ماشینی و ...
لايه هاي شبکه عصبي کانولوشني
شبکه کانولوشنی عموماً از چندین لایه تشکیل شده است که هر کدام وظایف مختلفی در پردازش داده دارند. به طور کلی هر شبکه کانولوشنی لایه های زیر را شامل می شود:
- لایه ورودی: دریافت داده ورودی مانند تصویر، صدا و غیره.
- لایه کانولوشنی: استخراج ویژگیهای مختلف از داده ورودی.
- لایه فشردهسازی: کاهش تعداد پارامترهای شبکه.
- لایه ادغام: کاهش ابعاد دادههای ورودی.
- لایه تمام متصل: تبدیل ویژگیهای استخراج شده به خروجی نهایی.
لايه ورودي
داده ورودی (مثلاً تصویر، سیگنال صوتی، متن و غیره) به صورت یک تانسور (tensor) از طريق لايه ورودي وارد شبکه میکند. در شبکه عصبی کانولوشنی، تصاویر به صورت ماتریسهای سه بعدی (عرض، ارتفاع و عمق) به لایه ورودی داده میشوند. به عنوان مثال، ماتریسهایی با ابعاد 28x28x1 برای تصاویر سیاه و سفید به کار میروند و ماتریسهایی با ابعاد 28x28x3 برای تصاویر رنگی.
لايه کانولوشن
لايه کانولوشن يکي از لايههاي اصلي در شبکههاي عصبي کانولوشني است. وظيفه اصلي اين لايه، استخراج ويژگيهاي مهم از تصاوير يا ساختارهاي ديگري که به عنوان ورودي به شبکه داده ميشود، ميباشد.لايه کانولوشن، با استفاده از يک يا چند فیلتر کانولوشن، اقدام به پردازش و استخراج ويژگيهاي آن ميکند.
کانولوشن تک بعدی
لایه کانولوشن تک بعدی برای استخراج ویژگیهای مختلف از سیگنالهای یک بعدی مانند سیگنالهای صوتی و زمانی استفاده میشود. در این لایه، یک فیلتر یا هسته با اندازه کوچکی بر روی سیگنال ورودی حرکت میکند و در هر مرحله، با ضرب داخلی بین وزنهای هسته و مقادیر سیگنال در آن نقطه، یک مقدار خروجی تولید میشود. با حرکت دادن فیلتر در طول سیگنال، خروجیهای مختلفی تولید میشود که هر کدام نشاندهنده ویژگیهای مختلف سیگنال هستند.
با تعریف چندین فیلتر با اندازهها و ویژگیهای مختلف، میتوان ویژگیهای متفاوتی از سیگنال استخراج کرد. برای مثال، با استفاده از فیلترهای با اندازه کوچکتر میتوان ویژگیهای جزئیتر و با استفاده از فیلترهای با اندازه بزرگتر میتوان ویژگیهای کلیتر از سیگنال استخراج کرد.
کانولوشن دو بعدی
این لایه معمولاً شامل یک ماتریس وزنی است که با اعمال آن به تصویر ورودی، ویژگیهای مختلفی به دست میآید. در این لایه، ابتدا یک ماتریس وزنی تعریف میشود که به عنوان فیلتر عمل میکند و سپس این فیلتر روی تصویر ورودی اعمال میشود. با اعمال فیلتر به تصویر ورودی، با استفاده از روش کانولوشن، ویژگیهای مختلفی مانند لبه، نقطه، خط و... استخراج میشوند.هر فیلتر کانولوشن، به صورت يک ماتريس از وزنهايي است که در طول و عرض تصوير حرکت داده ميشود و در هر موقعيت، ضرب نقطهاي بين وزنهاي فیلتر و پيکسلهاي ورودي انجام ميدهد.
سپس با اعمال يک تابع غيرخطي مثل تابع ReLU به نتايج، ويژگيهاي مهمتر به دست ميآيند. اين ويژگيها به عنوان ورودي به لايههاي بعدي شبکه داده ميشوند تا در ادامه، براي تشخيص الگوهاي پيچيدهتر و تصميمگيريهاي دقيقتر مورد استفاده قرار گيرند.
لايه ادغام
لایه ادغام (Pooling Layer) در شبکههای کانولوشنی، به منظور کاهش اندازه و حجم دادههای ورودی به شبکه و کاهش تعداد پارامترهای مدل، استفاده میشود.برای اعمال لایه ادغام، یک پنجره با ابعاد دلخواه روی ویژگیهای استخراج شده، حرکت میکند و در هر مرحله، بیشینه یا کمینه یا میانگین مقادیر درون پنجره، به عنوان عنصر خروجی این لایه در نظر گرفته میشود. لایه ادغام به دو صورت مختلف عمل میکند:
- Max Pooling: در این روش، بیشینه مقدار درون هر پنجره به عنوان خروجی این لایه در نظر گرفته میشود. این روش معمولاً برای کاهش تعداد پارامترهای شبکه و جلوگیری از بروز بیشبرازش (Overfitting)، استفاده میشود.
- Average Pooling: در این روش، میانگین مقادیر درون هر پنجره به عنوان خروجی این لایه در نظر گرفته میشود. این روش در برخی موارد، به منظور کاهش نویز و افزایش تصویر سراسری (Global Image)، استفاده میشود.
بنابراین به طور کلی لایه downsampling، که گاهی به لایه pooling هم اطلاق میشود، به منظور کاهش اندازه ویژگیهای استخراج شده از تصویر و همچنین کاهش تعداد پارامترهای مورد نیاز برای آموزش شبکه عصبی تصویری استفاده میشود. این لایه با استفاده از روشهای مختلفی مانند max-pooling، average-pooling، یا strided convolution، اندازه ویژگیها را کاهش میدهد که منجر به افزایش سرعت آموزش و پیشبینی شبکه می شود.
لایه مسطح کننده
بعد از اعمال تعداد دلخواهی از لایه های کانولوشن، فشرده ساز و ادغام برای اعمال داده هابه لایه تمام متصل باید داده ها به صورت برداری تعریف شوند. شاید بهتر باشد در این بخش بعد داده ها نیز کاهش یابند. برای این منظور دو مفهوم با عملکرد مشابه تعریف می شوند که به توضیح آن ها می پردازیم.
لایه flatten و لایه کاهش بعد (Dimensionality Reduction) به طور عمده به منظور کاهش بعد دادههای چند بعدی به دادههای یک بعدی استفاده میشوند و عملکرد مشابهی دارند. هدف این لایهها، تبدیل دادههای چند بعدی به دادههای یک بعدی است که میتوانند به لایههای کاملاً متصل (Fully Connected Layers) و یا لایههای دیگری از شبکههای عصبی عمیق به عنوان ورودی داده شوند.در لایه کاهش بعد، معمولاً از تکنیکهایی مانند PCA و t-SNE استفاده میشود تا بعد دادهها را کاهش داده و ویژگیهای مهم دادهها را برجسته کند. در مقابل، لایه flatten چندین بعد دادهها را به یک بعد تبدیل میکند و هیچ تغییری روی ویژگیهای اصلی دادهها اعمال نمیکند.
لايه تمام متصل
لایه تمام متصل (Fully Connected Layer) یا همان Dense در شبکههای عصبی عمیق، یکی از لایههای اصلی است که وظیفه تبدیل دادههای ورودی به خروجی مورد نظر را دارد. در این لایه، هر یک از نورونهای لایه ورودی با همه نورونهای لایه خروجی متصل میشوند و وزن و بایاس (bias) برای هر اتصال بین دو نورون در نظر گرفته میشود. در نهایت، این لایه نتیجه خروجی شبکه که کلاس بندی یا رگرسیون است را نشان می دهد.
الگوریتم آموزشی CNN
آموزش های شبكه كانولوشن بسيار شبيه مدل پرسپترون است. براي آموزش نياز بهمجموعه نمونه های آموزشي می باشد. براي آموزش شبكه 2 روش، آموزش با ناظر و آموزش بي ناظر مطرح است. روش های مختلف آموزشي يكي از دلايل به وجود آمدن مدل های گوناگوني از اين شبكه بوده است.
الگوریتمهای آموزشی شبکه عصبی کانولوشن شامل مجموعهای از الگوریتمهای بهینهسازی هستند که برای یادگیری پارامترهای شبکه مورد استفاده قرار میگیرند. برخی از این الگوریتمها عبارتند از:
- الگوریتم کاهش تدریجی نرخ یادگیری (Learning Rate Decay):
- الگوریتم مومنتوم (Momentum)
- الگوریتم Adagrad
- الگوریتم RMSProp
- الگوریتم Adam
این الگوریتمها برای یادگیری پارامترهای شبکه عصبی کانولوشن استفاده میشوند و هر یکی دارای ویژگیها و محاسبات متفاوتی هستند که بسته به مسئلهای که قرار است با استفاده از شبکه عصبی کانولوشن حل شود، یکی از آنها میتواند بهترین گزینه باشد.
شبکه عصبی CNN در متلب
برای درک بهتر شبکه عصبی کانولوشن یک مثال کلاس بندی اعداد mnist ( شامل 10 هزار تصویر از اعداد دست نویس 0 تا 9 انگلیسی) را با هم بررسی می کنیم. قدم اول فراخوانی داده ها و دسته بندی انها به دو دسته داده های آموزشی 75% و ارزیابی 25% به شکل زیر است.
digitDatasetPath = fullfile(matlabroot,'toolbox','nnet','nndemos', ...
'nndatasets','DigitDataset');
imds = imageDatastore(digitDatasetPath, ...
'IncludeSubfolders',true,'LabelSource','foldernames');
numTrainFiles = 750;
[imdsTrain,imdsValidation] = splitEachLabel(imds,numTrainFiles,'randomize');
در قدم دوم ارایش شبکه عصبی کانولوشن را با ترکیب زیر تعریف می کنیم:
layers = [
imageInputLayer([28 28 1])
convolution2dLayer(3,8,'Padding','same')
batchNormalizationLayer
reluLayer
maxPooling2dLayer(2,'Stride',2)
convolution2dLayer(3,16,'Padding','same')
batchNormalizationLayer
reluLayer
maxPooling2dLayer(2,'Stride',2)
convolution2dLayer(3,32,'Padding','same')
batchNormalizationLayer
reluLayer
fullyConnectedLayer(10)
softmaxLayer
classificationLayer];
در این مدل شامل لایه ورودی که به لایه کانولوشن می رسد هر لایه با وجود maxpooling منجر به کاهش بعدویژگی ها شده و با اعمال relu مقادیر منفی صفر می شوند. درنهایت با لایه fully connected این داده ها برای کلاس بندی 0 تا 9 نتیجه گیری خواهند شد. حال که قالب کلی شبکه CNN تعریف شد در قدم سوم باید آن را آموزش دهیم. این کار با انتخاب الگوریتم بهینه سازی SGDM انجام می شود.
options = trainingOptions('sgdm', ...
'InitialLearnRate',0.01, ...
'MaxEpochs',4, ...
'Shuffle','every-epoch', ...
'ValidationData',imdsValidation, ...
'ValidationFrequency',30, ...
'Verbose',false, ...
'Plots','training-progress');
net = trainNetwork(imdsTrain,layers,options);
یکی از نتایج مورد بحث تمام شبکه های عصبی نمودار عملکرد خطا می باشد که انتظار داریم این مقدار به صفر برسد.همچنین مقدار دقت شبکه عصبی Accuracy هم در نتایج بررسی شده است که مقدار 100 درصد مورد انتظار است. در نهایت شکل زیر برای مدل تعریف شده نمودار loss,accuracy مقدار قابل قبولی را در کلاس بندی داده ها نشان می دهد.