আর্টিফিশিয়াল ইন্টেলিজেন্সে হাতে খড়ি: নিউরাল নেটওয়ার্ক…

আর্টিফিশিয়াল ইন্টেলিজেন্সে হাতে খড়ি: নিউরাল নেটওয়ার্ক…

আর্টিফিশিয়াল ইন্টেলিজেন্সে হাতে খড়ি:

 নিউরাল নেটওয়ার্ক

উপরে বাম দিকের ছোট্ট ২৮ x ২৮ পিক্সেলের ছবিটি দেখিয়ে আপনাকে যদি প্রশ্ন করা হয়, এতে কি লেখা? আপনার হয়তো মনে হতে পারে আপনার সাথে রসিকতা করা হচ্ছে। ছবিটি অত্যন্ত ছোট হওয়া সত্ত্বেও এটি দেখে আপনি নিঃসন্দেহে বলে দিতে পারবেন ছবির সংখ্যাটি 5। তবে একটি কম্পিউটার কখনোই এভাবে একটি ছবি দেখতে পায় না। কারণ মানুষের মতো কম্পিউটারের কোনো চোখ নেই। কম্পিউটার শুধু পড়তে পারে ছবির প্রতিটি পিক্সেলের ইন্টেন্সিটির মান। ছবিতে কি আছে তা আমাদের মস্তিষ্ক তাৎক্ষণিকভাবে বলে দিতে পারলেও একটি কম্পিউটারের জন্য এই কাজটি বেশ কঠিন।

তাহলে আমরা কিভাবে একটি কম্পিউটারকে শেখাতে পারি এই তুচ্ছ কাজটি? উত্তরটি লুকিয়ে রয়েছে আর্টিফিশিয়াল ইন্টেলিজেন্স এবং মেশিন লার্নিং-এর জগতে। বিশেষভাবে বলতে গেলে, কাজটি করা সম্ভব নিউরাল নেটওয়ার্কের সাহায্যে। একটি ছবি দেখে সংখ্যা চিনতে পারার এই উদাহরণটিকে কাজে লাগিয়েই আজকে আমরা শিখবো নিউরাল নেটওয়ার্ক আসলে কি, এটি কিভাবে কাজ করে এবং কম্পিউটার আসলে কিভাবে “দেখতে” শেখে।

নিউরাল নেটওয়ার্ক মেশিন লার্নিংয়ের একটি অত্যন্ত গুরুত্বপূর্ণ ধারণা। কম্পিউটার সায়েন্সের ভাষায় একে বলা হয় একটি নন-লিনিয়ার ক্লাসিফাইয়ার, যার মাধ্যমে একটি মেশিনকে কিছু ট্রেনিং এক্সাম্পলের সাহায্যে কোনো বিশেষ কাজ করতে শেখানো যায়। আপনারা হয়তো এর মধ্যেই বুঝে গেছেন এর সঙ্গে মানুষের মস্তিষ্কের ঘনিষ্ঠ সম্পর্ক রয়েছে। কাজেই নিউরাল নেটওয়ার্ক বুঝতে গেলে শুরুতেই এর গঠন নিয়ে আমাদের জানতে হবে। 

মানুষের মস্তিষ্ক এবং নিউরাল নেটওয়ার্ক

নিউরাল নেটওয়ার্কের ধারণাটি আসে মানুষের মস্তিষ্কের গঠন থেকে।  আমরা অনেকেই হয়তো জীববিজ্ঞানে পড়েছি মস্তিষ্কের একক হলো নিউরন। একটি নিউরনের প্রধান অংশটি হলো সেল বডি যার চারপাশের শাখা প্রশাখাকে বলা হয় ডেনড্রাইটস।  সেল বডি থেকে বের হয়ে আসা প্রলম্বিত অংশের নাম এক্সন।  আর এক্সনের শেষ প্রান্তের শাখা প্রশাখাকে বলা হয় টার্মিনাল এক্সন। একটি নিউরনের এক্সন পরবর্তী নিউরনের ডেনড্রাইটের সাথে যুক্ত থাকে। পর পর দুটি নিউরনের সংযোগস্থলকে বলা হয় সিনাপ্স।

আমরা যদি এবার নিউরাল নেটওয়ার্কের ছবিটির দিকে তাকাই তাহলে আমরা সহজেই এর একটি ইউনিটের সাথে নিউরনের গঠনের মিল দেখতে পাবো। এতেও আছে ডেনড্রাইটের মতো শাখা প্রশাখা যেগুলোকে বলা হয় ইনপুট, যার সাহায্যে পূর্ববর্তী নিউরাল ইউনিটের তথ্য গৃহীত হয়। এতে রয়েছে সেল বডির মতো একটি কেন্দ্রীয় অংশ যার নাম এক্টিভেশন, যার কাজ সংগৃহিত তথ্য প্রক্রিয়াকরণ এবং আউটপুট সিগন্যালটি পরবর্তী নিউরাল ইউনিটের ইনপুটে প্রেরণ করা। এভাবেই অসংখ্য নিউরাল ইউনিটের একাধিক স্তর মিলে তৈরী হয় আর্টিফিশিয়াল নিউরাল নেটওয়ার্ক।

নিউরাল নেটওয়ার্ক কিভাবে কাজ করে?

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

সবগুলো গুণ করা শেষে মানগুলোর যোগফল নিয়ে নোডটি একটি “এক্টিভেশন ফাঙ্কশন”-এর মধ্যে যোগফলটিকে পাস করে। এই ফাঙ্কশনটি মূলত মোট গণনা করা মানটিকে ০ এবং ১ এর মাঝামাঝি একটি মানে পরিবর্তন করে। আমাদের উদাহরণের জন্য আমরা সিগময়েড ফাঙ্কশনকে এক্টিভেশন ফাঙ্কশন হিসেবে ব্যবহার করব, যা সবসময় ০ এবং ১ এর মাঝের কোনো মান আউটপুট দেয়। সবশেষে নোডটি এই রূপান্তরিত মানটিকে পরবর্তী লেয়ারের নোডগুলোয় পাঠিয়ে দেয়।

ইনপুটের মানগুলো পরবর্তী যেই লেয়ারে পাঠানো হয় সেটির নাম “হিডেন লেয়ার”। এই লেয়ারের প্রতিটি নোড উপরের একই প্রক্রিয়াটি চালিয়ে থাকে এবং সবগুলো মানকে একইভাবে শেষ লেয়ারে পাঠিয়ে দেয়। শেষ লেয়ার অর্থাৎ আউটপুট লেয়ারে রয়েছে ১০টি নোড যার প্রতিটি  ০ – ৯ পর্যন্ত একেকটি সংখ্যাকে নির্দেশ করে। ১০টি আউটপুটের মধ্যে যেই নোডটিতে সর্বোচ্চ আউটপুট মানটি পাওয়া যায় সেটিই হবে আমাদের ছবিটির সংশ্লিষ্ট সংখ্যা। এই আউটপুট রেজাল্টটিকে আমরা আমাদের মডেলের প্রেডিকশন বলে থাকি।

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

নিউরাল নেটওয়ার্কের শেখার প্রক্রিয়াটিও অনেকটা একইরকম।  প্রথমেই আসে একে শেখানোর প্রক্রিয়া যার নাম ট্রেইনিং। এর জন্য প্রয়োজন অনেক ট্রেইনিং ডাটা যাতে ইনপুট এবং সংশ্লিষ্ট আউটপুটটি দেয়া থাকে।  নিউরাল নেটওয়ার্ককে শুরুতে আউটপুটটি দেখানো হয়না।  তাই শুরুতে সে ছোট্ট শিশুটির মতো ভুল করতে থাকে। সঠিক আউটপুটের তুলনায় তার প্রেডিকশন কতটা ভুল তা বোঝানোর জন্য ব্যবহার করা হয় একটি কস্ট ফাঙ্কশন।  এই কস্ট ফাঙ্কশনের গ্রাডিয়েন্ট বা দিক থেকে নিউরাল নেটওয়ার্ক নির্দেশনা পায় তার প্রেডিকশনটি অ্যাকচুয়াল আউটপুট থেকে কতটা দূরে আছে।  এই প্রক্রিয়াটির নাম গ্রাডিয়েন্ট ডিসেন্ট। এর মাধ্যমে নেটওয়ার্কটি বুঝতে পারে কিভাবে নেটওয়ার্কের বিভিন্ন স্তরের ওয়েইটগুলো পরিবর্তন করার মাধ্যমে সে সঠিক প্রেডিকশনের কাছাকাছি পৌঁছাতে সক্ষম হবে। এভাবে স্বয়ংক্রিয়ভাবে নিজেকে আপডেট করার পুরো প্রক্রিয়াটির নাম ব্যাকওয়ার্ড প্রোপাগেশন। এভাবে আস্তে আস্তে ভুল প্রেডিকশন থেকে শেখার মাধ্যমে অবশেষে সে সঠিক প্রেডিকশন দিতে সক্ষম একটি নেটওয়ার্কে পরিণত হয়।

সূত্র: 3Blue1Brown

ফলাফল

একটি নিউরাল নেটওয়ার্ককে সঠিকভাবে ট্রেইন করানোর পর, বিভিন্ন ছবি দিয়ে পরীক্ষা বা টেস্ট করে যাচাই করা যায় এটি সঠিক আউটপুটটি দিচ্ছে কিনা, অর্থাৎ একটি ছবি দেখার পর এতে কোন সংখ্যাটি আছে তা সঠিকভাবে বলতে পারছে কিনা। টেস্ট করার জন্য আমরা ব্যবহার করেছি হাতে লেখা সংখ্যার বহুল প্রচলিত MNIST ডাটাসেট। এই ডাটাসেটে রয়েছে ২৮ X ২৮ পিক্সেলের ৬০,০০০ ট্রেইনিং এবং ১০,০০০ টেস্ট ইমেজ। ৫১২ নিউরনের হিডেন লেয়ার সম্বলিত একটি নিউরাল নেটওয়ার্ক তৈরী করে আমরা তা ট্রেইন করি। আমাদের নিউরাল নেটওয়ার্কটি  ৯৯% সঠিকতার সাথে কোনো ছবিতে থাকা সংখ্যা সনাক্ত করতে সক্ষম হয়। । কিছু টেস্ট ছবির সংশ্লিষ্ট সঠিক আউটপুটসহ ফলাফল নিচে দেওয়া হয়েছে।  

কোড

মেশিন লার্নিং-এর জন্য বর্তমানে বিভিন্ন লাইব্রেরি রয়েছে , যেমন TensorFlow, Keras এবং PyTorch যেগুলো দিয়ে অতি সহজেই নিউরাল নেটওয়ার্ক তৈরী করা সম্ভব। আমরা TensorFlow এবং Keras দিয়ে আমাদের উদাহরণে উল্লিখিত নিউরাল নেটওয়ার্কটি তৈরী করেছি এবং আপনাদের সুবিধার্থে সেই কোডটি নিচের লিংকে সংযুক্ত করে দিয়েছি। আপনারা চাইলে লিংকে প্রবেশ করে আপনাদের ওয়েব ব্রাউজারেই কোডটি রান করতে পারবেন এবং ফলাফলগুলো নিজেই যাচাই করে দেখতে পারবেন। 

https://colab.research.google.com/drive/1g4HrYhC8ksyg7kJcZfelPuzr1lmEtJRb?usp=sharing

সমাপ্তি

পরিশেষে আপনাদের মনে হতে পারে, আমরা কেন এত ঝামেলা সত্ত্বেও কম্পিউটারকে হাতের লেখা পড়তে শেখাচ্ছি? এই প্রশ্নের উত্তর হলো অটোমেশন। আজকের পৃথিবীতে মানুষের যাবতীয় সকল কাজকে সহজ এবং স্বয়ংক্রিয় করে তোলাই আর্টিফিশিয়াল ইন্টেলিজেন্স টেকনোলজির মূল উদ্দেশ্য। আর এই হাতের লেখা চিনতে পারার মতো সহজ প্রোগ্রামটিই সেল্ফ ড্রাইভিং ভেহিকেল, অবজেক্ট ডিটেকশন, ফেইস ডিটেকশন, ইমেজ ক্লাসিফিকেশন, সিকিউরিটি সিস্টেম, অগমেন্টেড রিয়ালিটি, মানুষের রোগ নির্ণয়, ফসল উৎপাদনের হার প্রেডিকশন, ওয়েদার ফোরকাস্টিং এমনকি মহাকাশে গ্রহ-উপগ্রহের সন্ধানসহ বহু জটিল সমস্যা সমাধানের হাতে খড়ি। 

Leave a comment