Mengapa Fishtesting menguji Stockfish terhadap dirinya sendiri, bukan mesin lain?

11

Ketika saya memahami apa yang disebut Fishtesting , orang-orang menulis tambalan, kemudian mencoba tambalan tersebut terhadap versi Stockfish saat ini. Jika versi baru berkinerja lebih baik, itu dipromosikan menjadi versi utama; kalau tidak ditolak.

Pertanyaan: mengapa menguji versi Stockfish saat ini? Ini berhasil di masa lalu, dan Stockfish saat ini jauh lebih kuat daripada Stockfish berusia dua tahun. Namun, kita juga dapat melihat keterbatasan pada pendekatan ini. Meskipun Stockfish sekarang mampu menghancurkan mesin tradisional lainnya, ia juga baru-baru ini kehilangan TCEC S15 dangkal melawan Leela. Karena itu, mengapa tidak menguji setiap versi baru terhadap Leela?

Jawaban yang jelas adalah bahwa sumber daya Fishtesting berasal dari CPU, dan Leela buruk pada CPU. Namun itu tidak boleh berakibat fatal: orang hanya bisa memberi Leela lebih banyak waktu, misalnya dengan Stockfish berjalan pada 10 detik per game, berikan Leela 100 per game atau peluang waktu apa pun yang diperlukan untuk mendapatkan rasio Leela dengan rasio di superfinal. Ini tentu akan memperlambat Fishtesting, tetapi jika itu mengarah ke mesin yang dapat mengalahkan Leela dalam pertandingan, itu mungkin masih layak dilakukan.

Daya tarik
sumber

Jawaban:

4

Pertama-tama, apa yang tidak menjadi jelas dari jawaban lain adalah bahwa Anda tentu saja pada prinsipnya dapat menggunakan lawan mana pun (dengan kekuatan bermain yang konsisten) untuk membandingkan kekuatan permainan dari dua versi program.

Namun, ada beberapa alasan bagus untuk menguji versi langsung terhadap satu sama lain, terlepas dari apakah Anda mengembangkan Stockfish atau mesin lainnya:

  • Perbandingan kekuatan bermain dari entitas bermain catur biasanya tidak memenuhi transitivitas, yaitu, jika A> B dan B> C, A <C masih mungkin. Jadi, selama perbandingan terhadap kelompok besar lawan (untuk rata-rata masalah transitivitas) tidak layak, perbandingan langsung harus menjadi pengukuran yang paling dapat diandalkan, meskipun Anda tentu saja dapat memiliki masalah yang sama untuk tiga versi dari program tunggal.
  • Dengan melakukan perbandingan langsung, Anda mengurangi jumlah game yang diperlukan dalam pengujian, karena Anda hanya perlu menjalankan satu pertandingan, bukan dua, dan pada saat yang sama Anda mendapatkan bar kesalahan yang lebih kecil untuk perbedaan kekuatan bermain.
  • Menguji lawan yang memiliki kekuatan hampir sama akan memaksimalkan sensitivitas statistik dari hasil permainan tunggal, sehingga Anda dapat menghemat biaya perangkat keras. Jika perbedaan dalam kekuatan bermain sangat tinggi, informasi / entropi dari satu permainan sangat rendah.

Selain itu, dalam kasus fishtest / Stockfish ada beberapa alasan konkret mengapa memilih perbandingan langsung adalah pilihan yang paling berprinsip:

  • Pada saat fishtest awalnya dikembangkan, Leela tidak tersedia.
  • Menggunakan mesin komersial seperti Komodo dan Houdini adalah / bukan pilihan karena masalah perizinan.
  • Menggunakan program lain dapat menimbulkan risiko keamanan serta dependensi perangkat lunak tambahan atau persyaratan perangkat keras yang ingin Anda hindari dalam lingkungan komputasi terdistribusi.
  • Sebelumnya untuk Leela, pada dasarnya tidak ada mesin open source yang cukup kuat untuk mendapatkan hasil yang signifikan secara statistik ketika cocok dengan Stockfish.
Fabian Fichter
sumber
Apakah Anda yakin pengujian terhadap mesin ke-3 meningkatkan jumlah game yang dibutuhkan? Sepertinya baru pertama kali melakukannya. Sebagai contoh, katakanlah mesin ketiga adalah E, dan versi dari Stockfish yang dicoba adalah A, B dan C. Kami bermain A dan B 20k kali melawan E dan mendapatkan skor. Mana yang lebih baik disimpan dan yang lemah ditolak. Katakanlah A disimpan. Ketika datang ke pengujian versi C, kami sudah memiliki hasil AE, jadi kami hanya perlu mendapatkan hasil CE, dan hal yang sama berlaku untuk semua versi masa depan.
Allure
2
Bahkan jika Anda selalu menguji versi yang sama dari mesin referensi Anda (yang membuatnya sangat rentan terhadap overfitting), ketidakpastian statistik pada perbedaan Elo yang dihasilkan akan tetap lebih besar, karena dengan menggabungkan hasil dari dua putaran (misalnya, EloC - EloB ) Anda juga perlu menggabungkan ketidakpastian statistik , yang biasanya meningkatkan ketidakpastian dengan faktor sqrt (2). Untuk mengimbanginya, Anda harus menjalankan lebih banyak game.
Fabian Fichter
7

Tujuan dari pengujian ikan adalah untuk menguji apakah versi baru dari Stockfish menjadi lebih kuat . Definisi yang lebih kuat adalah mengalahkan versi sebelumnya.

Saya tidak yakin bagaimana menguji setiap versi baru terhadap mesin seperti Leela akan membantu. Ide Anda mungkin hanya menerima versi baru dari Stockfish jika kinerjanya lebih baik terhadap Leela daripada versi sebelumnya dari Stockfish. Jadi sekarang setiap versi Stockfish dijamin akan bermain lebih baik melawan Leela, tetapi tidak dijamin menjadi pemain catur yang lebih baik secara keseluruhan. Alasannya adalah bahwa Stockfish dapat mengandalkan karakteristik tertentu dalam permainan Leela untuk memenangkan lebih banyak game.

EDIT - Saya memikirkan contoh yang mungkin membantu di sini. Misalkan Anda diberi nilai 1500 beberapa tahun yang lalu, dan sekarang Anda berusia 1800. Jika Anda memainkan diri Anda sebelumnya dalam pertandingan, jelas Anda akan menang. Tetapi demi argumen, mungkin saja 1500-an Anda akan bekerja lebih baik melawan Kasparov daripada 1800-an Anda saat ini. Mungkin 1500-diri itu kurang konservatif dan mengambil risiko jauh lebih besar. Ini berhasil mengalahkan Kasparov dalam permainan yang langka, sementara 1800 diri Anda saat ini akan kalah setiap waktu (namun rata-rata permainan akan sedikit lebih dekat).

Ketidaktahuan inersia
sumber
Dan pada akhirnya, "Sedikit lebih dekat" akan sulit untuk diukur. Bermain sendiri adalah yang terbaik.
Brandon_J
1
Sepertinya semantik, tetapi apa yang membuat Anda mengatakan "lebih kuat" didefinisikan sebagai mengalahkan versi sebelumnya? Orang juga bisa berpendapat bahwa "lebih kuat" adalah orang yang mengalahkan Kasparov, memenangkan turnamen, dan mendapatkan semua kemuliaan, bukan orang yang memenangkan head-to-head.
Allure
1
@ Allure Saya pikir head-to-head hanyalah ukuran yang paling objektif dari "kekuatan". Jika A mengalahkan B, A bermain lebih baik dari B, ergo A lebih kuat dari B. Tetapi jika A sedikit lebih buruk melawan C daripada B terhadap C, apakah itu berarti A> B? Bagaimana jika B berkinerja lebih baik terhadap D, E, F, G ... daripada A?
Ketidaktahuan Inersia
1
Tapi Anda ada benarnya. Sistem Kandidat untuk Kejuaraan Dunia adalah turnamen besar, tetapi dulu ada pertandingan individu antara pemain. Untuk turnamen besar A bisa kalah dari B tetapi masih memenangkan turnamen dan dinyatakan "terkuat". Namun, ini karena A mengalahkan berbagai pemain yang berbeda, bukan hanya satu pemain C. Jadi mungkin pengujian mesin dapat digunakan di mana versi yang lebih baru memainkan berbagai mesin yang berbeda, tetapi lebih cepat dan lebih mudah untuk hanya menguji terhadap versi yang lebih lama.
Ketidaktahuan Inersia
3

Saya akan setuju dengan main dengan @inertialignorance tapi saya ingin sedikit memperjelas posisi.

Ketika manusia memainkan manusia, hasil dari satu permainan relatif tidak berarti, mengingat variabilitas yang ekstrim dari permainan manusia. (Saya akan menggunakan Kasparov v Deep Blue sebagai contoh dari variabilitas itu - pada hari yang baik saya mungkin bisa mengalahkan Kasparov dalam permainan yang ia lakukan terhadap DB.) Jadi mari kita abaikan manusia dalam hal ini dan berkonsentrasi pada mesin.

Mesin bermain pada tingkat keterampilan yang jauh lebih konsisten daripada manusia. Oleh karena itu satu permainan berarti lebih, dan serangkaian permainan sangat berarti. Jadi masuk akal untuk menguji peningkatan Stockfish yang diusulkan terhadap mesin. Tapi mengapa Stockfish?

Hanya karena tidak ada cara untuk mengukur "lebih baik melawan Leela" dengan cara yang berarti. Itu bisa berbuat lebih baik, dan masih kalah. Tapi apa standar untuk lebih baik, dalam hal ini? Bagaimana Anda membuktikannya bermain lebih baik? Saya tidak bisa melihat standar yang layak.

Jauh lebih sederhana untuk membuktikan bahwa Stockfish prima adalah peningkatan dari pada Stockfish yang asli hanya dengan memainkan serangkaian game dan menghitung hasilnya.

Edward Deming berpendapat bahwa sangat penting untuk memilih metrik yang benar, karena Anda hanya tahu Anda meningkat karena apa yang Anda ukur. Jadi ajukan pertanyaan: Apa tujuan dari proses ini? Mengapa Anda mengusulkan tambalan untuk Stockfish?

Apakah ini benar-benar tujuan akhir tambalan untuk mengalahkan Leela? Atau lebih tepatnya membuat Stockfish bermain catur yang lebih baik? Saya akan mengatakan itu yang terakhir. Mengalahkan Leela akan datang dengan sendirinya jika hanya Stockfish yang terus membaik.

Ya, jalur peningkatan tambahan untuk Stockfish bisa sampai ke dataran tinggi. Meski begitu, satu-satunya jalur yang dapat diverifikasi dari dataran tinggi itu akan terletak pada membuat perubahan padanya yang membuatnya lebih baik. Jika suatu pendekatan "menabrak tembok," maka pencarian berkelanjutan untuk perbaikan akan menentukan jalur lain. Jika jalur alternatif yang diusulkan tidak dapat mengalahkan jalur saat ini, mengapa memilihnya?

Arlen
sumber
Bagaimana Anda membuktikannya bermain lebih baik? itu harus sangat mudah, bukan? Mainkan saja versi sebelumnya 20 ribu kali melawan Leela, dan versi baru 20 ribu kali juga, lalu bandingkan hasilnya.
Allure
@ Allure Tapi secara hipotetis, bagaimana jika Stockfish Prime mengalahkan Stockfish lama, tetapi Stockfish lama melakukan lebih baik terhadap Leela (dan seperti yang disebutkan Arlen, bagaimana Anda bahkan membandingkan Stockfish yang "lebih baik" melawan Leela). Tidakkah Anda akan membuat Stockfish prima? Proses verifikasi ini tampaknya cacat.
Ketidaktahuan Inersia
@InertialIgnorance Sama, bagaimana jika Stockfish Prime melakukan yang lebih baik terhadap Leela, tetapi gagal mengalahkan Stockfish lama, apakah Anda tidak akan mempertahankan Stockfish Prime? Itu datang ke bagaimana seseorang mendefinisikan "kuat", dan tidak jelas bagi saya bahwa "kuat" memenangkan head-to-head.
Allure
@ Allure saya akui masih ada alasan untuk berkonflik di sana, tetapi dalam hal ini rasanya lebih jelas untuk memilih Stockfish Prime. Ketika Anda ingin membandingkan dua hal mana yang lebih baik (baik itu politisi, atlet, dll), Anda paling sering membuat mereka bersaing satu sama lain dalam beberapa cara. Tidak melihat siapa yang melakukan lebih baik terhadap rekan yang dipilih secara sewenang-wenang.
Ketidaktahuan Inersia
@InertialIgnorance masih, jika Karjakin telah memenangkan Kejuaraan Dunia 2016, sulit bagi saya untuk membayangkan bahwa kebanyakan orang akan menganggapnya sebagai pemain terkuat di dunia. Ya, dia telah mengalahkan Carlsen di pertandingan head-to-head, tetapi kemenangan turnamen Carlsen akan menunjukkan kebalikannya. Demikian pula ketika Kasparov bukan juara dunia, kebanyakan orang masih menganggapnya yang terkuat.
Allure
3

Tampaknya ada alasan perangkat keras untuk tidak melakukan perubahan ini.

Masalah utama dengan menggunakan Leela sebagai lawan sparring adalah Leela berjalan paling baik pada GPU. Dimungkinkan untuk menjalankan Leela pada CPU, tetapi kinerja Leela sangat menderita. OP menyarankan untuk memberikan peluang waktu Leela untuk mengkompensasi, tetapi peluang waktu tidak bekerja dengan baik: Kinerja Leela melemah sehingga peluang waktu yang dibutuhkan sangat panjang.

Untuk mendapatkan gambaran tentang seberapa lemah Leela pada CPU, kita dapat melihat Leela di musim 12 TCEC, ketika itu tidak memiliki dukungan GPU dan dijalankan pada CPU. Berikut ini contoh game yang dimainkan oleh Leela . Jika seseorang melihat kecepatan yang dicapai, itu sekitar 1-3kn / s, atau 1000-3000 posisi per detik. Relatif, di musim terbaru 15 ketika Leela berjalan pada GPU yang kuat, itu akan mencapai sekitar 50kn / s ( contoh game ). Oleh karena itu untuk dapat menguji Stockfish terhadap Leela dengan persyaratan yang sama, seseorang harus memberikan Leela peluang sekitar 25 kali. Jika Stockfish punya waktu satu menit, Leela perlu 25 menit.

Pada saat penulisan, Fishtesting menguji pada dua kontrol waktu: 10s + 0,1s / move, dan 60s + 0,6s / move (tambalan yang lulus pertama, tes kontrol waktu singkat dipromosikan ke yang lebih lama dan diuji lagi. Tambalan yang lulus yang kedua lalu menjadi versi "baru"). Pada odds 25 kali, Leela membutuhkan 250s + 2.5s / move di kontrol waktu pertama dan 1500s + 15s / move di kontrol waktu kedua. Perlambatan luar biasa; kami akan secara efektif membuat Leela bermain di kontrol waktu yang cepat dan bukan peluru. Jumlah game yang dapat diselesaikan dalam satuan waktu juga akan turun sekitar 25x. Fishtesting secara teratur membutuhkan puluhan ribu game untuk menguji setiap patch; mengambil 25x lebih lama untuk menyelesaikan setiap tes terdengar sangat lambat.

Untuk menambah bahan bakar ke api, sejauh yang saya tahu, Leela memiliki jaringan yang lebih kecil di musim 12 - kinerja jaring terbaru bahkan bisa lebih lambat pada CPU sekarang.

Mungkin suatu hari nanti, jika Fishtesting mendapatkan sumber daya GPU untuk diuji dengan Leela, itu mungkin akan beralih; namun kami belum sampai di situ.

Sunting : Lc0-CPU saat ini diputar di TCEC. Itu mendapat sekitar 5knps. Menurut beberapa orang dalam obrolan, Lc0-CPU dimodifikasi untuk diputar pada CPU; tidak dimodifikasi, ini lebih lambat 80x dari pada GPU. Oleh karena itu ada biaya perangkat keras nyata untuk menggunakan Lc0-CPU sebagai lawan pengujian.

Daya tarik
sumber
Saya ragu ini akan terjadi. Hampir semua penulis mesin menguji mesin mereka sendiri dan tidak terhadap mesin lain (mungkin lebih kuat). Mungkin berharga untuk melakukan pengecekan silang dengan menguji terhadap mesin lain, tetapi ini seharusnya tidak menjadi bagian utama pengujian, karena kurang efisien.
Fabian Fichter
@ FabianFichter mengapa kurang efisien untuk menguji terhadap mesin lain?
Allure
Seperti yang saya jelaskan dalam jawaban saya ( chess.stackexchange.com/a/24714/15415 ) itu kurang efisien karena Anda membutuhkan lebih banyak game (yaitu, lebih banyak perangkat keras atau waktu) untuk mencapai ketepatan statistik yang sama untuk pengukuran Elo Anda.
Fabian Fichter
0

Inersia benar. Saya juga harus menambahkan tidak ada mesin open source yang kuat sebelum LC0. Baik Komodo dan Houdini memiliki batasan lisensi.

Catur kecil
sumber
"Tidak ada mesin open source yang kuat" Saya kira maksud Anda selain stockfish?
Brandon_J
@Brandon_J ya itu yang saya maksud
SmallChess