বুদ্ধিমান কম্পিউটারের খোঁজে

টেলিভিশনকে একসময় বলা হতো বোকা বাকসো। টিভি সেন্টার থেকে চালিয়ে দেওয়া কতগুলো বুলিই শুধু টিভিতে শোনা যায়। সে হিসেবে একে বোকা বাকসো বলাই যায়। কম্পিউটারকে সে হিসেবে বলা যায় বুদ্ধিমান বাকসো। কিন্তু কতটা বুদ্ধিমান? এই প্রশ্ন কম্পিউটারকে শুনতে হচ্ছে গত শতাব্দীর পঞ্চাশের দশক থেকেই, যখন কেবল কম্পিউটারের বিকাশ হতে শুরু করেছে।

কম্পিউটার তার তেলেসমাতি কাণ্ড দেখানোর অনেক আগে থেকেই কাঠগড়ায় দাঁড়িয়েছে। অ্যালান টুরিং দিয়েছেন টুরিং টেস্টের ধারণা। সেই ধারণা নির্ধারণ করে দিয়েছে বুদ্ধিমত্তার পরিমাপ। মানুষের বুদ্ধিকে অতিক্রম করতে হলে প্রথম অনেকগুলো বাধা পেরোতে হবে কম্পিউটারকে। তার মধ্যে একটা ছিল দাবা খেলা। দাবা খেলতে পারে এমন কম্পিউটার প্রোগ্রাম বেরোতে সময় লাগেনি। টুরিংয়ের ইমিটেশন গেম পেপার প্রকাশের পর খুব বেশি দিন লাগেনি। ১৯৫২ সালেই লেখা হয়েছিল দাবার প্রোগ্রাম। অবশ্য সেই প্রোগ্রাম এখনকার তুলনায় নেয়াত শিশুই।

দিনে দিনে কম্পিউটার যত এগিয়েছে, দাবার প্রোগ্রামের দক্ষতাও তত এগিয়েছে। অনেকবারই কম্পিউটারকে মানুষের বুদ্ধিমত্তার কাছে পরীক্ষা দিতে হয়েছে দাবা দিয়েই। যেমন ১৯৮৫ সালে ৩২টা কম্পিউটারকে বসিয়ে দেওয়া হলো বিখ্যাত দাবাড়ু গ্যারি কাসপারভের সামনে। তখন কাসপারভের ক্যারিয়ারের উত্থান-পর্ব। ৩২টা কম্পিউটারের সঙ্গে তিনি দাবা খেললেন একই সঙ্গে। এবং প্রতিটি গেম জিতে গেলেন। অবাক কাণ্ড, কেউ তখন অবাক হয়নি।

১০ বছর পর আবার কাসপারভ মুখোমুখি হলেন আইবিএমের ডিপ ব্লুর। তিন গেমের খেলায় এবারও জিতলেন কাসপারভ। এবার কিন্তু অবাক হলো অনেকেই। কারণ ডিপ ব্লুর দক্ষতা অনেক অনেক বেশি ছিল। অনেকেই তখন বলেছে, বেঁচে গেল মানবসভ্যতা−কম্পিউটারের চেয়ে বুদ্ধিতে আমরা এখনো এগিয়ে। বলা বাহুল্য, আইবিএম তাতে খুশি হয়নি। তারা ডিপ ব্লু মেশিনকে আরও উন্নত, দাবা খেলায় আরও দক্ষ করে তুলল। আরেকটা ম্যাচের প্রস্তাব করল, ১৯৯৭ সালে। এবার মানুষের আগ্রহ আরও অনেক বেশি। ১২ বছর ধরে কাসপারভ একরকম অজেয়। কোনো টুর্নামেন্টেই হারেন না। তাই দাবার দুনিয়ার লোক চাইছিল তিনি হেরেই যান। কিন্তু সাধারণ মানুষের ইচ্ছা ছিল কাসপারভ জিতুন। বেঁচে যাক মানবতা। কিন্তু তাঁকে হারতেই হলো। তিন ম্যাচের একটা জেতেন কাসপারভ, বাকি দুটি জেতে ডিপ ব্লু।

এরপর যত সময় এগিয়েছে, কম্পিউটার হয়েছে তত শক্তিশালী, অনেক বুদ্ধিমান। এই ২০১৮ সালে এসে দাবা খেলায় কম্পিউটারকে হারানো কোনো মানুষের পক্ষে প্রায় অসম্ভব। একালের সেরা দাবাড়ু ম্যাগনাস। তিনি হয়তো খুব ভালো খেললে বড়জোর ড্র করতে পারেন একালের সেরা দাবাড়ু কম্পিউটারের সঙ্গে।

একটা প্রশ্ন এখন বড় হয়ে দাঁড়িয়েছে, কম্পিউটার কি কখনো এমন হবে, প্রথম চালের পরই বলে দেবে এই ম্যাচ এভাবে শেষ হবে? অনেকের মতে, সেই পর্যায়ে যেতে কম্পিউটারের বহু পথ পাড়ি দিতে হবে। কারণ দাবার সম্ভাব্য গেমের সংখ্যা ১০৪০। ১-এর পরে ৪০টি শূন্য দিলে যে বিশাল সংখ্যা হয়, তা হিসাব করা এখনকার কম্পিউটারের সাধ্যের বাইরে।

যদিও কম্পিউটার অনেক অনেক বেশি হিসাব করতে পারে, প্রতি সেকেন্ডে ৭ কোটি বা তারও বেশি চাল। তারপরও কম্পিউটারের সঙ্গে মানুষের একটা মৌলিক পার্থক্য আছে। কম্পিউটার অহেতুক অনেক কিছু হিসাব করে, যেগুলোর প্রয়োজন নেই। কম্পিউটার মানুষের বলে দেওয়া ফর্মুলা মেনে হিসাব করতে থাকে। এই জায়গায় মানুষ ব্যবহার করে ইনটিউশন বা প্রজ্ঞা। আমাদের মস্তিষ্কের গঠনটাই আসলে এ কাজে সাহায্য করে। কোত্থেকে কী ম্যাজিকের মতো হাজির হয়, অনেক সময় বোঝাই কঠিন হয়ে পড়ে।

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

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

আবার দাবা খেলায় ফেরা যাক। ধরা যাক, দাবা খেলার জন্য একটা ইঞ্জিন বানাতে চাই। তাহলে আমাদের এমন তড়িত্ গতির একটা প্রোগ্রাম বানাতে হবে, যেটা প্রতিটি চালের বিপরীতে লাখ লাখ সম্ভাবনা চেক করে দেখবে। সব সম্ভাবনা যাতে চেক করে দেখে, সে জন্যও আমাদের কোড লিখতে হবে। এত এত কোড লেখা যেমন কঠিন, চালানো তার চেয়ে কঠিন।

কিন্তু এমন কিছু যদি করা যেত। আমরা প্রতিটি রুল কম্পিউটারকে শেখাব না। বরং কম্পিউটারকে রুল বানানো শেখাব, তাহলে কেমন হয়? সে কাজটাই করা হয় মেশিন লার্নিংয়ে। এই পদ্ধতিতেই কম্পিউটার শেখে। কম্পিউটার নিজেই যেহেতু নতুন কিছু শিখেতে পারছে, তাই বুদ্ধিমান হওয়ার পথে কম্পিউটার এক ধাপ এগিয়ে গেছে।

কম্পিউটারের শেখাটা কীভাবে হয়? যেমন দাবা খেলা, প্রোগাম ছাড়া কম্পিউটার কীভাবে দাবা খেলা শিখবে নিজে নিজে? দাবা খুব জটিল। আগেই বলা হয়েছে, দাবায় সম্ভাব্য গেমের সংখ্যা ১০৪০। তাই এত জটিল খেলার কথা না বলে, সহজ একটা খেলার কথা বলি। কাটাকুটি খেলা।

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

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

ডোনাল্ড মিশির পদ্ধতিতে কোড লিখে কম্পিউটারকে শেখানো যাবে। এই খেলা শেখানোর জন্য তিনি বেছে নিয়েছিলেন ম্যাচ বক্স। ম্যাচ বক্সই হবে এই খেলার মেশিন। এবং পর্যায়ক্রমে এই ম্যাচ বক্সই শিখবে কাটাকুটি খেলা। এই মেশিনের নাম মিশি দিয়েছিলেন মিনেস (Machine educable noughts and crosses engine)।

কাটাকুটি খেলায় একজন খেলোয়াড় প্রথমে একটা চাল দেয়। সাধারণত একটা গেমে একজন চাল দিলে পরের গেমে প্রতিপক্ষ দেয় প্রথম চালটা। খেলা সহজ করার জন্য আমরা ধরে নিই প্রতিটি গেমেই আমাদের মিনেস আগে চাল দেয়।

মিনেস হলো একটা ম্যাচ বক্স। একটা ম্যাচ বক্স কীভাবে চাল দেবে? এ জন্য আমরা একটা বুদ্ধি করব। ১ নম্বর ছবির মতো করে একটা কাটাকুটির বোর্ডে নয় রঙের নয়টা ঘুঁটি রাখব। এরপর একটা ম্যাচ বক্সের মধ্যে ওই নয় রঙের নয়টা ঘুঁটি ঢোকাব। এবার ম্যাচ বক্স বন্ধ করে ঝাঁকুনির পর না দেখে একটা ঘুঁটি বের করব। ম্যাচ বক্সে ঘুঁটি ছিল নয় রঙের নয়টা। যেকোনো একটা ঘুঁটি ওঠার সম্ভাবনা সমান, নয় ভাগের এক ভাগ। যে রঙের ঘুঁটি উঠবে, আমরা দেখব সেই রঙের ঘুঁটি কাটাকুটির বোর্ডে কোথায় আছে। যে ঘরে থাকবে, সেটাই হবে মিনেসের চাল। ধরা যাক ঘুঁটি উঠল লাল। তাহলে ওপরের সারির বাঁ পাশের ঘরে চালবে মিনেস। দেখতে হবে ছবি-২-এর মতো।

এবার প্রতিপক্ষের চাল। ধরা যাক আপনিই খেলছেন মিনেসের বিপক্ষে। আপনি চাল দিলেন একদম মাঝের ঘরটায়। তাহলে আমাদের কাটাকুটির বোর্ডটা এখন দেখতে হবে ৩ নম্বর ছবির মতো। আবার মিনেসের পালা। মিনেস তো নিজে চালতে পারে না। তাই আমাদেরই চালতে হবে। তবে এখন একটু সমস্যা হয়ে যাবে। মিনেসের চাল আমরা দিচ্ছিলাম ম্যাচ বক্স ঝাঁকিয়ে দৈবচয়নে একটা ঘুঁটি বের করে। কিন্তু যদি এবার লাল বা নীল রঙের ঘুঁটি বের হয়, তাহলে আমরা চালব কীভাবে? এ দুই জায়গায় তো চাল দেওয়া হয়েই গেছে। এই সমস্যার সমাধান করা যায় এভাবে, আমরা ম্যাচ বক্স থেকে লাল আর নীল ঘুঁটি দুটো বের করে ফেলি। এবার যে ঘুঁটি বের হবে, তাই হবে মিনেসের চাল।

এভাবে প্রতিবার ঘুঁটি বের করে করে খেললে ব্যাপারটা অনেক কঠিন হয়ে যাবে। তাই আমরা অন্য একটা বুদ্ধি করতে পারি। আমরা প্রথমে দেখি, মিনেসের পক্ষে কতটা ভিন্ন অবস্থা তৈরি হতে পারে। একদম প্রথম চালের জন্য তৈরি হবে একটা অবস্থা। তখন সবগুলো ঘরই ফাঁকা। একটা ঘুঁটি চালার পর প্রতিপক্ষ একটা চাল দেবে। ঘর ফাঁকা থাকবে সাতটি। সাতটি ঘর ফাঁকা থাকতে পারে বিভিন্ন কম্বিনেশনে। এিভাবে হিসাব করলে মিনেসের পাঁচটি চালে তৈরি হওয়া সম্ভাব্য অবস্থা হতে পারে ৩০৪টি। এই ৩০৪টি অবস্থার জন্য যদি আমরা ৩০৪টি আলাদা ম্যাচ বক্স বানাই, তাহলে প্রতিটি চালের জন্য একটা করে আলাদা বক্স থাকবে। এই বক্সগুলোর ওপর এবার আমরা তার চালের অবস্থা এঁকে দিই। কোনো একটা চালের আগে ওই চালের জন্য নির্ধারিত বক্সটা আমরা ব্যবহার করব। আর ওই নির্দিষ্ট বক্সে থাকবে ওই চালের জন্য প্রযোজ্য রঙের ঘুঁটি।

এবার কিন্তু সুন্দরভাবে আমাদের গেম খেলা সম্ভব। শুধু সমস্যা এক জায়গায়। এভাবে কাটাকুটি খেললে পুরো খেলা হয়ে যাচ্ছে দৈবচয়নভিত্তিক। মেশিন লার্নিং বা আমাদের মিনেসকে শেখানোর কোনো ব্যাপার থাকছে না। আমাদের তো মিনেসকে শেখাতে হবে। কীভাবে শেখাব?

এর জন্য একটা বুদ্ধি বের করেছেন ডোনাল্ড মিশি। আমরা মিনেসের চালগুলো পর্যবেক্ষণ করব। যেহেতু দেখা যাবে মিনেস অনেক ভুল চাল দিচ্ছে, আবার কিছু চাল দেবে ভালো। কোন চালটা ভালো আর কোনটা খারাপ, তা যদি আমরা বলে দিই, তাহলে তো আর মিনেসের শেখা হলো না। তাই আমরা তা বলে দেব না।

একটা গেমে কী কী হতে পারে? হয় মিনেস জিতবে, ড্র করবে অথবা হারবে। এই তিন অবস্থার বাইরে কোনো অবস্থা হবে না। মিনেসকে ভালো চাল না বলে আমরা বলে দেব—জেতা ভালো এবং হারা ভালো নয়। ড্র করা খারাপ নয়।

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

কিন্তু যদি হারে? হেরেছে মানে ওই চালগুলো ভালো নয়। তখন আমরা ওই গেমের চালগুলোর প্রতিটি বক্স থেকে একটা করে ওই রঙের ঘুঁটি বের করে ফেলব। তাহলে পরের গেমগুলোতে ওই চাল দেওয়ার সম্ভাবনা কমে যাবে। আর ড্র করলে? ড্র করলেও আমরা একটা করে ওই রঙের ঘুঁটি বক্সকে দেব। যেহেতু সে হারেনি, এ জন্য তাকে একটা পুরস্কার দেওয়া হবে।

একটা সমস্যা থেকে গেল। ধরা যাক, আমাদের প্রথম গেমটা মিনেস হেরে গেল। ধরে নিই গেমটা হেরেছে তৃতীয় চালে ভুল চাল দিয়েছে বলে। কিন্তু প্রথম দুই চালে সে ভালো চালই দিয়েছিল। এখন খেলা শেষে আমাদের রুল অনুযায়ী আমরা প্রথম দুই চালের যে রঙের ঘুঁটি, সেগুলো বের করে নেব। তাতে পরের কোনো গেমে মিনেস আর এই দুই চাল দিতে পারবে না। এই সমস্যা থেকে বাঁচার জন্য আমরা প্রথম চালের ম্যাচ বক্সে প্রতি রঙের ঘুঁটি দেব চারটা করে, দ্বিতীয় চালের ম্যাচ বক্সগুলোতে দেব তিনটা করে, এমনি করে তৃতীয় ও চতুর্থ চালের ম্যাচ বক্সে ঘুঁটি দেব যথাক্রমে দুই ও একটা করে। তাহলে শুরুতেই ঘুঁটি শেষ হয়ে যাওয়ার সমস্যায় আমাদের পড়তে হবে না।

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

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

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

কম্পিউটার বা কোনো মেশিন যখন এভাবে ঠেকতে ঠেকতে শিখছে, তাকে আমরা বলছি মেশিন লার্নিং। যেহেতু কম্পিউটারও এখন এভাবে শিখতে পারে, তাহলে কম্পিউটারকে কি আমরা বুদ্ধিমান বলতে পারি? নিশ্চয়ই পারি।

লেখক: শিক্ষার্থী, ফলিত রসায়ন ও কেমিকৌশল বিভাগ, ঢাকা বিশ্ববিদ্যালয়

* *লেখাটি ২০১৮ সালে বিজ্ঞানচিন্তার জানুয়ারি সংখ্যায় প্রকাশিত