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.
Jawaban:
Saat saya memahami pertanyaan Anda, apa yang Anda gambar pada dasarnya adalah gabungan dari input, kondisi tersembunyi sebelumnya, dan keadaan sel sebelumnya, dan melewatkannya melalui satu atau beberapa lapisan yang terhubung sepenuhnya untuk menghitung keluaran keadaan tersembunyi dan keadaan sel, alih-alih menghitung secara mandiri "terjaga keamanannya" "pembaruan yang berinteraksi secara hitung dengan keadaan sel. Ini pada dasarnya akan membuat RNN biasa yang hanya menghasilkan bagian dari status tersembunyi.
Alasan utama untuk tidak melakukan ini adalah bahwa struktur perhitungan keadaan sel LSTM memastikan aliran kesalahan yang konstan melalui sekuens panjang . Jika Anda menggunakan bobot untuk menghitung status sel secara langsung, Anda harus mempropagasinya kembali setiap langkah waktu! Menghindari operasi semacam itu sebagian besar memecahkan gradien yang hilang / meledak yang jika tidak mengganggu RNN.
Plus, kemampuan untuk menyimpan informasi dengan mudah dalam rentang waktu yang lebih lama adalah bonus yang bagus. Secara intuitif, akan jauh lebih sulit bagi jaringan untuk belajar dari awal untuk mempertahankan keadaan sel dalam rentang waktu yang lebih lama.
Perlu dicatat bahwa alternatif paling umum untuk LSTM, GRU , juga menghitung pembaruan status tersembunyi tanpa mempelajari bobot yang beroperasi langsung pada status tersembunyi itu sendiri.
sumber
Jika saya sudah mengerti dengan benar, kedua pertanyaan Anda akan mengarah pada hal ini. Dua tempat di mana kami menggunakan tanh dan sigmoid untuk memproses informasi. Alih-alih itu kita harus menggunakan satu jaringan saraf tunggal yang mengambil semua informasi.
Saya tidak tahu kelemahan menggunakan satu jaringan saraf tunggal. Menurut pendapat saya, kita dapat menggunakan jaringan saraf tunggal dengan sigmoid non-linearitas yang dengan benar mempelajari vektor yang akan digunakan secara tepat (ditambahkan dalam keadaan sel dalam kasus pertama atau diteruskan sebagai keadaan tersembunyi dalam kasus kedua).
Namun, cara kita melakukannya sekarang kita melanggar tugas dalam dua bagian, satu bagian yang menggunakan non-linearitas sigmoid untuk mempelajari jumlah data yang akan disimpan. Bagian lain yang menggunakan tanh sebagai non-linearitas hanya melakukan tugas mempelajari informasi yang penting.
Secara sederhana, sigmoid belajar berapa banyak yang harus ditabung dan tanh belajar apa yang harus disimpan dan memecahnya menjadi dua bagian akan membuat pelatihan lebih mudah.
sumber