Apa intuisi di balik jaringan saraf berulang Long Short Term Memory (LSTM)?

11

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:o1,o2,,onoiNoi+1oihi

oi,hi=F(oi1,hi1)

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.F

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:ci

ci+1=ω1(oi,hi)ci+ω2(oi,hi)cint(oi,hi),

di mana fungsi , dan dimodelkan oleh jaringan saraf. Untuk membuat ekspresi lebih sederhana, saya cukup menghapus argumen:ω1ω2cint

ci+1=ω1ci+ω2cint

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.cici1cint

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"ω2ω1ω1vektor). Sebenarnya, akan lebih akurat untuk mengatakan, bahwa dengan dua vektor bobot ( dan ) kita "mencampur" memori lama dan baru.ω1ω2

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 :oihihint

hi+1=hintS(ci+1),

di mana adalah fungsi sigmoid yang diterapkan pada setiap komponen vektor keadaan sel.S

Jadi, pertanyaan saya adalah: Mengapa (atau bagaimana tepatnya) arsitektur ini menyelesaikan masalah?

Secara khusus saya tidak mengerti yang berikut ini:

  1. 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"?
  2. 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.

Roma
sumber
1
Anda tampaknya memahami LSTM lebih baik daripada saya, jadi saya tidak akan memposting jawaban yang sebenarnya, karena mungkin bukan yang Anda cari: gerbang LSTM (terutama gerbang lupa) memungkinkannya menyimpan aktivasi dan gradien selama seperlunya. Jadi informasi pada waktu t dapat disimpan sampai waktu t + n, untuk n besar yang sewenang-wenang.
rcpinto
@ Arcpinto, saya juga berpikir bahwa ide utama di balik "arsitektur" yang diusulkan adalah untuk memungkinkan menyimpan informasi untuk waktu yang lama (banyak langkah waktu). Tapi saya tidak mengerti apa yang sebenarnya memungkinkan. Dua gerbang jaringan ("keep" dan "write") mungkin belajar bahwa bobot keep harus besar dan bobot write harus kecil (maka kita menyimpan memori untuk waktu yang lama). Tapi tidak bisakah itu dicapai hanya dengan satu jaringan? Tidak bisakah jaringan saraf (yang mengambil status tersembunyi (memori) dan status yang dapat diamati sebagai input) mengetahui bahwa status tersembunyi harus disimpan tanpa perubahan?
Roman
Memang, hanya mengatur matriks bobot berulang ke identitas dan itu akan selalu menjaga aktivasi terakhir. Masalahnya adalah selalu bagian, yang berarti bahwa input baru akan menumpuk dan cepat menjenuhkan aktivasi neuron, yang juga merupakan semacam lupa. Dengan demikian, kemampuan untuk menghapus memori sebelumnya atau memblokir pembentukan ingatan baru sangat penting.
rcpinto
@ Arcpinto, tetapi tidak bisakah "kemampuan untuk menghapus memori sebelumnya atau memblokir pembentukan yang baru" dapat dicapai dalam jaringan saraf tunggal? Jaringan saraf mendapatkan vektor memori (atau vektor keadaan tersembunyi) dan vektor keadaan teramati sebagai input. Tidak bisakah jaringan seperti itu "memutuskan" untuk menyimpan atau mengganti beberapa komponen dari keadaan tersembunyi (ingatannya) berdasarkan pada nilai-nilai komponen dalam vektor keadaan yang diamati?
Roman
LSTM dapat melakukan itu karena gerbang membuka atau menutup sesuai dengan input dan status saat ini. Tidak ada konsep seperti itu dalam RNN sederhana. Dalam hal ini, negara itu sendiri selalu bereaksi terhadap input / keadaan secara langsung dan segera, mencegahnya dari "memilih" apakah akan menyimpan informasi baru atau tidak. Juga, tidak ada mekanisme untuk menghapus beberapa memori yang tersimpan, itu akan selalu terakumulasi sesuai dengan bobot input ke neuron, dan bobot tersebut tidak dapat berubah setelah pelatihan. Karena gerbang LSTM adalah multiplikatif, mereka mensimulasikan perubahan berat selama inferensi, bereaksi terhadap input / keadaan saat ini.
rcpinto

Jawaban:

1

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.

Gianni
sumber
0

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.

pelajar
sumber