Gagasan di balik Jaringan Syaraf Berulang (RNN) jelas bagi saya. Saya memahaminya dengan cara berikut:
Kami memiliki urutan pengamatan ( ) (atau, dengan kata lain, deret waktu multivarian). Setiap pengamatan tunggal adalah vektor numerik dimensi. Di dalam model-RNN kita mengasumsikan bahwa pengamatan selanjutnya adalah fungsi dari pengamatan sebelumnya serta "keadaan tersembunyi" , di mana keadaan tersembunyi juga diwakili oleh angka vektor (dimensi keadaan teramati dan tersembunyi dapat berbeda). Status tersembunyi itu sendiri juga dianggap bergantung pada pengamatan sebelumnya dan kondisi tersembunyi:
Akhirnya, dalam model RNN, fungsi diasumsikan sebagai jaringan saraf. Kami melatih (fit) jaringan saraf menggunakan data yang tersedia (urutan pengamatan). Tujuan kami dalam pelatihan ini adalah untuk dapat memprediksi pengamatan selanjutnya seakurat mungkin menggunakan pengamatan sebelumnya.
Sekarang, jaringan LSTM adalah modifikasi dari jaringan RNN. Sejauh yang saya mengerti, motivasi di balik LSTM adalah untuk menyelesaikan masalah memori pendek yang khas RNN (RNN konvensional memiliki masalah dengan peristiwa terkait yang terlalu jauh terpisah dalam waktu).
Saya mengerti bagaimana jaringan LSTM bekerja. Inilah penjelasan terbaik dari LSTM yang saya temukan. Ide dasarnya adalah sebagai berikut:
Selain vektor keadaan tersembunyi, kami memperkenalkan vektor yang disebut "keadaan sel" yang memiliki ukuran (dimensi) yang sama dengan vektor keadaan tersembunyi ( ). Saya pikir vektor "sel keadaan" diperkenalkan untuk memodelkan memori jangka panjang. Seperti dalam kasus RNN konvensional, jaringan LSTM mendapatkan status terpantau dan tersembunyi sebagai input. Dengan menggunakan input ini, kami menghitung "keadaan sel" baru dengan cara berikut:
di mana fungsi , dan dimodelkan oleh jaringan saraf. Untuk membuat ekspresi lebih sederhana, saya cukup menghapus argumen:
Jadi, kita dapat melihat bahwa "vektor keadaan sel" baru ( ) adalah jumlah tertimbang dari vektor keadaan lama ( ) dan vektor keadaan sel "perantara" ( ). Penggandaan antara vektor adalah komponen-bijaksana (kami mengalikan dua vektor dimensi N dan, sebagai hasilnya, mendapatkan vektor dimensi N lainnya). Dengan kata lain, kita mencampur dua vektor status sel (yang lama dan yang menengah) menggunakan bobot komponen tertentu.
Berikut ini adalah intuisi antara operasi yang dijelaskan. Vektor keadaan sel dapat diartikan sebagai vektor memori. Vektor bobot kedua (dihitung oleh jaringan saraf) adalah gerbang "keep" (atau lupa). Nilainya memutuskan apakah kita menyimpan atau menghapus (menghapus) nilai yang sesuai dari vektor status sel (atau vektor memori jangka panjang). Vektor bobot pertama ( ), yang dihitung oleh jaringan saraf lain, disebut gerbang "tulis" atau "hafalkan". Ini memutuskan apakah memori baru (vektor "sel menengah") harus disimpan (atau lebih tepatnya, jika komponen tertentu harus disimpan / ditulis). "Perantara"vektor). Sebenarnya, akan lebih akurat untuk mengatakan, bahwa dengan dua vektor bobot ( dan ) kita "mencampur" memori lama dan baru.
Jadi, setelah pencampuran yang dijelaskan di atas (atau lupa dan menghafal) kita memiliki vektor keadaan sel baru. Kemudian kita menghitung keadaan tersembunyi "antara" dengan menggunakan jaringan saraf lain (seperti sebelumnya, kita menggunakan keadaan terpantau dan keadaan tersembunyi sebagai masukan). Akhirnya, kami menggabungkan keadaan sel baru (memori) dengan keadaan tersembunyi "menengah" ( ) untuk mendapatkan keadaan tersembunyi baru (atau "final") yang sebenarnya kami :
di mana adalah fungsi sigmoid yang diterapkan pada setiap komponen vektor keadaan sel.
Jadi, pertanyaan saya adalah: Mengapa (atau bagaimana tepatnya) arsitektur ini menyelesaikan masalah?
Secara khusus saya tidak mengerti yang berikut ini:
- Kami menggunakan jaringan saraf untuk menghasilkan memori "menengah" (vektor keadaan sel) yang dicampur dengan memori "lama" (atau kondisi sel) untuk mendapatkan memori "baru" (keadaan sel). Faktor pembobotan untuk pencampuran juga dihitung oleh jaringan saraf. Tetapi mengapa kita tidak dapat menggunakan hanya satu jaringan saraf untuk menghitung status sel (atau memori) "baru". Atau, dengan kata lain, mengapa kita tidak bisa menggunakan keadaan yang diamati, keadaan tersembunyi dan memori lama sebagai input ke jaringan saraf yang menghitung memori "baru"?
- Pada akhirnya kita menggunakan negara yang diamati dan disembunyikan untuk menghitung keadaan tersembunyi baru dan kemudian kita menggunakan keadaan sel "baru" (atau (jangka panjang) memori) untuk memperbaiki komponen keadaan tersembunyi yang baru dihitung. Dengan kata lain, komponen keadaan sel digunakan sama seperti bobot yang hanya mengurangi komponen terkait dari keadaan tersembunyi yang dihitung. Tetapi mengapa vektor keadaan sel digunakan dengan cara khusus ini? Mengapa kita tidak bisa menghitung status tersembunyi baru dengan meletakkan vektor status sel (memori jangka panjang) ke input jaringan saraf (yang juga mengambil status yang diamati dan disembunyikan sebagai input)?
Ditambahkan:
Berikut adalah video yang dapat membantu untuk menjelaskan bagaimana berbagai gerbang ("simpan", "tulis" dan "baca") diatur.