Cypha / দাবা
দাবা খেলুন, প্রতিপক্ষ Cypha
Cypha কখনও একটি দাবার খেলাও দেখেনি। সে শিখেছে একটি সাধারণ দাবা প্রোগ্রামকে ভাবতে দেখে — ২৬,৫৬৮টি অবস্থান, প্রতিটিতে কে জিতছে তা নিয়ে ওই প্রোগ্রামের নিজের রায় লেবেল হিসেবে দেওয়া — যতক্ষণ না Cypha নিজেই রায়টা দিতে পারল।
নিচে আপনি তার সঙ্গেই খেলছেন, আপনার ব্রাউজারে একটি অগভীর অনুসন্ধানের ভিতরে চলছে। একে হারানো যায়, আর যার কাছ থেকে সে শিখেছে তার কাছে সে এখনও হারে। এই পাতার প্রতিটি সংখ্যা এসেছে সেই প্রশিক্ষণ-চালনা থেকে, যা এই পাতার লোড করা ওজনগুলি তৈরি করেছে।
নিচের বর্গমূল গড়-বর্গ ত্রুটি (RMSE) হলো একগুচ্ছ আন্দাজ কতটা দূরে ছিল তার চেনা মাপকাঠি; যত ছোট, মডেল তত তার শিক্ষকের কাছাকাছি।
R² মাপা হয়েছে আলাদা করে রাখা এমন অবস্থানের বিপরীতে, যা ফিটিংয়ের সময় মডেল কখনও দেখেনি। ম্যাচের লাইনটি হলো গভীরতা ২-এ Cypha বনাম একই গভীরতায় শিক্ষক ইঞ্জিন, এলোমেলো ওপেনিং আর রং বদলে বদলে। চারটি সংখ্যাই বর্ণনা করে সেই মডেলকে যেমনটি ডিস্টিল করা হয়েছিল — এগুলি স্থির, আর এগুলি আপনার কপির মাপজোক নয়।
এটাই প্রত্যাশিত ফল, আর লুকিয়ে রাখার চেয়ে বলে দেওয়াই ভালো। সংকেতটা আসে মডেলের নিজের গভীরতা-২ অনুসন্ধান থেকে, যা জমে থাকা হেডের নিজের দৃষ্টির চেয়ে সামান্যই গভীর — নিজের সঙ্গে একমত হতে শেখা আর শক্তিশালী হওয়া এক কথা নয়। যে ২৬,৫৬৮টি অবস্থানের উপর একে ডিস্টিল করা হয়েছিল, তার পাশে হাজারখানেক অবস্থান কিছুই নয়। সৎ দাবিটা হলো, অনলাইন শিক্ষার্থীটি কাজ করে এবং যা বলে তা-ই করছে; পাঠানো মডেলকে সে হারাবে, এই দাবিটা অর্জিত হয়নি।
এটি কী, এক মিনিটে
প্রতিটি নতুন কৃত্রিম বুদ্ধিমত্তার (AI) নকশা আসে কেন সেটির কাজ করা উচিত তার ব্যাখ্যা নিয়ে। ব্যাখ্যাটা পড়ে সত্যিই কাজ করে কি না তার কিছুই জানা যায় না। দাবা সেটা মিটিয়ে দেয়, কারণ উত্তরটা মতামতের ব্যাপার নয়: হয় সে বৈধ ও বুদ্ধিমান দাবা খেলে, নয় খেলে না — আর আপনি বসে গিয়ে দেখে নিতে পারেন।
একটি সাধারণ দাবা প্রোগ্রাম চালগুলির ভিতর দিয়ে সামনে খুঁজে একটি অবস্থান বিচার করে। Cypha-কে সেই বিচারের ২৬,৫৬৮টি দেখানো হয়েছে, আর সেগুলি হুবহু ফিরিয়ে দিতে বসানো হয়েছে একটিমাত্র সূত্র — বোর্ডের বর্ণনা দেওয়া ৩৮৮টি সংখ্যার উপরে এক লাইনের গণিত। দাবার জন্য স্থাপত্যে কিছুই যোগ করা হয়নি। কেবল তাতে ঢোকানো সংখ্যাগুলিই বদলেছে।
Cypha-কে যাঁরা মেপে দেখছেন, শোনা কথায় ভরসা না করে যাচাই করতে চান। যাঁরা মেশিন লার্নিং নিয়ে কাজ করেন আর দেখতে চান একটি মডেল ব্যবহারের মধ্যেই শিখে চলেছে। আর যাঁর স্রেফ একটা খেলার শখ — সবই আপনার ব্রাউজারে চলে, আর আপনি যা খেলেন তার কিছুই কোথাও পাঠানো হয় না।
cypha::Cypha — দাবার হেড শিখছে
একটি ঘুঁটিতে ক্লিক করুন, তারপর যেখানে যাবে সেখানে ক্লিক করুন। বৈধ ঘরগুলি চিহ্নিত।
অবস্থান
Cypha কী কী ভেবেছিল
চাল
আপনার কাছ থেকে শেখা
ড্রিফট মানে ওজন-ভেক্টরে হওয়া পরিবর্তনের মাপ, ডিস্টিল করাটির তুলনায়। শেষ সংশোধন মানে, এইমাত্র যে অবস্থান থেকে চাল দেওয়া হলো তা নিয়ে জমে থাকা হেডটি কতটা ভুল ছিল, পনে মাপা, তার নিজের আরও গভীর অনুসন্ধানের বিপরীতে।
রেটিং একটি অভ্যন্তরীণ সিঁড়ির মাপ, Fédération Internationale des Échecs (FIDE) মাপ নয় — যে কখনও রেটিংধারী মানুষের সঙ্গে খেলেনি তার গায়ে সৎভাবে FIDE সংখ্যা বসানোর উপায় নেই। গভীরতা ১-এ রেফারেন্স ইঞ্জিনকে ১০০০-এ বাঁধা হয়েছে, আর সবটাই বসানো হয়েছে ২১০টি খেলা থেকে Bradley-Terry সর্বাধিক সম্ভাব্যতা দিয়ে, তাই খেলাগুলি কোন ক্রমে হয়েছিল তার উপর এটি নির্ভর করে না। মাপা সিঁড়ি: গভীরতা ১–৩-এ রেফারেন্স ১০০০ / ১১৭১ / ১২৪৫, Cypha ৭৯৮ / ১০১০ / ১১৬১। যে ইঞ্জিন থেকে Cypha ডিস্টিল করা, তার চেয়ে সে প্রায় এক ধাপ অনুসন্ধান-গভীরতা পিছিয়ে চলে, আর ত্রুটির দণ্ড মোটামুটি ±৫০ — ২১০টি খেলায় এটুকুই মেলে।
প্রতিটি শক্তি-সেটিং রাখে নিজের আলাদা মডেল। গভীরতা ১-এ খেলা একটি হেডকে গভীরতা ১-এর অনুসন্ধানের দিকে শোধরানো হয়; গভীরতা ৩-এ লক্ষ্যটা অন্য, আরও ভালো একটা। দুটোকে একই ওজন-ভেক্টরে প্রশিক্ষণ দিলে তারা কেবল নিজেদের মধ্যে ঝগড়া করবে। শক্তি বদলান, সঙ্গে গোনাগুনতিও বদলাবে।
একটি ইঞ্জিন কীভাবে Cypha মডেল হয়ে ওঠে
এটি নলেজ ডিস্টিলেশন, আর করা হয়েছে অন্য প্রতিটি Cypha প্রয়োগের মতো একই অংশ দিয়ে। স্থাপত্যে দাবা-নির্দিষ্ট কিছুই যোগ করা হয়নি — শুধু ফিচারগুলি ছাড়া।
শিক্ষক
একটি 0x88 ইঞ্জিন, সঙ্গে পূর্ণ বৈধ চাল তৈরি, ঘুঁটির মান ও ঘুঁটি-ঘর মূল্যায়ন, সবচেয়ে দামি শিকার – সবচেয়ে সস্তা আক্রমণকারী (MVV-LVA) ক্রম আর শান্ত-অবস্থা অনুসন্ধান। kiwipete-সহ পাঁচটি আদর্শ perft অবস্থানের বিপরীতে যাচাই করা, তাই তার কাছ থেকে কিছু শেখার আগেই নিয়মগুলি প্রমাণসহ ঠিক।
ডেটা
এলোমেলো ওপেনিং আর ইচ্ছাকৃত গোলমালসহ স্ব-খেলা থেকে নেওয়া অবস্থান, যাতে সেটটি একটি সরু ধারার বদলে সত্যিকারের খেলার বিস্তার ধরে। প্রতিটিতে লেবেল দেওয়া হয়েছে শিক্ষকের নিজের অনুসন্ধান স্কোর দিয়ে, ±১২ পনে কেটে রাখা, যাতে মেটের স্কোর সব দখল করে না নেয়।
ফিচারগুলি
৩৮৮টি মাত্রা: ৩৮৪-প্রশস্ত একটি ঘুঁটি-ঘর দখলের পার্থক্য (৬ ধরন × ৬৪ ঘর), সঙ্গে বিশপ জোড়া, দ্বৈত পন, চলাচলের স্বাধীনতা ও খেলার পর্যায়। সবসময় যার চাল তার দিক থেকে দেখা, তাই একটিমাত্র ওজন-ভেক্টর দুই রঙেরই কাজ চালায়।
বসানো
WorldPrior θ₀ Welford দিয়ে অনলাইনে বসানো, প্রাকৃতিক-গ্রেডিয়েন্টের মেট্রিক হিসেবে হোয়াইটনিং, স্বাভাবিকীকৃত ন্যূনতম গড় বর্গ (LMS) ওজন-হালনাগাদ, ন্যূনতম বর্ণনা-দৈর্ঘ্যের (MDL) ক্ষয় ওজনগুলিকে পূর্বধারণার দিকে ফিরিয়ে আনছে, আর Cypha-র রেফারেন্স ০.৩০ অনুপাতে বিস্ময়-ওজনযুক্ত রিপ্লে বাফার।
কাজটা করেছে স্থাপত্য, বিষয়ক্ষেত্র নয়
৪ নম্বর ধাপের প্রতিটি অংশ একটি সত্যিকারের Cypha অংশ, নিজের সত্যিকারের কাজটাই করছে। WorldPrior সেই একই অনলাইন গাউসীয় বণ্টন, যা Cypha পাতার দ্বিমাত্রিক ক্লাসিফায়ারকে তার সিদ্ধান্তের পৃষ্ঠ দেয়। হোয়াইটেনিং হলো তথ্য-জ্যামিতির দাবিটিকে মূর্ত করা: হালনাগাদ কাঁচা গ্রেডিয়েন্ট নয়, প্রাকৃতিক গ্রেডিয়েন্ট ধরে চলে। MDL ক্ষয় হলো Solomonoff পূর্বধারণা, যা সংকোচন-পদ হিসেবে প্রকাশিত।
দাবার জন্য যা বদলেছে তা হলো ফিচার-মানচিত্র আর হেড — শ্রেণিবিভাগের বদলে রিগ্রেশন। Cypha README একটিই টাইপ কয়েকটি কাজ করে বলে যে যুক্তিটি দেয়, এটি ঠিক সেটাই, পরখ করা হয়েছে এমন একটি ক্ষেত্রে যেখানে উত্তরটি দ্ব্যর্থহীন: হয় সে বৈধ, যুক্তিসঙ্গত দাবা খেলে, নয়তো খেলে না।
সৎ সীমা
- এটি রৈখিক। ঘুঁটি-ঘর ফিচারের একটি রৈখিক ফাংশন রাজার নিরাপত্তা, বোড়ের গঠনের পারস্পরিক ক্রিয়া, কিংবা দুটি ফিচারের গুণফল লাগে এমন কিছুই প্রকাশ করতে পারে না। Cypha README এক্সক্লুসিভ অর (XOR) নিয়ে যে ছাদের কথা বলে, এরও সেই একই ছাদ।
- শিক্ষকটি সাধারণ মানের। রেফারেন্স ইঞ্জিনটি একজন দক্ষ চিরায়ত অনুসন্ধানকারী, Stockfish নয়। একে ভালোভাবে ডিস্টিল করার মানে একটি সাধারণ মানের মূল্যায়নকারীকে ভালোভাবে মেলানো।
- নিজের কোনো অনুসন্ধান গভীরতা নেই। এখানে শক্তির বেশিরভাগটাই আসে আলফা-বিটা মোড়ক থেকে, শিক্ষকের ক্ষেত্রে যেমন আসে ঠিক তেমনই।
- ডিস্টিলেশন আবিষ্কার নয়। Cypha তাকে দেখানো একটি মূল্যায়ন ফাংশন ফিরিয়ে এনেছে। সে শূন্য থেকে দাবা শেখেনি, আর এই পাতায় কোথাও তেমন দাবিও করা হয়নি।
node tools/chess/perft.js ইঞ্জিনটিকে আদর্শ পরীক্ষা-অবস্থানগুলির বিপরীতে যাচাই করে, আর node tools/chess/train.js একটি নির্দিষ্ট সিড দিয়ে মডেলটি গোড়া থেকে আবার তৈরি করে। এই পাতার উপরের সংখ্যাগুলি ওই চালনায় তৈরি হওয়া ফাইল থেকে সরাসরি পড়া।