پرش به محتوای اصلی

آیا یک موتور شطرنج مدرن روی پنتیوم می توانست کاسپاروف را در سال 1996 شکست دهد؟

هکرنیوز۱۴۰۵ آبان ۱۲, سه‌شنبه، ساعت ۱۱:۲۶حدود 11 دقیقه مطالعه

آدرس مقاله: https://nicholas.carlini.com/writing/2026/algorithmic-improvements-chess.html آدرس نظرات: https://news.ycombinator.com/item?id=50349276 امتیاز: 241 # نظر: 119

در 10 فوریه 1996، یک برنامه کامپیوتری (IBM's Deep Blue) برای اولین بار قهرمان شطرنج (گری کاسپاروف) را در یک بازی شطرنج شکست داد. دیپ بلو در ادامه بازی را باخت، اما یک سال بعد، انتقام خود را در یک مسابقه مجدد 3.5-2.5 گرفت.

برای دستیابی به این شاهکار، IBM چندین میلیون دلار صرف تحقیق و توسعه ساخت یک کامپیوتر ویژه برای این منظور کرد. خود Deep Blue (نسخه پیروزمند و ارتقا یافته) توسط 30 پردازنده P2SC که هر کدام تقریبا با فرکانس 120 مگاهرتز کار می‌کردند، و (مهمتر از همه) 480 پردازشگر شطرنج سفارشی VLSI برای انجام عملیات‌های خاص شطرنج مانند تولید حرکت و ارزیابی موقعیت استفاده می‌شد. هنگامی که دیپ بلو ساخته شد، 259 امین ابرکامپیوتر قدرتمند جهان بود و می توانست بیش از 200 میلیون موقعیت شطرنج را در ثانیه تجزیه و تحلیل کند.

اما آیا دیپ بلو برای شکست دادن کاسپاروف ضروری بود؟ یا می‌توانستیم با یک دسک‌تاپ 1996 که موتور شطرنج هوشمندتری دارد، کنار بیاییم؟

همانطور که مشخص است، ما به راحتی می توانستیم کاسپاروف را بدون ساخت Deep Blue و تنها با استفاده از سخت افزار کالا شکست دهیم و (تقریبا مطمئنا) حتی نزدیک هم نبود. من این را می‌دانم، زیرا در حین نوشتن این جمله، یک Intel Pentium Pro با فرکانس 200 مگاهرتز (که دقیقا 31 سال پیش منتشر شد---1 نوامبر 1995) با 64 مگابایت رم که یک پورت سفارشی Stockfish را اجرا می‌کند، در کنار خودم نشسته‌ام که با سرعت Elo تخمینی 3300 ± 87 در هر زمان کلاسیک و فراتر از قدرت کنترلی انسانی پخش می‌شود. Elo کاسپاروف کمی کمتر از 2800. اما صبر کنید، چیزهای بیشتری وجود دارد!

من این دستگاه را با یک کارت اترنت Realtek RTL8139C به اینترنت متصل کرده ام، بنابراین می توانید آن را در زیر پخش کنید!

سه راه برای قوی تر شدن در شطرنج وجود دارد: می توانید حرکات بیشتری را تجزیه و تحلیل کنید، حرکات بهتر را تجزیه و تحلیل کنید یا حرکت ها را بهتر تجزیه و تحلیل کنید. معروف است که انسان ها با انجام دو مورد دوم پیشرفت می کنند: استاد بزرگ شطرنج متوسط ​​در طول یک بازی کلاسیک تقریبا همان تعداد حرکت را تجزیه و تحلیل می کند که یک بازیکن آماتور انجام می دهد، اما آنها فقط حساس ترین حرکات را تجزیه و تحلیل می کنند و با آن تحلیل کار بهتری انجام می دهند. موتورهای شطرنج مانند Stockfish که به جای مغز انسان ما روی سیلیکون کار می کنند، در اولین مورد بر ما مسلط هستند و میلیون ها موقعیت را در ثانیه تجزیه و تحلیل می کنند.

و از آنجایی که فضای زیادی برای بهینه‌سازی‌های کوچک در موتورهای مدرن وجود ندارد که به یک CPU داده شده اجازه می‌دهد موقعیت‌های بیشتری در ثانیه پردازش کند، بیشتر پیشرفت‌ها در هوش مصنوعی شطرنج نیز به دنبال بهبود انسان‌ها و یافتن روش‌های بهتر برای انتخاب حرکات و آنالیز تخته‌ها است.

مهارت در شطرنج با نمره الو سنجیده می شود. تفاوت 200 الو به این معنی است که شما باید از بازیکن قوی‌تر انتظار داشته باشید که از هر چهار بازی سه برنده شود و از آنجا به صورت ضربی: فاصله 400 الو مربوط به 90 درصد امتیاز مورد انتظار است و فاصله 1000 الو، 99.7 درصد امتیاز مورد انتظار را به دست می‌دهد. بهترین موتورهای شطرنجی که می‌توانستید با سخت‌افزار 1996 کار کنید تقریبا 2300 Elo داشتند. در مقابل، استوکفیش مدرن امتیازی نزدیک به 3700 دارد.

این سؤال را ایجاد می کند: چقدر از مزیت یک موتور شطرنج مدرن به این واقعیت مربوط می شود که یک رایانه رومیزی مدرن بسیار سریع است، و چقدر از مزیت به این واقعیت مربوط می شود که ما به تازگی در برنامه نویسی موتورهای شطرنج بهتر شده ایم؟ همانطور که مشخص است، اکثر دستاوردهای Elo (+720+ از +1335 به دست آمده) را می توان به برنامه نویسی بهتر نسبت داد و نه سخت افزار بهتر.

برای آزمایش این، دو آزمایش انجام دادم. اولین آزمایش از Crafty استفاده می کند، یک موتور رقابتی از سال 1996 که کد منبع آن اکنون در دسترس است. در پنتیوم پرو من، ساخت 1996 کرافتی نسخه 11.13 دارای الو 90 ± 1999 در 1 ثانیه در هر حرکت و 2383 ± 77 در 10 ثانیه در هر حرکت است. در سخت افزار مدرن (رایزن 7) Elo این موتور به شدت به 97 ± 2614 در همان 1 ثانیه در هر حرکت می پرد.

اما اگر من این موتور را انتخاب کنم و به آرامی شروع به اضافه کردن تمام دانشی که در مورد نحوه طراحی موتورهای شطرنج بهتر داریم --- الگوریتم های جستجوی مدرن مانند fail-soft، LMR، تاریخچه تصحیح را اضافه کنم. افزودن روش‌های سکون بهتر؛ و با اضافه کردن ارزهای شبکه عصبی (NNUE) --- سپس می توانید Elo را تا 2718 ± 34 در Pentium Pro در 1 ثانیه در هر حرکت و 2974 ± 74 در 10 ثانیه در هر حرکت افزایش دهید.

در آزمایش دوم تا حدودی جلوتر رفتم: به جای تلاش برای به روز رسانی کرافتی، بیایید فقط سعی کنیم Stockfish --- بهترین موتور شطرنج امروز --- با سخت افزار 1996 را دریافت کنیم و ببینیم چگونه کار می کند. این کار کمی طول می کشد و عمدتا به بازنویسی کد مربوط می شود به طوری که از محاسبات 32 بیتی استفاده می کند (یک PPro یک ماشین 32 بیتی است) و از 64 مگابایت رم بیشتر استفاده نمی کند. این پورت ساده الو تقریبا 64 ± 2496 در 1 ثانیه در هر حرکت (2940 ± 76 در 10 ثانیه در هر حرکت) دارد. اما ما می توانیم بهتر عمل کنیم! یک موتور مدرن Stockfish برای کار بر روی یک CPU مدرن طراحی شده است.

با انجام تعدادی تنظیمات در الگوریتم و تنظیم آن بر روی پنتیوم، می‌توانیم Elo آن را در 1 ثانیه در هر حرکت به 2846 ± 35، در هر حرکت 10 ثانیه به 3109 ± 79 و در هر حرکت 30 ثانیه به 3180 ± 80 افزایش دهیم.

مختصرترین راه برای خلاصه کردن همه موارد فوق این است که آنها را وادار به انجام یک مسابقه 100 بازی با یکدیگر کنید. و وقتی این کار را انجام می‌دهم، متوجه می‌شوم که یک موتور شطرنج مدرن که روی پنتیوم پرو 1996 کار می‌کند، 78 برد، 17 تساوی و 5 بازی در برابر موتور کرافتی 1996 که روی سخت‌افزار مدرن کار می‌کرد، می‌برد.

در ادامه این مقاله جزئیات ارائه می شود.

صادقانه بگویم در مورد سخت افزار چیز زیادی برای گفتن وجود ندارد. من یک کامپیوتر رومیزی کارکرده (وینتیج) خریدم. دسکتاپ از یک Intel Pentium Pro با فرکانس 200 مگاهرتز متصل به مادربرد VS440FX اینتل با 64 مگابایت رم SIMM با فرکانس 66 مگاهرتز استفاده می کند. سیستم عامل از یک فلاپی دیسک 3.5 اینچی 1.44 مگابایتی بوت می شود و از طریق Realtek RTL8139C به اینترنت متصل می شود.

من همچنین یک کارت گرافیک 1 مگابایتی Trio64V+ دارم که از طریق VGA به مانیتورم وصل شده است، با ورودی از صفحه کلید PS/2 --- اما من از هیچکدام از آنها زیاد استفاده نمی کنم و در عوض از طریق یک پورت سریال متصل به دسکتاپ مدرن با آن ارتباط برقرار می کنم.

رابط بین موتور شطرنج و اینترنت یک "سیستم عامل" سفارشی ساخته شده است که تنها وظیفه آن چرخاندن موتور شطرنج و اتصال مستقیم آن به کارت شبکه است. (در سرتاسر این مقاله، وقتی می‌گویم "من نوشتم"، واقعا منظورم این است که "از یک LLM خواستم بنویسد". من از ترکیبی از Fable 5.1، Opus 5.5 و GPT-6 برای پیاده‌سازی کد در اینجا استفاده کردم. (اگرچه این مقاله متنی انسانی است.) این به گونه‌ای طراحی شده است که تا حد امکان فشرده باشد: سیستم‌عامل (که در واقع چیزی شبیه به یک سیستم عامل، در واقع یک سیستم‌عامل، در واقع بیش‌تر، یک سیستم عامل، یک سیستم‌عامل، یک سیستم‌عامل است، در واقع یک سیستم‌عامل، یا بیشتر، یک سیستم‌عامل است). فلاپی دیسک

تنها وظیفه آن این است که Pentium Pro را در حالت محافظت شده 32 بیتی راه اندازی کند، کارت شبکه را مقداردهی اولیه کند و منتظر دستورالعمل های بیشتر باشد. سپس می‌توانم هر برنامه مهمان دلخواه «فضای کاربری» را که می‌خواهم به رم بفرستم و آن را بوت می‌کند و شروع به اجرای آن می‌کند. برنامه شطرنجی که من نوشتم یک سرور HTTP سفارشی را راه اندازی می کند که منتظر درخواست های HTTP ورودی با یک موقعیت معین (به عنوان یک رشته FEN) و حداکثر زمان اجرا می شود و در هر درخواست موتور را تا پایان زمان سنج اجرا می کند و یک پاسخ را برمی گرداند.

همانطور که قبلا ذکر شد من (دوباره: یک مدل زبان) در واقع دو موتور را اصلاح کردم. قوی‌تر از این دو توسط Stockfish که برای کارآمدی روی یک پردازنده سی ساله سازگار شده است، نیرو می‌گیرد. در کنترل‌های زمان کلاسیک با تخمین Elo 3300 پخش می‌شود [a] چون من نمی‌توانم تقریبا به اندازه کافی بازی در کنترل‌های زمان کلاسیک روی دستگاه تکی خود اجرا کنم تا این عدد را بدست بیاورم، آن را از کنترل‌های زمان کوتاه‌تر برون یابی کرده‌ام. من 80 ± 3180 را در 30 ثانیه در هر حرکت اندازه گرفتم و 70+ الو در هر سه برابر زمان بین 1 ثانیه تا 10 ثانیه و 10 ثانیه تا 30 ثانیه به دست آوردم.

از آنجایی که یک بازی کلاسیک حدودا شش دقیقه در هر حرکت زمان می‌دهد (از جمله فکر کردن به نوبت حریف)، باید انتظار یک Elo 3350 را داشته باشیم. اگر مقداری بازده کاهشی را در نظر بگیریم، یک تخمین مطمئن یک Elo 3300 است. به اندازه‌ای بالاتر از Elo 2800 کاسپاروف که باید انتظار داشته باشیم که Stockfish-1996 تقریبا 9/0 امتیاز داشته باشد. موتور (فقط کمی) ضعیف تر با کد منبع به Crafty 11.13 شروع می شود و با افزودن تمام درس هایی که در مورد نحوه نوشتن موتور شطرنج بهتر در سی سال گذشته آموخته ایم، به موقع ارائه می شود.

اولین موتوری که من (بخوانید: LLM من) روی آن کار کردم Crafty 11.13 بود که در سال 1996 منتشر شد. در این موتور، LLM باید بیشترین کار را برای ارائه ایده‌هایی که در 30 سال گذشته آموخته‌ایم انجام می‌داد. در زیر تجزیه و تحلیلی است از جایی که سود Elo از کجا حاصل می شود، در هنگام ارزیابی 1 ثانیه در هر حرکت یا 10 ثانیه در هر حرکت. [b] گاهی اوقات می‌بینید که پیشرفت‌های 1s در مقابل 10s مخالف هستند. بخشی از این به وضوح می تواند نویز باشد --- من فقط چند صد بازی را اجرا کردم که حاشیه خطای نسبتا زیادی به جا می گذارد --- اما سیگنال های بسیار زیادی نیز در اینجا وجود دارد.

از آنجایی که کامپیوتر 1996 بسیار کندتر است، در 1s/move عمق جستجوی بسیار کمی دارد و بنابراین سرعت ارزیابی بیشتر از خوب بودن آن مهم است. اما در اعماق جستجوی بزرگتر، وقتی اشتباهات تاکتیکی را متوقف کنید، ارزیابی موقعیت بسیار مهمتر می شود.

در موتور دوم، همانطور که در بالا ذکر شد، من برعکس را انجام دادم. من (دوباره می خوانم: LLM من) Stockfish را برای اجرا بر روی سخت افزار 1996 پورت کردم، و سپس پارامترها را به گونه ای تغییر دادم که برای عمق جستجوی کمتر مناسب باشد. بنابراین، دستاوردها در اینجا تا حدودی کم‌تر هستند، زیرا هیچ برد الگوریتم بزرگی وجود ندارد.

من فکر می‌کنم به احتمال زیاد این اتفاق می‌افتد، اما در واقع وضعیت کمی پیچیده‌تر از آن چیزی است که ممکن است انتظار داشته باشید. می بینید، من در طول این مقاله کمی زیرکی انجام داده ام. مشکل این است که امتیازات Elo نسبی است، و من Elo موتور خود را با موتورهای مختلف Stockfish که نقاط قوت شناخته شده در لیست های رتبه بندی شطرنج کامپیوتری (CCRL) دارند، مقایسه کرده ام.

اما از آنجایی که انسان‌ها زیاد با موتورها بازی نمی‌کنند، ممکن است تفاوت‌های کوچکی بین امتیازات نردبان FIDE Elo و نردبان CCRL وجود داشته باشد، به همان ترتیبی که Elo FIDE بازیکن مستقیما به Elo آنها در شطرنج آنلاین ترجمه نمی‌شود. خوشبختانه، چون من این موتورها را برای بازی با رتبه الو 3200-3300 تهیه کرده ام و کاسپاروف کمی کمتر از 2800 رتبه بندی شده است، باید بیش از حد کافی بافر برای جذب هر گونه اختلاف وجود داشته باشد.

اما اگر شما یک Super GM 2700+ را می شناسید که می خواهد یک موتور شطرنج 2026 را که با سخت افزار 1996 بازی می کند، امتحان کند و شکست دهد، خوشحال می شوم که این چالش را بپذیرم!

اولین باری که ما انسان ها کاری انجام می دهیم، به ندرت آن را به نحو احسن انجام می دهیم. وقتی مسیری را می‌بینیم که اگر فقط آن را بزرگ‌تر کنیم، به وضوح کار می‌کند، همین کار را انجام می‌دهیم. فقط بعدا، پس از اینکه زمان لازم را برای درک بهتر مشکل در دست داشتیم، متوجه می‌شویم که می‌توانستیم با زیرک بودن به همان شاهکار بسیار مؤثرتری دست پیدا کنیم.

من این کار را بیشتر برای سرگرمی انجام دادم، زیرا اینکه آیا می‌توانستم کاسپاروف را با سخت‌افزار کالا شکست دهم یا نه، پاسخ دادن به یک سوال سرگرم‌کننده به نظر می‌رسید، اما همچنین امیدوار بودم که بینش کوچکی در مورد میزان پیشرفت الگوریتمی در "AI" ارائه دهد. موتورهای شطرنج در سال 1997 قبلا کاملا پیشرفته بودند. به هر حال، آلن تورینگ تقریبا پنجاه سال قبل به نوشتن اولین برنامه شطرنج کمک کرد. بنابراین فکر می‌کنم در آن زمان به نظر قابل قبول می‌رسید که شاید ایده‌های زیادی برای یافتن باقی نمانده باشد. و با نگاهی به گذشته، به راحتی می توان متوجه شد که این اشتباه است.

که منجر به این سوال می شود: ما چقدر با "هوش مصنوعی" مدرن --- یعنی مدل های زبانی روی میز می گذاریم. آیا پیشرفت هایی که در چند سال آینده از نرم افزار به دست می آوریم از پیشرفت در مقیاس سخت افزاری پیشی خواهد گرفت؟ واضح است که این آزمایش اسباب بازی به طور قطعی به این سوال پاسخ نمی دهد، اما به آینده بالقوه اشاره می کند. (همچنین احتمالا نوعی متا درس در مورد استفاده از LLMs---"AI"--- برای تسریع توانایی ما در پاسخ به سؤالات تحقیقاتی عجیب و غریب مانند این وجود دارد.)

(همچنین، اگر کسی ایده‌ای برای پروژه‌هایی دارد که می‌توانم با پنتیوم پرو در چند هفته انجام دهم، پس از آن که دیگر به آن برای میزبانی این موتور شطرنج نیازی ندارم ... به من اطلاع دهد!)

خواندن متن کامل در هکرنیوزبه زبان اصلی، در سایت ناشر باز می‌شود
متن اصلی (انگلیسی)

Could a modern chess engine on a Pentium have defeated Kasparov in 1996?

Article URL: https://nicholas.carlini.com/writing/2026/algorithmic-improvements-chess.html Comments URL: https://news.ycombinator.com/item?id=50349276 Points: 241 # Comments: 119

همه‌ی اخبار فناوری