Saya seorang pemain catur yang rajin dan programmer komputer. Saya akan mengatakan bahwa bermain catur dan pemrograman adalah dua hal yang paling sering saya lakukan. Secara alami, saya ingin membuat mesin sendiri dan, akhirnya, bot Lichess.
Setelah kinerja penghancuran AlphaZero terhadap Stockfish tahun lalu, saya mempertimbangkan apakah saya harus membuat mesin ini dengan pembelajaran mesin (beberapa jenis jaringan saraf, mungkin menggunakan Tensorflow) atau heuristik tradisional, kode keras.
Saya kurang terbiasa dengan jaringan saraf daripada jenis hard-coding lainnya. Namun, itu bisa menjadi cara yang baik bagi saya untuk belajar bekerja dengan jaringan saraf.
Hal lain yang saya pertimbangkan adalah apakah penting bahasa apa yang saya gunakan untuk kode mesin. Saya tahu banyak mesin catur menggunakan C ++, yang belum pernah saya gunakan sebelumnya. Saya telah menggunakan bahasa berbasis C lainnya yang melakukan banyak hal yang sama, dengan sebagian besar sintaks yang bervariasi. Saya paling akrab dengan Swift dan Javascript, tetapi saya juga akrab dengan Python dan merasa itu bisa melakukan trik untuk saya.
Jadi, dalam hal menciptakan mesin catur terkuat mungkin, haruskah saya menggunakan jaringan saraf atau hard-coded?
sumber
Jawaban:
Langkah pertama: Tentukan tujuan / alasan Anda
Saya pikir ini adalah faktor utama. Mana yang paling cocok untuk Anda? (Pilih satu saja )
IMO tidak apa-apa untuk "melempar koin" untuk apa pun kecuali 2. Untuk semua yang lain, Anda akan memenuhi tujuan Anda apakah Anda memilih ML atau hard-coding. Namun Anda mungkin menginginkan perbandingan antara pilihan untuk membantu Anda memutuskan.
Kasus untuk hard-coding
Bermain catur (sebagai manusia) melibatkan pemikiran logis. Anda menjelajahi ruang tindakan yang mungkin Anda dan lawan bisa ambil. Ini telah melahirkan bidang yang disebut teori permainan yang berisi kerangka teori untuk menganalisis game secara umum.
Jika Anda menikmati bekerja dengan detail dan menjadi spesifik dan bernalar tentang hal-hal maka ini bisa bekerja dengan baik untuk Anda. Sebagai perbandingan, pembelajaran mesin melibatkan lebih banyak "kotak hitam" algoritma yang fuzzy dan buram. Anda tidak tahu persis apa yang sedang terjadi.
Juga saya rasa Anda akan memiliki waktu yang lebih mudah "mencari tahu sendiri" jika Anda memilih rute hard-coding daripada pembelajaran mesin. Lebih sedikit hal menempelkan salinan yang tidak sepenuhnya Anda pahami.
Kasus untuk pembelajaran mesin
Sangat menyenangkan untuk melahirkan ciptaan dan menyaksikannya menjalani kehidupannya sendiri. Sementara hard-coding adalah semua tentang presisi dan detail, pembelajaran mesin fleksibel. Singkirkan beberapa neuron dan hasilnya mungkin akan serupa.
Hard-coding adalah tentang mempelajari catur. Pembelajaran mesin adalah tentang mempelajari makhluk yang telah Anda buat.
Dan pembelajaran mesin, tentu saja, adalah topik yang sangat panas.
Pilihan bahasa untuk hard-coded
Saya tidak yakin apa yang Anda maksud dengan "bahasa berbasis C lainnya". C ++ adalah satu-satunya bahasa umum yang mirip dengan C. Keuntungan C / C ++ adalah mereka cepat . Meskipun bahasa lain telah menyusul selama bertahun-tahun, C ++ masih memberi mereka uang.
C ++ tidak mudah. Anda akan mendapatkan performa luar biasa dari bahasa yang dikompilasi lebih modern seperti Rust, Golang atau Swift. Tetapi seharusnya tidak jauh lebih buruk jika Anda menggunakan bahasa JIT. Yaitu jangan menggunakan juru bahasa CPython ; gunakan IronPython atau Jython, atau Node, atau C # atau Java.
Pemrograman GPU membutuhkan pendekatan yang berbeda dan saya akan menyarankan untuk tidak melakukannya pada saat ini.
Pilihan bahasa untuk pembelajaran mesin
Masalah dengan TensorFlow adalah tingkatannya sangat rendah. Ini lebih tentang menulis algoritma angka-penggerusan (yang dapat ditanamkan ke perangkat keras paralel) daripada tentang antarmuka yang didedikasikan untuk pembelajaran mesin.
Tentu saja, ini bisa menjadi pengalaman belajar yang luar biasa! Dan tentunya belajar sangat bermanfaat hari ini. Namun, Anda mungkin ingin memulai dengan Keras atau PyTorch.
sumber
Jika Anda mencoba membuat mesin sekuat tenaga, gunakan mesin NN.
Mesin tradisional hebat - Stockfish bisa dibilang masih merupakan mesin terkuat di planet ini pada perangkat keras yang setara - tetapi mereka sulit untuk ditulis. Mesin ini tidak sampai di tempat semalaman; mereka membutuhkan waktu bertahun-tahun untuk bekerja. Stockfish misalnya telah memperoleh elo selama enam tahun . Jika Anda memulai dari awal, Anda tidak akan mendapatkan kekuatan Stockfish dengan cepat; bahkan Anda mungkin akan berhenti beberapa ratus elo dari tempat Stockfish saat ini. Sebagai perbandingan, beberapa mesin penulis tunggal terkuat saat ini adalah Ethereal , Laser , dan Xiphos (saya mengabaikan Houdini & Fire karena tidak open source). Mesin-mesin ini jauh lebih lemah daripada Stockfish.
Mengapa mereka jauh lebih lemah? Dua alasan:
Pada level ini, mengembangkan mesin membutuhkan banyak daya komputasi. Apa yang Anda lakukan adalah melihat-lihat kode Anda dan mengidentifikasi sebuah ide yang bisa mendapatkan lebih banyak. Sebuah ide contoh adalah, "jika kita tahu langkah ini mungkin baik, jangan mencari cabang yang membalikkan langkah itu" (jika ini tidak masuk akal bagi Anda, itu berarti akan ada kurva belajar yang tinggi juga). Anda kemudian menulis tambalan yang mengimplementasikan ide, dan menguji mesin yang dimodifikasi terhadap versi sebelumnya. Pada level ini, dibutuhkan puluhan ribu game untuk mendapatkan ukuran sampel yang cukup besar untuk mengetahui apakah patch tersebut efektif. Memainkan game-game ini membutuhkan daya komputasi yang sangat besar. Stockfish memiliki akses ke perangkat keras super: pada saat penulisan, Stockfish menguji Fishtestingsedang berjalan dengan 1038 core. Sebagai perbandingan, komputer desktop biasa mungkin memiliki 4-8 core.
Alasan lainnya adalah Stockfish didukung oleh banyak otak. Pada saat penulisan, ada 8 tambalan yang ditulis oleh 5 orang yang diuji. Jika Anda melihat sejarah tambalan Anda akan menemukan lebih banyak pengembang yang telah menulis tambalan. Saya tidak tahu berapa banyak pengembang Stockfish aktif, tapi itu pasti> 20.
Di sisi lain, mesin NN (relatif) dengan mudah mencapai kekuatan yang jauh di atas Ethereal / Laser / Xiphos. Lihat sendiri di turnamen Kejuaraan Mesin Catur Top terbaru . Ethereal / Laser / Xiphos ada di League 1, yang cukup kredibel, tetapi mesin di divisi teratas (Division P) adalah:
Tiga mesin terakhir - AllieStein, Stoofvlees, dan ScorpioNN - semuanya merupakan kolaborasi kecil oleh orang-orang yang, sejauh yang saya tahu, adalah penggemar seperti Anda dan bukan pengembang penuh waktu. Mereka mendapatkan kekuatan Div P setelah kurang dari dua tahun mencoba (semua mesin NN ini hanya muncul setelah AlphaZero). Sebagai perbandingan, dalam sejarah catur komputer baru-baru ini hanya ada satu orang yang pernah menulis mesin tradisional yang berhasil bersaing dengan Stockfish & Komodo sendiri (Robert Houdart, penulis Houdini).
Memang benar bahwa Anda mungkin tidak akan memiliki perangkat keras untuk bersaing dengan Lc0, tetapi Lc0 mengambil kekuatan komputasi sebesar ini karena itu adalah mesin "nol" - itu seharusnya bermain catur tanpa pengetahuan manusia apa pun kecuali aturan. Anda tidak perlu menggunakan metodologi yang sama. Anda dapat menggunakan misalnya metodologi Stein yang menggunakan pembelajaran terawasi. Ini bisa dibilang lebih baik daripada menjadi "nol" - lagipula AllieStein bermain di dangkal, bukan Lc0.
Hasilnya adalah: jika tujuan Anda adalah untuk bersaing dengan mesin terbaik di dunia, Anda jauh lebih mungkin untuk berhasil dengan mesin NN daripada yang tradisional.
sumber
Jangan memilih NN kecuali Anda memiliki akses ke konyol (Beberapa ratus Nvidia V100s). Melatih NN untuk bermain catur membutuhkan banyak perangkat keras. Lihat orang-orang yang berkontribusi pada Lc0 untuk melatih lebih dari 200 juta game. Karena Anda mungkin akan kesulitan mengakses perangkat keras (Anda bisa mencoba mendapatkannya di Google Colabatory , tetapi hanya dengan itu, pelatihan akan menjadi sangat lambat).
Sunting: Menggunakan NN Dengan Pembelajaran terawasi, Anda MUNGKIN pergi hanya dengan Google Colab dan mungkin satu GPU kuat (2080, 2080Ti, Radeon VII).
Python dan Javascript mungkin terlalu lambat untuk mesin catur yang kuat. Saya belum pernah menggunakan Swift tetapi mungkin tidak akan menyukai platform selain macOS, jadi mungkin lebih baik menggunakan C atau C ++. Anda juga bisa menggunakan Rust, tetapi memiliki banyak fitur keamanan yang mengganggu dan tidak benar-benar Anda butuhkan, yang bisa mengganggu. Akan lebih sulit untuk mendapatkan kinerja yang baik dari itu karena optimasi tingkat rendah tertentu sulit dilakukan. Tentu saja, Anda selalu dapat menulisnya dalam pertemuan tetapi itu mungkin akan menjadi terlalu banyak pekerjaan. lihat https://www.chessprogramming.org/Languages/
sumber
Saya membangun mesin catur murni mainan menggunakan: catur python itu benar-benar baik tidak harus kode aturan permainan sendiri dan hanya fokus pada logika; namun, jumlah posisi yang dapat saya evaluasi per detik sangat rendah. Ini mungkin titik awal yang baik.
sumber