Logika berfikir spin-off 2: beberapa algoritma rantai
Tantangan:
pisahkan urutan kejadian yang sering diulang menjadi rantai terpisah di mana tidak akan ada yang berlebihan.Tugas ini memiliki banyak solusi. "Baking" yang sering digunakan - hubungan yang sering digunakan diperbaiki, sementara yang lain melemah. Di final, Anda harus mendapatkan rantai di mana peristiwa yang paling sering diulang memiliki ikatan yang kuat. Solusi ini memiliki banyak kekurangan, di antaranya - kecepatan rendah. Tetapi kami memiliki gelombang identifikasi dari Redozubov, kami dapat menggunakan algoritma lain yang dapat membentuk rantai baru setelah pengulangan pertama. Mari kita mulai dengan yang sederhana.Dalam catatan terakhirMetode untuk merekam semua peristiwa dalam rantai memori dijelaskan. Biarkan sistem pernah membaca kata "peluruhan", dan di waktu lain - kata "air terjun". Dua kata ini memiliki bagian yang sama - akhir dari tiga huruf. Menurut kondisi masalah, perlu untuk menyoroti rantai "pad". Rantai ini tidak memiliki prasyarat, yaitu, dengan mudah mengenali input yang sesuai.Satu solusi
Kami membagi tugas menjadi dua:1) menemukan dua rangkaian peristiwa yang serupa (Anda perlu memahami bahwa kira-kira dua kata ini mengandung urutan yang sama)2) memilihnya dalam rantai yang terpisah ("pad")Mari kita mulai dengan bagian 2. Kami menyulitkan neurocluster dengan stempel waktu, yang menyimpan semua peristiwa dalam rantai memori, seperti yang ditunjukkan dalam gambar. Berkat bagian pengenal (arah koneksi naik dari atribut ke cap waktu umum), subtugas 1 akan diselesaikan - untuk menemukan posisi dengan atribut umum, dan berkat rantai memori dengan tautan ke bawah, subtugas 2 akan dipecahkan. Solusi untuk subtugas 2 adalah ini: kita akan mulai mengingat dua kata pada saat yang sama di mana mereka memiliki kesamaan. Artinya, sistem akan mengirimkan aktivasi oleh neuron yang sesuai dengan surat-surat itu. Jika huruf ditemukan dalam kedua kata, maka harus diingat. Untuk melakukan ini, biarkan ingatan terjadi dengan setengah kekuatan. Jika ambang aktivasi neuron adalah T, maka rantai memori harus mengirim 0,5 T potensial aksi. Maka ambang aktivasi hanya akan terlampaui jikaketika gejala bertemu di kedua rantai. Setelah ini, gejalanya menjadi diaktifkan. Kemudian Anda dapat menggunakan algoritme menghafal yang biasa dengan kode dari artikel sebelumnya - hippocampus akan membuat rantai memori, menugaskannya tanda-tanda yang umum untuk kedua rantai. Kami mengurangi solusi ke solusi sebelumnya.Dalam ENS (NS alami), "setengah aktivasi" dapat dicapai dengan memvariasikan waktu pengiriman (jumlah lonjakan yang tiba), jumlah neurotransmitter, atau mungkin dengan menggunakan koneksi penghambat (untuk mengubah 1T menjadi 0,5T).Subtask 1 agak lebih rumit, karena seharusnya bekerja dengan pengenalan fuzzy. Artinya, bahkan jika hanya ada beberapa tanda umum dalam rantai yang hilang di suatu tempat di tengah rantai, Anda harus tetap memperhatikan situasi ini. Biarkan saya mengingatkan Anda bahwa, secara relatif, neuron dapat dalam tiga mode - istirahat, mengirim sinyal tunggal, dan mode aktivasi frekuensi tinggi. Dapat diterima bahwa "pengakuan penuh" mengarah ke transisi neuron ke mode aktivasi frekuensi tinggi, dan pengakuan fuzzy mengarah ke transmisi sinyal tunggal. Atau kita dapat berasumsi bahwa akan ada neuron khusus dalam neurocluster, beberapa di antaranya hanya akan bekerja dengan kebetulan dan pengakuan percaya diri, dan neuron lain akan bekerja jika hanya sebagian dari fitur yang dikenali. Ada banyak solusi, yang utama adalah entah bagaimana memperhatikan tampilan aktivasi pada cluster yang diinginkan.Kapan melakukannya
pertanyaannya adalah jam berapa untuk melakukan pencarian seperti itu. Ada beberapa pendekatan:1) mode tidur khusus - lebih tepatnya, "tidur lambat". Sistem melewati semua peristiwa yang dipelajari dalam sehari, dan mencari kecocokan dengan ingatan lainnya. Dalam hal ini, sistem menggunakan memori - mengirim dalam rantai menurun, kemudian memberikan waktu bagi neuron tanda untuk mengirim sinyal yang sudah "naik" ke memori lain. Setelah itu ia merangkum dan mencari ingatan-ingatan yang memiliki jumlah total aktivasi terbesar. Lalu ia memilih salah satu dari tempat-tempat ini dan meluncurkan subtugas 2 - βpilih rantaiβ.2) tanpa rejimen tidur khusus. Sistem dapat melakukan pencarian dengan cepat, selama persepsi - dan seperti apa situasi saat ini? Sebenarnya, pencarian terjadi secara otomatis selama pemikiran normal karena pengiriman sinyal oleh neuron, sistem hanya dapat memperhatikan ingatan yang memiliki banyak kesamaan dengan situasi saat ini, dan jika perlu, jalankan analisis - pilih sub-rantai umum.Algoritma serupa
Algoritma ini tampak sederhana, tetapi mereka mengandung banyak seluk-beluk, bahkan lebih dari pada algoritma pengurutan cepat, yang, seperti yang Anda tahu, tidak dapat ditulis untuk waktu yang lama tanpa kesalahan.Tugas ini mirip dengan tugas yang diketahui, misalnya, mencari urutan DNA umum. Hanya DNA pada setiap langkah yang hanya dapat memiliki satu nukleotida, dan dalam jaringan saraf untuk setiap stempel waktu dapat terdapat jumlah karakter yang berubah-ubah. Oleh karena itu, tugas ini adalah kasus yang lebih umum dibandingkan dengan pencarian DNA. Jika Anda mencoba mentransfer algoritme yang ada dan menyelesaikan masalah "celah" seperti itu, tanpa jaringan saraf, dengan memanipulasi daftar tanda, maka kepala Anda mulai berputar - semua daftar pertandingan bersarang ini, daftar urutan pertandingan, daftar urutan pertandingan, pertanyaan lain. Memecahkan masalah ini dengan mengirimkan aktivasi ke neuron jauh lebih sederhana - neuron sudah ada, mereka melakukan semuanya secara otomatis, ingatan mereka sudah dialokasikan, tidak ada daftar yang diperlukan, itu tetap hanya untuk menganalisis beberapa neuron dan menjalankan algoritma yang diperlukan.Saya memanggil mode subtugas 1 dan 2 dengan masing-masing satu dan dua rantai utama. Yaitu, "berapa banyak neuron turun aktif dalam rantai memori mengirim sinyal dalam upaya untuk menyoroti kecocokan." Jika hanya ada satu rantai yang ditarik kembali seperti itu, maka ia sedang mencari kandidat kedua untuk verifikasi. Dan jika kandidat telah ditemukan, maka Anda dapat mengaktifkannya dan mulai menyorot tanda-tanda. Nama-nama tersebut - "1 atau 2 rantai terkemuka" - akan memungkinkan untuk merujuk pada algoritma ini dengan nama, daripada "subtask 1 atau 2". Mode dengan satu rantai utama juga bisa disebut "mode pencarian kebetulan", dan 2 rantai utama dapat disebut mode menyoroti kebetulan.Cari yang cocok ...
(1 , 1 rantai terkemuka) dapat dilakukan dengan cara-cara berikut:1) melihat semua kenangan yang bertemu sepanjang hari secara linear. Transisi ke mode ini untuk keperluan debugging dapat dilakukan sebagai berikut: karakter Unicode khusus atau kata khusus dimasukkan ke dalam set uji data input untuk JST, setelah membaca, JST akan beralih ke mode "tidur lambat" dan mulai mencari kecocokan. Artinya adalah ini - mereka mengisi JST dengan data nyata, meluncurkan algoritma debugging untuk menemukan generalisasi.2) untuk menggunakan bukan pencarian linear, tetapi untuk memulai analisis dengan situasi yang paling menarik - dengan mereka yang memiliki warna emosional terbesar. Optimasi ini diperlukan, karena algoritma ini sangat rakus. Pada tikus, tampaknya ingatan akan apa yang terjadi hanya sekitar 10 kali lebih cepat dari pada siang hari. Tidur membutuhkan waktu lebih sedikit daripada bangun. Jadi, dengan distribusi waktu yang merata di semua ingatan, setiap ingatan dapat dikelola untuk membandingkan hanya beberapa situasi yang serupa, yang sebagian besar akan menjadi sampah dan kebetulan yang tidak penting. Oleh karena itu, penting untuk berkonsentrasi pada yang paling penting, dan mulai bekerja dengannya. Kita dapat mengatakan bahwa algoritma menambahkan satu langkah lagi - 0 rantai utama, pada langkah ini sistem harus memilih peristiwa berikutnya dalam memori dengan kepentingan maksimum,dan meneruskannya ke langkah berikutnya - jadikan itu rantai utama untuk menemukan kecocokan.3) dimungkinkan untuk membuat serif dari saat terjaga - pra-membuat koneksi ke tempat-tempat paling menarik yang perlu dibandingkan di malam hari.Rantai yang dipilih dengan kebetulan kebetulan diingat, tetapi di masa depan mereka dapat dilupakan jika kepentingannya memudar seiring waktu.Lupa
Lupa menyebabkan neurocluster dihapus - operasi removeNC, kebalikan dari operasi newNC. Dalam ENS, neuron tidak akan pergi ke mana pun, mereka tidak akan mati, koneksi mereka hanya akan melemah sedemikian rupa sehingga mereka tidak akan lagi bereaksi terhadap tanda-tanda mereka, dan akan siap menyesuaikan kembali untuk mengingat kombinasi lain. Dalam model kami, neuron semacam itu tidak perlu disimpan, mereka dapat segera dihapus - ini akan mempercepat operasi JST, mengurangi konsumsi memori, dan menyederhanakan debugging. Ini memungkinkan Anda untuk mengurangi kebutuhan konsumsi memori dengan urutan besarnya.Paralelisasi
Untuk melakukan transisi dari mode 1 ke 2 , pada awalnya saya mencoba membuat neuron kontrol yang menghasilkan pengalihan sinyal, analisis, dan perubahan mode. Tapi kemudian saya menemukan pekerjaan ini terlalu rendah dan mulai menulis kode C ++ imperatif - kode seperti "berjalan melalui semua cluster, menganalisisnya, pilih yang Anda butuhkan, pikirkan apakah akan mengubah mode operasi".Pertanyaan tentang kinerja sistem seperti itu: jika Anda membuat perangkat keras neuron, Anda dapat memparalelasinya (ya, setidaknya pada kartu video). Kemudian kode dengan mengendalikan neuron dan koneksi di dalam cluster dengan mudah dan otomatis diparalelkan (ini hanya paket aktivasi yang diparalelkan sesuai dengan kondisi tugas), tetapi kode C ++ yang penting harus diparalelisasi setiap kali secara independen. Oleh karena itu, untuk jaringan saraf single-threaded kecil, lebih mudah untuk menulis kode C ++, dan untuk JST paralel besar-besaran, lebih baik untuk mentransfer pekerjaan ini di dalam JST itu sendiri ke pundak neuron dan koneksi di antara mereka. Kita tidak boleh lupa bahwa "cycle through all neuron" atau "cycle through all neuroclusters" dalam C ++ dari sudut pandang perangkat keras JST adalah O (1), satu langkah pengiriman aktivasi. Karena itu bisa dilihatbaik 1VTs dan 2VTs (rantai terkemuka) untuk JST paralel yang ideal memiliki kompleksitas komputasi yang sama.Lanjutan: Peramalan primitif di JSTSource: https://habr.com/ru/post/id388725/
All Articles