আর্টিফিশিয়াল নিউরাল নেটওয়ার্ক (ANN)

আমরা ইতিমধ্যে জানি যে ডিপ লার্নিং হলো মেশিন লার্নিং এর একটি সাবফিল্ড যার গঠন মানুষের ব্রেইনের নিউরাল নেটওয়ার্কের গঠনের মতই। মানুষের নিউরাল নেটওয়ার্ক যেমন নিউরন দিয়ে গঠিত, একই ভাবে ANN ও নিউরন দিয়ে গঠিত। ANN এর ক্ষেত্রে নিউরনগুলো কয়েকটা লেয়ারে বিন্যাসিত থাকে। লেয়ারগুলোকে সাধারণত ৩ ভাগে ভাগ করা যার। ইনপুট লেয়ার, হিডেন লেয়ার এবং আউটপুট লেয়ার।

ইনপুট লেয়ারঃ এই লেয়ার মূলত ইনপুট ডেটাকে হ্যান্ডেল করে থাকে।

হিডেন লেয়ারঃ একটি নেটওয়ার্কে একাধিক হিডেন লেয়ারও থাকতে পারে। হিডেন লেয়ার মূলত লার্নিং প্রসেস করে থাকে।

আউটপুট লেয়ারঃ এটাকে প্রেডিকশন লেয়ারও বলতে পারেন। এই লেয়ারই প্রেডিক্টেড আউটপুট জেনারেট করে থাকে।

প্রতিটা লেয়ারের নিউরনগুলোর সাথে এর পূর্বের লেয়ার এবং পরবর্তী লেয়ারের নিউরনগুলো কানেক্টেড থাকে। আরো ভালোভাবে বোঝার জন্য নিচের ইমেজটি লক্ষ্য করুন।

image source: condenast.com

উপরের ইমেজ লক্ষ্য করলে দেখতে পাবেন ইনপুট লেয়ারে ৩টি নিউরন রয়েছে এবং আউটপুট লেয়ারে আছে ১ টি। আর মধ্যবর্তী ২টি হিডেন লেয়ার ৪ টি করে নিউরন রয়েছে। এরা লেয়ার বাই লেয়ার সবাই কানেক্টেড এবং চাইলেই সিগন্যাল ট্রান্সমিট করার ক্ষমতা রাখে।

হিডেন লেয়ারের নিউরনগুলো ইনপুট লেয়ারের নিউরন থেকে সিগনাল রিসিভ করে। এরপর সিগনাল প্রসেস করে আউটপুট সিগনালকে এর পরের লেয়ারে পাঠায়। এরকম আউটপুট লেয়ার পর্যন্ত চলতে থাকে। এখন প্রশ্ন আসতে পারে যে এই নিউরনগুলো আসলে কিভাবে সিগন্যাল প্রসেস করে থাকে। এটার বিস্তারিত আমরা পরবর্তী পোস্টগুলোতে ধীরে ধীরে শিখব।

এখন চলুন দেখা যাক আমরা কিভাবে keras api ব্যবহার করে একটি সিম্পল নিউরাল নেটওয়ার্ক বানাব। যারা এখনও keras ইনস্টল করেননি, এখনি ইনস্টল করে নিন।
install হয়ে গেলে এবার চলুন কোডে চলে যাই।

from keras.models import *
from keras.layers import * 
model = Sequential()
model.add(Dense(32, input_shape=(12,), activation='relu'))
model.add(Dense(2, activation='softmax'))

প্রথম দুই লাইনে আমরা দরকারি লাইব্রেরিগুলো ইম্পোর্ট করে নিয়েছি। এর পরে আমরা model নামে একটা ভেরিয়েবল নিয়ে sequential মডেল তৈরি করেছি। উপরের ইমেজে লক্ষ্য করলে দেখবেন লেয়ারগুলো একটার পর আরেকটা সিকোয়েনশিয়ালি সাজানো আছে। এজন্য খুব সম্ভাবত এর নামে sequential দেয়া হয়েছে। এর পরে আমরা একটা dense লেয়ার যোগ করেছি। dense লেয়ারকে আবার fully connected লেয়ারও বলা হয়। কারণ এর নিউরোনগুলো পূর্ববর্তী এবং পরবর্তী লেয়ারের সবগুলো নিউরনের সাথে কানেক্টেড থাকে (উপরের ইমেজ লক্ষ্য করুন)।

Dense লেয়ার এড করার সময়ে আমরা ৩ টি প্যারামিটার পাস করেছি। প্রথমটি ৩২, এটা মূলত নির্দেশ করে যে এই লেয়ারে কয়টি নিউরন থাকবে। দ্বিতীয় প্যারামিটারে আমরা input_shape পাস করেছি। এখানে আপনাকে বলে দিতে হবে যে আপনার ইনপুট এর সাইজ/শেপ/ডিমেনশন কেমন হবে। ইনপুট বলতে আপনার ডেটাসেট এর ফিচারগুলো নির্দেশ করে। মনে রাখবেন যেই ফিচার/ক্ল্যাস/লেবেল আপনি প্রেডিক্ট করতে চান, সেটা কিন্তু এর মধ্যে আসবে না।
এরপর দেখুন activation এর নাম বলে দিচ্ছি। এখনকার মত শুধু মনে রাখুন যে activation একটি নন-লিনিয়ার ফাংশন। এটা সম্পর্কে বিস্তারিত আলাদা একটি পোস্টে লিখব।

এখন যদি আপনি আপনার মডেলের আর্কিটেকচার দেখতে চান, তাহলে নিচের কোডটি রান করুনঃ

model.summary()

আউটপুট আসবে নিম্নরূপঃ

model summary

পরবর্তী পোস্টে ইনশা-আল্লাহ আরো বিস্তারিত আলোচনা করব।


Leave a Reply

Your email address will not be published. Required fields are marked *