ডিপ লার্নিং বেসিক — পর্ব ২
ইমেজ প্রসেসিং/অ্যানালাইসিসের জন্য একটি effective টেকনিক হচ্ছে CNN যাকিনা আর্টিফিশিয়াল নিউরাল নেটওয়ার্ক এরই একটি স্পেশালাইজড মডেল। সিএনএন কাজ করে কনভলিউশনাল লেয়ার তৈরির মাধ্যমে।ট্রেডিশনাল নিউরাল নেটওয়ার্ক দ্বারা ইমেজ প্রসেসিং এর ক্ষেত্রে কিছু drawbacks আছে যেগুলো avoid করার জন্য CNN ব্যবহার করা হয়। যেমন একটি ট্রেডিশনাল নিউরাল নেটওয়ার্ক এর মধ্য দিয়ে একটি 300*300*3 সাইজ (ইমেজটি যদি একটি কালার ইমেজ হয় তাহলে এর Red, Green, Blue এই তিনটি চ্যানেল থাকবে তাই ইমেজ পিক্সেল এর সাথে 3 গুন হবে । আবার gray scale ইমেজ এর একটি চ্যানেল থাকে তখন ইমেজটির সাইজ হত 300*300*1 বা 300*300 )এর ইমেজ pass করলে টোটাল 270000 টি weight ট্রেইন করা লাগবে হিডেন লেয়ার এর single নিউরন এর জন্য ! এভাবে একটি Fully Connected Network তৈরি করলে মডেলটি অনেক বড় এবং slow হয়ে যাবে আবার overfitting ও হতে পারে। তাই CNN টেকনিক ব্যাবহার করে learnable weight সংখ্যা কমানো হয় যাতে computational cost কমে আসে এবং effectively ইনফরমেশন extract করা যায়। ইমেজকে সরাসরি Fully Connected Network এ pass না করে আগে কিছু computation করে নেয়া হয়।
Convolutional neural network এর architecture সাজানো হয়েছে নীচের লেয়ার গুলো দিয়েঃ
- Convolutional Layer
- Rectified Linear Unite(ReLu) Layer
- Pooling Layer
- Fully Connected Layer
Convolutional Layer:
ফিচার এক্সট্রাকশন এই লেয়ার এ হয়ে থাকে যার মূল অস্ত্র হিসেবে ব্যবহার করা হয় Filter/kernel । ফিল্টার হচ্ছে ওয়েট বসানো নির্দিষ্ট সাইজ এর ম্যাট্রিক্স। ফিল্টার ম্যাট্রিক্স এর সেল গুলোকে ইনপুট ইমেজ ম্যাট্রিক্স এর উপর দিয়ে স্লাইড করে এর corresponding সেলগুলো দ্বারা গুন করে এদের যোগফলগুলো বসিয়ে আরেকটি ম্যাট্রিক্স তৈরি করা হয়। কথায় না বলে উদাহরন দেখা যাক। নীচের চমৎকার illustration টি দেখলে ক্যালকুলেশন নিয়ে সন্দেহ থাকার কথা না।
সহজ ভাবে চিন্তা করলে ধরা যাক একটি ইমেজে X এর উপস্থিতি আছে কিনা জানার জন্য / এবং \ কে ফিল্টার হিসেবে নিয়ে ইমেজটিকে convolve করতে পারি। যেসব জায়গায় convolution এর high ভালু পাওয়া যাবে সেসব জায়গায় / এবং \ এর উপস্থিতি আছে বলে ধরে নেওয়া হবে। মূল কথা হচ্ছে ইমেজ এর মধ্যে particular ফিচার এর উপস্থিতি পরীক্ষা করার জন্য convolution করা হয়। এটি ছাড়া আরও কিছু অপারেশান চালান হয় এই লেয়ার এ।
Padding:
Edge পিক্সেল গুলোকে হ্যান্ডেল করার জন্য padding করা হয়।দেখা যায় ইমেজকে filter দ্বারা convolve করার পর border পিক্সেল গুলোর ইনফর্মেশন হারিয়ে যায়। তাই কনভলিউশন এর আগে জিরো দ্বারা পূর্ণ এডিশনাল লেয়ার add করা হয় যাতে আউটপুট ইমেজ সাইজ এবং ইনপুট ইমেজ সাইজ same থাকে, এটিকে “same” padding বলে। আবার চাইলে কোন padding add না করেও কাজ করা যায়, এটিকে “valid” padding বলে।
Stride:
Stride সাইজ নির্ধারণ করবে ফিল্টারটি কত ইউনিট পরপর শিফট করে ইমেজকে convolve করবে। সাধারণত ফিল্টার ইমেজে এক ইউনিট পরপর শিফট করে convolve করে যেমনটি এই ইলাস্ট্রেশনের দেখানো হয়েছে। দুই ইউনিট পরপর শিফট করলে কি হবে তা নীচের ইলাস্ট্রেশনে দেখানো হল।
এখন কনভলিউশনাল লেয়ারে এসব অপারেশন চালানোর পর আউটপুট ইমেজ সাইজ বের করার জন্য নিচের ফর্মুলাটি প্রয়োগ করা যায়।
Output width/height = [{W-K+(2*P)}/S] +1
W= Input length/width, K=filter size, P=Padding size, S=Striding size
একটি 300*300*3 সাইজের ইমেজে 40 টি 5*5 সাইজের ফিল্টার এপ্লাই করলে আউটপুট ইমেজ সাইজ কি হবে তা বের করা হল( যেখানে p=0, s=1):
Output width/height = [{300–5+(2*0)}/1]+1= 296
আউটপুট ইমেজের সাইজ : 296 × 296 × 40 (40 হচ্ছে ফিল্টার এর সংখ্যা)
ReLu:
Rectified Linear Unite (ReLu) হচ্ছে একটি অ্যাক্টিভেশন ফাংশন। আউটপুট ইমেজ ম্যাট্রিক্সের ( convolution এরপর) সবগুলো cell এ ReLu এপ্লাই করা হয়। এই পোস্টে অ্যাক্টিভেশন ফাংশন/ReLu সম্পর্কে আলোচনা করা হয়েছে।
Pooling Layer:
ম্যাট্রিক্সের নির্দিষ্ট portion (n×n)থেকে পার্টিকুলার ভ্যালু (Max/Average Value) বের করে আনার জন্য pooling করা হয়। Unwanted ইনফরমেশন গুলো avoid করে গুরুত্বপূর্ণ value গুলো বের করে ইমেজকে downscale করা হয় এই লেয়ারে। বেশিরভাগ ক্ষেত্রে Max Pooling করা হয়, স্পেশাল কেইস এ Global Max/Average Pooling ব্যবহার করা হয় ।
pooling এরপর ইমেজ সাইজ ক্যালকুলেশন করার ফর্মুলাঃ
Output width/height = {(W-K)/S}+1
W= Input length/width, K=pooling window size, S=Striding size
Fully Connected Layer:
Feature learning শেষে এখন ক্লাসিফিকেশন করার পালা। ক্লাসিফিকেশন করার জন্য pooling layer এ যে pooled feature map টি আমরা পেলাম সেটিকে আর্টিফিশিয়াল নিউরাল নেটওয়ার্ক এর মধ্য দিয়ে pass করানো হবে। তাই আউটপুট ম্যাট্রিক্স কে একটি one dimensional array তে রূপান্তরিত করতে হবে। এটিকে বলে flattening করা। Flattening শেষে যে 1D array পাবো সেটি আর্টিফিশিয়াল নিউরাল নেটওয়ার্কের ইনপুট হিসেবে যাবে, তৈরি হবে Fully connected network। এই fully connected network টি classifier হিসেবে কাজ করবে।
পুরো পোস্ট টি কে যদি সংক্ষেপে বলি-
নানান ধরনের ফিচার সম্বলিত একটি ইমেজকে কনভলিউশনাল ব্লকে pass করে এর ফিচারগুলো কে learn করা হয়, এই block a বিভিন্নভাবে filter গুলোকে adjust করা হয় যাতে এরা ফিচারগুলো কে determine করতে পারে। ফিচার লার্নিং এর পরে fully connected network কে ট্রেইন করা হয় যাতে এটি ইমেজের অবজেক্ট গুলোকে classify করতে পারে।
Original Post at bitwisey.com