Jaringan saraf untuk pemula - jaringan saraf untuk boneka. Cara kerja jaringan saraf: algoritme, pelatihan, aktivasi, dan fungsi kehilangan Cara membuat jaringan saraf untuk game

Baru-baru ini, semakin sering mereka berbicara tentang apa yang disebut jaringan saraf, kata mereka, segera mereka akan digunakan secara aktif dalam robotika, dan dalam teknik mesin, dan di banyak bidang aktivitas manusia lainnya, tetapi algoritma mesin pencari, Google yang sama, sudah perlahan mulai menggunakannya. Apa jaringan saraf ini, bagaimana cara kerjanya, apa aplikasinya dan bagaimana mereka dapat berguna bagi kita, baca lebih lanjut tentang semua ini.

Apa itu jaringan saraf?

Jaringan saraf tiruan adalah salah satu bidang penelitian ilmiah di bidang penciptaan kecerdasan buatan (AI), yang didasarkan pada keinginan untuk meniru sistem saraf manusia. Termasuk kemampuannya (sistem saraf) untuk mengoreksi kesalahan dan belajar mandiri. Semua ini, meskipun agak kasar, seharusnya memungkinkan kita untuk mensimulasikan kerja otak manusia.

Jaringan saraf biologis

Tetapi definisi dalam paragraf di atas adalah murni teknis, tetapi berbicara dalam bahasa biologi, jaringan saraf adalah sistem saraf manusia, kumpulan neuron di otak kita, berkat itu kita berpikir, membuat keputusan tertentu, memahami dunia di sekitar. kita.

Neuron biologis adalah sel khusus yang terdiri dari nukleus, tubuh, dan proses, terlebih lagi, memiliki hubungan dekat dengan ribuan neuron lainnya. Melalui koneksi ini, impuls elektrokimia terus-menerus ditransmisikan, membawa seluruh jaringan saraf ke keadaan eksitasi atau sebaliknya. Misalnya, beberapa peristiwa yang menyenangkan dan sekaligus mengasyikkan (bertemu dengan orang yang dicintai, memenangkan kompetisi, dll.) Akan menghasilkan impuls elektrokimia di jaringan saraf yang terletak di kepala kita, yang akan mengarah pada eksitasinya. Akibatnya, jaringan saraf di otak kita akan mengirimkan eksitasinya ke organ tubuh kita yang lain dan akan menyebabkan peningkatan detak jantung, lebih sering mengedipkan mata, dll.

Di sini, di gambar, adalah model jaringan saraf biologis otak yang sangat disederhanakan. Kita melihat bahwa neuron terdiri dari badan sel dan nukleus, badan sel, pada gilirannya, memiliki banyak serat bercabang yang disebut dendrit. Dendrit panjang disebut akson dan memiliki panjang yang jauh lebih besar daripada yang ditunjukkan pada gambar ini, melalui akson, komunikasi antar neuron dilakukan, berkat mereka jaringan saraf biologis bekerja di kepala kita.

Sejarah jaringan saraf

Bagaimana sejarah perkembangan neural network dalam ilmu pengetahuan dan teknologi? Berawal dari munculnya komputer atau komputer pertama (electronic computer) seperti yang disebut pada masa itu. Jadi kembali di akhir 1940-an, Donald Hebb tertentu mengembangkan mekanisme jaringan saraf, yang menetapkan aturan untuk mengajar komputer, "protokomputer" ini.

Kronologis kejadian selanjutnya adalah sebagai berikut:

  • Pada tahun 1954, penggunaan praktis pertama jaringan saraf dalam pengoperasian komputer terjadi.
  • Pada tahun 1958, Frank Rosenblatt mengembangkan algoritma untuk pengenalan pola dan anotasi matematika untuk itu.
  • Pada 1960-an, minat dalam pengembangan jaringan saraf agak memudar karena daya komputasi yang lemah saat itu.
  • Dan itu dihidupkan kembali lagi pada 1980-an, selama periode inilah sistem dengan mekanisme umpan balik muncul, algoritma belajar mandiri dikembangkan.
  • Pada tahun 2000, kekuatan komputer telah berkembang pesat sehingga mereka mampu mewujudkan impian terliar para ilmuwan di masa lalu. Pada saat ini, program untuk pengenalan suara, visi komputer, dan banyak lagi muncul.

Jaringan saraf tiruan

Jaringan saraf tiruan umumnya dipahami sebagai sistem komputasi yang memiliki kemampuan untuk belajar sendiri, secara bertahap meningkatkan kinerjanya. Elemen utama dari struktur jaringan saraf adalah:

  • Neuron buatan, yang merupakan unit dasar yang saling berhubungan.
  • adalah koneksi yang digunakan untuk mengirim dan menerima informasi antar neuron.
  • Sinyal adalah informasi aktual yang akan ditransmisikan.

Aplikasi jaringan saraf

Ruang lingkup jaringan saraf tiruan berkembang setiap tahun, hari ini mereka digunakan di bidang-bidang seperti:

  • Pembelajaran mesin adalah jenis kecerdasan buatan. Ini didasarkan pada pelatihan AI pada contoh jutaan tugas dengan jenis yang sama. Saat ini, pembelajaran mesin secara aktif diterapkan oleh mesin pencari Google, Yandex, Bing, Baidu. Jadi, berdasarkan jutaan kueri penelusuran yang kita semua masukkan setiap hari di Google, algoritme mereka belajar untuk menunjukkan kepada kita hasil yang paling relevan sehingga kita dapat menemukan dengan tepat apa yang kita cari.
  • Dalam robotika, jaringan saraf digunakan dalam pengembangan berbagai algoritma untuk "otak" besi robot.
  • Arsitek sistem komputer menggunakan jaringan saraf untuk memecahkan masalah komputasi paralel.
  • Dengan bantuan jaringan saraf, matematikawan dapat memecahkan berbagai masalah matematika yang kompleks.

Jenis Jaringan Syaraf

Secara umum, berbagai jenis dan jenis jaringan saraf digunakan untuk tugas yang berbeda, di antaranya kita dapat membedakan:

  • Jaringan Saraf konvolusional,
  • jaringan saraf berulang,
  • Jaringan saraf Hopfield.

Jaringan Saraf Konvolusional

Jaringan convolutional adalah salah satu jenis jaringan saraf tiruan yang paling populer. Jadi mereka membuktikan keefektifannya dalam pengenalan pola visual (video dan gambar), sistem rekomendasi, dan pemrosesan bahasa.

  • Jaringan saraf convolutional sangat skalabel dan dapat digunakan untuk pengenalan pola resolusi besar apa pun.
  • Jaringan ini menggunakan neuron tiga dimensi volumetrik. Dalam satu lapisan, neuron hanya dihubungkan oleh bidang kecil, yang disebut lapisan reseptif.
  • Neuron lapisan tetangga terhubung melalui mekanisme lokalisasi spasial. Pekerjaan banyak lapisan semacam itu disediakan oleh filter non-linier khusus yang merespons peningkatan jumlah piksel.

Jaringan Saraf Berulang

Jaringan saraf semacam itu disebut berulang, hubungan antara neuron yang membentuk siklus indikatif. Memiliki ciri-ciri sebagai berikut:

  • Setiap koneksi memiliki bobotnya sendiri, yang juga menjadi prioritas.
  • Node dibagi menjadi dua jenis, introductory node dan hidden node.
  • Informasi dalam jaringan saraf berulang ditransmisikan tidak hanya dalam garis lurus, lapis demi lapis, tetapi juga antara neuron itu sendiri.
  • Fitur pembeda penting dari jaringan saraf berulang adalah adanya apa yang disebut "area perhatian", ketika mesin dapat diberikan potongan data tertentu yang memerlukan pemrosesan yang ditingkatkan.

Jaringan saraf berulang digunakan dalam pengenalan dan pemrosesan data teks (dalam frekuensi, mereka didasarkan pada penerjemah Google, algoritma Yandex Palekh, dan asisten suara Apple Siri).

Jaringan saraf, video

Dan akhirnya, video menarik tentang jaringan saraf.


Saat menulis artikel, saya berusaha membuatnya semenarik, bermanfaat, dan berkualitas tinggi. Saya akan berterima kasih atas umpan balik dan kritik membangun dalam bentuk komentar pada artikel. Anda juga dapat menulis keinginan / pertanyaan / saran Anda ke email saya [dilindungi email] atau di Facebook, dengan hormat, penulis.

Jika Anda seorang pemain sepak bola berpengalaman yang membaca grafik pertahanan semudah rambu-rambu jalan, atau bintang film yang namanya saja dapat membuat film box office, atau pialang saham yang mengetahui barang-barangnya lebih baik daripada Warren Buffett, maka selamat: Anda akan sangat dihargai, seperti ilmuwan data atau insinyur pembelajaran mesin dengan gelar PhD dari Stanford, MIT, atau Universitas Carnegie Mellon. Setiap perusahaan di Lembah Silikon - dan semakin banyak perusahaan di wilayah lain - berusaha memperoleh spesialis semacam itu, berpartisipasi dalam semacam permainan menangkap bendera, hanya di bidang kebijakan personel. Perusahaan semakin menyadari bahwa daya saing mereka bergantung pada penggunaan pembelajaran mesin dan, dan jumlah lowongan untuk spesialis di bidang ini jauh melebihi apa yang dibutuhkan negara adidaya lainnya.

Tapi bagaimana jika Anda bisa menuai keuntungan menggunakan AI tanpa harus mempekerjakan talenta langka dan mahal itu? Bagaimana jika ambang masuk ini dapat diturunkan dengan perangkat lunak pintar? Dapatkah pembelajaran mendalam digunakan dengan tenaga kerja yang kurang beragam?

Sebuah startup bernama Bonsai dan seluruh grup perusahaan serupa menjawab ya untuk pertanyaan ini. Bersiaplah untuk mendemokratisasikan kecerdasan buatan. Suatu hari gerakan ini dapat menyatukan jutaan, jika bukan miliaran, orang di bawah panjinya.

Pada Konferensi Pengembang AI O'Reilly di New York, CEO Bonsai Mark Hammond mengadakan presentasi tentang perusahaannya. (Dia juga mengumumkan putaran investasi $6 juta—bukan uang sebanyak itu mengingat investasi AI VC sudah $1,5 miliar tahun ini.) Presentasi tersebut mencakup pengulangan salah satu pencapaian paling terkenal dari pembelajaran mendalam pengembang elit: menjalankan algoritma DeepMind game lama untuk komputer Atari secara real time. Secara khusus, permainan yang disebut Breakout ("Tenis"), di mana platform menyentuh "bola" persegi yang memecahkan blok yang berkedip-kedip. (Permainan, dirilis pada tahun 1976, merupakan terobosan pada masanya - dia mengerjakannya sendiri)

37 baris kode - seluruh struktur jaringan saraf, yang dilatih melalui game Atari klasik. Sumber: Bonsai

Varian DeepMind diciptakan oleh pakar AI terbaik dunia yang mengajarkan jaringan saraf dasar-dasar permainan Atari, dan hasil kerja mereka layak untuk publikasi ilmiah kelas dunia. Versi Bonsai adalah penyederhanaan. Semuanya dimulai dengan sistem pengembangan yang diunggah ke cloud. Hanya satu programmer, bahkan yang belum mempelajari dasar-dasar AI sama sekali, dapat menggambarkan permainan secara umum, dan sistem itu sendiri akan memilih algoritma pembelajaran yang sesuai untuk menggunakan jaringan saraf. (PhD yang buruk di DeepMind harus menulis algoritme ini sendiri.) Pada tahap ini, programmer hanya perlu meletakkan prinsip-prinsip dasar permainan dalam beberapa menit - misalnya, "menangkap bola di platform" - dan kemudian Bonsai sendiri akan mengembangkan jaringan saraf dan mengoptimalkannya untuk yang terbaik hasil. Dan jaringan saraf pada output sudah akan memainkan "Tenis" itu sendiri.

Versi permainan yang ditulis oleh Bonsai hanya 37 baris kode. Tapi kesederhanaan ini menipu. Ketika Hammond menjelaskan inti dari algoritme, ia menunjukkan gambar yang menunjukkan bagaimana sistemnya membangun jaringan saraf yang dapat bersaing dengan salah satu kreasi terbaik Google. Pemrogram sendiri bahkan tidak perlu mempelajari seluk-beluk pembelajaran mesin. Dengar, bu, aku bisa melakukannya tanpa gelar doktor!


Beginilah cara jaringan saraf yang dilatih oleh sistem Bonsai memainkan Tenis. Sumber: Bonsai

Trik yang mengesankan. “Biasanya sulit untuk membuat saya terkesan dengan demo,” kata George Williams, seorang peneliti di Courant Institute for Mathematics di New York University. - Namun, apa yang ditunjukkan Mark kepada saya cukup nyata dan pada saat yang sama menakjubkan. Dia mengambil semua pencapaian kecerdasan mesin dan menciptakan alat yang memungkinkan pengembangan sistem AI generasi baru.”

Belum jelas apakah Bonsai akan tetap menjadi pemimpin gerakan ini. Tapi Williams benar. Langkah selanjutnya dalam kemunculan komputer pintar yang semakin tak terelakkan adalah pengembangan alat pembelajaran mesin untuk (relatif) boneka.

Bonsai lahir di pantai. Hammond, mantan insinyur perangkat lunak dan penginjil, telah memikirkan kemungkinan kecerdasan buatan untuk beberapa waktu. Setelah meninggalkan Microsoft pada tahun 2004, ia pindah ke ilmu saraf di Yale, kemudian pada tahun 2010 memiliki tugas singkat di Numenta, sebuah startup AI yang dimiliki oleh Jeff Hawkins (salah satu pendiri Palm, pembuat PDA). Hammond kemudian membuka perusahaan lain di bidang yang sangat berbeda, yang kemudian ia jual.

Kemudian, pada tahun 2012, Hammond datang ke California Selatan untuk mengunjungi teman-temannya. Putra kecilnya lelah dan semua orang kembali ke mobil. Sementara istri Hammond mengobrol dengan teman-temannya dan putranya tertidur di pelukannya, dia menjalankan eksperimen pemikiran. Inti dari eksperimen ini adalah meme populer dari dunia AI - konsep "algoritma master". Profesor Universitas Washington Pedro Dominguez menulis dalam sebuah buku dengan nama yang sama bahwa algoritma yang belum dibuat ini bisa menjadi obat mujarab untuk semua masalah industri. Secara teori, ketika algoritma ini masih ditemukan, dengan bantuannya dimungkinkan untuk memperkenalkan sistem AI secara metodis di mana saja.

Hammond menyimpulkan bahwa kita perlu membuat sistem yang memungkinkan pengembang paling biasa pun untuk menggunakan alat AI. Tetapi Hammond melihat satu kekurangan dalam gagasan ini. “Misalkan kita menemukan algoritme master ini,” katanya pada dirinya sendiri ketika putranya yang berusia 18 bulan tertidur di pelukannya, “siapa yang akan menerapkannya dalam skenario yang tak terhitung jumlahnya?” Saat ini, hanya pakar pembelajaran mesin yang dapat menggunakan alat tersebut. Peluang untuk menggunakan AI akan terlalu banyak untuk orang-orang ini dalam jumlah terbatas. Jadi dia sampai pada kesimpulan bahwa dia perlu membuat sistem yang menurunkan penghalang untuk masuk dan memungkinkan pengembang yang paling biasa-biasa saja untuk menggunakan alat ini. Sistem seperti itu tidak memerlukan insinyur yang sangat khusus untuk melatih jaringan saraf. Pemrogram akan dapat melatih mereka sendiri untuk mendapatkan hasil yang diinginkan.

Saat Hammond merenungkan ide-idenya, dia menarik analogi dengan sejarah pemrograman. Awalnya, operator komputer harus bersusah payah menulis kode yang membuat peralatan bekerja. Kemudian pemrogram mengadopsi satu set instruksi standar yang disebut bahasa rakitan dan mempercepat prosesnya - tetapi Anda masih perlu memiliki tingkat pelatihan yang sangat tinggi untuk melakukannya dengan benar. Terobosan datang ketika para insinyur membuat kompiler - sebuah program yang mengubah kode menjadi lebih nyaman, yang disebut bahasa "tingkat tinggi" (dari BASIC dan LISP pertama hingga Python dan C saat ini), menjadi kode bahasa rakitan . Hanya setelah itu, pembuatan aplikasi yang kuat menjadi tersedia bahkan untuk profesional tingkat rendah. Hammond percaya bahwa sekarang, berkat alat seperti Google TensorFlow, sistem AI telah mencapai tingkat bahasa rakitan, yaitu, para insinyur membuat jaringan saraf menjadi lebih mudah, tetapi tetap dapat diakses oleh mereka yang benar-benar memahami cara kerjanya. . Hammond ingin membuat analog kompiler untuk lebih menyederhanakan banyak hal.

Dia mengajukan ide itu kepada Kean Brown, mantan rekan Microsoft yang baru-baru ini menjual startup gamenya ke perusahaan internet China. Ia menyukai ide tersebut, karena saat itu ia hanya mencoba melakukan machine learning dengan menggunakan tools yang tersedia saat itu. "Secara umum, saya bukan orang bodoh. Saya datang ke China dan belajar bahasa mereka, bekerja sebagai programmer di Microsoft, tetapi bahkan bagi saya itu terlalu berlebihan." Dia setuju untuk ikut mendirikan Bonsai. (Nama ini dipilih karena seni Jepang ini menghasilkan keseimbangan sempurna antara yang alami dan yang buatan. Keuntungan lain datang ketika pemilik domain Internet mengizinkan perusahaan baru untuk mendaftarkan situs mereka di bons.ai.)

Bonsai bukan satu-satunya perusahaan yang bekerja untuk mengatasi kekurangan profesional AI yang terampil. Beberapa perusahaan besar menyadari perlunya melatih tenaga kerja mereka sendiri dan melatih pemrogram biasa untuk menjadi ahli jaringan saraf: Google membuat seluruh rangkaian program internal, dan Apple mulai memperhatikan keterampilan dan kualitas pribadi pemrogram yang akan membantu mereka dengan cepat menguasai keterampilan yang diperlukan. Seperti disebutkan di atas, Google juga telah merilis program TensorFlow ke publik, berkat para insinyurnya lebih mudah membuat jaringan saraf. Toolkit AI lainnya sudah tersedia, dan tidak diragukan lagi akan ada lebih banyak alat seperti itu.

"Kami membuka peluang baru bagi mereka yang bukan ilmuwan atau programmer" Pada saat yang sama, startup lain juga bekerja untuk mendemokratisasikan AI. Bottlenose mengatasi kekurangan ilmuwan, tetapi untuk audiens target yang berbeda: jika Bonsai membuat produknya terutama untuk pengembang perangkat lunak, Bottlenose berencana untuk membuat hidup lebih mudah bagi analis bisnis. Namun, motifnya sama. “Kami membuka peluang baru bagi mereka yang bukan ilmuwan atau programmer,” kata CEO Nova Spivak. Beberapa startup akan menjangkau lebih banyak pengguna: Presentasi Clarifai di konferensi O'Reilly berjudul "Bagaimana memastikan bahwa setiap orang di planet ini dapat mengajar dan menggunakan AI."

Jadi, sementara Bonsai tampaknya datang pada waktu yang tepat di tempat yang tepat, industri AI sangat berkembang pesat saat ini sehingga startup Hammond mungkin kesulitan menarik perhatian. Adam Cheyer, seorang spesialis AI yang membantu menciptakan dan sekarang menjadi chief engineer, telah melihat produk Bonsai dan sangat terkesan. Namun dia mencatat bahwa sementara Bonsai membuat AI dapat diakses bahkan oleh pemula, orang masih harus berusaha keras untuk memahami bahasa pemrograman mereka dan desain keseluruhan sistem. “Ketika perusahaan besar seperti Google meluncurkan produk baru, orang-orang bergegas untuk mencobanya. Tetapi jika sebuah startup membuat produk yang sama, jauh lebih sulit untuk menarik orang ke sana. Akankah mereka cukup kuat untuk melibatkan cukup banyak pengguna untuk membuat alat mereka populer? Apakah Bonsai akan berhasil atau tidak, sulit untuk dikatakan saat ini.”

Perusahaan telah membangun sistem dengan beberapa komponen, termasuk Brain, sistem berbasis cloud untuk membangun jaringan saraf, bahasa skrip yang disebut Inkling, dan Mastermind, "lingkungan pengembangan terintegrasi" yang menyediakan semua alat yang dibutuhkan programmer di satu tempat . (“Aplikasi untuk membuat aplikasi,” Brown menjelaskan). Sistem Bonsai tersedia untuk pengujian beta.

Mark Hammond di markas Bonsai di pusat kota Berkeley. Foto: Backchannel

Seperti yang dijelaskan Hammond, membangun jaringan saraf dengan Bonsai berbeda dalam beberapa cara utama dari cara para profesional melakukannya. Hari ini Anda harus memutuskan alat apa yang terbaik untuk memecahkan masalah, dan solusi ini membutuhkan pengetahuan dan pengalaman. Menurut Hammond, Bonsai melakukannya untuk Anda. Yang harus Anda lakukan adalah menjelaskan dasar-dasar apa yang ingin Anda ajarkan pada sistem.

Jadi, sementara insinyur sistem AI yang berpengalaman "melatih" jaringan dengan membandingkan output dengan hasil yang diinginkan (misalnya, menunjukkan foto jaringan anjing dan menghadiahkannya dengan output karakteristik yang sesuai), Bonsai memungkinkan Anda untuk "mengajar" sistem dengan hanya memecah seluruh proses menjadi prinsip-prinsip dasar. . Untuk melanjutkan contoh anjing, Anda dapat menyebutkan hal-hal seperti empat kaki, moncong, dan lidah yang menjulur keluar dari mulut. Anda hanya menyediakan basis yang diperlukan, dan "mesin pintar" berbasis cloud Bonsai, yang mencakup "otak", menyelesaikan masalah ini.

Pendekatan ini memiliki efek positif tidak langsung: para ilmuwan yang telah melatih jaringan saraf tradisional sering tidak tahu bagaimana tepatnya keajaiban dilakukan, karena jaringan seperti itu pada dasarnya mengkonfigurasi ulang diri mereka sendiri, mengatur segala sesuatu dengan cara yang hanya mereka yang dapat mengerti. Dalam kasus Bonsai, Anda dapat memahami prinsip-prinsip pemikiran jaringan sesuai dengan aturan yang ditetapkan pengguna. "Perangkat lunak seharusnya tidak menjadi kotak hitam," kata Hammond. Misalnya, jika Anda membuat program untuk kendaraan tak berawak dan tidak berhenti pada saat yang tepat, Anda harus dapat mempelajari dan memahami mengapa sistem membuat keputusan seperti itu. Dengan cara yang hampir sama, Amazon menjelaskan mengapa buku ini atau itu muncul dalam rekomendasi Anda.

Satu pertanyaan besar tentang pendekatan Bonsai adalah apakah semua hal abstrak ini akan mengurangi kinerja dan efisiensi. Ini biasanya terjadi ketika menggunakan kompiler: program yang ditulis dengannya tidak bekerja secepat dan seefisien yang ditulis dalam bahasa rakitan dan ditransfer langsung ke perangkat keras. Selain itu, untuk mengatakan bahwa sistem yang memilih alat untuk digunakan melakukannya lebih baik daripada profesor yang tampaknya tidak lagi perlu membangun jaringan saraf, itu akan menjadi berlebihan.

“Saya pikir Anda selalu harus berkompromi,” kata Laila Tretikov, seorang spesialis AI yang sebelumnya menjabat sebagai kepala Wikimedia Foundation dan menasihati Bonsai. - Hasilnya tidak akan sama persis seperti jika Anda melibatkan sekelompok ilmuwan. Tapi saya tidak yakin mana yang lebih penting: kualitas atau kemampuan untuk melakukannya sendiri.” Adam Cheyer dari Viv juga menyarankan bahwa kode Bonsai mungkin tidak bekerja seefisien perangkat lunak yang dioptimalkan untuk tugas tertentu. "Tapi itu masih kode yang sangat bagus, dan itu membuat Anda tidak masuk ke detail yang tidak perlu," tambahnya. Cheyer juga mengatakan bahwa perusahaannya, di mana spesialis AI yang berharga seperti itu bekerja, tidak mungkin menggunakan Bonsai - kecuali untuk membuat prototipe salah satu ide sebelum menerapkannya dengan cara lama yang dicoba dan benar.

Bonsai Membantu Gerakan untuk Membawa AI ke yang Tidak Terlatih Hammond, pada gilirannya, memastikan bahwa penurunan kualitas saat menggunakan Bonsai sama sekali tidak besar. “Produktivitas meningkat dari waktu ke waktu,” katanya, “Anda hanya perlu mempercayainya.” Suatu hari nanti akan mungkin tidak hanya untuk mempercayainya, tetapi juga untuk memeriksanya.

Bonsai memiliki rencana besar untuk beberapa bulan ke depan. Segera, perusahaan akan mengumumkan kemitraan dengan produsen komponen Nvidia, dan pelanggan Bonsai akan dapat memperoleh hasil yang lebih baik saat menggunakan peralatan merek ini. Perusahaan juga akan mempublikasikan informasi tentang kesepakatannya dengan pusat TTB Siemens, yang telah menguji sistem Bonsai di bidang otomasi dan kontrol produksi selama beberapa bulan terakhir.

Bonsai mencoba memecahkan masalah yang bahkan tidak dapat dipecahkan oleh perusahaan paling kuat sekalipun. "Kami sedang mengerjakan banyak game," tambah Hammond, menjelaskan bahwa game tersebut memecahkan masalah utama yang rencananya akan diselesaikan oleh Bonsai. “Beberapa game bahkan tidak cocok untuk DeepMind. Meskipun mereka telah mengajarkan algoritma mereka untuk memainkan banyak permainan selain Tenis, sistem mereka belum mampu memainkan Pac-Man.

Tetapi yang lebih penting, bagaimana Bonsai membantu gerakan untuk membawa AI ke yang tidak terlatih. Seiring waktu, alat tingkat tinggi akan menjadi lebih kuat dan akhirnya ada di mana-mana. Akankah kita sampai pada titik di mana setiap orang dapat melatih dan menggunakan kecerdasan buatan? Mari kita begini: banyak uang telah dipertaruhkan tepat pada skenario ini.

Jaringan saraf tiruan adalah kumpulan neuron yang berinteraksi satu sama lain. Mereka dapat menerima, memproses, dan membuat data. Ini sama sulitnya dengan membayangkan pekerjaan otak manusia. Jaringan saraf di otak kita bekerja sehingga Anda sekarang dapat membaca ini: neuron kita mengenali huruf dan memasukkannya ke dalam kata-kata.

Jaringan syaraf tiruan itu seperti otak. Awalnya diprogram untuk menyederhanakan beberapa proses komputasi yang kompleks. Saat ini, jaringan saraf memiliki lebih banyak kemungkinan. Beberapa di antaranya ada di ponsel cerdas Anda. Bagian lain telah mencatat dalam database-nya bahwa Anda membuka artikel ini. Bagaimana semua ini terjadi dan mengapa, baca terus.

Bagaimana semuanya dimulai

Orang-orang sangat ingin memahami dari mana pikiran seseorang berasal dan bagaimana otak bekerja. Di pertengahan abad terakhir, neuropsikolog Kanada Donald Hebb memahami hal ini. Hebb mempelajari interaksi neuron satu sama lain, menyelidiki prinsip yang dengannya mereka digabungkan menjadi kelompok-kelompok (secara ilmiah - ansambel) dan mengusulkan algoritma pertama dalam sains untuk melatih jaringan saraf.

Beberapa tahun kemudian, sekelompok ilmuwan Amerika memodelkan jaringan saraf tiruan yang dapat membedakan bentuk persegi dari bentuk lain.

Bagaimana cara kerja jaringan saraf?

Para peneliti menemukan bahwa jaringan saraf adalah kumpulan lapisan neuron, yang masing-masing bertanggung jawab untuk mengenali kriteria tertentu: bentuk, warna, ukuran, tekstur, suara, volume, dll. Tahun demi tahun, sebagai hasil dari jutaan dari eksperimen dan berton-ton perhitungan, jaringan paling sederhana telah ditambahkan lapisan neuron baru dan baru. Mereka bekerja secara bergiliran. Misalnya, yang pertama menentukan apakah persegi itu persegi atau bukan, yang kedua mengerti apakah persegi itu merah atau tidak, yang ketiga menghitung ukuran persegi, dan seterusnya. Bukan bujur sangkar, bukan merah dan figur berukuran tidak tepat jatuh ke dalam kelompok neuron baru dan diperiksa oleh mereka.

Apa itu jaringan saraf dan apa yang bisa mereka lakukan?

Para ilmuwan telah mengembangkan jaringan saraf sehingga mereka telah belajar membedakan antara gambar, video, teks, dan ucapan yang kompleks. Ada banyak jenis jaringan saraf saat ini. Mereka diklasifikasikan tergantung pada arsitektur - set parameter data dan bobot parameter ini, prioritas tertentu. Di bawah ini adalah beberapa di antaranya.

Jaringan Saraf Konvolusional

Neuron dibagi menjadi beberapa kelompok, masing-masing kelompok menghitung karakteristik yang diberikan padanya. Pada tahun 1993, ilmuwan Prancis Jan LeCun menunjukkan kepada dunia LeNet 1, jaringan saraf konvolusi pertama yang dapat dengan cepat dan akurat mengenali angka yang ditulis di atas kertas dengan tangan. Lihat diri mu sendiri:

Saat ini, jaringan saraf convolutional digunakan terutama untuk tujuan multimedia: mereka bekerja dengan grafik, audio, dan video.

Jaringan saraf berulang

Neuron secara konsisten mengingat informasi dan membangun tindakan lebih lanjut berdasarkan data ini. Pada tahun 1997, ilmuwan Jerman memodifikasi jaringan berulang yang paling sederhana menjadi jaringan dengan memori jangka pendek yang panjang. Berdasarkan mereka, jaringan dengan neuron berulang terkontrol kemudian dikembangkan.

Hari ini, dengan bantuan jaringan seperti itu, teks ditulis dan diterjemahkan, bot diprogram yang melakukan dialog yang bermakna dengan seseorang, kode untuk halaman dan program dibuat.

Penggunaan jaringan saraf semacam ini adalah kemampuan untuk menganalisis dan menghasilkan data, menyusun basis data, dan bahkan membuat prediksi.

Pada tahun 2015, SwiftKey merilis keyboard pertama di dunia yang didukung oleh jaringan saraf berulang dengan neuron terkontrol. Kemudian sistem memberikan petunjuk dalam proses pengetikan berdasarkan kata-kata terakhir yang dimasukkan. Tahun lalu, para pengembang melatih jaringan saraf untuk mempelajari konteks teks yang diketik, dan petunjuknya menjadi bermakna dan berguna:

Jaringan saraf gabungan (konvolusi + berulang)

Jaringan saraf semacam itu mampu memahami apa yang ada dalam gambar dan menggambarkannya. Dan sebaliknya: menggambar gambar sesuai dengan deskripsi. Contoh paling jelas ditunjukkan oleh Kyle Macdonald, yang mengambil jaringan saraf untuk berjalan-jalan di sekitar Amsterdam. Jaringan langsung menentukan apa yang ada di depannya. Dan hampir selalu persis:

Jaringan saraf terus belajar mandiri. Melalui proses ini:

1. Skype telah memperkenalkan kemungkinan terjemahan simultan untuk 10 bahasa. Di antaranya, untuk sesaat, ada Rusia dan Jepang - salah satu yang paling sulit di dunia. Tentu saja, kualitas terjemahan perlu ditingkatkan secara serius, tetapi fakta bahwa bahkan sekarang Anda dapat berkomunikasi dengan rekan kerja dari Jepang dalam bahasa Rusia dan memastikan bahwa Anda akan dipahami sangat menginspirasi.

2. Yandex menciptakan dua algoritma pencarian berdasarkan jaringan saraf: Palekh dan Korolev. Yang pertama membantu menemukan situs yang paling relevan untuk kueri frekuensi rendah. "Palekh" mempelajari judul halaman dan membandingkan artinya dengan arti permintaan. Atas dasar Palekh, Korolev muncul. Algoritma ini tidak hanya mengevaluasi judul, tetapi juga seluruh konten teks halaman. Pencarian menjadi lebih akurat, dan pemilik situs mulai mendekati konten halaman dengan lebih cerdas.

3. Kolega spesialis SEO dari Yandex telah menciptakan jaringan saraf musikal: ia menyusun puisi dan menulis musik. Neurogroup secara simbolis disebut Neurona, dan mereka sudah memiliki album pertama mereka:

4. Google Inbox menggunakan jaringan saraf untuk menanggapi pesan. Perkembangan teknologi sedang berjalan lancar, dan hari ini jaringan sudah mempelajari korespondensi dan menghasilkan kemungkinan jawaban. Anda tidak dapat membuang waktu mengetik dan tidak takut untuk melupakan beberapa kesepakatan penting.

5. YouTube menggunakan jaringan saraf untuk memberi peringkat video, dan menurut dua prinsip sekaligus: satu jaringan saraf mempelajari video dan reaksi penonton terhadapnya, yang lain melakukan penelitian tentang pengguna dan preferensi mereka. Itulah sebabnya rekomendasi YouTube selalu menjadi topik utama.

6. Facebook secara aktif mengerjakan DeepText AI - program komunikasi yang memahami jargon dan membersihkan obrolan dari kosakata cabul.

7. Aplikasi seperti Prisma dan Fabby, dibangun di atas jaringan saraf, membuat gambar dan video:

Colorize mengembalikan warna pada foto hitam putih (kejutan nenek!).

MakeUp Plus memilih lipstik yang sempurna untuk anak perempuan dari berbagai merek nyata: Bobbi Brown, Clinique, Lancome, dan YSL sudah berbisnis.


8.
Apple dan Microsoft terus-menerus meningkatkan Siri dan Contana saraf mereka. Selama ini mereka hanya mengikuti perintah kita, tapi dalam waktu dekat mereka akan mulai berinisiatif: memberikan rekomendasi dan mengantisipasi keinginan kita.

Dan apa lagi yang menanti kita di masa depan?

Jaringan saraf belajar mandiri dapat menggantikan orang: mereka akan mulai dengan copywriter dan proofreader. Sudah, robot membuat teks dengan makna dan tanpa kesalahan. Dan mereka melakukannya jauh lebih cepat daripada orang. Mereka akan melanjutkan dengan karyawan pusat panggilan, dukungan teknis, moderator dan administrator publik di jejaring sosial. Jaringan saraf sudah tahu cara mempelajari skrip dan memainkannya dengan suara Anda. Bagaimana dengan di daerah lain?

Sektor agrikultur

Jaringan saraf akan diimplementasikan dalam peralatan khusus. Combines akan melakukan autopilot, memindai tanaman dan mempelajari tanah, mengirimkan data ke jaringan saraf. Dia akan memutuskan - untuk menyiram, memupuk atau menyemprotkan hama. Alih-alih beberapa lusin pekerja, paling banyak dua spesialis akan dibutuhkan: seorang pengawas dan seorang teknis.

Obat

Microsoft sekarang secara aktif bekerja pada penciptaan obat untuk kanker. Para ilmuwan terlibat dalam bioprogramming - mereka mencoba mendigitalkan proses kemunculan dan perkembangan tumor. Ketika semuanya berhasil, pemrogram akan dapat menemukan cara untuk memblokir proses seperti itu, dengan analogi, obat akan dibuat.

Pemasaran

Pemasaran sangat dipersonalisasi. Sudah, jaringan saraf dapat menentukan dalam hitungan detik pengguna mana, konten apa dan berapa harga yang akan ditampilkan. Di masa depan, partisipasi pemasar dalam proses akan dikurangi seminimal mungkin: jaringan saraf akan memprediksi permintaan berdasarkan data tentang perilaku pengguna, memindai pasar dan mengeluarkan penawaran yang paling sesuai pada saat seseorang berpikir untuk membeli.

Perdagangan elektronik

E-commerce akan diterapkan di mana-mana. Anda tidak perlu lagi pergi ke toko online menggunakan tautan: Anda dapat membeli semua yang Anda lihat dalam satu klik. Misalnya, Anda membaca artikel ini beberapa tahun kemudian. Anda sangat menyukai lipstik di layar dari aplikasi MakeUp Plus (lihat di atas). Anda mengkliknya dan langsung menuju ke troli. Atau tonton video tentang Hololens (kacamata realitas campuran) terbaru dan pesan langsung dari YouTube.

Di hampir setiap bidang, spesialis dengan pengetahuan atau setidaknya pemahaman tentang struktur jaringan saraf, pembelajaran mesin, dan sistem kecerdasan buatan akan dihargai. Kami akan hidup berdampingan dengan robot. Dan semakin kita tahu tentang mereka, semakin tenang kita akan hidup.

P.S. Zinaida Falls adalah jaringan saraf Yandex yang menulis puisi. Beri nilai pekerjaan yang ditulis mesin, setelah dipelajari di Mayakovsky (ejaan dan tanda baca dipertahankan):

« Ini»

ini
hanya
sesuatu
di masa depan
dan kekuatan
orang itu
apakah ada semuanya atau tidak?
itu darah di sekitar
Sepakat
menjadi gemuk
kemuliaan di
tanah
dengan retakan di paruh

Mengesankan, bukan?


Banyak istilah dalam jaringan saraf terkait dengan biologi, jadi mari kita mulai dari awal:

Otak adalah hal yang kompleks, tetapi juga dapat dibagi menjadi beberapa bagian dan operasi utama:

Agen penyebab mungkin intern(misalnya, gambar atau ide):

Sekarang mari kita lihat dasar dan sederhananya bagian otak:

Otak itu seperti jaringan kabel.

neuron- unit perhitungan utama di otak, ia menerima dan memproses sinyal kimia dari neuron lain, dan, tergantung pada sejumlah faktor, tidak melakukan apa pun atau menghasilkan impuls listrik, atau Potensial Aksi, yang kemudian mengirimkan sinyal ke neuron tetangga melalui sinapsis terkait neuron:

Mimpi, ingatan, gerakan yang mengatur diri sendiri, refleks, dan tentu saja semua yang Anda pikirkan atau lakukan - semuanya terjadi berkat proses ini: jutaan, atau bahkan miliaran neuron bekerja pada tingkat yang berbeda dan menciptakan koneksi yang menciptakan berbagai subsistem paralel dan mewakili sistem biologis. jaringan syaraf. bersih.

Tentu saja, ini semua adalah penyederhanaan dan generalisasi, tetapi berkat mereka, kami dapat menjelaskannya secara sederhana
jaringan syaraf:

Dan jelaskan itu diformalkan menggunakan grafik:

Beberapa penjelasan diperlukan di sini. Lingkaran adalah neuron, dan garis adalah hubungan di antara mereka,
dan, agar tidak memperumit pada tahap ini, interkoneksi mewakili arus informasi langsung dari kiri ke kanan. Neuron pertama saat ini aktif dan disorot dalam warna abu-abu. Kami juga menetapkan nomor untuk itu (1 jika berhasil, 0 jika tidak). Angka antar neuron menunjukkan bobot koneksi.

Grafik di atas menunjukkan waktu jaringan, untuk tampilan yang lebih akurat, Anda perlu membaginya menjadi interval waktu:

Untuk membuat jaringan saraf Anda sendiri, Anda perlu memahami bagaimana bobot memengaruhi neuron dan bagaimana neuron belajar. Sebagai contoh, mari kita ambil kelinci (kelinci percobaan) dan memasukkannya ke dalam kondisi eksperimen klasik.

Ketika aliran udara yang aman diarahkan ke mereka, kelinci, seperti manusia, berkedip:

Model perilaku ini dapat digambarkan dengan grafik:

Seperti pada diagram sebelumnya, grafik ini hanya menunjukkan momen ketika kelinci merasakan napas, dan dengan demikian: menyandi puff sebagai nilai boolean. Selain itu, kami menghitung apakah neuron kedua menyala berdasarkan nilai bobot. Jika sama dengan 1, maka neuron sensorik menyala, kita berkedip; jika beratnya kurang dari 1, kita tidak berkedip: neuron kedua membatasi- 1.

Mari kita perkenalkan satu elemen lagi - sinyal suara yang aman:

Kita bisa memodelkan bunga kelinci seperti ini:

Perbedaan utamanya adalah sekarang beratnya adalah nol, jadi kami tidak mendapatkan kelinci yang berkedip, setidaknya belum. Sekarang kita akan mengajari kelinci untuk berkedip sesuai perintah, mencampur
iritasi (bip dan napas):

Adalah penting bahwa peristiwa ini terjadi pada waktu yang berbeda zaman, dalam grafik akan terlihat seperti ini:

Suara itu sendiri tidak melakukan apa-apa, tetapi aliran udara masih menyebabkan kelinci berkedip, dan kami menunjukkan ini melalui bobot kali rangsangan (berwarna merah).

Pendidikan perilaku kompleks dapat disederhanakan sebagai perubahan bobot secara bertahap antara neuron yang terhubung dari waktu ke waktu.

Untuk melatih kelinci, ulangi langkah-langkahnya:

Untuk tiga upaya pertama, diagram akan terlihat seperti ini:

Harap dicatat bahwa bobot untuk stimulus suara meningkat setelah setiap pengulangan (disorot dengan warna merah), nilai ini sekarang arbitrer - kami memilih 0,30, tetapi jumlahnya bisa apa saja, bahkan negatif. Setelah pengulangan ketiga, Anda tidak akan melihat perubahan perilaku kelinci, tetapi setelah pengulangan keempat, sesuatu yang menakjubkan akan terjadi - perilakunya akan berubah.

Kami menghilangkan paparan udara, tetapi kelinci masih berkedip ketika mendengar bunyi bip! Skema terakhir kami dapat menjelaskan perilaku ini:

Kami melatih kelinci untuk merespons suara dengan berkedip.

Dalam eksperimen nyata semacam ini, lebih dari 60 pengulangan mungkin diperlukan untuk mencapai hasil.

Sekarang kita akan meninggalkan dunia biologis otak dan kelinci dan mencoba mengadaptasi semua yang
belajar membuat jaringan syaraf tiruan. Pertama, mari kita coba melakukan tugas sederhana.

Katakanlah kita memiliki mesin dengan empat tombol yang mengeluarkan makanan saat tombol kanan ditekan.
tombol (baik, atau energi jika Anda adalah robot). Tugasnya adalah mencari tahu tombol mana yang memberikan hadiah:

Kami dapat menggambarkan (secara skema) apa yang dilakukan tombol saat ditekan seperti ini:

Lebih baik untuk menyelesaikan masalah seperti itu secara keseluruhan, jadi mari kita lihat semua hasil yang mungkin, termasuk yang benar:

Klik tombol ke-3 untuk mendapatkan makan malam Anda.

Untuk mereproduksi jaringan saraf dalam kode, pertama-tama kita perlu membuat model atau grafik yang dapat dipetakan jaringannya. Berikut adalah satu grafik yang cocok untuk tugas tersebut, selain itu, grafik ini juga menampilkan rekan biologisnya:

Jaringan saraf ini hanya menerima input - dalam hal ini persepsi tombol mana yang ditekan. Selanjutnya, jaringan mengganti informasi input dengan bobot dan menarik kesimpulan berdasarkan penambahan lapisan. Kedengarannya agak membingungkan, tetapi mari kita lihat bagaimana tombol direpresentasikan dalam model kita:

Perhatikan bahwa semua bobot adalah 0, sehingga jaringan saraf, seperti bayi, benar-benar kosong tetapi saling berhubungan sepenuhnya.

Jadi, kami mencocokkan peristiwa eksternal dengan lapisan input jaringan saraf dan menghitung nilai pada outputnya. Ini mungkin atau mungkin tidak sesuai dengan kenyataan, tetapi kami akan mengabaikan ini untuk saat ini dan mulai menjelaskan tugas dengan cara yang dapat dimengerti oleh komputer. Mari kita mulai dengan memasukkan bobot (kita akan menggunakan JavaScript):

Masukan var = ; var bobot = ; // Untuk memudahkan, vektor-vektor ini dapat disebut
Langkah selanjutnya adalah membuat fungsi yang mengumpulkan nilai input dan bobot dan menghitung nilai output:

Fungsi mengevaluasiNeuralNetwork(Vectorinput,Vector berat)( var hasil = 0; inputVector.forEach(fungsi(Nilai input, Indeks berat) ( layerValue = inputValue*weightVector; hasil += layerValue; )); return (result.toFixed(2)); ) / / Mungkin terlihat rumit, tetapi yang dilakukannya hanyalah mencocokkan pasangan bobot/input dan menambahkan hasilnya
Seperti yang diharapkan, jika kita menjalankan kode ini, kita akan mendapatkan hasil yang sama seperti pada model atau grafik kita…

EvaluateNeuralNetwork(input, bobot); // 0,00
Contoh langsung: Neural Net 001.

Langkah selanjutnya dalam meningkatkan jaringan saraf kita adalah dengan cara memeriksa outputnya sendiri atau nilai yang dihasilkan sebanding dengan situasi nyata,
pertama-tama mari kita mengkodekan realitas khusus ini ke dalam sebuah variabel:

Untuk mendeteksi inkonsistensi (dan berapa banyak), kami akan menambahkan fungsi kesalahan:

Kesalahan = Realitas - Neural Net Output
Dengan itu, kami dapat mengevaluasi kinerja jaringan saraf kami:

Tetapi yang lebih penting - bagaimana dengan situasi di mana kenyataan memberikan hasil yang positif?

Sekarang kita tahu bahwa model jaringan saraf kita tidak berfungsi (dan kita tahu caranya), bagus! Dan ini bagus karena sekarang kita dapat menggunakan fungsi kesalahan untuk mengontrol pelatihan kita. Tapi itu semua masuk akal jika kita mendefinisikan kembali fungsi kesalahan sebagai berikut:

kesalahan = Keluaran yang diinginkan- Keluaran Neural Net
Perbedaan halus namun penting, diam-diam menunjukkan bahwa kita akan
gunakan hasil masa lalu untuk membandingkan dengan tindakan masa depan
(dan untuk pembelajaran, seperti yang akan kita lihat nanti). Ini juga ada di kehidupan nyata, lengkap
pola berulang, sehingga bisa menjadi strategi evolusi (well, in
Kebanyakan kasus).

masukan var = ; var bobot = ; vardesiredResult = 1;
Dan fungsi baru:

Fungsi mengevaluasiNeuralNetError(diinginkan,aktual) ( return (diinginkan - aktual); ) // Setelah mengevaluasi Jaringan dan Kesalahan, kita akan mendapatkan: // "Keluaran Neural Net: 0,00 Kesalahan: 1"
Contoh langsung: Neural Net 002.

Mari kita rangkum. Kami mulai dengan tugas, membuat model sederhana dalam bentuk jaringan saraf biologis, dan mendapatkan cara untuk mengukur kinerjanya dibandingkan dengan kenyataan atau hasil yang diinginkan. Sekarang kita perlu menemukan cara untuk memperbaiki inkonsistensi - sebuah proses yang bagi komputer dan manusia dapat dianggap sebagai pembelajaran.

Bagaimana cara melatih jaringan saraf?

Dasar dari pelatihan jaringan saraf biologis dan buatan adalah pengulangan
Dan algoritma pembelajaran, jadi kami akan bekerja dengan mereka secara terpisah. Mari kita mulai dengan
algoritma pembelajaran.

Di alam, algoritma pembelajaran dipahami sebagai perubahan fisik atau kimia
karakteristik neuron setelah percobaan:

Ilustrasi dramatis tentang bagaimana dua neuron berubah dari waktu ke waktu dalam kode dan model "algoritme pembelajaran" kita berarti bahwa kita hanya akan mengubah banyak hal dari waktu ke waktu untuk membuat hidup kita lebih mudah. Jadi mari kita tambahkan variabel untuk menunjukkan betapa mudahnya hidup ini:

Var learningRate = 0,20; // Semakin besar nilainya, semakin cepat proses pembelajarannya :)
Dan apa yang akan berubah?

Ini akan mengubah bobot (seperti kelinci!), terutama bobot output yang ingin kita dapatkan:

Cara mengkodekan algoritma seperti itu adalah pilihan Anda, untuk mempermudah saya menambahkan faktor pembelajaran ke bobot, ini dia dalam bentuk fungsi:

Fungsi belajar(Vector masukan, Vektor berat) ( weightVector.forEach(function(weight, index, weights) ( if (inputVector > 0) ( weights = weight + learningRate; ) )); )
Saat digunakan, fungsi pelatihan ini hanya akan menambahkan laju pembelajaran kita ke vektor bobot neuron aktif, sebelum dan sesudah lingkaran latihan (atau pengulangan), hasilnya adalah sebagai berikut:

// Vektor bobot asli: // Neural Net keluaran: 0,00 Kesalahan: 1 belajar(input, bobot); // Vektor Bobot Baru: // Neural Net output: 0.20 Error: 0.8 // Jika tidak jelas, output dari neural network mendekati 1 (output ayam) - yang kita inginkan, jadi kita dapat menyimpulkan bahwa kita bergerak ke arah yang benar
Contoh langsung: Neural Net 003.

Oke, sekarang kita bergerak ke arah yang benar, bagian terakhir dari teka-teki ini adalah implementasinya pengulangan.

Tidak terlalu sulit, secara alami kita hanya melakukan hal yang sama berulang-ulang, tetapi dalam kode kita hanya menentukan jumlah pengulangan:

Percobaan var = 6;
Dan pengenalan fungsi jumlah pengulangan ke dalam jaringan saraf pelatihan kami akan terlihat seperti ini:

Kereta fungsi(percobaan) ( for (i = 0; i< trials; i++) { neuralNetResult = evaluateNeuralNetwork(input, weights); learn(input, weights); } }
Dan inilah laporan akhir kami:

Keluaran Neural Net: 0,00 Kesalahan: 1,00 Vektor Berat: Keluaran Neural Net: 0,20 Kesalahan: 0,80 Vektor Berat: Keluaran Neural Net: 0,40 Kesalahan: 0,60 Vektor Berat: Keluaran Neural Net: 0,60 Kesalahan: 0,40 Vektor Berat: Keluaran Neural Net: 0,80 Kesalahan : 0,20 Vektor Berat: Neural Net output: 1,00 Kesalahan: 0,00 Vektor Berat: // Chicken Dinner !
Contoh langsung: Neural Net 004.

Kami sekarang memiliki vektor bobot yang hanya akan menghasilkan satu hasil (ayam untuk makan malam) jika vektor input cocok dengan kenyataan (menekan tombol ketiga).

Jadi apa hal keren yang baru saja kita lakukan?

Dalam kasus khusus ini, jaringan saraf kita (setelah pelatihan) dapat mengenali input dan mengatakan apa yang akan mengarah pada hasil yang diinginkan (kita masih perlu memprogram situasi tertentu):

Selain itu, ini adalah model yang dapat diskalakan, mainan, dan alat untuk pembelajaran kami bersama Anda. Kami dapat mempelajari sesuatu yang baru tentang pembelajaran mesin, jaringan saraf, dan kecerdasan buatan.

Perhatian untuk pengguna:

  • Mekanisme untuk menyimpan bobot yang dipelajari tidak disediakan, jadi jaringan saraf ini akan melupakan semua yang diketahuinya. Saat memperbarui atau menjalankan kembali kode, Anda memerlukan setidaknya enam pengulangan yang berhasil agar jaringan dapat sepenuhnya dilatih jika Anda berpikir bahwa seseorang atau mesin akan menekan tombol dalam urutan acak ... Ini akan memakan waktu.
  • Jaringan biologis untuk mempelajari hal-hal penting memiliki tingkat pembelajaran 1, jadi hanya diperlukan satu pengulangan yang berhasil.
  • Ada algoritma pembelajaran yang sangat mirip dengan neuron biologis, ia memiliki nama yang menarik: aturan widroff-hoff, atau pelatihan widroff-hoff.
  • Ambang saraf (1 dalam contoh kami) dan efek overfitting (dengan jumlah pengulangan yang besar, hasilnya akan lebih besar dari 1) tidak diperhitungkan, tetapi sifatnya sangat penting dan bertanggung jawab atas blok besar dan kompleks dari respons perilaku . Begitu juga bobot negatif.

Catatan dan daftar pustaka untuk bacaan lebih lanjut

Saya mencoba menghindari matematika dan istilah ketat, tetapi jika Anda bertanya-tanya, kami membuat perceptron, yang didefinisikan sebagai algoritma pembelajaran terawasi (supervised learning) dari pengklasifikasi ganda - hal-hal berat.

Struktur biologis otak bukanlah topik yang mudah, sebagian karena ketidakakuratan, sebagian karena kerumitannya. Lebih baik memulai dengan Neuroscience (Purves) dan Cognitive Neuroscience (Gazzaniga). Saya memodifikasi dan mengadaptasi contoh kelinci dari Gateway to Memory (Gluck), yang juga merupakan panduan hebat untuk dunia grafik.

Sumber daya luar biasa lainnya, An Introduction to Neural Networks (Gurney), sangat bagus untuk semua kebutuhan AI Anda.

Dan sekarang dengan Python! Terima kasih kepada Ilya Andshmidt karena telah menyediakan versi Python:

Input = bobot = hasil_yang diinginkan = 1 laju_pembelajaran = 0,2 percobaan = 6 def evaluasi_neural_network(array_input, larik_berat): hasil = 0 untuk i dalam rentang(len(array_input)): nilai_lapisan = masukan_array[i] * susunan_berat[i] hasil += nilai_lapisan print("evaluate_neural_network: " + str(result)) print("weights: " + str(weights)) mengembalikan hasil def evaluasi_error(diinginkan, aktual): error = diinginkan - aktual print("evaluate_error: " + str(error) ) mengembalikan kesalahan def belajar(input_array, weight_array): print("learning...") untuk i in range(len(input_array)): if input_array[i] > 0: weight_array[i] += learning_rate def train(trials ): untuk i dalam rentang(percobaan): neural_net_result = evaluasi_neural_network(input, bobot) belajar(input, bobot) train(trials)
Dan sekarang GO! Penghargaan untuk Kieran Maher untuk versi ini.

Package main import ("fmt" "math") func main() ( fmt.Println("Membuat input dan bobot ...") inputs:= float64(0.00, 0.00, 1.00, 0.00) weights:= float64(0.00, 0.00, 0.00, 0.00) yang diinginkan:= 1.00 learningRate:= 0.20 trial:= 6 train(trials, inputs, weights, want, learningRate) ) func train(trials int, input float64, weights float64, want64 float, learningRate float64) ( untuk saya:= 1;i< trials; i++ { weights = learn(inputs, weights, learningRate) output:= evaluate(inputs, weights) errorResult:= evaluateError(desired, output) fmt.Print("Output: ") fmt.Print(math.Round(output*100) / 100) fmt.Print("\nError: ") fmt.Print(math.Round(errorResult*100) / 100) fmt.Print("\n\n") } } func learn(inputVector float64, weightVector float64, learningRate float64) float64 { for index, inputValue:= range inputVector { if inputValue >0.00 ( weightVector = weightVector + learningRate ) ) mengembalikan weightVector ) fungsi evaluasi(inputVector float64, weightVector float64) float64 ( result:= 0,00 untuk indeks, inputValue:= range inputVector ( layerValue:= inputValue * weightVector result = result + layerValue ) mengembalikan hasil ) func evaluationError(float64 yang diinginkan, float64 aktual) float64 (kembalikan yang diinginkan - aktual)

Anda dapat membantu dan mentransfer sejumlah dana untuk pengembangan situs

 

Hal yang lucu tentang teknologi tinggi adalah usianya ribuan tahun! Misalnya, kalkulus ditemukan secara independen oleh Newton dan Leibniz lebih dari 300 tahun yang lalu. Apa yang dulunya dianggap sihir sekarang dipahami dengan baik. Dan, tentu saja, kita semua tahu bahwa geometri ditemukan oleh Euclid beberapa ribu tahun yang lalu. Triknya adalah sering kali membutuhkan waktu bertahun-tahun sebelum sesuatu menjadi "populer". Jaringan saraf adalah contoh yang sangat baik. Kita semua telah mendengar tentang jaringan saraf dan apa yang mereka janjikan, tetapi untuk beberapa alasan kami tidak melihat program biasa yang didasarkan pada mereka. Alasan untuk ini adalah bahwa sifat sebenarnya dari jaringan saraf adalah matematika yang sangat kompleks, dan perlu untuk memahami dan membuktikan teorema kompleks yang mencakupnya, dan mungkin pengetahuan tentang teori probabilitas dan analisis kombinatorial diperlukan, belum lagi fisiologi dan neurologi.

Insentif untuk menciptakan teknologi apa pun untuk seseorang atau beberapa orang adalah pembuatan Program Pembunuh dengan bantuannya. Kita semua sekarang tahu bagaimana DOOM bekerja, yaitu. menggunakan pohon BSP. Namun, John Carmack tidak menemukan mereka pada saat itu, dia membaca tentang mereka dalam sebuah artikel yang ditulis pada tahun 1960. Artikel ini menjelaskan teori teknologi BSP. John mengambil langkah selanjutnya dengan memahami bagaimana pohon BSP dapat digunakan dan DOOM lahir. Saya menduga bahwa jaringan saraf akan mengalami kebangkitan serupa dalam beberapa tahun ke depan. Komputer cukup cepat untuk menirunya, desainer VLSI membuatnya langsung di silikon, dan ada ratusan buku yang diterbitkan tentang masalah ini. Dan karena jaringan saraf adalah entitas paling matematis yang kami ketahui, mereka tidak terikat pada representasi fisik apa pun dan kami dapat membuatnya dengan perangkat lunak atau membuat model silikon nyata. Hal utama adalah bahwa inti dari jaringan saraf adalah model abstrak.

Dalam banyak hal, batas komputasi digital telah direalisasikan. Tentu saja, kami akan meningkatkannya dan membuatnya lebih cepat, lebih kecil, dan lebih murah, tetapi komputer digital akan selalu dapat melihat hanya informasi digital, karena mereka didasarkan pada model komputasi biner. Jaringan saraf, bagaimanapun, didasarkan pada model komputasi yang berbeda. Mereka didasarkan pada model tingkat tinggi, terdistribusi, probabilistik yang tidak diperlukan untuk menemukan solusi masalah dengan cara yang sama seperti program komputer; itu memodelkan jaringan sel yang dapat menemukan, mengidentifikasi, atau mengkorelasikan solusi yang mungkin untuk suatu masalah dengan cara yang lebih "biologis", memecahkan masalah dalam potongan-potongan kecil dan menambahkan hasilnya bersama-sama. Artikel ini adalah ikhtisar tentang teknologi jaringan saraf, di mana mereka akan dibongkar sedetail mungkin di beberapa halaman.

analog biologis

Jaringan saraf terinspirasi oleh otak kita sendiri. Secara harfiah - otak seseorang di kepala seseorang pernah berkata: "Saya tertarik dengan cara saya bekerja?", Dan kemudian melanjutkan untuk membuat model sederhana itu sendiri. Aneh, kan? Model simpul saraf standar, berdasarkan model neuron manusia yang disederhanakan, ditemukan lebih dari lima puluh tahun yang lalu. Perhatikan gambar 1.0. Seperti yang Anda lihat, ada tiga bagian utama dari neuron, ini adalah:

  • Dentrite(s) (Dendrite) .................... Bertanggung jawab untuk mengumpulkan sinyal yang masuk
  • Soma (Soma) ................................ Bertanggung jawab untuk pemrosesan utama dan penjumlahan sinyal
  • Akson (Axon) ............................... Bertanggung jawab untuk memberi sinyal ke dendrit lain.

Otak manusia rata-rata mengandung sekitar 100 miliar atau 10 pangkat 11 neuron, dan masing-masing memiliki hingga 10.000 koneksi melalui dendrit. Sinyal ditransmisikan menggunakan proses elektrokimia berdasarkan natrium, kalium dan ion. Sinyal ditransmisikan dengan membangun perbedaan potensial yang disebabkan oleh ion-ion ini, tetapi kimianya tidak relevan di sini, dan sinyal dapat dianggap sebagai impuls listrik sederhana yang berjalan dari akson ke dendrit. Perlekatan satu dendrit ke akson asing disebut sinaps, dan ini adalah titik utama transmisi impuls.

Jadi bagaimana cara kerja neuron? Tidak ada jawaban sederhana untuk pertanyaan ini, tetapi penjelasan berikut akan cukup untuk tujuan kita. Dendrit mengumpulkan sinyal yang diterima dari neuron lain, kemudian soma melakukan penjumlahan dan perhitungan sinyal dan data, dan akhirnya, berdasarkan hasil pemrosesan, mereka dapat "memberi tahu" akson untuk meneruskan sinyal. Transfer selanjutnya tergantung pada sejumlah faktor, tetapi kita dapat memodelkan perilaku ini sebagai fungsi transfer yang menerima input, memprosesnya, dan menyiapkan output jika sifat-sifat fungsi transfer terpenuhi. Selain itu, pada neuron nyata, keluaran data tidak linier, yaitu sinyalnya tidak digital, tetapi analog. Faktanya, neuron secara terus menerus menerima dan mengirimkan sinyal dan model aslinya bergantung pada frekuensi dan harus dianalisis dalam domain-S (domain frekuensi). Fungsi transfer nyata dari neuron biologis sederhana, pada kenyataannya, dimodelkan oleh kami.

Sekarang kami memiliki beberapa gagasan tentang apa itu neuron dan apa yang sebenarnya kami coba modelkan. Mari kita ngelantur sejenak dan berbicara tentang bagaimana kita dapat menggunakan jaringan saraf dalam video game.

permainan

Jaringan saraf tampaknya menjadi jawaban untuk semua kebutuhan kita. Jika kita bisa mentransfer karakter dan kata-kata ke otak permainan kecil, bayangkan betapa kerennya itu. Model jaringan saraf memberi kita struktur neuron yang kasar, tetapi tidak memberi kita tingkat kecerdasan dan fungsionalitas deduksi yang tinggi, setidaknya dalam arti kata klasik. Dibutuhkan sedikit pemikiran untuk menemukan cara menggunakan teknologi jaringan saraf dalam game AI, tetapi begitu Anda melakukannya, Anda dapat menggunakannya bersama dengan algoritma deterministik, logika fuzzy, dan algoritma genetika untuk menciptakan pola pikir AI yang sangat kuat dan canggih untuk permainan Anda. Tanpa ragu, hasilnya akan lebih baik dari apa pun yang dapat Anda capai dengan ratusan blok if-else atau skrip skrip. Jaringan saraf dapat digunakan untuk hal-hal seperti:

Pemindaian dan pengenalan lingkungan Jaringan saraf dapat menerima informasi dalam bentuk penglihatan atau pendengaran. Informasi ini kemudian dapat digunakan untuk membentuk respon atau respon, atau untuk melatih jaringan. Tanggapan ini dapat ditampilkan secara real time dan diperbarui untuk meningkatkan tanggapan.

Penyimpanan- jaringan saraf dapat digunakan sebagai bentuk memori untuk karakter game. Jaringan saraf dapat belajar dari pengalaman dan menambah rangkaian tanggapan dan reaksi.

kontrol perilaku- output dari jaringan saraf dapat digunakan untuk mengontrol tindakan karakter game. Input dapat berupa berbagai variabel dari mesin game. Kemudian jaringan akan dapat mengontrol perilaku karakter game.

Pemetaan Respon- Jaringan saraf bekerja sangat baik dengan "asosiasi", yang pada dasarnya adalah pengikatan satu ruang ke ruang lainnya. Sebuah asosiasi datang dalam dua rasa: asosiasi otomatis, yang menghubungkan input ke dirinya sendiri, dan asosiasi hetero, yang menghubungkan input ke sesuatu yang lain. Pengikatan respons menggunakan jaringan saraf sebagai back-end atau output untuk membuat lapisan lain dari kontrol tidak langsung atas perilaku suatu objek. Biasanya, kami dapat memiliki sejumlah variabel kontrol, tetapi kami hanya memiliki jawaban yang jelas untuk sejumlah kombinasi spesifik yang dapat kami latih jaringannya. Namun, dengan menggunakan jaringan saraf sebagai output, kita bisa mendapatkan jawaban lain yang kira-kira berada di area yang sama dengan jawaban kita yang terdefinisi dengan baik.

Contoh yang diberikan mungkin tampak agak kabur, tetapi memang demikian. Faktanya adalah bahwa jaringan saraf adalah alat yang dapat kita gunakan sesuka kita. Kuncinya di sini adalah bahwa menggunakannya membuat tugas membuat AI lebih mudah dan akan membuat perilaku karakter pemain lebih masuk akal.

Jaringan saraf 101

Pada bagian ini, kami akan meninjau istilah dan konsep utama yang digunakan saat membahas jaringan saraf. Ini tidak sesederhana itu, karena jaringan saraf benar-benar produk dari beberapa disiplin ilmu yang berbeda, dan masing-masing dari mereka membawa kosakata spesifiknya sendiri. Sayangnya, kosakata yang berkaitan dengan jaringan saraf adalah persimpangan kamus semua disiplin ilmu ini, jadi kami tidak dapat mempertimbangkan semuanya. Juga, teori jaringan saraf penuh dengan perangkat keras yang berlebihan, yang berarti banyak orang menciptakan kembali roda. Ini mempengaruhi penciptaan sejumlah arsitektur jaringan saraf sekaligus, yang masing-masing memiliki namanya sendiri. Saya akan mencoba menjelaskan istilah dan situasi umum agar tidak terjebak dalam penamaan. Nah, dalam artikel ini kita akan melihat beberapa jaringan yang cukup berbeda untuk memiliki nama yang berbeda. Saat Anda membaca, jangan terlalu khawatir jika Anda tidak dapat segera memahami semua konsep dan istilah, baca saja, maka kami akan mencoba membahasnya lagi dalam konteks artikel. Ayo mulai...

Sekarang kita telah melihat versi "biologis" dari neuron, mari kita lihat dasar-dasar neuron buatan untuk meletakkan dasar bagi penalaran kita. Beras. 2.0 adalah standar grafis untuk "neuronode" atau neuron buatan. Seperti yang Anda lihat, ia memiliki beberapa input berlabel X1 - Xn dan B. Input ini memiliki bobot W1-Wn yang terkait dengannya, dan a b melekat padanya. Selain itu, ada koneksi ringkasan Y dan satu output y. Output y di neurode didasarkan pada fungsi transfer, atau "aktivasi", yang merupakan fungsi dari input neurode ke dalam jaringan. Data yang masuk berasal dari Xs dan dari Bs yang terhubung ke node tetangga. Idenya adalah bahwa B adalah "masa lalu", "memori". Operasi dasar dari sebuah neuronode adalah sebagai berikut: input dari X dikalikan dengan bobot yang terkait dan dijumlahkan. Output dari penjumlahan adalah input untuk mengaktifkan Ya. Aktivasi kemudian dimasukkan ke dalam fungsi aktivasi fa(x) dan keluaran akhirnya adalah y. Persamaan untuk itu semua adalah:

ur. 1.0

n
Ya \u003d B * b + e Xi * wi
i = 1 DAN

y = fa(Ya)

Berbagai bentuk fa(x) akan dibahas dalam satu menit.

Sebelum melanjutkan, kita harus berbicara tentang pengantar Xi, bobot Wi, dan areanya masing-masing. Dalam kebanyakan kasus, input berisi angka positif dan negatif dalam himpunan (- , + input = I). Namun, banyak jaringan saraf menggunakan nilai dua nilai sederhana (seperti benar/salah). Alasan menggunakan skema sederhana seperti itu adalah karena pada akhirnya semua data kompleks diubah menjadi representasi biner murni. Selain itu, dalam banyak kasus kita perlu memecahkan masalah komputer seperti pengenalan suara, yang tepat untuk representasi dua nilai. Namun, itu tidak diatur dalam batu. Dalam kedua kasus, nilai yang digunakan dalam sistem divalen terutama 0 dan 1 dalam sistem biner, atau -1 dan 1 dalam sistem bipolar. Kedua sistem serupa kecuali bahwa representasi bipolar secara matematis lebih nyaman daripada yang biner. Bobot Wi pada setiap masukan biasanya antara (-Ґ , +Ґ), dan masing-masing disebut "menarik" atau "menghambat" untuk nilai positif dan negatif. Masukan tambahan B, yang selalu disebut dengan 1,0 dan dikalikan dengan b, di mana b adalah bobotnya.

Melanjutkan analisis kami, setelah menemukan aktivasi Ya untuk neurode, itu diterapkan pada fungsi aktivasi dan hasilnya dapat dihitung. Ada sejumlah fungsi aktivasi dengan kegunaan yang berbeda. Fa(x) fungsi aktivasi utama:

Persamaan untuk masing-masing cukup sederhana, tetapi masing-masing cocok dengan modelnya sendiri atau memiliki set parameternya sendiri.

Fungsi langkah-demi-langkah (langkah) digunakan di sejumlah jaringan saraf dan model untuk mencapai kekritisan tertentu dari sinyal input. Tujuan dari faktor q adalah untuk memodelkan level kritis dari sinyal input yang harus ditanggapi oleh neuron.

Fungsi aktivasi linier (linier) digunakan ketika kita ingin keluaran neurode mengikuti aktivasi masukan sedekat mungkin. Fitur serupa dapat digunakan untuk membuat sistem linier seperti gerakan kecepatan konstan. Terakhir, fungsi eksponensial adalah kunci untuk jaringan saraf lanjutan, satu-satunya cara untuk membuat jaringan saraf yang dapat memberikan respons non-linear dan memodelkan proses non-linear. Fungsi aktivasi eksponensial adalah cabang dalam pengembangan jaringan saraf, karena menggunakan fungsi langkah dan linier, kita tidak akan pernah bisa membuat jaringan saraf yang memberikan respons non-linier. Namun, kami tidak diharuskan untuk menggunakan fungsi khusus ini. Fungsi hiperbolik, logaritmik, dan transendental juga dapat digunakan tergantung pada properti jaringan yang diinginkan. Akhirnya, kita dapat menggunakan semua fungsi tersebut jika kita mau.

Seperti yang dapat Anda tebak, satu neuron tidak akan berbuat banyak, jadi Anda perlu membuat grup neuron dan lapisan neurodes, seperti yang ditunjukkan pada Gambar. 3.0. Gambar tersebut mengilustrasikan jaringan saraf satu lapis kecil. Jaringan saraf pada gambar. 3.0 berisi sejumlah node input dan output. Menurut konvensi, ini adalah jaringan saraf satu lapis, karena lapisan input diabaikan kecuali itu adalah satu-satunya lapisan dalam jaringan. Dalam hal ini, lapisan input juga merupakan lapisan output, sehingga jaringannya adalah lapisan tunggal. Beras. 4.0 menunjukkan jaringan saraf dua lapis. Perhatikan bahwa lapisan input masih belum diperhitungkan dan lapisan dalam disebut "tersembunyi". Lapisan keluaran disebut sebagai keluaran dari lapisan respon. Secara teoritis, tidak ada batasan jumlah lapisan dalam jaringan saraf, namun bisa sangat sulit untuk menggambarkan hubungan dari berbagai lapisan dan metode pelatihan yang dapat diterima. Cara terbaik untuk membuat jaringan saraf multilayer adalah membuat setiap jaringan satu atau dua lapisan, dan kemudian menghubungkannya sebagai komponen atau blok fungsional.

Oke, sekarang mari kita bicara tentang "sementara" atau topik waktu. Kita semua tahu bahwa otak kita cukup lambat dibandingkan dengan komputer digital. Faktanya, otak kita menghasilkan satu siklus dalam skala milidetik, sedangkan waktu untuk komputer digital diukur dalam nanodetik dan hampir sudah dalam sub-nanodetik. Ini berarti bahwa jalur sinyal dari neuron ke neuron membutuhkan waktu. Ini juga dimodelkan dalam neuron buatan dalam arti bahwa kita melakukan perhitungan lapis demi lapis dan mengeluarkan hasilnya secara berurutan. Ini membantu memodelkan jeda waktu yang ada dalam sistem biologis seperti otak kita.

Kita hampir selesai dengan diskusi pendahuluan, mari kita bicara tentang beberapa konsep tingkat tinggi dan kemudian menyelesaikan dengan beberapa istilah lagi. Pertanyaan yang harus Anda tanyakan adalah "apa gunanya jaringan saraf?" Ini adalah pertanyaan yang bagus, dan sulit untuk menjawabnya secara pasti. Pertanyaan lanjutan - "Apa yang ingin Anda coba lakukan dengan jaringan saraf?" Pada dasarnya, mereka menampilkan teknik yang membantu untuk mencerminkan satu ruang dalam kaitannya dengan yang lain. Pada dasarnya, neuron adalah sejenis memori. Dan seperti halnya memori apa pun, kita dapat menerapkan beberapa istilah yang tepat untuk menggambarkannya. neuron memiliki STM (memori jangka pendek) dan LTM (memori jangka panjang). STM adalah kemampuan jaringan saraf untuk mengingat sesuatu yang baru saja dipelajari, dan LTM adalah kemampuan jaringan saraf untuk mengingat sesuatu yang dipelajari beberapa waktu lalu berdasarkan informasi yang baru saja diterimanya. Ini membawa kita ke konsep keliatan atau, dengan kata lain, dengan konsep bagaimana jaringan saraf akan berperilaku dengan informasi atau saat belajar. Bisakah jaringan saraf mempelajari lebih banyak informasi dan terus "mengingat" informasi yang dipelajari sebelumnya dengan benar? Jika demikian, maka jaringan saraf menjadi tidak stabil karena pada akhirnya akan mengandung begitu banyak informasi sehingga data akan saling berpotongan dan tumpang tindih tanpa henti. Ini membawa kita ke persyaratan lain - stabilitas. Intinya adalah kita ingin jaringan saraf memiliki LTM yang baik, STM yang baik, fleksibel dan stabil. Tentu saja, beberapa jaringan saraf tidak analog dengan memori, mereka terutama ditujukan untuk pemetaan fungsional, dan konsep-konsep ini tidak berlaku untuk mereka, tetapi Anda mendapatkan ide dasarnya. Sekarang setelah kita mengetahui tentang konsep-konsep yang berkaitan dengan memori di atas, mari kita selesaikan ulasan tentang beberapa faktor matematika yang akan membantu mengevaluasi dan memahami sifat-sifat ini.

Salah satu aplikasi utama dari jaringan saraf tiruan adalah pembuatan mekanisme memori yang dapat memproses data input yang tidak lengkap atau fuzzy dan mengembalikan hasilnya. Hasilnya dapat berupa input itu sendiri (asosiasi) atau respons yang sama sekali berbeda dari input (asosiasi hetero). Dimungkinkan juga untuk melapisi ruang N-dimensi pada pemuatan data M-dimensi dan non-linear. Ini berarti bahwa jaringan saraf adalah sejenis unit memori hiperspasial, karena dapat menghubungkan elemen N input ke elemen M output, di mana M mungkin sama atau tidak sama dengan N.

Apa yang dilakukan jaringan saraf pada dasarnya adalah membagi ruang N-dimensi menjadi wilayah yang secara jelas memetakan input ke output atau mengklasifikasikan input ke dalam kelas yang berbeda. Kemudian, ketika nilai (vektor) dari kumpulan data yang masuk (sebut saja S) meningkat, secara logis mengikuti bahwa akan lebih sulit bagi jaringan saraf untuk memisahkan informasi. Dan karena jaringan saraf dipenuhi dengan informasi, nilai input yang harus "diingat" akan tumpang tindih, karena ruang input tidak dapat menampung semua data yang dipisahkan dalam jumlah dimensi yang tak terbatas. Tumpang tindih ini berarti bahwa beberapa entri tidak sekuat yang seharusnya. Meskipun tidak menjadi masalah dalam beberapa kasus, hal ini menjadi perhatian ketika memodelkan jaringan saraf memori; mari, untuk mengilustrasikan konsep tersebut, misalkan kita mencoba menghubungkan himpunan-N dari vektor input ke beberapa himpunan output. Set keluaran tidak menjadi masalah untuk berfungsi dengan baik seperti set keluaran S.

Jika himpunan masukan S benar-benar biner, maka kami mempertimbangkan barisan dalam bentuk 1101010 ... 10110. Katakanlah bahwa data masukan kami masing-masing hanya memiliki 3 bit, sehingga seluruh ruang masukan terdiri dari vektor:

v0 = (0,0,0), v1 = (0,0,1), v2 = (0,1,0), v3 = (0,1,1), v4 = (1,0,0), v5 = (1,0,1), v6 = (1,1,0),

Untuk lebih presisi, dasar untuk himpunan vektor ini adalah:

v = (1,0,0) * b2 + (0,1,0) * b1 + (0,0,1) * b0, di mana bi dapat mengambil nilai 0 atau 1.

Misalnya, jika kita berasumsi bahwa B2=1, B1=0, dan B0=1, maka kita mendapatkan vektor berikut:

v = (1.0.0) * 1 + (0.1.0) * 0 + (0.0.1) * 1 = (1.0.0) + (0.0.0) + (0 ,0,1) = (1,0 ,1) yang merupakan Vs dari array input yang mungkin

Basis adalah penjumlahan vektor khusus yang menggambarkan larik vektor dalam ruang. Jadi V menggambarkan semua vektor di ruang kita. Secara umum, tanpa membahas penjelasan panjang lebar, semakin ortogonal vektor dalam array input, semakin baik mereka akan menyebar di jaringan saraf, dan semakin baik mereka dapat dipanggil. Ortogonalitas mengacu pada independensi vektor, dengan kata lain, jika dua vektor ortogonal, maka produk titiknya adalah nol, proyeksinya satu sama lain adalah nol, dan keduanya tidak dapat dijelaskan relatif satu sama lain. Ada banyak vektor ortogonal dalam array v, tetapi mereka datang dalam kelompok kecil, misalnya V0 ortogonal untuk semua vektor, jadi kita selalu dapat memasukkannya. Tetapi jika kita memasukkan V1 dalam larik S, maka hanya vektor V2 dan V4 yang akan mempertahankan ortogonalitas dengannya:

v0 = (0,0,0), v1 = (0,0,1), v2= (0,1,0), v4 = (1,0,0)

Mengapa? Karena Vi - Vj untuk semua i,j dari 0...3 sama dengan nol. Dengan kata lain, hasil kali titik semua pasangan vektor adalah 0, jadi semuanya harus ortogonal. Jadi array ini sangat bagus sebagai array input neural network. Namun, lariknya:

v6 = (1,1,0), v7 = (1,1,1)

berpotensi buruk, karena input v6-v7 bukan nol, dalam sistem biner adalah 1. Pertanyaan selanjutnya adalah dapatkah kita mengukur ortogonalitas ini? Jawabannya iya. Dalam sistem biner vektor, ada ukuran yang disebut jarak Hamming. Ini digunakan untuk mengukur jarak N-dimensi antara vektor biner. Ini hanyalah jumlah bit yang berbeda antara dua vektor. Misalnya, vektor:

v0 = (0,0,0), v1 = (0,0,1)

memiliki jarak Hamming 1 antara mereka, dan

v2 = (0,1,0), v4 = (1,0,0)

memiliki jarak hamming 2.

Kita dapat menggunakan jarak Hamming sebagai ukuran ortogonalitas dalam sistem vektor biner. Dan itu dapat membantu kami menentukan apakah kumpulan data masukan kami memiliki persimpangan. Menentukan ortogonalitas dengan vektor input yang sama lebih sulit, tetapi prinsipnya sama. Itu cukup konsep dan terminologi, mari kita lompat ke depan dan melihat jaringan saraf sebenarnya yang melakukan sesuatu dan mungkin pada akhir artikel ini Anda dapat menggunakannya untuk meningkatkan AI game Anda. Kami akan melihat jaringan saraf yang digunakan untuk melakukan fungsi logika, mengklasifikasikan input, dan mengaitkannya dengan output.

logika murni

Jaringan saraf tiruan pertama dibuat pada tahun 1943. McCulloch dan Pitts. Mereka terdiri dari sejumlah neuronode dan digunakan terutama untuk menghitung fungsi logika sederhana seperti AND, OR, XOR dan kombinasinya. Beras. 5.0. mewakili neuronode utama McCulloch dan Pitts dengan dua input. Jika Anda seorang insinyur listrik, Anda akan segera melihat kemiripannya dengan transistor. Bagaimanapun, neuronoda McCulloch-Pitts tidak memiliki koneksi dan fungsi aktivasi sederhana Fmp(x) adalah:

fmp (x) = 1, jika xq
0, jika x< q

Neuronode MP (McCulloch-Pitts) berfungsi dengan menjumlahkan produk dari input Xi dan bobot Wi dan mengambil Ya sebagai hasil untuk fungsi Fmp(x). Penelitian awal McCulloch-Pitts berfokus pada pembangunan sirkuit logika kompleks dengan model neurode. Selain itu, salah satu aturan pemodelan neuronode adalah bahwa transmisi sinyal dari neuron ke neuron membutuhkan satu langkah waktu. Ini membantu untuk lebih dekat dengan model neuron alami. Mari kita lihat beberapa contoh jaringan saraf MP yang mengimplementasikan fungsionalitas logika dasar. Fungsi Boolean AND memiliki tabel kebenaran sebagai berikut:

Kita dapat memodelkan ini dengan dua jaringan saraf MP masukan dengan bobot w1=1, w2=2, dan q=2. Jaringan saraf ini ditunjukkan pada gambar. 6.0a. Seperti yang Anda lihat, semua kombinasi input bekerja dengan benar. Misalnya, jika kita mencoba mengatur input X1=0, Y1=1, maka aktivasinya adalah:

X1*w1 + X2*w2 = (1)*(1) + (0)*(1) = 1,0

Jika kita menerapkan 1.0 untuk fungsi aktivasi Fmp(x), maka hasilnya adalah 0, yang merupakan jawaban yang benar. Sebagai contoh lain, jika kita mencoba mengatur input X1=1, X2=1, maka aktivasinya adalah:

X1*w1 + X2*w2 = (1)*(1) + (1)*(1) = 2.0

Jika kita memasukkan 2.0 ke dalam fungsi aktivasi Fmp(x), hasilnya adalah 1.0, yang mana benar. Dalam kasus lain, ini akan bekerja dengan cara yang sama. Fungsi OR serupa, tetapi sensitivitas q diubah menjadi 1.0, bukan 2.0 seperti pada AND. Anda dapat mencoba menjalankan data sendiri melalui tabel kebenaran untuk melihat hasilnya.

Jaringan XOR sedikit berbeda karena sebenarnya memiliki 2 lapisan karena hasil preprocessing diproses lebih lanjut di neuron output. Ini adalah contoh bagus mengapa jaringan saraf membutuhkan lebih dari satu lapisan untuk menyelesaikan masalah tertentu. XOR adalah masalah jaringan saraf umum yang umum digunakan untuk menguji kinerja suatu jaringan. Bagaimanapun, XOR tidak dapat dipisahkan secara linier menjadi lapisan yang terpisah, itu harus dipecah menjadi tahap-tahap yang lebih kecil, yang hasilnya diringkas. Tabel kebenaran untuk XOR terlihat seperti ini:

XOR hanya benar jika inputnya berbeda, yang merupakan masalah karena kedua input mengacu pada output yang sama. XOR tidak dapat dipisahkan secara linier, seperti yang ditunjukkan pada Gambar. 7.0. Seperti yang Anda lihat, tidak ada cara untuk memisahkan jawaban yang benar secara langsung. Masalahnya, kita dapat memisahkan jawaban yang benar dengan dua baris, dan itulah yang dilakukan lapisan kedua. Lapisan pertama melakukan pra-proses data atau memecahkan sebagian masalah, dan lapisan yang tersisa menyelesaikan perhitungan. Mengacu pada gambar. 6.0 kita melihat bahwa bobotnya adalah Wq=1, W2=-1, W3=1, W4=-1, W5=1, W6=1. Jaringan bekerja sebagai berikut: lapisan dihitung jika X1 dan X2 berlawanan, hasil dalam kasus (0,1) atau (1,0) adalah makanan untuk lapisan dua, yang menjumlahkannya dan meneruskannya jika benar. Intinya, kami telah membuat fungsi boolean:

z = ((X1 DAN BUKAN X2) ATAU (BUKAN X1 DAN X2))

Jika Anda ingin bereksperimen dengan neuronode dasar McCulloch-Pitts, daftar berikut adalah stimulator neuronode dua masukan lengkap.

// SIMULATOR MCULLOCCH PITTS
// TERMASUK
/////////////////////////////////////////////////////

#termasuk
#termasuk
#termasuk
#termasuk
#termasuk
#termasuk
#termasuk
#termasuk
#termasuk
#termasuk

// UTAMA
/////////////////////////////////////////////////////

batal utama (batal)
{
ambang mengambang, // ini adalah istilah theta yang digunakan untuk membatasi penjumlahan
w1, w2, // ini menahan beban
x1, x2, // masukan ke neurode
y_in, // penjumlahan aktivasi input
kamu T; // keluaran akhir dari neurode

cetakf( "nMcCulloch-Pitts Single Neurode Simulator.n") ;
printf("nSilahkan Masukkan Ambang Batas?");
scanf("%f",& ambang);

cetakf( "nMasukkan nilai untuk bobot w1?") ;
scanf("%f",&w1) ;

cetakf( "nMasukkan nilai untuk bobot w2?") ;
scanf("%f",& w2);

printf("nnSimulasi Awal:" );

// masuk ke loop acara utama

sedangkan (1)
{
cetakf( "nnSimulation Parms: threshold=%f, W=(%f,%f) n", ambang, w1, w2 ;

// meminta masukan dari pengguna
printf("nMasukkan input untuk X1?");
scanf("%f",& x1) ;

printf("nMasukkan input untuk X2?");
scanf("%f",& x2);

// menghitung aktivasi
y_in = x1* w1 + x2* w2;

// masukan hasil ke fungsi aktivasi (langkah biner sederhana)
jika (y_in >= ambang)
y_out = (mengambang ) 1.0 ;
lain
y_out = (mengambang ) 0.0 ;

//cetak hasil
printf("nKeluaran Neurode adalah %fn", y_out);

// coba lagi
cetakf( "Apakah kamu ingin melanjutkan Y atau N?") ;
char ans[ 8 ] ;
scanf("%s", js);

if (toupper(ans[ 0 ] ) != "Y" )
merusak ;
) // akhiri sementara

printf("nnSimulasi Selesai.n");
) // akhir utama

Ini menyimpulkan diskusi kita tentang blok bangunan dasar jaringan saraf MP, mari beralih ke jaringan saraf yang lebih kompleks seperti yang digunakan untuk mengklasifikasikan vektor input.

Klasifikasi dan pengenalan "gambar"

Akhirnya, kami siap untuk melihat jaringan saraf nyata yang telah menemukan beberapa kegunaan! Untuk beralih ke diskusi selanjutnya tentang jaringan saraf Hebb dan Hopfield, kami akan menganalisis struktur umum jaringan saraf, yang akan menggambarkan sejumlah konsep seperti keterpisahan linier, representasi bipolar, dan analogi antara jaringan saraf dan memori. Pertama-tama mari kita lihat Gambar. 8.0 yang mewakili model jaringan saraf dasar yang akan kita gunakan. Seperti yang Anda lihat, ini adalah jaringan satu simpul dengan tiga input, termasuk offset B, dan satu output. Kami ingin melihat bagaimana menggunakan jaringan ini untuk mengimplementasikan operasi AND logis yang dengan mudah kami implementasikan di neuronode McCulloch-Pitts.

Mari kita mulai dengan menggunakan representasi bipolar, jadi semua 0 diganti dengan -1. Tabel kebenaran logika AND saat menggunakan input dan output bipolar ditunjukkan di bawah ini:

Dan inilah fungsi aktivasi fc(x) yang akan kita gunakan:


fc (x) = 1, jika x i q
- 1, jika x< q

Perhatikan bahwa fungsi tersebut merupakan langkah menuju keluaran bipolar. Sebelum saya melanjutkan, izinkan saya menanam benih di otak Anda: pencampuran dan penginderaan akhirnya melakukan hal yang sama, mereka memberi kita tingkat kebebasan lain di neuron kita yang memungkinkan mereka menciptakan respons yang tidak dapat dicapai tanpanya. Anda akan segera melihatnya.

Sebuah neurode tunggal pada Gambar. 8.0 mencoba melakukan klasifikasi untuk kita. Ini akan memberitahu kita apakah input kita dari kelas ini atau tidak. Misalnya, apakah itu gambar pohon atau bukan. Atau, dalam kasus kami (logika sederhana DAN), apakah itu kelas +1 atau -1? Ini adalah dasar dari sebagian besar jaringan saraf, itulah sebabnya saya berbicara tentang keterpisahan linier. Kita harus sampai pada pemisahan ruang yang linier yang akan menghubungkan input dan output kita sehingga ada pemisahan ruang yang solid yang memisahkannya. Jadi kita perlu menemukan bobot yang tepat dan nilai bias yang akan melakukannya untuk kita. Tapi bagaimana kita melakukannya? Apakah ini hanya coba-coba, atau ada metodologi tertentu? Jawabannya adalah bahwa ada sejumlah metode untuk melatih jaringan saraf. Cara-cara tersebut bekerja pada berbagai contoh matematika dan dapat dibuktikan, namun untuk saat ini kita hanya akan mengambil nilai-nilai yang bekerja tanpa mempertimbangkan proses perolehannya. Latihan-latihan ini akan mengarahkan kita untuk mempelajari algoritme dan jaringan yang lebih kompleks daripada yang ditunjukkan di sini.

Oke, kami mencoba mencari bobot Wi dan bias B yang akan memberikan hasil yang benar untuk berbagai input dengan fungsi aktivasi Fc(x). Mari kita tulis aktivasi penjumlahan dari neuronode kita dan lihat apakah kita dapat membuat hubungan antara bobot dan input yang dapat membantu kita. Diberikan input X1 dan X2 dengan bobot W1 dan W2 bersama dengan B=1 dan bias b, kita mendapatkan rumus berikut:

X1*w1 + X2*w2 + B*b=q

Karena B selalu 1,0, rumusnya disederhanakan menjadi:

X1*w1 + X2*w2 + b=q

X2 = -X1*w1/w2 + (q -b)/w2 (menyelesaikan dalam bentuk X2)

Apa itu? Ini adalah garis! Dan jika ruas kiri lebih besar atau sama dengan q, yaitu (X1*W1+X2*W2+b), maka neurode akan menjawab 1, jika tidak maka akan memberikan hasil -1. Itu. garis adalah batas solusi. Beras. 9.0 menggambarkan hal ini. Pada grafik, Anda dapat melihat bahwa kemiringan garis adalah -w1/w2 dan intersepsi X2 adalah (q-b)/w2. Sekarang jelas mengapa kita bisa menyingkirkan q? Ini adalah bagian dari konstanta, dan kita selalu dapat menskalakan b untuk mencapai kerugian apa pun, jadi kita akan mengasumsikan bahwa Q=0, dan sebagai hasilnya kita mendapatkan persamaan:

X2 \u003d -X1 * w1 / w2 - b / w

Kami ingin menemukan bobot W1 dan W2 dan bias b sedemikian rupa sehingga mereka memisahkan output kami atau mengklasifikasikannya ke dalam partisi khusus tanpa tumpang tindih. Ini adalah kunci keterpisahan linier. Beras. 9.0 menunjukkan jumlah batas keputusan yang akan cukup, sehingga Anda dapat mengambil salah satu dari mereka. Mari kita ambil yang paling sederhana:

W1=W2=1

Dengan nilai-nilai ini, batas keputusan menjadi:

X2 = -X1*w1/w2 - b/w2 -> X2 = -1*X1 + 1

Kemiringannya adalah -1 dan intersep X2 = 1. Jika kita memasukkan vektor input untuk logika AND ke dalam persamaan ini dan menggunakan aktivasi Fc(x), kita mendapatkan output yang benar. Misalnya, jika X2+X1-1 > 0, maka respons neurode akan menjadi -1. Mari kita coba dengan input AND dan lihat apa yang terjadi:

seperti yang Anda lihat, jaringan saraf dengan bobot dan bias yang sesuai menyelesaikan masalah dengan sempurna. Selain itu, ada seluruh keluarga bobot yang akan melakukan ini dengan baik (mendorong batas keputusan ke arah yang tegak lurus dengan dirinya sendiri). Namun, ada poin penting. Tanpa offset atau sensitivitas, hanya umpan langsung yang dapat dilakukan, karena intersep X2 harus 0. Ini sangat penting, dan ini adalah alasan utama untuk menggunakan sensitivitas atau bias, jadi contoh ini penting karena dengan jelas menunjukkan fakta ini. Jadi, lebih ke intinya - bagaimana menemukan nilai bobot yang tepat? Ya, sekarang kita memiliki analogi geometris, dan ini adalah awal dari penemuan algoritma.

Pelatihan Hebb

Kami sekarang siap untuk melihat algoritma pembelajaran pertama dan penerapannya dalam jaringan saraf. Salah satu algoritma pembelajaran paling sederhana ditemukan oleh Donald Hebb dan didasarkan pada penggunaan vektor input untuk mengubah bobot sehingga bobot menciptakan pemisahan linier terbaik dari input dan output. Sayangnya, algoritma bekerja dengan baik. Memang, untuk input ortogonal, ini berfungsi dengan baik, tetapi untuk input non-ortogonal, algoritme berantakan. Meskipun algoritme tidak menghasilkan bobot yang benar untuk semua input, ini adalah inti dari sebagian besar algoritme pembelajaran, jadi kita akan mulai dengannya.

Sebelum Anda melihat algoritme, ingatlah bahwa itu hanya untuk satu neurode, jaringan saraf satu lapis. Anda tentu saja dapat menempatkan banyak neurode dalam satu lapisan, tetapi semuanya akan bekerja secara paralel dan dapat dilatih secara paralel. Alih-alih menggunakan vektor bobot tunggal, multi-neuronoda menggunakan matriks bobot. Bagaimanapun, algoritmenya sederhana, terlihat seperti ini:

  • Inputnya dalam bentuk bipolar I=(-1,1,0,... -1,1) dan mengandung k elemen.
  • Ada N vektor input, dan kita akan merujuk ke himpunannya sebagai elemen-J, mis. Aku j.
  • Outputnya akan disebut Yj, dan ada K output, masing-masing untuk satu input Ij.
  • Bobot W1-Wk terkandung dalam satu vektor W=(w1, w2,...wk)

Langkah 1. Inisialisasi semua bobot kita ke 0 dan biarkan bobot tersebut dimasukkan ke dalam vektor W dari entri N. Juga inisialisasi offset b ke 0.

Langkah 2. Dari j=1 ke n, lakukan:

b = b + yj (Di mana y adalah hasil yang diinginkan

w = w + Ij * yj (Ingat bahwa ini adalah operasi vektor)

Algoritma tidak lebih dari semacam "akumulator". Pergeseran batas keputusan didasarkan pada perubahan input dan output. Satu-satunya masalah adalah bahwa dalam beberapa kasus perbatasan tidak akan bergerak cukup cepat (atau sama sekali) dan "belajar" tidak akan terjadi.

Jadi bagaimana kita menggunakan pembelajaran Hebb? Jawaban atas pertanyaan ini sama dengan jaringan saraf sebelumnya, kecuali bahwa sekarang kami memiliki metode algoritmik untuk melatih jaringan, dan jaringan ini disebut Hebbian Net. Sebagai contoh, mari kita ambil fungsi boolean yang valid dan lihat apakah algoritme dapat menemukan bobot dan nilai bias yang tepat untuknya. Penjumlahan di bawah ini setara dengan menjalankan algoritme:

w = + + + = [(-1, -1)*(-1)] + [(-1, 1)*(-1)] + [(1, -1)*(-1)] + [ (1, 1)*(1)] = (2,2)

b = y1 + y2 + y3 + y4 = (-1) + (-1) + (-1) + (1) = -2

Jadi W1=2, W2=2, dan b=2. Ini hanyalah versi skala dari nilai W1=1, W2=2, B=-1 yang kita dapatkan di bagian sebelumnya. Dengan algoritme sederhana ini, kita dapat melatih jaringan saraf (dari satu neurode) untuk merespons array input atau mengklasifikasikannya sebagai benar/salah, atau 1/-1. Dan sekarang, jika kita memiliki array neuronode seperti itu, kita dapat membuat jaringan yang tidak hanya mendefinisikan input sebagai ya / tidak, tetapi juga mengaitkan input dengan pola tertentu. Ini adalah salah satu fondasi untuk struktur berikutnya dari jaringan saraf, jaringan Hopfield.

Algoritma Hopfield

John Hopfield adalah fisikawan yang senang bermain dengan jaringan saraf (yang baik untuk kita). Dia datang dengan model jaringan saraf sederhana (setidaknya relatif) tetapi efektif yang disebut Jaringan Hopfield. Ini digunakan untuk mengasosiasikan, jika Anda memasukkan vektor x, maka Anda akan mendapatkan x sebagai output (saya harap). Jaringan Hopfield ditunjukkan pada Gambar 10.0. Ini adalah jaringan single-layer dengan jumlah neuronode tertentu sama dengan jumlah input Xi. Jaringan sepenuhnya terhubung, yang berarti bahwa setiap neurode terhubung ke setiap neurode lainnya, dan input juga merupakan output. Ini mungkin tampak aneh bagi Anda, karena muncul Masukan. Umpan balik adalah salah satu fitur utama jaringan Hopfield, dan merupakan salah satu fondasi dasar untuk mendapatkan hasil yang tepat.

Jaringan Hopfield adalah memori auto-associative iteratif. Mungkin diperlukan satu hingga beberapa siklus untuk mendapatkan hasil yang benar. Biarkan saya mengklarifikasi: jaringan Hopfield menerima input dan kemudian mengembalikannya, dan output yang dihasilkan mungkin atau mungkin bukan input yang diinginkan. Loop umpan balik ini dapat melewati beberapa kali sebelum vektor input dikembalikan. Jadi, urutan fungsional jaringan Hopfield: pertama-tama tentukan bobot input yang ingin kita kaitkan, kemudian berikan vektor input dan lihat apa yang diberikan oleh fungsi aktivasi. Jika hasilnya sama dengan input asli kami, maka semuanya berhasil, jika tidak, kami mengambil vektor yang dihasilkan dan memasukkannya ke jaringan. Sekarang mari kita lihat matriks bobot dan algoritma pembelajaran yang digunakan dalam jaringan Hopfield.

Algoritma pembelajaran untuk jaringan Hopfield didasarkan pada aturan Hebb dan hanya menjumlahkan hasilnya. Namun, karena jaringan Hopfield memiliki banyak neuron input, bobotnya tidak lagi berupa larik bobot, tetapi larik larik yang secara kompak terkandung dalam satu matriks. Dengan demikian, matriks bobot W untuk jaringan Hopfield dibuat berdasarkan persamaan ini:

  • Vektor input dalam bentuk bipolar I = (-1,1,... -1,1) dan mengandung k elemen.
  • Ada N vektor input, dan kita akan mengacu pada himpunannya sebagai elemen-j dari I, yaitu. Aku j.
  • Keluarannya akan disebut Yj, dan ada k keluaran, masing-masing untuk masukannya sendiri Ij.
  • Matriks bobot W berbentuk bujur sangkar dan berdimensi kxk karena kami memiliki k input.

k
W (kxk) = e Iit x Ii
saya = 1

Catatan: setiap perkalian luar akan memiliki dimensi K x K karena kita mengalikan vektor kolom dan vektor baris.

Dan, Wii = 0 untuk semua i

Fungsi aktivasi fh(x) ditunjukkan di bawah ini:

fh (x) = 1, jika x i 0
0, jika x< 0

fh (x) adalah fungsi langkah dengan hasil biner. Ini berarti bahwa setiap input harus biner, tetapi apakah kita sudah mengatakan bahwa inputnya bipolar? Yah, ya, itu, dan tidak. Ketika matriks bobot dihasilkan, kami mengubah semua vektor input ke format bipolar, tetapi dalam operasi normal kami menggunakan versi biner dari input dan output, sebagai jaringan Hopfield juga biner. Konversi ini opsional, tetapi membuat diskusi jaringan sedikit lebih mudah. Bagaimanapun, mari kita lihat sebuah contoh. Katakanlah kita ingin membuat 4 node jaringan Hopfield dan kita ingin mereka memanggil vektor-vektor ini:

I1=(0,0,1,0), I2=(1,0,0,0), I3=(0,1,0,1) Catatan: keduanya ortogonal

Mengkonversi ke nilai bipolar, kita mendapatkan:

I1* = (-1, -1.1, -1) , I2* = (1, -1, -1, -1) , I3* = (-1.1, -1.1)

Sekarang kita perlu menghitung W1,W2,W3 di mana Wi adalah produk dari setiap transposisi input dengan dirinya sendiri.

W1= [ I1* t x I1* ] = (— 1 , - 1 , 1 , - 1 ) t x (— 1 , — 1 , 1 , — 1 ) =
1 1 — 1 1
1 1 — 1 1
— 1 — 1 1 — 1
1 1 — 1 1 W2 = [ I2* t x I2* ] = (1 , — 1 , — 1 , — 1 ) t x (1 , — 1 , — 1 , — 1 ) =
1 — 1 — 1 — 1
— 1 1 1 1
— 1 1 1 1
— 1 1 1 1

W3 = [ I3* t x I3* ] = (- 1 , 1 , - 1 , 1 ) t x (- 1 , 1 , - 1 , 1 ) =
1 — 1 1 — 1
— 1 1 — 1 1
1 — 1 1 — 1
— 1 1 — 1 1

Menihilkan diagonal utama memberi kita matriks bobot akhir:

P =
0 — 1 — 1 — 1
— 1 0 — 1 3
— 1 — 1 0 — 1
— 1 3 — 1 0

Wow, sekarang mari kita menari. Mari masukkan vektor asli kita dan lihat hasilnya. Untuk melakukannya, cukup kalikan input dengan matriks dan proses setiap output dengan fungsi Fh(x). Berikut adalah hasilnya:

, — 1 ) dan fh((0 , — 1 , — 1 , — 1 ) ) = (1 , 0 , 0 , 0 )

I3 x W = (— 2 , 3 , - 2 , 3 ) dan fh((— 2 , 3 , — 2 , 3 ) ) = (0 , 1 , 0 , 1 )

Masukannya "diingat" dengan sempurna, sebagaimana mestinya, karena mereka ortogonal. Sebagai contoh terakhir, mari kita asumsikan bahwa input kita (pendengaran, penglihatan, dll.) agak "berisik" dan mengandung satu kesalahan. Mari kita ambil I3=(0,1,0,1) dan tambahkan beberapa noise yaitu. I3 kebisingan = (0,1,1,1). Sekarang mari kita lihat apa yang terjadi jika kita memasukkan vektor "berisik" ini ke dalam jaringan Hopfield:

I3 noise x W = (-3, 2, -2, 2) dan Fh ((-3.2, -2, 2)) = (0.1,0.1)

Anehnya, vektor aslinya "diingat". Itu sangat bagus. Dengan cara ini, kita memiliki kemungkinan untuk membuat "memori" yang diisi dengan pola bit yang terlihat seperti pohon (ek, weeping willow, spruce, dll.), dan jika kita memasukkan pohon lain, seperti willow, yang tidak dalam jaringan, jaringan kami akan (semoga) mengeluarkan informasi tentang seperti apa "pemikiran" pohon willow itu. Ini adalah salah satu kekuatan memori asosiatif: kita tidak perlu melatih jaringan untuk setiap masukan yang mungkin, kita hanya perlu begitu banyak agar jaringan memiliki "asosiasi". Input "tutup" kemudian biasanya disimpan sebagai input yang dipelajari semula. Ini adalah dasar dari pengenalan gambar dan suara. Jangan tanya dari mana saya mendapatkan analogi "pohon". Bagaimanapun, di akhir artikel kami, saya menyertakan simulator jaringan Hopfield asosiatif otomatis yang memungkinkan Anda membuat jaringan hingga 16 neuronode.

mati otak...

Itu saja yang akan kita lihat hari ini. Saya berharap untuk sampai ke jaringan preceptron, tapi oh well. Saya harap Anda memahami setidaknya sedikit apa itu jaringan saraf dan bagaimana membuat program kerja untuk memodelkannya. Kami telah membahas istilah dan konsep dasar, beberapa dasar matematika, dan beberapa model jaringan yang paling umum. Namun, ada banyak hal yang perlu dipelajari tentang jaringan saraf. Ini adalah perceptron, memori asosiatif fuzzy atau FAM, memori asosiatif dua arah atau BAM, peta Kohonen, algoritma backpropagation jaringan, teori jaringan resonansi adaptif, dan banyak lagi. Itu saja, jaringan saraf saya memanggil saya untuk bermain!