題:
Fishtesting為什麼要針對自己而不是其他引擎來測試Stockfish?
Allure
2019-06-07 05:21:00 UTC
view on stackexchange narkive permalink

據我了解的所謂的 Fishtesting,人們編寫補丁,然後針對當前版本的Stockfish嘗試補丁。如果新版本的性能更好,則將其升級為主版本。

問題:為什麼要針對當前版本的Stockfish進行測試?它在過去是可行的,當前的Stockfish比兩年前的Stockfish強得多。但是,我們也可以看到這種方法的局限性。儘管Stockfish現在有能力完全摧毀其他傳統發動機,但它最近還對Leela輸掉了TCEC S15超級決賽。因此,為什麼不針對Leela測試每個新版本?

最明顯的答案是,Fishtesting的資源來自CPU,而Leela在CPU上很糟糕。但這不應該是致命的:人們可以給里拉更多的時間,例如如果Stockfish每場比賽以10s的速度運行,則讓Leela每場遊戲100s或任何其他必要的時間賠率,以使Leela比率達到超決賽的比率。當然,這會減慢Fishtesting的速度,但是如果它導致引擎可以在比賽中擊敗Leela,那仍然值得。

六 答案:
Inertial Ignorance
2019-06-07 09:27:43 UTC
view on stackexchange narkive permalink

魚測試的重點是測試更新版本的Stockfish是否變得更強。 Strong的定義是擊敗了以前的版本。

我不確定如何針對像Leela這樣的引擎測試每個新版本會有所幫助。如果您的想法比以前版本的Stockfish表現更好,那麼您的想法可能是只接受新版本的Stockfish。因此,現在保證每種版本的Stockfish都能更好地對抗Leela,但不能保證整體上是更好的棋手。原因是Stockfish可以依靠Leela的遊戲中的某些特徵來贏得更多遊戲。假設幾年前您的評分為1500,而現在為1800。如果您在一場比賽中玩了過去的自我,很明顯您會贏。但是為了爭辯,您的1500自我對陣卡斯帕羅夫的表現可能會好於當前的1800自我。也許這1500個自我並不那麼保守,卻承擔了更多的風險。這樣一來,在一場罕見的比賽中就擊敗了卡斯帕羅夫,而您目前的1800次自我每次都會輸掉(但平均而言,比賽會稍微接近一點)。

最後,“稍微靠近”將很難量化。自我演奏是最好的。
看起來像語義,但是什麼使您說“更強”被定義為優於先前版本?同樣可以說“更強”的人是擊敗卡斯帕羅夫,贏得比賽並獲得所有榮耀的人,而不是贏得正面對決的人。
@Allure我認為,面對面僅僅是“實力”的最客觀衡量。如果A擊敗B,A的表現要好於B,那麼,人為A的優勢要強於B。但是,如果A對C的劣勢比B對C的劣勢小,那是否必然意味著A> B?如果B在D,E,F,G ...方面的表現優於A,該怎麼辦?
但是你有一點。世錦賽的候選人系統是一項大型比賽,但以前球員之間存在個人比賽。對於大型比賽,A可能輸給B,但仍會贏得比賽並被宣佈為“最強”。但是,這是因為A擊敗了多個不同的玩家,而不僅僅是一個玩家C。因此,在較新版本播放各種不同引擎的情況下,也許可以使用引擎測試,但是相對於較早版本進行測試則更快,更簡單。
Fabian Fichter
2019-06-14 14:26:26 UTC
view on stackexchange narkive permalink

首先,從其他答案中看不出來的是,您當然可以原則上使用任何對手(具有一致的演奏強度)來比較程序的兩個版本的演奏強度。

但是,無論您開發的是Stockfish還是任何其他引擎,都有很多很好的理由直接相互比較版本:

  • 比較國際象棋遊戲實體的遊戲強度不能滿足傳遞性,即,如果A> B和B> C,則仍然可以使用<C。因此,只要無法與大量對手進行比較(以求平均可及性問題),則直接比較應該是最可靠的衡量標準,儘管您當然可以針對三個版本的a
  • 通過直接比較,可以減少測試中所需的遊戲數量,因為您只需要運行一次比賽而不是兩次比賽,並且同時獲得較小的誤差線。玩法強度差異。
  • 針對(幾乎)相等強度的對手進行測試可以最大程度地提高單個遊戲結果的統計敏感性,因此您可以再次節省硬件成本。如果玩法上的差異非常大,則單個遊戲的信息/熵就非常低。

此外,對於fishtest / Stockfish,選擇A的原因有幾個具體原因直接比較是最原則的選擇:

  • 在最初開發fishtest時,Leela不可用。
  • 使用/不使用諸如Komodo和Houdini之類的商用引擎
  • 使用其他程序可能會帶來安全風險以及在分佈式計算環境中要避免的其他軟件依賴性或硬件要求。
  • 在Leela之前,基本上沒有足夠強大的開源引擎可以在與Stockfish匹配時獲得統計上顯著的結果。
您確定對第3引擎進行測試會增加所需的遊戲數量嗎?似乎只是第一次這樣做。例如,假設第三個引擎是E,嘗試使用的Stockfish版本是A,B和C。我們與E進行A和B比賽20k次,得到一個分數。誰做得更好,就保留下來,而弱者則拒絕。說A被保留。在測試版本C時,我們已經獲得了A-E結果,因此我們只需要獲取C-E結果,並且所有以後的版本都適用。
即使您始終使用相同版本的參考引擎進行測試(這很容易導致過度擬合),但由於將兩次運行的結果相結合(例如EloC-EloB ),您還需要[合併統計不確定性](https://en.wikipedia.org/wiki/Propagation_of_uncertainty),通常會將不確定性增加sqrt(2)倍。為了彌補這一點,您需要運行更多的遊戲。
Arlen
2019-06-12 01:23:26 UTC
view on stackexchange narkive permalink

我會基本上同意@inertialignorance,但我想稍微闡明一下位置。

當人類扮演人類時,考慮到極端的可變性,一場比賽的結果相對沒有意義。人的玩耍。 (我將使用Kasparov v深藍作為這種可變性的一個例子-好的一天,我可能會在他對DB犯錯的遊戲中擊敗Kasparov。)

與人類相比,機器的技能水平要高得多。因此,一個遊戲意味著更多,而一系列遊戲則意味著很多。因此,針對一台機器測試擬議的Stockfish改進是有意義的。但是為什麼選擇Stockfish?

僅僅是因為無法以任何有意義的方式量化“對Leela做得更好”。它可以做得更好,但仍然會失敗。但是在那種情況下,更好的標準是什麼?您如何證明它表現更好?我看不到可行的標準。

通過簡單地玩一組遊戲併計算結果來證明Stockfish prime是對Stockfish Original的改進要簡單得多。

Edward Deming堅持認為選擇正確的指標至關重要,因為您只知道自己會根據自己的測量而有所提高。因此,請問一個問題:該過程的目的是什麼?您為什麼要為Stockfish提出補丁?

打敗Leela的補丁的最終目的真的是嗎?還是讓Stockfish下更好的棋?我會說是後者。如果只有Stockfish能夠繼續改善,那麼擊敗Leela就能自己解決。

是的,Stockfish的增量改進之路可能會達到平穩狀態。即便如此,離開該平台的唯一可驗證途徑將在於對其進行更改以使其變得更好。如果一種方法“碰壁”,那麼不斷尋求改進將決定另一條道路。如果建議的替代路徑無法勝過當前路徑,為什麼選擇它?

*您如何證明它表現更好?*應該非常簡單,不是嗎?只需將先前版本與Leela播放20k次,同時將新版本也播放20k次,然後比較結果即可。
-1
@InertialIgnorance同樣,如果Stockfish Prime在對抗Leela方面表現更好,但未能擊敗舊的Stockfish,那您是否不保留Stockfish Prime?這取決於一個人如何定義“更強”,而我還不清楚“更強”是否贏得了正面對決。
@Allure我承認那裡仍然有衝突的原因,但在那種情況下,更傾向於選擇Stockfish Prime。當您想比較哪兩項比較好(他們是政客,運動員等)時,通常會使他們以某種方式相互競爭。沒有看到誰比任意選擇的同行做得更好。
-1
也不認為說里拉是“任意選擇的同伴”是公平的-畢竟,這是當前的TCEC冠軍,如果里拉被退位,那麼(應該?)很容易轉移到下一個冠軍作為陪練夥伴。
@Allure但是,魚測試的目的不是要確保較新版本的Stockfish是世界上最強大的引擎。它只是試圖驗證它最有可能比以前版本的Stockfish強。
鱈魚素可能會打出更好的象棋,而對里拉的得分仍然相同。例如,它可能顯示出更好的位置理解,但不足以改變結果。但是由於這種改進,它將在比賽中擊敗舊的鱈魚。同樣,有可能在對Leela不會發生的情況下顯示出改進。國際象棋的位置不是隨機分佈的;他們是出於刻意的選擇。
Allure
2019-06-14 07:06:54 UTC
view on stackexchange narkive permalink

似乎是出於硬件原因而不進行此更改。

使用Leela作為對戰對手的主要問題是Leela在GPU上運行得最好。可以在CPU上運行Leela,但是Leela的性能受到很大影響。 OP建議給Leela時間賠率進行補償,但是時間賠率不能很好地發揮作用:Leela的表現非常弱,以至於所需的時間賠率過長。

要了解Leela在CPU上的性能有多弱,我們可以看看TCEC第12季中的Leela,當時它沒有GPU支持並且在CPU上運行。 這是里拉(Leela)玩的示例遊戲。如果看一下它所達到的速度,則約為1-3kn / s,即每秒1000-3000個位置。相比之下,在Leela在功能強大的GPU上運行的最新第15季中,它將達到約50kn / s(示例遊戲)。因此,為了能夠平等地對Stockfish和Leela進行測試,需要給Leela 25倍的時間賠率。如果Stockfish有1分鐘,那麼Leela需要25分鐘。

截至撰寫本文時,Fishtesting在兩種時間控制下進行測試:10s + 0.1s /移動,以及60s + 0.6s /移動(通過第一個短期控制測試的補丁會提升為更長的時間)一個並再次測試。通過第二個的補丁將成為“新”版本)。在25倍的時間賠率下,Leela在第一次控制中需要250s + 2.5s / move,在第二次控制中需要1500s + 15s / move。放緩是巨大的;我們將有效地讓Leela在快速的時間控製而不是子彈打法。單位時間內可以完成的遊戲數量也將減少約25倍。 Fishtesting定期需要數以萬計的遊戲來測試每個補丁。花25倍的時間才能完成每個測試的聲音聽起來令人難以接受。

為火上加油,據我所知,Leela在第12賽季的網絡規模較小-最新的網絡表現可能會更慢在CPU上。

有一天,如果Fishtesting獲得了可用於Leela進行測試的GPU資源,它可能會切換;

編輯:Lc0-CPU當前在TCEC上播放。大約5knps。但是,根據聊天中的一些人,Lc0-CPU被修改為可以在CPU上播放;未經修改,它的速度大約是GPU的80倍。因此,將Lc0-CPU用作測試對手是一個真正的硬件成本。

我懷疑這會發生。幾乎所有引擎作者都主要針對自己而不是其他(可能更強大)的引擎測試引擎。此外,還可以通過對其他引擎進行測試來進行交叉檢查,這可能是有價值的,但這不應成為測試的主要部分,因為它效率較低。
@FabianFichter為什麼針對其他引擎進行測試效率較低?
如我在我的答案(https://chess.stackexchange.com/a/24714/15415)中所述,效率較低,因為您需要更多的遊戲(例如,更多的硬件或時間)才能達到Elo測量的相同統計精度。
Allure
2020-06-04 08:26:10 UTC
view on stackexchange narkive permalink

(我要添加另一個答案,因為它實際上不是我的)

一位名叫МихаилЧалый的Stockfish開發人員在Fishcooking Google網上論壇(基本上是一個論壇)上寫了 this

1),當我們在這裡提出相同的想法時:

1)大多數機器上沒有適合lc0的硬件(80%以上的機器是noob機器* w / o GPU);

2)對外部引擎的測試將使誤差線加倍,因此將需要測試的遊戲數量增加了4倍;

3)您將需要編寫新的邏輯,因為您a)不能使用SPRT,b)您需要將leela / sf速度標準化為某個值(就像我們在正常測試中對TC所做的那樣),因此您將需要非對稱時間控制;

4)有0個證據表明,與leela相比,可在自娛自樂中使用的補丁不起作用。實際上,有相反的證明,例如fastgm 16核心列表,其中sf 11比sf10領先50 elo,這正是我們衡量彼此匹配的方式。

所以tldr-這很難或幾乎不可能

*據我所知,“ noob機器”是社區中另一個名為“ noob”的人擁有的機器。有很多可用的CPU硬件,但沒有GPU硬件。

SmallChess
2019-06-07 18:48:00 UTC
view on stackexchange narkive permalink

慣性是正確的。我還應該補充一點,在LC0之前沒有強大的開源引擎。科莫多和胡迪尼都有許可限制。

“沒有強大的開放源代碼引擎”我想你是說_________?
@Brandon_J是的,這就是我的意思


該問答將自動從英語翻譯而來。原始內容可在stackexchange上找到,我們感謝它分發的cc by-sa 4.0許可。
Loading...