Saya mencoba memprogram sistem saya sendiri untuk menjalankan jaringan saraf. Untuk mengurangi jumlah node yang dibutuhkan, disarankan untuk membuatnya memperlakukan rotasi input secara merata.
Jaringan saya bertujuan untuk mempelajari dan memprediksi Permainan Kehidupan Conway dengan melihat setiap kotak dan kotak di sekitarnya dalam kotak, dan memberikan output untuk kotak itu. Inputnya adalah string 9 bit:
Di atas diwakili sebagai 010 001 111.
Namun ada tiga rotasi lain dari bentuk ini, dan semuanya menghasilkan keluaran yang sama:
Topologi jaringan saya adalah 9 node input dan 1 node output untuk keadaan berikutnya dari pusat persegi di input. Bagaimana saya bisa membangun lapisan tersembunyi sehingga mereka mengambil setiap rotasi ini sama, memotong jumlah input yang mungkin turun menjadi seperempat dari aslinya?
Edit:
Ada juga flip dari setiap rotasi yang menghasilkan hasil yang identik. Memasukkan ini akan memangkas input saya pada 1/8. Dengan glider, tujuan saya adalah agar semua input ini diperlakukan sama persis. Apakah ini harus dilakukan dengan pra-pemrosesan, atau bisakah saya memasukkannya ke dalam jaringan?
sumber
Jawaban:
Jika saya mengerti dengan baik simpul output tunggal Anda akan menjadi status persegi berikutnya di tengah. Anda tidak perlu khawatir tentang jumlah node di lapisan tersembunyi sementara Anda memiliki sumber daya yang cukup untuk melatih model. Masalah ini sangat mudah dipelajari untuk jaringan saraf sehingga tidak ada masalah ukuran.
Anda perlu melakukan pelatihan yang diawasi yang berarti Anda perlu memasukkan data input dan hasil yang diharapkan sesuai. Anda harus yakin bahwa dalam data pelatihan Anda semua 4 rotasi ditugaskan untuk output yang sama. Dengan cara ini jaringan Anda harus belajar memperlakukan semua ini dengan cara yang sama.
Anda membuat saya penasaran jadi saya mencoba sendiri. Solusi saya bisa belajar 100% benar dalam sekitar 20 zaman berjalan dalam beberapa detik di laptop lama saya. Saya hanya sedikit mengubah output menjadi kategorikal baik [0,1] atau [1,0] tetapi itu memberikan hasil yang sama seperti yang Anda cari. Hanya untuk referensi di sini adalah kode yang ditulis dengan python:
sumber
Anda telah mengidentifikasi optimasi dalam ruang masalah Anda dan keinginan untuk memanggang ini ke jaringan saraf Anda. Saya sarankan preprocessing: Komposisikan optimasi Anda dengan neural net yang melakukan subset dari apa yang Anda inginkan.
Dengan kata lain, normalisasikan input Anda dengan secara manual koding algoritma rotasi yang memutar input untuk menangkap kesetaraan yang disorot dalam posting Anda. Kemudian masukkan output dari transformasi ini ke jaringan saraf Anda, untuk pelatihan dan semua kegunaan lainnya. Ini berarti Anda melatih jaringan saraf untuk mengatasi sub-masalah yang Anda identifikasi - rotasi berlebihan.
Uji normalizer Anda dengan menghasilkan input acak, putar ke keempat transformasi potensial, jalankan normalizer di masing-masing, kemudian periksa apakah semuanya setara.
sumber
Agar lebih murni, mulailah dengan mempertimbangkan input secara berbeda, sebagai array lingkaran ukuran empat, setiap item berisi sepasang bit, dan juga bit tengah:
Sepanjang desain jaringan, lanjutkan struktur melingkar dan paradigma titik pusat ini.
sumber