LSTM diciptakan khusus untuk menghindari masalah gradien hilang. Seharusnya melakukan itu dengan Constant Error Carousel (CEC), yang pada diagram di bawah ini (dari Greff et al. ) Sesuai dengan loop di sekitar sel .
(sumber: deeplearning4j.org )
Dan saya mengerti bahwa bagian itu dapat dilihat sebagai semacam fungsi identitas, sehingga turunannya satu dan gradien tetap konstan.
Yang tidak saya mengerti adalah bagaimana itu tidak hilang karena fungsi aktivasi lainnya? Input, output dan lupa gerbang menggunakan sigmoid, yang turunannya paling banyak 0,25, dan g dan h secara tradisional tanh . Bagaimana melakukan backpropagating melalui mereka yang tidak membuat gradien menghilang?
neural-networks
lstm
TheWalkingCube
sumber
sumber
Jawaban:
Gradien yang hilang paling baik dijelaskan dalam kasus satu dimensi. Multidimensi lebih rumit tetapi pada dasarnya analog. Anda dapat memeriksanya dalam makalah yang luar biasa ini [1]
Asumsikan kita memiliki status tersembunyi pada langkah waktu . Jika kita membuat hal-hal sederhana dan menghapus bias dan masukan, kita memiliki h t = σ ( w h t - 1 ) . Maka Anda bisa menunjukkan itu tht t
The faktor ditandai dengan !!! adalah yang paling penting. Jika beratnya tidak sama dengan 1, ia akan meluruh menjadi nol secara eksponensial cepat dalamt′-t, atau tumbuh secara eksponensial cepat.
Dalam LSTMs, Anda memiliki negara sel . Derivatifnya ada dalam bentuk ∂ s t ′st
Di sinivtadalah input ke gerbang lupa. Seperti yang Anda lihat, tidak ada faktor pembusukan yang cepat secara eksponensial. Akibatnya, setidaknya ada satu jalur di mana gradien tidak hilang. Untuk derivasi lengkap, lihat [2].
[1] Pascanu, Razvan, Tomas Mikolov, dan Yoshua Bengio. "Tentang kesulitan melatih jaringan saraf berulang." ICML (3) 28 (2013): 1310-1318.
[2] Bayer, Justin Simon. Representasi Belajar Urutan. Diss. München, Technische Universität München, Diss., 2015, 2015.
sumber
Gambar blok LSTM dari Greff et al. (2015) menjelaskan varian yang penulis sebut vanilla LSTM . Ini sedikit berbeda dari definisi asli dari Hochreiter & Schmidhuber (1997). Definisi asli tidak termasuk gerbang lupa dan koneksi lubang intip.
Istilah Constant Error Carousel digunakan dalam makalah asli untuk menunjukkan koneksi berulang dari keadaan sel. Pertimbangkan definisi asli di mana keadaan sel diubah hanya dengan penambahan, ketika gerbang input terbuka. Gradien dari keadaan sel sehubungan dengan keadaan sel pada langkah waktu sebelumnya adalah nol.
Kesalahan mungkin masih masuk CEC melalui gerbang keluaran dan fungsi aktivasi. Fungsi aktivasi mengurangi besarnya kesalahan sedikit sebelum ditambahkan ke CEC. CEC adalah satu-satunya tempat di mana kesalahan dapat mengalir tidak berubah. Sekali lagi, ketika gerbang input terbuka, kesalahan keluar melalui gerbang input, fungsi aktivasi, dan transformasi affine, mengurangi besarnya kesalahan.
Dengan demikian kesalahan berkurang ketika dipropagasi ulang melalui lapisan LSTM, tetapi hanya ketika memasuki dan keluar dari CEC. Yang penting adalah bahwa itu tidak berubah dalam KTK tidak peduli seberapa jauh jaraknya. Ini memecahkan masalah dalam RNN dasar bahwa setiap langkah waktu menerapkan transformasi afin dan nonlinier, artinya semakin lama jarak waktu antara input dan output, semakin kecil kesalahan yang didapat.
sumber
http://www.felixgers.de/papers/phd.pdf Silakan merujuk ke bagian 2.2 dan 3.2.2 di mana bagian kesalahan terpotong dijelaskan. Mereka tidak menyebarkan kesalahan jika bocor keluar dari memori sel (yaitu jika ada gerbang input tertutup / diaktifkan), tetapi mereka memperbarui bobot gerbang berdasarkan kesalahan hanya untuk saat itu saja instan. Nanti itu dibuat nol selama propagasi kembali lebih jauh. Ini adalah jenis peretasan tetapi alasan untuk melakukannya adalah bahwa aliran kesalahan di sepanjang gerbang tetap membusuk dari waktu ke waktu.
sumber
Saya ingin menambahkan beberapa detail ke jawaban yang diterima, karena saya pikir itu sedikit lebih bernuansa dan nuansa mungkin tidak jelas bagi seseorang yang pertama kali belajar tentang RNNs.
Untuk LSTM, ada satu set bobot yang dapat dipelajari sehinggaσ(⋅)≈1 Misalkan vt+k=wx w x w
misalnya Dalam kasus 1D jikax = 1 , w = 10 vt + k= 10 maka faktor peluruhan σ( ⋅ ) = 0,99995 ( 0.99995 )t′- t
Untuk vanilla RNN, tidak ada set bobot yang bisa dipelajari sehinggaw σ′( b jamt′- k)≈1
misalnya Dalam kasus 1D, misalkanht′−k=1 . Fungsi wσ′(w∗1) mencapai maksimum 0.224 pada w=1.5434 (0.224)t′−t
sumber