Cypha / शतरंज

उत्पाद डेमो

शतरंज खेलिए, सामने है Cypha

Cypha ने शतरंज का कोई खेल कभी देखा ही नहीं। उसने एक आम शतरंज प्रोग्राम को सोचते हुए देखकर सीखा — 26,568 स्थितियाँ, हर एक पर उसी प्रोग्राम का अपना फ़ैसला चिपका हुआ कि कौन जीत रहा है — जब तक Cypha ख़ुद वह फ़ैसला न देने लगा।

नीचे आप उसी से खेलते हैं, जो आपके ब्राउज़र में एक उथली सर्च के भीतर चल रहा है। उसे हराया जा सकता है, और जिस प्रोग्राम से उसने सीखा, उससे वह आज भी हारता है। इस पृष्ठ का हर आँकड़ा उसी प्रशिक्षण रन से निकला है जिसने वे भार बनाए जो यह पृष्ठ लोड करता है।

नापा हुआ, दावा किया हुआ नहीं

नीचे दी गई मूल माध्य वर्ग त्रुटि (RMSE) यह नापने का आम तरीक़ा है कि अनुमानों का एक समूह कितना दूर था; यह जितनी छोटी, मॉडल अपने शिक्षक के उतना ही पास।

होल्ड-आउट R²
—
RMSE
—
स्थितियाँ
—
शिक्षक के ख़िलाफ़
—

R² उन रोककर रखी गई स्थितियों पर है जो मॉडल ने फ़िटिंग के दौरान कभी नहीं देखीं। मुक़ाबले की पंक्ति में Cypha सर्च गहराई 2 पर है और शिक्षक इंजन उसी गहराई पर, शुरुआती चालें बेतरतीब और रंग बारी-बारी से। चारों आँकड़े उस मॉडल का ब्यौरा देते हैं जैसा वह डिस्टिल हुआ था — वे तय हैं, और वे आपकी अपनी प्रति की माप नहीं हैं।

आपकी प्रति अब भी सीख रही है। Cypha एक ऑनलाइन लर्नर है, इसलिए डाउनलोड ख़त्म होते ही हेड का फ़िट होना बंद नहीं होता। वह आपके ख़िलाफ़ जो भी चाल चलता है, वह एक और प्रशिक्षण जोड़ा है, और बोर्ड के नीचे वाला पैनल दिखाता है कि आपकी प्रति उस प्रति से कितनी दूर चली गई है जो भेजी गई थी।
और इससे उसका खेल अभी बेहतर नहीं होता। नापकर कहा गया है, मानकर नहीं। ख़ुद से खेले गए 12 खेलों में यह सुधार, हेड की अपनी ही सर्च के मुक़ाबले उसकी त्रुटि को 0.76 से 0.67 प्यादे तक घटा देता है — और जहाँ जमा हुआ हेड एक सत्र में 4.6% ख़राब खिसकता है, वहाँ सीखने वाला 5.2% बेहतर होता है। यानी फ़िटिंग असली है। पर 1,119 स्थितियों पर प्रशिक्षित एक प्रति को भेजी गई प्रति के ख़िलाफ़ खिलाया गया, गहराई 2 पर 24 खेल, रंग बारी-बारी से, और नतीजा रहा 6W–7L–11D: पूरी बराबरी।

यही नतीजा अपेक्षित था और इसे छिपाने के बजाय कह देना ठीक है। संकेत मॉडल की अपनी गहराई-2 सर्च है, जो जमे हुए हेड की अपनी नज़र से मुश्किल से ही गहरी है — ख़ुद से सहमत होना सीखना, मज़बूत होने जैसा नहीं है। जिन 26,568 स्थितियों पर वह डिस्टिल हुआ, उनके सामने एक हज़ार स्थितियाँ कुछ भी नहीं हैं। ईमानदार दावा इतना ही है कि ऑनलाइन लर्नर काम करता है और वही कर रहा है जो वह कहता है; यह दावा कि वह भेजे गए मॉडल को हरा देगा, अभी कमाया नहीं गया है।
सीधी-सादी भाषा में

यह क्या है, एक मिनट में

समस्या

कृत्रिम बुद्धिमत्ता (AI) का हर नया डिज़ाइन यह समझाते हुए आता है कि उसे काम क्यों करना चाहिए। वह समझ पढ़ लेने से यह पता नहीं चलता कि वह करता भी है या नहीं। शतरंज इसका फ़ैसला कर देता है, क्योंकि जवाब राय की बात नहीं है: या तो वह समझदार और नियमों के भीतर शतरंज खेलता है, या नहीं खेलता — और आप बैठकर ख़ुद देख सकते हैं।

समाधान

एक आम शतरंज प्रोग्राम किसी स्थिति को आगे की चालों में खोजकर आँकता है। Cypha को उन्हीं में से 26,568 आकलन दिखाए गए और उन्हें दोबारा बनाने के लिए एक ही फ़ॉर्मूला फ़िट किया गया — बोर्ड को बताने वाले 388 आँकड़ों पर गणित की एक पंक्ति। शतरंज के लिए संरचना में कुछ भी नहीं जोड़ा गया। सिर्फ़ उसमें डाले गए आँकड़े बदले।

यह किसके लिए है

वे सब जो Cypha को तौल रहे हैं और बताए जाने के बजाय ख़ुद जाँचना चाहेंगे। मशीन लर्निंग में काम करने वाले लोग, जो देखना चाहते हैं कि इस्तेमाल के दौरान भी कोई मॉडल सीखता कैसे रहता है। और वे सब जिनका बस एक खेल खेलने का मन है — सब कुछ आपके ब्राउज़र में चलता है, और आप जो खेलते हैं वह कहीं नहीं भेजा जाता।

किसी शतरंज इंजन का आकलन नक़ल कर लेना शतरंज सीखना नहीं है। इस पृष्ठ पर ऐसा दावा कहीं नहीं है। बाक़ी पृष्ठ यह है कि यह हुआ कैसे, हर आँकड़े का मतलब क्या है, और वे चार चीज़ें क्या हैं जो यह डिज़ाइन नहीं कर सकता।

cypha::Cypha — शतरंज हेड सीख रहा है

किसी मोहरे पर क्लिक कीजिए, फिर वहाँ क्लिक कीजिए जहाँ वह जाएगा। जायज़ ख़ाने चिह्नित हैं।

स्थिति

मॉडल लोड हो रहा है…
डिस्टिल किए हुए वेट लाए जा रहे हैं।
Cypha का मूल्यांकन
—
नोड
—

Cypha ने क्या-क्या सोचा

चालें

आपसे सीखना

इस गहराई पर रेटिंग
—
इस्तेमाल में मॉडल
गहराई 2
सीखी गई स्थितियाँ
0
पूरे हुए खेल
0
भेजी गई प्रति से ड्रिफ़्ट
0.00%
आख़िरी सुधार
—

ड्रिफ़्ट यानी वेट वेक्टर में हुए बदलाव का आकार, डिस्टिल किए गए वेक्टर के मुक़ाबले। आख़िरी सुधार यानी वह जिस स्थिति से अभी चला, उसके बारे में जमा हुआ हेड कितना ग़लत था, प्यादों में, उसकी अपनी गहरी सर्च के मुक़ाबले नापा हुआ।

रेटिंग एक आंतरिक सीढ़ी पर है, Fédération Internationale des Échecs (FIDE) के पैमाने पर नहीं — जिसने कभी किसी रेटेड इंसान से खेला ही नहीं, उस पर FIDE का आँकड़ा चिपकाने का कोई ईमानदार तरीक़ा है ही नहीं। गहराई 1 पर संदर्भ इंजन को 1000 पर बाँधा गया है और बाक़ी सब 210 खेलों से Bradley-Terry अधिकतम संभाव्यता द्वारा फ़िट किया गया है, इसलिए यह इस पर निर्भर नहीं करता कि खेल किस क्रम में खेले गए। नापी हुई सीढ़ी: गहराई 1–3 पर संदर्भ 1000 / 1171 / 1245, Cypha 798 / 1010 / 1161। Cypha जिस इंजन से डिस्टिल हुआ, उससे लगभग एक सर्च-गहराई पीछे चलता है, और त्रुटि-पट्टियाँ मोटे तौर पर ±50 हैं, जो 210 खेलों से इतना ही मिलता है।

हर ताक़त सेटिंग अपने पास रखती है अपना अलग मॉडल। गहराई 1 पर खेलने वाला हेड गहराई-1 की सर्च की ओर सुधारा जाता है; गहराई 3 पर लक्ष्य अलग और बेहतर होता है। दोनों को एक ही वेट वेक्टर में प्रशिक्षित करने से वे आपस में भिड़ जाएँगे। ताक़त बदलिए और उसके साथ गिनतियाँ भी बदल जाती हैं।

मूल्यांकन 388 फ़ीचरों का एक रैखिक फलन है। इसकी अपनी कोई सर्च गहराई नहीं, कोई ओपनिंग बुक नहीं और एंडगेम का कोई ज्ञान नहीं। इसे हरा देना अपेक्षित है; दिलचस्प बात यह है कि एक अकेला व्हाइटन किया हुआ रैखिक हेड किसी इंजन के सर्च मूल्यांकन को दोहरा पाता है — और फिर आपके खेलते-खेलते ख़ुद को सुधारता रहता है।
इंजन, फ़ीचर, डिस्टिल किए हुए वेट और खिलाड़ी, सब आपके यहीं चलते हैं। कुछ भी कहीं नहीं भेजा जाता, और कुछ किलोबाइट गुणांकों के अलावा कोई मॉडल डाउनलोड नहीं होता। आपकी प्रति जो सीखती है वह आपके ब्राउज़र में रहता है, आपका है, और कभी अपलोड नहीं होता — इसलिए किसी और के खेल आपके मॉडल को हिला नहीं सकते, और आपके खेल उनके मॉडल को नहीं।
तरीक़ा

कोई इंजन Cypha का मॉडल कैसे बनता है

यह नॉलेज डिस्टिलेशन है, और वही हिस्से इस्तेमाल करके किया गया है जो हर दूसरे Cypha अनुप्रयोग में लगते हैं। संरचना में शतरंज के लिए ख़ास कुछ नहीं जोड़ा गया — सिर्फ़ फ़ीचर।

डिस्टिलेशन की कड़ी: perft से जाँचा गया एक संदर्भ इंजन 26,568 स्थितियाँ लेबल करता है, जो 388 फ़ीचर बनते हैं, और 9.4 किलोबाइट के एक Cypha हेड में फ़िट होते हैं, जो होल्ड-आउट R वर्ग 0.866 हासिल करता है
पूरा आरेख देखने के लिए स्क्रॉल करें →
डिस्टिलेशन, खोज नहीं। पिछले डिब्बे का हर आँकड़ा उसी प्रशिक्षण रन ने नापा है जिसने वे वेट बनाए जो यह पृष्ठ लोड करता है।
क़दम 1

शिक्षक

एक 0x88 इंजन, जिसमें नियमों के भीतर पूरी चाल-उत्पत्ति, सामग्री और piece-square मूल्यांकन, सबसे क़ीमती शिकार – सबसे कम क़ीमती हमलावर (MVV-LVA) क्रम, और शांत-अवस्था सर्च है। kiwipete समेत पाँच मानक perft स्थितियों पर सत्यापित, ताकि उससे कुछ भी सीखने से पहले नियम प्रमाणित रूप से सही हों।

क़दम 2

डेटा

स्थितियाँ ख़ुद से खेले गए खेलों से ली गईं, शुरुआती चालें बेतरतीब और शोर जान-बूझकर डाला गया, ताकि सेट किसी एक सँकरी लाइन के बजाय असली खेलों में फैला रहे। हर एक पर शिक्षक का अपना सर्च स्कोर लेबल है, जिसे ±12 प्यादों पर काट दिया गया है, ताकि मात के स्कोर हावी न हो जाएँ।

क़दम 3

फ़ीचर

388 विमाएँ: 384-चौड़ा piece-square क़ब्ज़े का अंतर (6 तरह के मोहरे × 64 ख़ाने), साथ में bishop pair, दोहरे प्यादे, गतिशीलता और खेल का चरण। हमेशा उस पक्ष के नज़रिए से जिसकी चाल है, ताकि एक ही वेट वेक्टर दोनों रंगों के काम आए।

क़दम 4

फ़िट

WorldPrior θ₀ को Welford से ऑनलाइन फ़िट किया गया, प्राकृतिक-ग्रेडिएंट मापक के रूप में व्हाइटनिंग, सामान्यीकृत न्यूनतम माध्य वर्ग (LMS) भार-अद्यतन, न्यूनतम विवरण लंबाई (MDL) का क्षय जो भारों को वापस प्रायर की ओर खींचता है, और Cypha के संदर्भ 0.30 अनुपात पर एक आश्चर्य-भारित रीप्ले बफ़र।

यह प्रदर्शन ईमानदार क्यों है

काम संरचना ने किया, विषय ने नहीं

क़दम 4 का हर हिस्सा एक असली Cypha हिस्सा है, जो अपना असली काम कर रहा है। WorldPrior वही ऑनलाइन गाउसी है जो Cypha पृष्ठ पर मौजूद 2-D क्लासिफ़ायर को उसकी निर्णय सतह देता है। व्हाइटनिंग सूचना-ज्यामिति के दावे को ठोस रूप देती है: अद्यतन कच्चे ग्रेडिएंट के बजाय प्राकृतिक ग्रेडिएंट के साथ चलते हैं। MDL क्षय, Solomonoff पूर्वधारणा को सिकुड़न पद के रूप में कहने का तरीक़ा है।

शतरंज के लिए जो बदला वह है फ़ीचर मैप और हेड — वर्गीकरण की जगह प्रतिगमन। Cypha का README यही दलील देता है कि यह एक ही टाइप है जो कई काम करता है, और इसे ऐसे विषय पर परखा गया है जहाँ जवाब में कोई दुविधा नहीं: या तो यह जायज़, समझदार शतरंज खेलता है या नहीं खेलता।

यह क्या नहीं दिखाता

ईमानदार सीमाएँ

  • यह रैखिक है। piece-square फ़ीचर का कोई रैखिक फलन राजा की सुरक्षा, प्यादा-संरचना की आपसी क्रियाओं, या ऐसी किसी भी चीज़ को नहीं दिखा सकता जिसके लिए दो फ़ीचर का गुणनफल चाहिए। इसकी छत वही है जो Cypha का README अनन्य OR (XOR) के लिए बताता है।
  • शिक्षक मामूली है। संदर्भ इंजन एक काबिल क्लासिकल सर्चर है, Stockfish नहीं। उसे अच्छी तरह डिस्टिल करने का मतलब है एक मामूली मूल्यांकक से अच्छी तरह मेल खाना।
  • इसकी अपनी कोई सर्च गहराई नहीं। यहाँ ताक़त ज़्यादातर alpha-beta रैपर से आती है, ठीक वैसे ही जैसे शिक्षक के मामले में आती है।
  • डिस्टिलेशन खोज नहीं है। Cypha ने वह मूल्यांकन फलन दोहराया जो उसे दिखाया गया था। उसने शून्य से शतरंज नहीं सीखा, और इस पृष्ठ पर ऐसा कोई दावा नहीं किया गया।
इसे ख़ुद दोहराइए: node tools/chess/perft.js इंजन को मानक परीक्षण स्थितियों के विरुद्ध जाँचता है, और node tools/chess/train.js एक तय बीज से मॉडल को शून्य से दोबारा बनाता है। इस पृष्ठ के ऊपर दिए आँकड़े सीधे उसी रन से बनी फ़ाइल से पढ़े जाते हैं।