Soru:
Bir satranç motoru topluluğu en iyisini yener mi?
Dennis Jaheruddin
2020-06-20 15:37:29 UTC
view on stackexchange narkive permalink

Tahmin ve sınıflandırma gibi birçok alanda, toplu yöntemler bireysel yöntemlerden daha iyi performans gösterme eğilimindedir. Bu, en iyi birkaç satranç motorunu seçip daha güçlü bir tane yapmak için onlarla birlikte çalışmanın mantıklı olup olmayacağını merak etmeme neden oldu.

Toplam donanım miktarının insanların kullandıkları şeye sabitlendiğini varsayalım. tipik kıyaslamalar için ve zamanın da sabit olduğunu. Buna ek olarak, motorları birlikte çalışacak şekilde değiştirmeyeceğiz, sadece onların etrafına pratikte farkında olmadıkları bir sarmalayıcı yapacağız.

Bu nedenle benim hassas sorum:

Ne kadar zor adil kaynaklara sahip bir motorlar topluluğu tarafından dünyadaki 1 numaralı motoru yenmek olur mu?

Yorumlar uzun tartışmalar için değildir; bu konuşma [sohbete taşındı] (https://chat.stackexchange.com/rooms/109865/discussion-on-question-by-dennis-jaheruddin-would-an-ensemble-of-chess-engines-b) .
Yedi yanıtlar:
Brian Towers
2020-06-20 16:24:07 UTC
view on stackexchange narkive permalink

Cevap "Hayır".

Tanımlanmış sabit bir kaynak kümeniz (CPU'lar, bellek, önbellek vb.) varsa ve bir motorun bunları tam olarak kullanmasına izin verirseniz, o motor aynı kaynak kümesini alıp bunları birkaç farklı motor arasında bir şekilde bölmenizden daha derinlemesine analiz yapabilecek. Kaçınılmaz olarak, daha fazla derinliğe analiz yapan tek motor, çok daha az derinliğe analiz yapan birkaç motordan daha iyi performans gösterecektir.

Yorumlar uzun tartışmalar için değildir; bu konuşma [sohbete taşındı] (https://chat.stackexchange.com/rooms/109658/discussion-on-answer-by-brian-towers-would-an-ensemble-of-chess-engines-beat- the).
Allure
2020-06-20 16:51:23 UTC
view on stackexchange narkive permalink

Hayır, bir satranç motoru grubu en iyisini yenemez. Nedeni sadece donanımdan kaynaklanıyor.

İşleri basitleştirmek için şu anda en güçlü CPU motorlarını ele alalım. Bunlar Stockfish, Komodo, Leela-CPU, Ethereal, Fire ve rofChade'dir. Stockfish en güçlüsü. Stockfish'i çalıştıran dört çekirdekli bir bilgisayarınız var. Aynı donanım üzerinde bir maçta diğer tüm motorları yenmesi bekleniyor.

Aynı dört çekirdekli bilgisayarda aynı anda Komodo, Leela-CPU vb. Çalıştırıyorsanız, o zaman sadece koşmuyorsunuz kalitesiz yazılım, kalitesiz donanım üzerinde kalitesiz yazılım çalıştırıyorsunuz (çünkü bu motorlar aynı 4 çekirdek için birbirleriyle rekabet edecekler). Bu nedenle topluluk kaybeder.

Her motorun kendine özgü güçlü ve zayıf yönleri olduğu doğrudur, ancak bundan tam olarak yararlanmak için her motorun temel varyasyonlarına bakacak ve aralarında seçim yapacak bir insana ihtiyacınız var. Bu nedenle, tüm motorlara erişimi olan bir insanın bir yazışmalı satranç maçında Stockfish'ten daha iyi performans göstermesi beklenir. Ancak bunu yapmak insan müdahalesini gerektirir; yalnızca motorlarla çalışmaz. Muhtemelen mevcut konumda hangi motorun daha güçlü olduğunu ayırt eden bir kod yazabilirdiniz ve bu denendi, ancak iki orijinal motoru asla kesin bir şekilde yenemedi.

Yalnızca en iyi motorun çalışmasına izin vermeniz daha iyi.

Dennis Jaheruddin
2020-06-20 15:37:29 UTC
view on stackexchange narkive permalink

Kendim test edemeyecek olsam da, şu sonuca güveniyorum:

Bir motor grubu, en güçlü bağımsız motoru yenebilir

İşte temel varsayımlarım:

  • Kıyaslamalar için kullanılan tipik zaman kontrolleri göz önüne alındığında, motorlardan önce ince bir ön değerlendiriciye sahip olmanın 'kaybedilen' zamanı ihmal edilebilir. Bu nedenle, topluluktaki motorların etkin bir şekilde en iyi motorla aynı kaynak toplamına sahip olacağını söyleyebiliriz.
  • Grubun aynı anda iki motor çalıştırmak isteyeceğini varsayalım, her birine kaynakların yarısını verin.
  • Grubun arka arkaya motorları çalıştırmak isteyeceğini, her motora tüm kaynakları verebileceğini varsayalım. Bir oyun sırasında yalnızca birkaç kez yapılırsa, hızlanma süresinin yeterince küçük olduğu varsayılır (ancak bu, her harekette yapılacaksa engelleyici olur).

Ayrıca topluluğun en güçlü motorun kendisinin bir kopyasını içerebilecektir. Yazma sırasında, en güçlü motoru takip eden motorlar çok geride değildir, bu nedenle bu kritik bir nokta değildir, ancak aksi takdirde, önemli ölçüde daha zor olan, 'en güçlü üyesine göre bir topluluk ne kadar derecelendirme kazanacağı' sorusu haline gelirdi.

Senaryo 1: Motorlar oyunun farklı aşamalarında daha güçlüdür

Burada kolay bir "kazanç", bir motorun daha güçlü (etkileşimli) bir açılış kitabına sahip olması ve diğerinin bir engame tablebase. Bununla birlikte, tüm motorların bu alandaki en iyi kaynakları eşit verimlilikle kullanabileceğini varsayarsak bile, yine de bazı motorların "açılışta güçlü" veya "oyunsonlarında iyi" olduğu söyleniyor.

İzin verin burada ek bir varsayım yapın:

  • Belirli bir aşamada iyi olan motorların bunu gerçekleştirmek için diğer aşamalara güçlü bir bağımlılığı olmadığını varsayıyorum.

Dolayısıyla, oyunsonlarında iyi olacak motor, yalnızca kendisine ulaştığı oyunsonlarında değil, aynı zamanda başka bir motorun ulaştığı son oyunlarda da iyi olacaktır.

En basit çözüm: Bir aşamayı belirleyin oyun ve bunun en güçlü motor tarafından oynanmasına izin verin

Açılış ve oyunsonu arasında ayrım yaparsak, bunun için bir sarmalayıcı tanımlamak önemsiz olurdu ve yaklaşık 1 anahtar oyun başına. Elbette bu, 'piyon oyunsonlarında harika' veya 'konumsal oyunlarda çok iyi' olan bir motorunuz varsa uzatılabilir, ancak bu noktada önemli kaynaklar kullanmadan hangi motoru seçmeniz gerektiğini belirlemek zaten zorlaşır.

Senaryo 2: Motorlar kritik hamleler için kritik devamları bulabilir

Bu senaryo, başlangıçta merak ettiğim şeydi. Bununla birlikte, varsayımlarıma dayanarak, birkaç motorun görüşünü almanın en basit yolu, paralel olarak çalışmasına izin vermektir. Kaynakların yarısı verilen iki motordan oluşan bir topluluk kullandığımızı varsayalım, o zaman her ikisi de biraz daha zayıf olacak, bazı referanslara dayanarak başka bir varsayımda bulunalım.

  • Tipik bir ayarlamada güç, mevcut kaynaklara göre logaritmik ölçeklendirir ve bunları yarıya indirmek motor gücünü 50-100 elo azaltır

Şimdi bu önemli, dürüst olmak gerekirse çok fazla. Diyelim ki iki motoru birbirine 70 elo farkla karşı koyarsak, beklenen değer yaklaşık 60-40 olur. Bunu telafi etmek için çok şey var, ancak bununla ilgili herhangi bir veri bulamasam da yine de mümkün olabilir. Temel olarak, bu sadece tüm bir oyunu sallamak için 1 parlak hareket veya 1 önlenmiş hata ile sonuçlanmalıdır. Her harekette hangi motoru dinleyeceğine karar vermek önemsiz olmayacaktır, ancak motorlar tipik olarak bazı temel istatistikleri (olası tüm hareketleri değerlendirmeleri ve her birini ne kadar derin kontrol ettikleri gibi) verebildiği için, muhtemelen çok da zor olmayacaktır. makul ve yine de hafif bir karar verin.

Olası alternatif çözüm: Motorları paralel çalıştırın ve her seferinde en iyi hareketi seçin.

Yine bu uzatılabilir, basit bir yol 3 motora sahip olmak ve bunlardan ikisinin hareketini seçmek olabilir. verin, ancak kaynakları daha da ince bölmenin buna değip değmeyeceğinden emin değilim. Bir başka ilginç fikir de, topluluğun en güçlü üyesine en fazla kaynağı vermek ve bu konuda en iyi olan üye tarafından akıl sağlığını kontrol ettirmek olabilir. Bu durumda, ana motor, azalan kaynaklar nedeniyle yalnızca 10 elo puanı kaybedebilir, bu nedenle 'telafi etmek' çok daha kolay olabilir. Ancak yine de doğru hareketi seçmek zor olacaktır.

Son bir düşünce, motorların CPU ve GPU kullanması olabilir, o zaman belki de bireysel motorların gücü bu kaynakların her birinde çok fazla küçülmeyebilir. Bu nedenle, bir motorun 80 cpu + 20 gpu aldığı ve motor2'nin 20 cpu + 80 gpu aldığı bir karışım, bağımsız motorları neredeyse tam kaynaklara sahip oldukları zamanki kadar güçlü bırakabilir.

Sonuç

Özellikle motorlar olduğunda her seferinde bir tane çalıştırılabilir, daha iyi performans elde edebilmelidir, ancak birden çok işlemi paralel olarak çalıştırarak daha iyi sonuçlar elde etmenin yolları da olmalıdır. Ancak bu önemsiz değil.

Topluluk konseptini gerçekten bir sonraki seviyeye taşımak, motorlardaki küçük değişikliklerle mümkün olabilir, örneğin yalnızca bir puanın beklenen değerini sağlamakla kalmaz, aynı zamanda değerlendirmeleri hakkında hissediyorlar.

Yorumlar uzun tartışmalar için değildir; bu konuşma [sohbete taşındı] (https://chat.stackexchange.com/rooms/109659/discussion-on-answer-by-dennis-jaheruddin-would-an-ensemble-of-chess-engines-bea) .
NeuralAdvocate
2020-06-21 22:33:19 UTC
view on stackexchange narkive permalink

Cevap, yapmaya çalışmak istediğinizden daha karmaşık. Herhangi bir kesin "evet" veya "hayır" yanıtı, maçın koşulları, kullanılan donanım ve katılan oyuncuların güçlerindeki farklılıklar hakkındaki soruları akla getirir. Sorunuzu doğrudan yanıtlamak yerine, burada "en güçlü" motoru yenebilecek belirli bir tür topluluk motorunun yaratılmasına rehberlik eden gerekli düşünce süreçlerinden geçmeyi planlıyorum. Bunun alternatifi aslında sorunuzu yanıtlamaktır, benim tecrübelerime göre cevabı kimse bilmiyor .

Ayrıca, açık kaynak Leela Chess Zero'ya aşina değilseniz ( Lc0) Sinir Ağı (NN) motoru, bu ilk araştırma konunuz olmalı. İyi pazarlanmış, halka açık olmayan, kötü şöhretli, kapalı kaynaktan ilham aldı ve anlamak için keşfetmek isteyebileceğiniz bazı makaleler içeren Neural Network teknikleri AlphaZero (A0) için buz kırıcı oldu.

Sinir ağları, daha önce yalnızca son 10-15 yıldır kabaca keşfedilen yeni sınırlar getirdi. Sadece son 3 yılda, insan programlı satranca özgü değerlendirmeleri ve açık kaynak motoru Stockfish gibi sezgisel tabanlı alfa-beta aramayı içeren eski yaklaşımları "yenebilmek" için yeterli hale geldiler. Sadece sinir ağı motorları için donanım gereksinimlerinin daha çok Grafik Kartı odaklı olduğu ve Stockfish gibi bir motorun gereksinimlerinin CPU odaklı olduğu düşünüldüğünde, donanım topluluğunuzu oluşturmada çok büyük bir faktördür.

Nihayet sahip olduğunuzda hangi donanımı kullanmaya karar verdiğinize karar verdikten sonra, hangi motorların en güçlü olduğunu test ederek düşünebilirsiniz. Bundan sonra, onu yenmek için hangi motorları kullanmak istediğinizi bir araya getirmek için bir yaklaşım kodlamanız gerekir. Günümüz motorunun gücünün büyük ölçüde aramalarına dayandığını, bu nedenle derin aramadan kaynakların herhangi bir şekilde saptırılması topluluğunuzun arama derinliğini sınırlayacaktır.

Birkaç milyon Leela oyunu ve Stockfish oyunu üzerinde eğitilmiş olan "Antifish" adlı bir Leela (ancak teknik olarak Leela Chess "Zero" değil, "Sıfır insan bilgisi" olmayan oyunlar kullandığından) ağ hayata geçirildi. Varsayımsal olarak, Stockfish'in zayıflık gösterdiği oyunların çoğunu gördüğü için ağ, Stockfish'i nasıl yeneceğini "bilir". Antifish, Stockfish'e karşı "daha güçlü" olabilir, ancak aynı güç açısından Komodo ve Ethereal gibi benzer türdeki motorlarla karşılaştırılamaz. Ayrıca, eğitim seti daha düşük zaman kontrollerinde Stockfish hatalarıyla son derece kirlendiğinden, ağ hipotetik olarak Stockfish'e göre daha kısa sürede daha iyi performans gösteriyor. Antifish, Stockfish'e karşı bir zamanlar iyi performans göstermiş olabilir, ancak güncelliğini yitirmiş ve potansiyel olarak daha zayıftır. Antifish, özellikle Stockfish'teki zayıflığı daha düşük zaman kontrollerinde kullanmak üzere eğitilmiş, "rakip" olarak adlandırdığımız bir ağdır ve Stockfish'in belirli sürümlerinden daha güçlü olsa da, satrançta "nesnel olarak daha iyi" değildir (tartışmalı terim) general.

Bunu gündeme getiriyorum çünkü Leela'nın Antifish NN'sini sadece başka bir Leela ağının neyi aramaya başlaması gerektiğini tahmin etmeye yardımcı olmak için aramanın kökeninde kullanabiliriz. Bildiğim kadarıyla, bu "ağ topluluğu" henüz yapılmadı ve ortaya çıkan motor, Antifish ve kullanabileceğimiz diğer ağ daha zayıf olsa bile Stockfish'i daha iyi yenebilir.

Ayrıca, bir "yardımcı motor" un Lc0'a hareket önermesine izin veren bir Lc0 çatalı vardır. " Leelafish" teknik olarak hem Stockfish hem de Lc0'ın bir topluluğudur ve aslında parçalarından daha güçlü olabilir. Şu anda devam eden bir çalışmadır ve iki motor arasındaki iletişim yalnızca tek yönlüdür.

Özünde, bir araya getirme motorları daha güçlü bir şeye yol açabilir ya da veremezdi. Ancak, herhangi bir motor önerileri kümelenmesinin veya motorlar arasındaki iki yönlü iletişimin hesaplama kaynaklarına mal olduğunu ve bu maliyetin çok yüksek olabileceğini unutmamak önemlidir. Her iyi fikri tek bir motorda birleştirmek, teknik olarak artık onu bir "motor topluluğu" haline getirmek daha iyi olabilir.

Torsten Becker
2020-06-20 21:04:07 UTC
view on stackexchange narkive permalink

Hayır, bir noktada en iyi hamle olarak yasal bir hamle seçilir. Bu kararı kim verirse, en iyi motordan daha iyi olamaz. Aksi takdirde yeni bir en iyi motor ortaya çıkar.

Bu soru daha çok [ilginç sayı paradoksunun] (https://en.wikipedia.org/wiki/Interesting_number_paradox) satranç aromalı bir versiyonuna benziyor.
Lawnmower Man
2020-06-21 10:33:39 UTC
view on stackexchange narkive permalink

Evet

Motorlar, devletsiz deterministik değerlendiriciler yerine motorları öğreniyor ise, o zaman bir topluluğun daha güçlü olacağının aşikar olduğunu düşünüyorum. bir insan satranç takımının bir maçta ortalama olarak takımdaki tüm bireyleri yeneceğini düşünün. İşin zor kısmı, birden fazla motor yanıt verdiğinde hangi hareketin kullanılacağına karar vermektir. Bunun işe yaraması için, motorların bir hamle, bir puan ve bir güven değeri sunması gerektiğini düşünüyorum. Daha sonra en yüksek puanı * güven ürününe sahip olan hareketi seçersiniz.

Gerekçe

Topluluk yöntemleri makine öğrenimi çevrelerinde yaygındır çünkü mümkün olan her şey için en uygun algoritmayı üretmek neredeyse imkansızdır. senaryo. Olası senaryoları eğitmek ve alt algoritmaların (örneğin bir karar ağaçları ormanı gibi) iyi genelleme özelliklerine sahip senaryoların alt kümelerinde uzmanlaşmasına izin vermek çok daha iyidir.

Açıkçası, AlphaZero şu ana kadarki diğer tüm motorlardan daha iyi, ancak bunun bir tür her şeyi değiştirebileceğini unutmayın. Ya birisi, AlphaZero'nun, en güçlü genel oyuncu olma pahasına, belirli stratejilere odaklanan "uzman" varyantlarını eğitmeye çalıştıysa? AlphaZero'nun satranç alanının çoğunu keşfetmediğini ve muhtemelen keşfedemeyeceğini unutmayın, çünkü bu mümkün değildir. Ve oyun tarzına, nihayetinde daha önce karşılaştığı oyunların şansı rehberlik ediyor. AlphaZero'nun nadiren oynadığı, ancak birçok kez oynadığı bir oyun durumunu zorlayabilseydi, daha dar odaklı bir algoritmanın onu yenmesi mümkündür. Şimdi, bunu çok sayıda "uzman" için tekrarlayın ve ardından çeşitli pano durumlarına göre etkinleştirebilecek bir uzman ekibiniz olur. Bireysel olarak, hepsi çok sayıda oyunda AlphaZero'dan daha kötü olurdu, ancak toplu olarak, onu yenebilirlerdi çünkü dar bir oyun setinde, sürekli olarak onu yenebilirler (kendileri sadece AlphaZero'nun örnekleri olsalar bile farklı eğitim rejimi).

Bu mimaride, her uzman mevcut yönetim kurulu durumunu ne kadar "beğendiğini" bilir ve bunu önerilen harekete "güvenini" belirlemek için kullanır. Bu, mevcut tahta durumunda en fazla deneyime sahip uzmanın oyunu genel olarak kontrol etmesine neden olur.

Hesaplama karmaşıklığı açısından topluluk, solo sistemden daha fazla bilgi depoladığı için daha akıllı olurdu, bu yüzden oyun alanının daha geniş bir alanını optimize etmek için daha fazla ağırlığa sahiptir. Bu kesinlikle hiçbir şekilde katı bir argüman değildir, ancak belki de faydalıdır.

Yorumlar uzun tartışmalar için değildir; bu konuşma [sohbete taşındı] (https://chat.stackexchange.com/rooms/109660/discussion-on-answer-by-lawnmower-man-would-an-ensemble-of-chess-engines-beat- th).
Alex Williams
2020-06-23 12:16:18 UTC
view on stackexchange narkive permalink

En iyi satranç motorunun paralelleştirilebilirliğine bağlıdır. Motor, dağıtılmış birçok bilgisayarda verimli bir şekilde çalışmak ve sonuçları koordine etmek için uygulanmadıysa, alternatif bir motor teorik olarak bundan yararlanabilir.



Bu Soru-Cevap, otomatik olarak İngilizce dilinden çevrilmiştir.Orijinal içerik, dağıtıldığı cc by-sa 4.0 lisansı için teşekkür ettiğimiz stackexchange'ta mevcuttur.
Loading...