Jendela geser mengarah ke overfitting di LSTM?

15

Apakah saya akan mengenakan LSTM saya jika saya melatihnya melalui pendekatan sliding-window? Mengapa orang tampaknya tidak menggunakannya untuk LSTM?

Untuk contoh yang disederhanakan, asumsikan bahwa kita harus memprediksi urutan karakter:

A B C D E F G H I J K L M N O P Q R S T U V W X Y Z

Apakah buruk (atau lebih baik?) Jika saya terus melatih LSTM saya dengan minibatch berikut:

A B C D E F G H I J K L M N, backprop, erase the cell

B C D E F G H I J K L M N O, backprop, erase the cell

 .... and so on, shifting by 1 every time?

Sebelumnya, saya selalu melatihnya sebagai:

A B C D E F G H I J K L M N,  backprop, erase the cell

O P Q R S T U V W X Y Z,  backprop, erase the cell

Alih-alih menggeser satu, lebih baik menggeser jendela dengan 2 entri, dll? Apa artinya itu (dalam hal presisi / overfitting)?


Juga, jika saya melakukan pendekatan sliding-window dalam jaringan umpan-maju, apakah itu akan menghasilkan overfitting? Saya berasumsi ya, karena jaringan terpapar ke wilayah informasi yang sama untuk waktu yang sangat lama. Misalnya, terpapar E F G H I J Kuntuk waktu yang lama.


Edit:

Harap ingat bahwa status sel terhapus di antara kumpulan pelatihan, sehingga LSTM akan memiliki "palu untuk menuju" pada saat-saat ini. Tidak dapat mengingat apa yang sebelumnya OPQRSTUVWXYZ. Ini berarti bahwa LSTM tidak dapat mengetahui bahwa "O" mengikuti "M".

Jadi, saya pikir (jadi seluruh pertanyaan saya), mengapa tidak memberikannya bets menengah (tumpang tindih) di antara ... dan dalam hal itu mengapa tidak menggunakan beberapa minibatch yang tumpang tindih - bagi saya ini akan memberikan pelatihan yang lebih lancar? Pada akhirnya, itu berarti jendela geser untuk LSTM.


Beberapa info berguna yang saya temukan setelah jawaban diterima:

dari sini

Kata pertama dari terjemahan bahasa Inggris mungkin sangat berkorelasi dengan kata pertama dari kalimat sumber. Tapi itu berarti decoder harus mempertimbangkan informasi dari 50 langkah yang lalu, dan informasi itu perlu entah bagaimana dikodekan dalam vektor. Jaringan Syaraf Berulang dikenal memiliki masalah dalam menangani ketergantungan jangka panjang tersebut. Secara teori, arsitektur seperti LSTM harus dapat menangani ini, tetapi dalam praktiknya ketergantungan jangka panjang masih bermasalah.

Sebagai contoh, para peneliti telah menemukan bahwa membalik urutan sumber (memasukkannya kembali ke encoder) menghasilkan hasil yang jauh lebih baik karena mempersingkat jalur dari decoder ke bagian-bagian yang relevan dari encoder. Demikian pula, memberi makan urutan input dua kali juga tampaknya membantu jaringan untuk menghafal sesuatu dengan lebih baik. Misalnya, jika salah satu contoh pelatihan adalah "John pulang", Anda akan memberikan "John pulang John pulang" ke jaringan sebagai satu input.

Edit setelah menerima jawabannya:

Beberapa bulan kemudian, saya lebih cenderung menggunakan pendekatan sliding window, karena menggunakan data yang lebih baik. Tetapi dalam hal ini Anda mungkin tidak ingin melatih BCDEFGHIJKLMNO tepat setelah ABCDEFGHIJKLMNO. Alih-alih, kocok contoh Anda, untuk secara bertahap dan seragam " sisipkan " semua informasi ke dalam LSTM Anda. Berikan HIJKLMNOPQRSTU setelah ABCDEFGHIJKLMNO dll. Itu terkait langsung dengan Catastrophic Forgetting. Seperti biasa, pantau Validasi dan Tes dengan cermat, dan hentikan segera setelah Anda melihat kesalahannya semakin meningkat

Juga, masalah "palu ke kepala" dapat diperbaiki, dengan menggunakan Gradien Sintetis. Lihat manfaatnya di sini: (jawaban tertaut membahas manfaat rangkaian panjang) /datascience//a/32425/43077

Kari
sumber

Jawaban:

9

Meskipun jawaban sebelumnya oleh @Imran benar, saya merasa perlu menambahkan peringatan: ada aplikasi di luar sana di mana orang memberi makan jendela geser ke LSTM. Misalnya, di sini , untuk membingkai prakiraan sebagai masalah pembelajaran yang diawasi.

4(mn+n2+n)mn

Karena LSTM tidak memerlukan input ukuran tetap, mereka dapat menemukan nomor lookback optimal sendiri. Namun, jika Anda telah melakukan analisis autoregresif sebelumnya dan memutuskan bahwa, misalnya, langkah waktu saat ini paling berkorelasi dengan langkah waktu ke-10 sebelumnya, dan tidak berkorelasi dengan ke-11 atau langkah waktu lebih jauh di masa lalu, maka Anda bisa mungkin menghemat waktu pelatihan dengan memberi makan dalam urutan yang tetap. Namun, jenis itu mengalahkan tujuan dari LSTM.

Jika data Anda tidak cukup kaya untuk suatu LSTM, saya akan merekomendasikan mencoba sesuatu yang lebih sederhana, seperti model autoregresif, dan meningkatkannya.

EDIT (menanggapi komentar):

Urutan yang tumpang tindih digunakan sebagai input, terutama ketika urutannya sangat panjang (meskipun, tentu saja, 'panjang' adalah relatif). Meskipun LSTM lebih baik daripada vanilla RNN untuk urutan yang lama, mereka masih dapat mengalami kesulitan mengingat langkah waktu dari awal urutan jika urutannya sangat panjang. Itu menyebabkan hal-hal seperti LSTM dua arah, yang membaca urutan ke depan dan ke belakang, meningkatkan paparan jaringan ke awal dan akhir setiap urutan input. Prinsipnya sama dengan urutan yang tumpang tindih, meskipun saya berpendapat bahwa urutan yang tumpang tindih lebih intuitif.

StorScerceress
sumber
Terima kasih, saya masih belum melihat apakah LSTM harus / tidak boleh dilatih dengan batch yang tidak tumpang tindih. Posting yang Anda sukai adalah yang berharga, tetapi hanya membahas feed-forward nets dan tidak membahas manfaat / bahaya dalam minibatch LSTM yang tumpang tindih selama pelatihan. @Imran juga tidak membahas "anti-resep" terhadap minibatch yang tumpang tindih - komentar pertama saya untuk jabatannya.
Kari
Saya telah mengedit pertanyaan saya untuk memasukkan komentar
Kari
Banyak info hebat!
Imran
@Ari Saya telah mengubah jawaban saya. Apakah itu membantu?
StatsSorceress
5

LSTM tidak memerlukan jendela geser input. Mereka dapat mengingat apa yang telah mereka lihat di masa lalu, dan jika Anda memberi contoh pelatihan satu per satu, mereka akan memilih jendela input ukuran yang tepat untuk diingat sendiri.

LSTM sudah cenderung overfitting, dan jika Anda memberi banyak data yang berlebihan dengan jendela geser maka ya, mereka cenderung overfit.

Di sisi lain, jendela geser diperlukan untuk perkiraan deret waktu dengan Feedforward Neural Networks, karena FNN memerlukan input ukuran tetap dan tidak memiliki memori, jadi ini adalah cara paling alami untuk memberi mereka data deret waktu.

Apakah FNN akan sesuai atau tidak tergantung pada arsitektur dan data Anda, tetapi semua teknik regularisasi standar akan berlaku jika ya. Misalnya Anda dapat mencoba memilih jaringan yang lebih kecil, regularisasi L2, Dropout, dll.

Imran
sumber
Terima kasih! Saya berpendapat bahwa keadaan sel terhapus antara batch pelatihan, sehingga LSTM akan memiliki "palu untuk menuju" pada saat-saat ini. Tidak dapat mengingat apa yang sebelumnya OPQRSTUVWXYZ. Ini berarti LSTM tidak dapat mengetahui bahwa "O" mengikuti "M". Jadi saya pikir, mengapa tidak memberikannya bets menengah (tumpang tindih) di antara ... dan dalam hal itu mengapa tidak menggunakan beberapa minibatch yang tumpang tindih - bagi saya ini akan memberikan pelatihan yang lebih halus?
Kari
Pada akhirnya, itu berarti jendela geser untuk LSTM
Kari
Tidak perlu menghapus keadaan sel di antara batch pelatihan, meskipun backpropagation lebih lanjut tentu saja tidak mungkin.
Jan van der Vegt
Saya memang mencobanya, dan - bahkan dengan tingkat pembelajaran 0 kesalahan melonjak naik dan turun dengan jumlah kecil karena keadaan sel yang salah digunakan kembali sebagai "warisan" selama pelatihan. Saya tidak bisa menumpuk lebih dari 6 lapisan dengan pendekatan ini - terlalu kacau dan tidak akan bertemu. Namun, mengatur ulang status sel ke nol setelah setiap Backprop memungkinkan saya untuk menumpuk 150 lapisan dengan 64 neuron di setiap lapisan dan melatihnya dengan laju pembelajaran 0,001 & momentum 0,9 (saya menggunakan LayerNormalisasi, itu sebabnya tingkat pembelajaran sangat besar dalam kasus saya)
Kari
1
Ini berarti bahwa dengan "legacy cellstates" LSTM menjadi tidak stabil & tidak dapat diandalkan - ia mulai bekerja pada minibatch baru yang mendasarkan keputusannya pada keadaan sel terakhir (dari minibatch sebelumnya) yang tidak diperbaiki sepenuhnya. Jadi, menghapus status sel menghilangkan kelemahan mendasar ini, tetapi membuat LSTM mengalami amnesia
Kari