Thursday, December 8, 2016

নিউরাল নেটওয়ার্ক | কেমন হবে যদি কম্পিউটার মানুষের মতো ভাবতে আরম্ভ করে? মানুষের ঘিলু ভার্সেস কম্পিউটার – মেগাটিউন!

ই আর্টিকেলটি লিখতে গিয়ে পঞ্চম শ্রেণির কথা মনে পড়ে গেলো, তৎকালীন সময়ে আমি সরল করা এবং সুদকষা অংকে বেশ পারদর্শী ছিলাম। তো শ্রেণির অংক শিক্ষক আমার প্রতি মুগ্ধ হয়ে বলেছিলেন, “তোর মাথাটা না, পুরাই কম্পিউটার!” যদিও সেই সময় “কম্পিউটার” শব্দটি ব্যতিত এর চেয়ে বেশি কিছু আর জানতাম না, শুধু জানতাম, এদিয়ে আশ্চর্য সব কাজ করানো যায়। তবে তখন না জানলেও, এখন জানি—মানুষের ব্রেইনই আসলে সবচাইতে আশ্চর্য জিনিষ। কম্পিউটারের আমাদের মানুষের মতো বুদ্ধিমত্তা নেই, এই যন্ত্র হালের বলদের মতো শুধু নির্দেশ পালন করে। কিন্তু কম্পিউটারকে যদি মানুষের মতো বুদ্ধিমান এবং চালাক তৈরি করতে চাওয়া হয়, তবে তা কিভাবে সম্ভব হবে? বিজ্ঞানীরা এই প্রশ্নের পেছনে অনেক ছুটেছে, আর আবিষ্কার করেছে আর্টিফিশিয়াল ইন্টেলিজেন্স, মেশিন লার্নিং, ডীপ লার্নিং প্রযুক্তি। বহু দশকের সাধনার পরেও কম্পিউটারকে মানুষের মতো শিক্ষা দেওয়া অনেক কঠিনতর ব্যাপার ছিল। তবে নিউরাল নেটওয়ার্কের সাহায্যে মানুষের মতো মিলিয়ন আর্টিফিশিয়াল ব্রেইন সেল ব্যবহার করে কম্পিউটার একদম মানুষের ঘিলুর হুবহু কাজ করতে পারে। নিউরাল নেটওয়ার্ক আবার আর্টিফিশিয়াল নিউরাল নেটওয়ার্ক নামেও পরিচিত—যা ডীপ লার্নিং এর একটি অংশ। তো আসলে এটি কি এবং কিভাবে কাজ করে? চলুন বিস্তারিত জেনে নেওয়া যাক…

ব্রেইন ভার্সেস কম্পিউটার

আপনার কল্পনায় যতো প্রাণী আসবে, যেমন- স্তন্যপায়ী প্রাণী, পাখি, সরীসৃপ প্রাণী, মাছ, উভচর প্রাণী, ইত্যাদি সকলের ব্রেইন বা মস্তিষ্ক রয়েছে। কিন্তু সকলের চাইতে মানুষের মস্তিষ্ক সম্পূর্ণ আলাদা। আঁকারে খুব বড় না হলেও, এটি কথা বলতে, চিন্তা করতে, সমস্যা সমাধান করতে সাহায্য করে এবং মানব দেহের গুরুত্বপূর্ণ এবং আশ্চর্যজনক অঙ্গ এটি। একটি আদর্শ মস্তিষ্কে ১০০ বিলিয়নের (তবে ৫০ বিলিয়ন থেকে ৫০০ বিলিয়ন পর্যন্ত থাকতে পারে) মতো অতিক্ষুদ্র কোষ থাকে—যাকে নিউরন বলা হয়। প্রত্যেকটি নিউরনের কোষ দেহ থাকে এবং এর সাথে অনেক গুলোডেনড্রাইটস (Dendrites) (কোষের ইনপুট কোষদেহ পর্যন্ত বহনকরে নিয়ে যায়) এবং একটি করে আক্সন(Axon) (কোষ থেকে তথ্যের আউটপুট বেড় করে দেয়) থাকে। নিউরন গুলো অত্যান্ত ক্ষুদ্রাকার হয়ে থাকে, প্রত্যেক মিলিমিটারে প্রায় ১০০টি করে নিউরন আটতে পারে। মস্তিষ্কের সম্পূর্ণ কোষের মাত্র ১০ শতাংশ জুড়ে নিউরনের অবস্থান থাকে, বাকি কোষ গুলোকে গ্লিয়াল কোষ (Glial Cells) বা নিউরগ্লিয়া (Neuroglia) বলে, এগুলো নিউরনকে সমর্থন এবং রক্ষা করে এবং নিউরনে শক্তির সঞ্চার করে।
অপরদিকে কম্পিউটারে মানুষের ব্রেইন কোষের বদলে অত্যন্ত ক্ষুদ্রাকার সুইচ লাগানো থাকে, যাকে ট্র্যানজিস্টরবলা হয়। বর্তমান প্রযুক্তির সর্বাধুনিক মাইক্রো প্রসেসরে ২ বিলিয়নেরও উপর ট্র্যানজিস্টর লাগানো থাকে। সাধারন মাইক্রো প্রসেসর গুলোতে ৫০ মিলিয়নের মতো ট্র্যানজিস্টর লাগানো থাকে এবং এই সমস্ত জিনিষ গুলো একত্রে একটি সার্কিটের উপর বসানো থাকে, যা ২৫ মিলিমিটার বর্গাকার হয়ে থাকে। 
তো এই হচ্ছে মানুষের ব্রেইন এবং কম্পিউটারের মূল গঠন। কম্পিউটার একটি ধাতব বাক্স আর এটি বাইনারি নাম্বারের উপর কাজ করে এবং মস্তিষ্ক হলো একটি জীবন্ত জিনিষ যা অনুভূতি এবং স্মৃতিশক্তির উপর কাজ করে—এটিই কিন্তু কম্পিউটার আর ব্রাইনের মধ্যের এক মাত্র পার্থক্য নয়। আসল পার্থক্য হলো কম্পিউটার এবং মস্তিষ্ক সম্পূর্ণ আলাদা পদ্ধতিতে কাজ করে। কম্পিউটার প্রসেসরে ট্র্যানজিস্টর গুলো সহজভাবে লাগানো থাকে, প্রত্যেকটি ট্র্যানজিস্টর সাধারনত ২-৩টি ট্র্যানজিস্টরের সাথে কানেক্টেড থাকে, একে লজিক গেটস(Logic Gates) বলা হয়। কিন্তু মস্তিষ্কের মধ্যে নিউরন গুলো অত্যন্ত জটিলভাবে প্যারালেলে পরস্পরের সাথে কানেক্টেড থাকে। প্রত্যেকটি নিউরন প্রায় ১০,০০০ নিউরনের সাথে কানেক্টেড থাকে। তো কম্পিউটারের কয়েকশত মিলিয়ন ট্র্যানজিস্টর যা সহজভাবে প্যারালেলে লাগানো থাকে আর ব্রেইনে এর চেয়ে ১০-১০০ গুন বেশি কোষ যা জটিলভাবে পরস্পরের সাথে কানেক্টেড থাকে—এদের এই ভিন্ন গঠনের জন্যই কম্পিউটার এবং ব্রেইন সম্পূর্ণ আলাদা ভাবে “ভাবে” এবং কাজ করে। বিশাল পরিমানে ডাটা (যা কম্পিউটারের নিজের কাছে অর্থহীন) সংরক্ষিত রাখার জন্য কম্পিউটারকে বিশেষভাবে ডিজাইন করা হয় এবং এই ডাটাগুলোকে কম্পিউটার কিভাবে প্রসেসিং করবে তা বলে দেওয়ার জন্য কম্পিউটারে প্রোগ্রাম ইন্সটল করানো হয়।
অপরদিকে, মস্তিষ্ক কোন জিনিষ শিখতে দেরি করে, মনে রাখার জন্য বারবার চর্চা করতে হয়, এবং বিভিন্ন জিনিষ বিভিন্নভাবে শিখতে পারে, নিজেই নতুন শেখার পদ্ধতি তৈরি করে নিতে পারে—এভাবেই মানুষের কাজের মধ্যে সৃজনশীলতা দেখতে পাওয়া যায়। মানুষের মস্তিষ্ক যেকোনো প্যাটার্নকে মনে রাখতে পারে, পরে মিলাতে পারে, এবং জানা জিনিষ গুলোকে ভিন্ন নজরে দেখতে পায়।
তো কেমন হতো, যদি কম্পিউটার একদম মানুষের ঘিলুর মতো করেই কাজ করতো? আর এখানেই নিউরাল নেটওয়ার্ক চলে আসে।

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

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

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

দেখুন এর কাজ করার পদ্ধতি বা এর অভ্যন্তরে ঘটা ব্যাপার গুলো বোঝা একটু মুশকিলের, এতে এমন অনেক টার্ম চলে আসবে যেগুলো নিয়ে আবার আলাদা আলোচনা করার প্রয়োজন পড়বে। তাই বেশি টেকনিক্যাল দিকে না দিয়ে সহজ ভাষায় এবং পর্যাপ্ত উদাহরনের মাধ্যমে সম্পূর্ণ বিষয়টিকে বোঝার চেষ্টা করবো।
একটি আদর্শ নিউরাল নেটওয়ার্কে হাজার থেকে লাখো আর্টিফিশিয়াল নিউরন থাকতে পারে, এদের ইউনিট (Units) বলা। এই ইউনিট গুলোকে একে অপরের সাথে ক্রমনুসারে সাজানো থাকে এবং প্রত্যেকে একে অপরের সাথে কানেক্টেড থাকে ঠিক কোন নেটওয়ার্কের মতো। এদের মধ্যে কিছু ইউনিট রয়েছে যারা বিভিন্ন ধরনের তথ্য গ্রহন করে, যেমন আমরা কোন বস্তুকে দেখি, রঙ চেনার চেষ্টা করি, আঁকার বুঝি ইত্যাদি—এই ইউনিট গুলোকে ইনপুট ইউনিট বলা হয়। এই ইউনিট গুলো নিউরাল নেটওয়ার্ক কে চিনতে, জানতে বা প্রসেস করাতে সাহায্য করে। নেটওয়ার্কের আরেক পাশে রয়েছে আউটপুট ইউনিট—যা কম্পিউটারটি ব্যস্তবিক জিনিষ থেকে ঠিক কি জ্ঞান লাভ করলো তার বহির প্রকাশ করে। এতেই কিন্তু শেষ নয়, এই ইনপুট ইউনিট এবং আউটপুট ইউনিটের মাঝামাঝি পর্যায়ে থাকে হিডেন ইউনিট, যা নেটওয়ার্কটির অধিকাংশ আর্টিফিশিয়াল নিউরন দ্বারা গঠিত। তো দেখা গেলো, এতে তিন ধরনের ইউনিট থাকে, এদের গ্রুপকে লেয়ার বলা হয়। প্রত্যেকটি লেয়ারের ইউনিট গুলো প্রত্যেকটি ইউনিটের সাথে পরস্পর সম্পৃক্ত থাকে এবং একে অপরের কাছ থেকে তথ্য প্রসেসিং করিয়ে তবেই সর্বশেষ রেজাল্ট বা আউটপুট প্রদান করে। প্রত্যেকটি ইউনিটের একে অপরের সাথের কানেকশনকে একটি নাম্বার দ্বারা অঙ্কিত করানো হয়—একেওয়েট (Weight) বলে। যদি একটি ইউনিট আরেকটি ইউনিটের তথ্যের সাথে সম্মতি প্রদান করে তবে ওয়েট পজিটিভ হয় আর সম্মতি নাকজ করে দিলে ওয়েট নেগেটিভ হয়।
এখন আসি এটি কাজ করে কিভাবে তার প্রসঙ্গে, নিউরাল নেটওয়ার্কে দুই পদ্ধতি যেকোনো ডাটা প্রবাহিত হয়। যখন কম্পিউটারটি কোন কিছু বিষয়ে শিক্ষা গ্রহন করে তখন এক ধরনের ডাটা প্রবাহিত হয় এবং শিক্ষা গ্রহন করার পরে, কম্পিউটারটি যখন অ্যাকশনে নেমে পরে তখন এক ধরনের ডাটা প্রবাহিত হয়। যখন কম্পিউটারটি কোন শিক্ষা গ্রহন করতে থাকে তখন তার শেখাকে ঠিক করতে বারবার ফিডব্যাকের প্রয়োজন পড়ে, যে সে ঠিক শিখছে না ভুল শিখছে। যেমন- টিচারের সামনে আপনি কোন বানানকে ভুল লিখলে তিনি তা শুধরিয়ে দেন, এবং আমাদেরও কিছু শেখার জন্য সবসময় ফিডব্যাকের প্রয়োজন পড়ে। মনেকরুন আপনি এয়ারগান দিয়ে বেলুন সুট করছেন। আপনি বেলুনের দিকে বন্দুকটি তাক করে সুট করলেন, কিন্তু গুলিটি একটি উপরদিয়ে চলে গেলো। এখন দ্বিতীয়বার যখন আপনি সুট করবেন তখন নিশ্চয় আগের বারের পজিশন এবং টার্গেটিং এর কথা মাথায় রাখবেন। এবার নিশ্চয় বন্দুকটি একটি নিচু করে সুট করবেন, কেনোনা আপনার মস্তিষ্ক জানে, সে আগের বারে উঁচু করে সুট করে লাগাতে পারেনি। এভাবে চেষ্টা করতে করতে বা ভুল শোধরাতে শোধরাতে আপনি সঠিক নিশানা তৈরি করতে পারবেন।
নিউরাল নেটওয়ার্কও ঠিক এমনিভাবে কোন শিক্ষা গ্রহন করে। প্রত্যেকবারে এটি ইনপুট ইউনিট থেকে তথ্য গ্রহন করে। ধরুন ইনপুট থেকে কম্পিউটারকে একটি বেড়ালের ফটো দেখানো হলো। এটি এই তথ্যগুলোকে অর্থাৎ এটি দেখতে কেমন, কি আকারের হয়ে থাকে, কোথায় চোখ আছে, কোথায় মুখ আছে ইত্যাদি তথ্য সংরক্ষিত রাখে। এখন প্রত্যেকটি বিড়াল তো আর এক রকমের হয়না, তাই নেটওয়ার্ক কে শিক্ষা দেবার জন্য অনেক বিড়ালের ফটো দেখানো প্রয়োজন পড়ে। এখন যদি আরেকটি ফটো দেখিয়ে কম্পিউটারকে বলা হয়, এটি বিড়াল না কুকুর। তবে প্রথমে এটির তথ্য ইনপুট ইউনিট গ্রহন করবে এবং তা হিডেন ইউনিটের কাছে পাঠিয়ে দেবে। হিডেন ইউনিটের কাছে আগের বিড়ালের ফটো থেকে অনেক তথ্য রয়েছে, তাই এটি ইনপুটকে বিশ্লেষণ করতে আরম্ভ করবে। ধরুন একটি ইউনিট এর নাকের আঁকার, ধরণ, রঙ ইত্যাদি পর্যবেক্ষণ করবে যদি সেটি বিড়ালের সাথে মিলে যায় তবে সে পজিটিভ ওয়েট প্রদান করবে, আরেকটি ইউনিট হয়তো চোখ পর্যবেক্ষণ করবে আরেকটি হয়তো লেজ পর্যবেক্ষণ করবে। তো এই হিডেন ইউনিটের প্রসেসিং এবং ওয়েটের পজিটিভ বা নেগেটিভ রেজাল্টের উপর ভিত্তি করে আউটপুট প্রদান করবে। যদি আউটপুট ভুল আসে তবে কম্পিউটিং সিস্টেমটিকে জানাতে হবে যে সে ভুল রেজাল্ট দিয়েছে, পরবর্তীতে কম্পিউটিং সিস্টেমটি আর সেই ভুলটি করবে না। ঠিক যেমন আমরা ভুল থেকে শিক্ষা গ্রহন করি।
এখন মনেকরুন আপনি নিউরাল নেটওয়ার্ক কে কিছু চেয়ার এবং টেবিলের ছবি দেখিয়ে শিক্ষা দিয়েছেন। কিন্তু এবার সম্পূর্ণ নতুন কিছু মডেলের চেয়ার টেবিলের ছবি তার সামনে তুলে ধরলেন, যা আগে কখনো দেখানো হয় নি। এবার কম্পিউটিং সিস্টেমটি আগের দেখানো চেয়ার টেবিল গুলো থেকে ধারণা নেবে (যেমন মানুষ করে থাকে) এবং নতুন চেয়ার টেবিল গুলোকে আলাদা ভাবে ক্যাটাগরিতে বিভক্ত করবে। তবে আপনি কি ধরনের শিক্ষা দিয়েছেন সেটিও গুরুত্বপূর্ণ বিষয়। আপনার পূর্বের শিক্ষার সাথে তাল মিলিয়েই এটি কাজ করবে এবং প্রত্যেকবারই নতুন কিছু শিখবে।
এখন কোন মানুষকে বলা হলো, “তাহমিদ, তোমার সামনের চেয়ার টেবিল গুলোর দিকে দেখো”। এভাবে কিন্তু কোন কম্পিউটারকে বলা যাবে না, কম্পিউটারের ইনপুট অবশ্যই বাইনারিতে হতে হবে—কারন এটি যতোই মানুষের মতো কাজ করার চেষ্টা করুক না কেন, এটি মানুষ নয়। আমরা জানি, কম্পিউটারের প্রত্যেকটি ইনপুট গ্রহন করার জন্য সুইচ অন বা অফ হয় (ট্র্যানজিস্টর অন/অফ)। নিউরাল নেটওয়ার্ক আপনাকে উত্তর শুধু নেগেটিভ বা পজিটিভ ভাবে প্রদান করবে। মনেকরুন আপনি টেবিল চেয়ারের ছবি দেখিয়ে ইনপুট করলেন, ১) এটার কি পেছনের হেলান দেওয়ার জায়গা আছে? ২) এর কি উপরিতল আছে? ৩) এতে কি নরম গদি লাগানো রয়েছে? ৪) এখানে কি দীর্ঘ সময়ের জন্য আরামে বসা যাবে? ৫) এর উপর কি অনেক জিনিষ পত্র রাখা যাবে? এখন কম্পিউটার “টেবিলের ক্ষেত্রে” আপনাকে জবাব দেবে, হ্যাঁ, না, হ্যাঁ, হ্যাঁ, না বা বাইনারিতে উত্তরটি হবে 10110 এবং টেবিলের ক্ষেত্রে উত্তর দেবে না, হ্যাঁ, না, না, হ্যাঁ বা বাইনারিতে 01001। অর্থাৎ শেখার সময় এটি টেবিলকে 01001 হিসেবে দেখতে পাবে এবং চেয়ারকে 10110 হিসেবে দেখতে পাবে, এবং এটি চেয়ার না টেবিল সেটিও বুঝতে পারবে।

শেষ কথা

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

0 comments:

Post a Comment

Copyright © SHbd24 | Free Tips & Trick | Powered by Blogger Design by ronangelo | Blogger Theme by NewBloggerThemes.com