Pengkodean input / output untuk jaringan saraf untuk mempelajari permainan berbasis grid

13

Saya menulis permainan mainan sederhana dengan tujuan melatih jaringan saraf yang mendalam di atasnya. Aturan permainan kira-kira adalah sebagai berikut:

  • Gim ini memiliki papan yang terdiri dari sel-sel heksagonal.
  • Kedua pemain memiliki koleksi potongan yang sama yang dapat mereka pilih untuk diposisikan secara bebas di papan tulis.
  • Menempatkan berbagai jenis poin poin penghargaan (atau mengurangi poin lawan) tergantung pada posisi dan konfigurasi mereka, satu sama lain.
  • Siapa pun yang memiliki lebih banyak poin akan menang.

Ada aturan tambahan (tentang belokan, jumlah dan jenis potongan, dll ...) tetapi tidak penting dalam konteks pertanyaan ini. Saya ingin menyusun jaringan saraf yang dalam yang dapat dipelajari secara iteratif dengan bermain melawan dirinya sendiri. Pertanyaan saya adalah tentang representasi input dan output. Khususnya:

  • Karena pola kepingan penting, saya berpikir untuk memiliki setidaknya beberapa lapisan konvolusional. Papan bisa dari berbagai ukuran tetapi pada prinsipnya sangat kecil (6x10 pada tes saya, akan diperluas oleh beberapa sel). Apakah masuk akal? Jenis pengumpulan apa yang bisa saya gunakan?
  • Bagaimana cara mewakili kedua belah pihak? Dalam makalah ini tentang go, penulis menggunakan dua matriks input, satu untuk batu putih dan satu untuk batu hitam. Bisakah ini bekerja dalam kasus ini juga? Tapi ingat saya memiliki berbagai jenis potongan, katakanlah A, B, C dan D. Haruskah saya menggunakan matriks input 2x4? Tampaknya sangat jarang dan sedikit efisiensi bagi saya. Saya khawatir itu akan terlalu jarang untuk lapisan konvolusional untuk bekerja.
  • Saya berpikir bahwa outputnya bisa berupa distribusi probabilitas di atas matriks yang mewakili posisi dewan, ditambah array probabilitas terpisah yang menunjukkan bagian mana yang harus dimainkan. Namun, saya juga perlu mewakili kemampuan untuk melewati belokan, yang sangat penting. Bagaimana saya bisa melakukannya tanpa mengurangi signifikansi di antara probabilitas lainnya?
  • Dan yang paling penting , apakah saya hanya memaksakan langkah menang atau kalah juga? Menegakkan langkah-langkah kemenangan itu mudah karena saya hanya mengatur probabilitas yang diinginkan menjadi 1. Namun ketika kalah, apa yang bisa saya lakukan? Tetapkan probabilitas pemindahan ke 0 dan yang lainnya dengan nilai yang sama? Juga, apakah masuk akal untuk menegakkan langkah dengan selisih skor akhir, meskipun ini akan bertentangan dengan makna output, yang kira-kira merupakan probabilitas?

Juga, saya mengembangkan mesin game di node.js berpikir untuk menggunakan Synaptic sebagai kerangka kerja, tapi saya tidak yakin itu bisa bekerja dengan jaringan convolutional (saya ragu ada cara untuk memperbaiki bobot yang terkait dengan bidang persepsi lokal). Adakah saran tentang perpustakaan lain yang kompatibel dengan node?

Totem
sumber
Haruskah kami berasumsi bahwa Anda ingin mesin untuk mempelajari permainan yang tidak diketahui dan kemudian belajar bagaimana memenangkannya? (Berbeda dengan belajar bagaimana memenangkan permainan aturan yang tersedia untuk programmer sebelum menulis perangkat lunak pembelajaran mesin)
FauChristian

Jawaban:

1
  • Untuk mewakili potongan-potongan, Anda harus dapat menggunakan matriks input tunggal. Tentukan angka integer untuk berbagai jenis potongan. Batu putih bisa bilangan bulat positif dan batu hitam bisa negatif.

  • Anda dapat menggunakan sigmoid untuk kepercayaan posisi papan dan aktivasi linier untuk pengidentifikasi satuan. Lulus akan menjadi output sigmoid lain. Saya tidak berpikir Anda harus khawatir tentang lulus encer. Karena itu adalah tindakan yang sangat berharga, skor akan sangat tergantung pada output umpan dan akan memiliki gradien yang besar. Jika Anda perlu memilih tindakan lulus dengan frekuensi tinggi untuk tujuan pembelajaran penguatan, maka hanya atribut probabilitas yang lebih tinggi untuk tindakan lulus dalam fungsi pilihan acak Anda.

  • Perbedaan skor akhir memiliki dampak besar pada keinginan bergerak. Perbedaan skor yang besar akan menghasilkan dampak yang besar pada fungsi. Karena itu Anda mungkin ingin memasukkan besarnya selisih skor dalam fungsi kerugian Anda.

Ini adalah jenis pekerjaan yang dilakukan Deep Q Learning. Mungkin Anda juga ingin melihatnya.

Gambar default
sumber
1

Anda tidak perlu lapisan konv, karena Anda tidak memberi makan gambar sebagai input (lihat di bawah). Atau, Anda dapat mencoba menggunakan gambar papan tulis (dengan potongan-potongan berbeda memiliki bentuk yang berbeda). Ini juga bisa bekerja. Lalu saya akan pergi untuk 2 lapisan konv, melangkah 1, ukuran kernel sama dengan setengah ukuran sepotong. Saya akan mencobanya dengan pooling max tunggal.

Berbeda dengan jawaban lain saya akan menyarankan menggunakan tensor 3d sebagai input, dengan jumlah saluran yang sama dengan potongan yang berbeda. Dua dimensi lain yang sama akan sesuai dengan jumlah sel di papan tulis. Berbagai transformasi di NN Anda tidak akan dapat membedakan antara beberapa bilangan bulat dengan sangat baik. Itu sebabnya lebih baik untuk memiliki penyandian satu-panas dari tipe keping.

Saya hanya akan menggunakan vektor dengan n + 1 komponen untuk output: n untuk semua gerakan yang mungkin, dan 1 untuk lulus. Itu akan mengkodekan hadiah yang diharapkan untuk setiap gerakan, bukan probabilitas.

Tidak yakin apa yang Anda maksud dengan menegakkan langkah. Tetapi ketika Anda akan melatihnya dengan sesuatu seperti Q-learning, akan masuk akal untuk membuat langkah acak sekali-sekali dengan probabilitas tertentu (katakanlah 10% dari waktu). Cari https://en.wikipedia.org/wiki/Reinforcement_learning

berarti
sumber
Tensor berlebihan.
FauChristian