Logika pemikiran - spin-off

Saya mempersembahkan kepada Anda serangkaian artikel tentang jaringan saraf, secara konseptual dekat dengan serangkaian artikel oleh Alexei Redozubov . Untuk memahami materi, disarankan agar Anda membiasakan diri dengan seluruh siklus artikelnya. Tautan hanya berisi satu artikel dari siklus, berguna untuk teks ini.

KDPV
Model jaringan saraf yang dijelaskan (selanjutnya disebut NS) akan memiliki tingkat yang sedikit lebih tinggi daripada Aleksei. Hal ini memungkinkan kami untuk menyederhanakan presentasi dan memahami proses yang terjadi di NS, yang kemudian akan memungkinkan kami untuk beralih ke penyetelan NS tingkat rendah yang lebih baik. Juga, bekerja pada NS seperti itu memungkinkan untuk menggunakannya lebih cepat. Secara khusus, saya menggunakannya untuk mem-parsing teks, mensimulasikan mouse berjalan melalui labirin dan menafsirkan bahasa mirip-lisp, mungkin ada banyak aplikasi lain. Kami akan mendekati perilaku rumit seperti itu dengan lancar menjelang akhir siklus.
Mari kita mulai dengan menggambarkan pendekatan tingkat yang lebih tinggi. Artikel Alexey tentang hippocampus memiliki kalimat: "hippocampus membentuk pengidentifikasi unik untuk kenangan." Mari kita mulai dengan kode sederhana yang akan melakukan tindakan ini - buat pengidentifikasi unik dan hubungkan ke acara yang dijelaskan. Kode C ++. Saya belum mengunggah kode sumber - tanpa penjelasan persiapan, mereka masih memiliki sedikit kegunaan.

NC & hippocampNewId = newNC ();

Alih-alih neuron individu, unit program utama adalah gugus / kolom saraf. Nama kelasnya adalah NC (kependekan dari NeuroCluster). Karena sejumlah besar neuroclusters dibuat di NS (dalam percobaan saya, ratusan ribu), tidak diinginkan untuk menggunakan operator baru untuk mengisolasi neuroclusters baru - ia berjalan lambat dan memiliki overhead memori yang besar. Oleh karena itu, fungsi newNC digunakan, yang menggunakan kumpulan neuroclusters, dan mengalokasikannya dari sana. Alih-alih sebuah pointer, fungsi ini mengembalikan referensi ke NC, yang membuat kode lebih nyaman dan aman.
Secara konseptual, kode ini sesuai dengan kira-kira pendekatan ini: di Majelis Nasional ada banyak kolom saraf, perlu untuk mengalokasikan kolom berikutnya yang digunakan dengan lemah, dan akan bertanggung jawab untuk pengidentifikasi baru. Merinci cara di mana isolasi tersebut akan terjadi adalah tugas tingkat rendah untuk spesialis hippocampal. Ini juga menarik, saya punya pemikiran tentang bagaimana menyelesaikannya, tetapi tugas seperti itu terlalu rendah, jadi kita akan melanjutkan.
Mari kita menulis siklus perjalanan melalui semua neuroclusters:

untuk (NC & nc: _listNC) {
	if (nc.isActive ())
		// di sini kita perlu menghubungkan neurocluster ini dengan hippocampNewId
}


Neurocluster aktif adalah contohnya sensasi saat ini, tanda dari sensorik korteks, aksi saat ini, dan sebagainya.
Dalam model Alexey, koneksi seperti itu akan dibuat melalui tuning - cluster akan belajar mengenali gelombang identifikasi baru. Untuk membuat koneksi tidak langsung seperti itu, Anda memerlukan banyak sumber daya komputasi - Anda membutuhkan banyak neuron dan koneksi (seratus atau dua neuron per neurocluster), banyak perhitungan, Anda perlu mensimulasikan bagian dari gelombang identifikasi melalui seluruh korteks, bagian ini akan memakan banyak waktu. Kami akan melakukannya dengan lebih mudah - membuat koneksi perangkat lunak secara langsung:

untuk (NC & nc: _listNC) {
	if (nc.isActive ())
		hippocampNewId.createLinkTo (nc);
}


Setelah itu, label hippocampus baru perlu dikaitkan dengan kenangan masa lalu:
	hippocampNewId.createTimeLinkTo (_prevHippocampId);

Dan akhirnya, untuk siklus berikutnya, kami akan mengganti:
	_prevHippocampId = hippocampNewId;

Tentu saja, ini masih berupa kode semu. Dipahami bahwa ini adalah kode di kelas ANN. Oleh karena itu, fungsi newNC adalah fungsi anggota dari kelas HC. Jika variabel dimulai dengan garis bawah, variabel ini adalah anggota kelas (sesuatu seperti awalan m_, hanya saja tidak harus melafalkan huruf m, yang membuat pemrograman lebih nyaman).
Kelebihan Alexei adalah bahwa penemuannya memungkinkan Anda untuk menulis kode seperti createLinkTo. Sebelum artikelnya, orang hanya bisa menebak bagaimana menghubungkan kedua ingatan dengan cepat. Lagipula, otak tidak dapat secara instan menyambungkan koneksi dari akson satu neuron ke belahan otak lainnya, dan karenanya seratus kali setiap detik. Teknologi Alexey mengubah seluruh otak dengan hippocampus menjadi sebuah saklar yang dapat dengan cepat menciptakan asosiasi yang sewenang-wenang. Sekitar 15 tahun yang lalu, saya menerima keberadaan mekanisme seperti itu sebagai hadiah, dan bekerja, berharap bahwa suatu hari nanti itu akan dibuka. Hanya tinggal menulis kode dengan keraguan - tetapi berapa banyak semua ini masuk akal secara biologis? Berbagai fakta menunjukkan adanya mekanisme semacam itu, dan akhirnya, detail terungkap.
Yah, entah bagaimana kami menghubungkan memori terkini yang paling aktif dan label hippocampus baru. Apa yang ini berikan pada kita? Mari kita membuatnya sehingga setelah menerima serangkaian acara yang mirip dengan yang diingat sebelumnya, cap waktu yang dihafal dapat mengenali seri baru ini sebagai sesuatu yang sudah ditemui. Maka akan dimungkinkan untuk melakukan hal-hal yang berbeda - misalnya, untuk memulai perkiraan berdasarkan pengalaman.
Untuk melakukan ini, sementara pindah ke tugas lain. Biarkan sensor korteks JST (NS buatan) menerima surat. Misalnya, membacanya dari file. Tugasnya adalah membuat rantai saraf yang akan mengenali kata - misalnya, kata "dikenali". Selain itu, pengakuan ini harus berasal dari beberapa komponen - dari tiga rantai "ras", "pose", "uang tunai" yang terpisah.
Prinsip umum dari solusi umumnya jelas, dan dijelaskan, misalnya, dalam Hierarchical Temporal Memory Hawkins. Tetapi untuk gambar di bawah ini, Anda perlu memberikan penjelasan (gambar dapat ditarik oleh tikus di bilah tab untuk membuka di tab baru):


1) dalam model JST yang lebih lama, kluster neuron digunakan, tetapi neuron (seperti di sini ), tetapi sekarang mengangkat sumber lama dari Laboratorium Neural 3 dan membuat mereka berkumpul terlalu melelahkan, jadi saya akan mengilustrasikan dengan gambar-gambar yang dihasilkan dalam versi terbaru dari Neuro Lab 4. Oleh karena itu, walaupun abstraksi dari neuroclusters akan ditampilkan, saya akan memanggil mereka neuron - itu harus jelas dari konteksnya apa yang kita bicarakan
2) Jendela ini - tab "rantai 2d" - menciptakan visualisasi yang nyaman dari bagian dari jaringan saraf. Tidak nyaman untuk melihat jaringan saraf seperti yang terlihat pada gambar pertama dalam artikel. Dan jendela ini memungkinkan Anda untuk menentukan neurocluster yang terpisah, menganalisis koneksi, dan hanya memperlihatkan kluster yang dapat dijangkau oleh koneksi dari yang dipilih. Ini mengatur cluster berturut-turut, menunjukkan tanda-tanda anak perempuan di bawah ini, memiliki koneksi temporal secara horizontal. Sekarang lebih mudah untuk melihat bahwa rantai ini menganalisis kata "dikenali".
3) Dapat dilihat bahwa cluster yang berbeda memiliki tipe yang berbeda, tipe berbeda dicat dengan warna berbeda. Gambar ini menunjukkan neuroklustor sensorik (sensorik) dan sensorik (sensorik) yang biasa - mereka bersesuaian dengan sensorik korteks. Komunikasi dari gugus sensor ke sensor sebenarnya tidak dimodelkan karena kurangnya kebutuhan. Dalam hal ini, jenis cluster yang terpisah diperlukan hanya untuk memfasilitasi debugging - misalnya, untuk tidak berpikir, "mengapa cluster ini tidak mengenali tanda-tanda, apakah itu tidak berguna?" Tidak, ini tidak sia-sia, ia mengenali surat yang ditunjukkan dalam komentar.
4) Dalam tooltip hijau pop-up (pada mouse hover), bidang yang berbeda ditampilkan. Di bagian paling bawah tooltip, skema visualisasi kluster ditampilkan. Model JST yang berbeda dapat memvisualisasikan kluster dengan cara yang berbeda., karena mereka dapat memiliki konten yang sangat berbeda (semua jenis variabel numerik, jumlah neuron internal, dll), dan sehingga jelas apa angka-angka ini, saya memutuskan untuk memberikan gambaran beserta petunjuk.
5) Mari kita menganalisis pengakuan "suku kata" suku kata pertama. Ini termasuk neuron sensorik 6, 7 dan 9, mereka diakui dalam urutan yang diinginkan karena neuron 8 dan 10. Jika mereka bekerja dalam urutan yang berbeda, atau setidaknya dengan penundaan satu siklus clock, sinyal tidak akan mencapai neuron 10.
6) Menurut skema di atas, orang mungkin berpikir bahwa setelah neuron nomor 10 dengan huruf "c" mengirim sinyal ke neuron nomor 20 dari suku kata lain, sinyal akan tiba terlalu dini dan punya waktu untuk keluar sebelum suku kata kedua dikenali. Sebelumnya, untuk mengatasi masalah ini, saya menggunakan "delay neuron" yang mengirim sinyal sehingga akan tiba tepat pada saat yang sama dengan neuron lain yang membutuhkannya. Sekarang saya belajar cara menggunakan pengaturan koneksi yang benar, yang akan dijelaskan dalam artikel terpisah, jadi neuron penundaan tidak diperlukan. Karena itu, mereka tidak ada dalam gambar.
7) Sirkuit ini dengan neuron, untuk mengenali kata dengan benar, mengirimkan sinyal "ke kanan" dan "ke atas". Ini sesuai dengan berlalunya waktu dan peningkatan tingkat atribut dalam hierarki. Tetapi tooltip menunjukkan bahwa jumlah koneksi masuk dan keluar sedemikian rupa sehingga koneksi lebih cenderung mengarah "turun". Ini adalah fitur dari operasi neuroclusters, tidak memperhatikan, untuk sirkuit dengan neuron, komunikasi menuju ke kanan dan ke atas.
8) Untuk kenyamanan, jendela ini menggambar nomor baris dan kolom di sepanjang tepi layar, serta waktu offset, relatif terhadap operasi cluster yang dipilih utama - yaitu, orang yang pengenalnya dimasukkan dalam bidang input dan yang disorot oleh bingkai tebal di kanan atas
9) Format waktu yang kompleks (waktu pembuatan neuron tipe 0: 0,0-0) akan dijelaskan nanti. Karena NS ini dihasilkan untuk ilustrasi, waktu pembuatan semua neuron adalah sama di sini. Di sirkuit nyata, kali ini akan menunjukkan jam di mana kolom saraf yang diberikan disetel untuk mengenali atribut tertentu. Inilah saatnya fungsi newNC dipanggil. Informasi ini kemudian dapat digunakan untuk debugging dan banyak lagi.
10) Rantai seperti itu, tentu saja, dapat menghafal lebih dari satu atribut setiap saat (neuron dapat memiliki sejumlah koneksi). Dalam hal ini, neuron memiliki satu koneksi untuk setiap langkah waktu, karena huruf dikenali. Jika ada rantai visual, gambar akan sangat berbeda, dengan jumlah koneksi yang sangat besar. Untuk tujuan pendidikan, lebih mudah untuk bekerja dengan surat. Bahkan ketika mengenali huruf, dalam satu stempel waktu, koneksi ke banyak kluster dapat diingat - melalui surat, pada akhir suku kata yang dikenali, pada akhir kata yang dikenali, dengan pemikiran paralel yang menyertai perenungan teks. Ini adalah perbedaan yang signifikan antara neuroclusters dan lisp, di mana mobil / cdr hanya mengandung satu pointer. Semantik hubungan seperti itu dalam lisp kurang nyaman untuk AI - karena sel tunggal tidak dapat dianggap sebagai asosiasi penuh,Untuk melakukan ini, Anda perlu mengekstrak daftar atribut yang terpisah dari sel, yang dapat dihubungkan dengan cara yang sangat berbeda. Oleh karena itu, upaya untuk bekerja dengan AI pada Lisp segera memberikan solusi yang jelas - karakter terpisah = sel yang terpisah, dan ini adalah level yang terlalu rendah untuk bekerja, tidak nyaman untuk membuat AI on lisp.
Bagian selanjutnya membahas beberapa algoritma untuk menyoroti refleks yang dikondisikan.

Source: https://habr.com/ru/post/id388719/


All Articles