Fishtestingが他のエンジンではなく、それ自体に対してStockfishをテストするのはなぜですか?


11

いわゆるFishtestingを理解しているので、人々はパッチを書いてから、現在のバージョンのStockfishに対してパッチを試します。新しいバージョンのパフォーマンスが向上すると、メインバージョンに昇格されます。それ以外の場合は拒否されます。

質問:なぜ現在のバージョンのStockfishに対してテストするのですか?それは過去に働いていて、現在のストックフィッシュは2年前のストックフィッシュよりもずっと強いです。ただし、このアプローチには制限があることもわかります。ストックフィッシュは現在、他の従来のエンジンを完全に破壊することができますが、最近ではリーラに対するTCEC S15スーパーファイナルも失いました。したがって、新しいバージョンをそれぞれリーラに対してテストしてみませんか?

明らかな答えは、FishtestingのリソースはCPUからのものであり、LeelaはCPUにひどいことです。しかし、それは致命的ではありません。たとえば、ゲームで10秒でストックフィッシュを実行したり、ゲームごとに100リーリーを与えたり、スーパーファイナルでの比率とリーラの比率を得るのに必要な時間オッズがあれば、リーラにより多くの時間を与えることができます。これは確かにフィッシュテストを遅くしますが、それがマッチでリーラを倒すことができるエンジンにつながる場合、それはそれでも価値があるかもしれません。

回答:


4

まず第一に、他の回答から明らかにならないのは、もちろん原則として任意の対戦相手(一貫したプレーの強さ)を使用して、プログラムの2つのバージョンのプレーの強さを比較できることです。

ただし、Stockfishを開発しているのか、他のエンジンを開発しているのかに関係なく、バージョンを相互に直接テストするのにはいくつかの理由があります。

  • チェスのプレイエンティティのプレイ強度の比較は、通常、推移性を満たしません。つまり、A> BおよびB> Cの場合、A <Cはまだ可能です。したがって、(推移性の問題を平均化するために)多数の対戦相手との比較が実行可能でない限り、直接比較が最も信頼できる測定になりますが、もちろん、3つのバージョンの単一のプログラム。
  • 直接比較することで、テストで必要なゲームの数を減らすことができます。これは、2つのマッチではなく1つのマッチを実行するだけで済み、同時に、プレイの強さの差に対するエラーバーが小さくなるためです。
  • (ほぼ)等しい強さの対戦相手に対してテストすると、単一のゲーム結果の統計的感度が最大になるため、ハードウェアコストを節約できます。プレーの強さの差が非常に大きい場合、単一のゲームの情報/エントロピーは非常に低くなります。

さらに、fishtest / Stockfishの場合、直接比較を選択することが最も原則的な選択であるという具体的な理由がいくつかあります。

  • fishtestが最初に開発されたとき、Leelaは利用できませんでした。
  • KomodoやHoudiniなどの商用エンジンを使用することは、ライセンスの問題のため、選択肢の1つでした。
  • 他のプログラムを使用すると、セキュリティリスクのほか、分散コンピューティング環境で回避したいソフトウェアの依存関係やハードウェア要件が追加される可能性があります。
  • リーラ以前は、ストックフィッシュとのマッチング時に統計的に有意な結果を得るために十分に強力なオープンソースエンジンは基本的にありませんでした。

3番目のエンジンに対してテストすると、必要なゲームの数が増えることは確かですか?初めてそうするだけのようです。たとえば、3番目のエンジンがEであり、試行されているStockfishのバージョンがA、B、Cであるとします。Eに対してAとBを2万回プレイしてスコアを取得します。どちらが良いかは保持され、弱い方は拒否されます。Aが保持されていると言います。バージョンCのテストに関しては、すでにAEの結果があるので、CEの結果を取得するだけで済み、同じことが将来のすべてのバージョンに適用されます。
アリュール

2
同じバージョンの参照エンジンに対して常にテストする場合でも(過剰適合が発生しやすくなります)、2つの実行(EloC-EloBなど)の結果を組み合わせることにより、結果のElo差の統計的不確実性はさらに大きくなります。 )統計的不確実性組み合わせる必要があります。これは通常、不確実性をsqrt(2)の係数で増加させます。それを補うためには、より多くのゲームを実行する必要があります。
Fabian Fichter

7

fishtestingのポイントは、新しいバージョンのStockfishがより強くなったかどうかをテストすることです。より強いの定義は、それが以前のバージョンを破っているということです。

Leelaのようなエンジンに対して新しいバージョンをテストすることがどのように役立つかわかりません。新しいバージョンのStockfishを受け入れるのは、以前のバージョンのStockfishよりもLeelaに対してパフォーマンスが高い場合のみです。したがって、Stockfishの各バージョンは、リーラに対してよりよくプレーすることが保証されていますが、全体としてより優れたチェスプレーヤーであるとは保証されていません。その理由は、ストックフィッシュがリーラのプレーの特定の特性に依存してより多くのゲームに勝つ可能性があるためです。

編集-私はここで役立つかもしれない例を考えました。あなたが数年前に1500と評価され、現在は1800であると仮定します。試合で過去の自分をプレーした場合、あなたが勝つことは明らかです。しかし、議論のために、1500セルフが現在の1800セルフよりもカスパロフに対してより良いパフォーマンスを発揮する可能性があります。たぶん、1500自身は保守的でなく、より多くのリスクを負っていました。これにより、まれなゲームでカスパロフを倒すことができますが、現在の1800自己は毎回負けます(ただし、平均するとゲームはわずかに近くなります)。


そして結局のところ、「やや近い」は定量化が難しいでしょう。自己再生が一番です。
Brandon_J

1
意味論のように見えますが、「より強い」と言うのは、前のバージョンを打ち負かしていると定義されていますか?同様に、「より強い」とは、カスパロフを倒し、トーナメントで勝利し、すべての栄光を手にした人であり、接戦で勝利した人ではないと主張することもできます。
アリュール

1
@アリュール対戦は「強さ」の最も客観的な尺度にすぎないと思います。AがBを上回った場合、AはBよりも上手くプレーされ、エルゴAはBよりも強くなります。BがD、E、F、G ...に対してAよりも良いパフォーマンスをした場合はどうなりますか?
慣性に関する無知

1
しかし、あなたはポイントを持っています。世界選手権の候補者システムは大きなトーナメントですが、以前は選手同士の個別の試合がありました。大きなトーナメントの場合、AはBに負けてもトーナメントに勝つことができ、「最強」と宣言されます。ただし、これは、Aが1人のプレーヤーCだけでなく、さまざまな異なるプレーヤーを倒したためです。つまり、新しいバージョンがさまざまな異なるエンジンを再生するエンジンテストを使用できますが、以前のバージョンをテストするだけの方が速くて簡単です。
慣性無知

3

主に@inertialignoranceに同意しますが、位置を少し明確にしたいと思います。

人間が人間で遊ぶとき、人間のプレーの極端な変動性を考えると、1つのゲームの結果は比較的意味がありません。(私はその変動の例としてKasparov v Deep Blueを使用します-良い日に私はおそらく彼がDBに対して失策したゲームでKasparovを倒した可能性があります。)では、これについての人間性を無視して、マシンに集中しましょう。

機械は人間よりはるかに一貫したレベルのスキルでプレイします。したがって、単一のゲームはより多くを意味し、一連のゲームは多くを意味します。したがって、提案された干し魚の改良を機械に対してテストすることは理にかなっています。しかし、なぜ干し魚?

単に「リーラに対してより良い」を意味のある方法で定量化する方法がないからです。それはもっとうまくいくかもしれませんが、それでも失われます。しかし、その場合のより良い基準は何ですか?どのようにしてそれがよりよく演奏されたことを証明しますか?実行可能な標準が表示されません。

ストックフィッシュプライムが、一連のゲームをプレイして結果を数えるだけで、ストックフィッシュオリジナルよりも優れていることを証明するのははるかに簡単です。

エドワードデミングは、正しい指標を選択することが最も重要であると主張しました。なぜなら、測定することによって向上することを知っているだけだからです。だから質問をしてください:プロセスの目的は何ですか?なぜ干し魚のパッチを提案しているのですか?

リーラを倒すことがパッチの最終的な目標なのでしょうか?または、それはむしろストックフィッシュをより良いチェスでプレイさせるためですか?後者だと思います。ストックフィッシュだけが十分に改善し続ければ、リーラを打ち負かすことは自然にやって来るでしょう。

はい、ストックフィッシュの漸進的な改善の道は頭打ちになるかもしれません。それでも、その高原を離れて検証可能な唯一の道は、それをより良くするためにそれを変更することです。アプローチが「壁にぶつかる」場合、改善の継続的な検索は別のパスを指示します。提案された代替パスが現在のパスに勝てない場合、なぜそれを選択するのですか?


どのようにしてそれがよりよく演奏されたことを証明しますか?かなり簡単なはずですよね?以前のバージョンを20k回リーラと対戦し、新しいバージョンも20k回再生して、結果を比較します。
アリュール

@Allureしかし、仮説的に言えば、Stockfish Primeが古いStockfishを倒したが、古いStockfishがLeelaに対してより優れていた場合(そして、Arlenが述べたように、どのStockfishがLeelaに対して「より優れていた」かをどのように比較すればよいでしょうか)。それなら、ストックフィッシュをプライムにしていませんか?この検証プロセスには欠陥があるようです。
慣性無知

@InertialIgnorance同様に、ストックフィッシュプライムがリーラに対してより優れていたが、古いストックフィッシュを倒せなかった場合、ストックフィッシュプライムを維持しませんか?それは人が「より強い」をどのように定義するかにかかっており、「より強い」が対戦で勝っていることが私には明らかではありません。
アリュール

@Allure競合する理由がまだあることは認めますが、その場合は、Stockfish Primeを選ぶほうが明確です。どちらが優れているか(政治家、アスリートなど)を比較したい場合、ほとんどの場合、何らかの方法でそれらを互いに競争させます。任意に選択されたピアに対して誰がより良い結果を出したかはわかりません。
慣性無知

@InertialIgnoranceはまだですが、Karjakinが2016年の世界選手権に勝利した場合、ほとんどの人が彼を世界で最も強い選手と見なすとは想像しがたいです。はい、彼は1対1の試合でカールセンを倒しましたが、カールセンのトーナメントでの勝利はその逆を示します。同様に、カスパロフが世界チャンピオンでなかったとき、ほとんどの人はまだ彼を最強と考えました。
アリュール

3

この変更を行わないハードウェア上の理由があるようです。

Leelaをスパーリングの対戦相手として使用する場合の主な問題は、LeelaがGPUで最適に動作することです。CPUでLeelaを実行することは可能ですが、Leelaのパフォーマンスは大幅に低下します。OPは、リーラにオッズを与えることを提案していますが、オッズはうまく機能していません。リーラのパフォーマンスは非常に弱く、必要なタイムオッズは非常に長くなっています。

CPUでのLeelaの弱さを知るには、GECサポートがなくCPUで実行されたTCECのシーズン12のLeelaを調べます。次に、Leelaがプレイしたゲームの例を示します。それが達成していた速度を見ると、約1〜3kn / s、つまり1秒あたり1000〜3000ポジションです。比較すると、リーラが強力なGPUで実行されていた最新のシーズン15では、約50kn / s(サンプルゲーム)を達成しました。したがって、同じ条件でリーラに対してストックフィッシュをテストできるようにするには、リーラに約25倍の時間オッズを与える必要があります。干し魚が1分ある場合、リーラは25分を必要とします。

執筆時点では、2つのタイムコントロールでのFishtestingテスト:10秒+ 0.1秒/移動、および60秒+ 0.6秒/移動(最初の短い時間のコントロールテストに合格したパッチは、より長いテストに昇格され、再度テストされます。 2番目を渡し、「新しい」バージョンになります)。25倍の時間オッズで、リーラは最初の時間のコントロールで250秒+ 2.5秒/移動、2回目の時間のコントロールで1500秒+ 15秒/移動を必要とします。減速は途方もないです。弾丸ではなく、迅速な時間制御で効果的にリーラをプレーさせるでしょう。単位時間に完了することができるゲームの数も約25倍減少します。魚のテストでは、各パッチをテストするために何万ものゲームが定期的に必要です。各テストを完了するのに25倍の時間がかかると、許容できないほど遅く聞こえます。

火に燃料を追加するために、私の知る限り、シーズン12のリーラのネットワークは小規模でした。最新のネットのパフォーマンスは、CPUでさらに遅くなる可能性があります。

いつか、FishtestingがGPUリソ​​ースを取得してLeelaでテストすると、切り替えられる可能性があります。ただし、まだその時点ではありません。

編集:Lc0-CPUは現在TCECで再生中です。それは約5knpsを取得します。チャットの一部の人々によると、Lc0-CPUはCPUで再生するように変更されています。変更されていない場合、GPUよりも約80倍遅くなります。したがって、Lc0-CPUをテスト相手として使用するには、実際のハードウェアコストがかかります。


これが起こるとは思えません。ほとんどすべてのエンジン作成者は、主にエンジンをそれ自体に対してテストし、他の(おそらくより強力な)エンジンに対してはテストしません。さらに、他のエンジンに対してテストすることでクロスチェックを行うことは価値があるかもしれませんが、効率が悪いため、これはテストの主要な部分ではありません。
Fabian Fichter

@FabianFichterなぜ他のエンジンに対してテストする方が効率が悪いのですか?
アリュール

私の回答(chess.stackexchange.com/a/24714/15415)で説明したように、Elo測定で同じ統計的精度に到達するには、より多くのゲーム(つまり、より多くのハードウェアまたは時間)が必要になるため、効率が低下します。
Fabian Fichter

0

慣性は正しいです。また、LC0の前には強力なオープンソースエンジンはありませんでした。コモドとフーディーニの両方にライセンス制限がありました。


「強力なオープンソースエンジンはありません」干物以外の意味ですか?
Brandon_J

@Brandon_Jはい、私が言った
とおりです
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.