Sürgülü pencere LSTM aşırı sığdırma yol açar?


15

Sürgülü pencere yaklaşımı ile eğitirsem LSTM'mi geçecek miyim? Neden insanlar bunu LSTM'ler için kullanmıyor?

Basitleştirilmiş bir örnek için, karakter sırasını tahmin etmemiz gerektiğini varsayın:

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

LSTM'mi aşağıdaki minibatchlarla eğitmeye devam edersem kötü mü (yoksa daha iyi mi?):

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?

Önceden, her zaman şu şekilde eğitildim:

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

Birer birer kaydırmak yerine, pencereyi 2 girişle kaydırmak daha iyi olur, vb. Bu ne anlama gelir (hassasiyet / fazla takma açısından)?


Ayrıca, İleri besleme ağında kayan pencere yaklaşımını yapsaydım, aşırı sığmaya neden olur muydu? Evet, varsayıyorum, çünkü ağ aynı bilgi bölgelerine çok uzun bir süre maruz kalıyor. Örneğin, E F G H I J Kuzun süre maruz kalır .


Düzenle:

Lütfen, eğitim durumları arasında hücre durumunun silindiğini unutmayın, bu nedenle LSTM'nin bu zamanlarda bir "başa çekiç" olacaktır. OPQRSTUVWXYZ'den önce ne olduğunu hatırlayamıyor . Bu, LSTM'nin "O" nun "M" yi takip ettiğini öğrenemeyeceği anlamına gelir.

Bu yüzden, (böylece tüm sorum) aralarında neden ara (üst üste binen) parti vermemeliyim diye düşündüm ... ve bu durumda neden birden fazla üst üste binen minibatch kullanmıyorsunuz - bana bu daha pürüzsüz bir eğitim sağlayacaktır? Sonuçta, bu bir LSTM için kayan bir pencere anlamına gelir.


Yanıttan sonra bulduğum bazı yararlı bilgiler kabul edildi:

buradan

İngilizce çevirinin ilk sözcüğü muhtemelen kaynak cümlenin ilk kelimesi ile büyük ölçüde ilişkilidir. Ancak bu, kod çözücünün 50 adım önceki bilgileri dikkate alması gerektiği ve bilginin vektörde bir şekilde kodlanması gerektiği anlamına gelir. Tekrarlayan Sinir Ağlarının bu tür uzun menzilli bağımlılıklarla ilgili problemleri olduğu bilinmektedir. Teoride, LSTM'ler gibi mimariler bununla başa çıkabilmelidir, ancak pratikte uzun mesafeli bağımlılıklar hala sorunludur.

Örneğin, araştırmacılar, kaynak dizisini tersine çevirmenin (kodlayıcıya geri beslenmesi), kod çözücüden kodlayıcının ilgili parçalarına giden yolu kısalttığı için önemli ölçüde daha iyi sonuçlar verdiğini bulmuşlardır. Benzer şekilde, bir giriş dizisini iki kez beslemek de bir ağın işleri daha iyi ezberlemesine yardımcı olur. Örneğin, bir eğitim örneği "John eve gitti" ise, "John eve gitti John" eve girdi.

Cevabı kabul ettikten sonra düzenleyin:

Birkaç ay sonra, verileri daha iyi kullandığından kayar pencere yaklaşımını kullanmaya daha meyilliyim. Ancak bu durumda ABCDEFGHIJKLMNO'dan hemen sonra BCDEFGHIJKLMNO'yu eğitmek istemezsiniz. Bunun yerine, tüm bilgileri yavaş yavaş ve eşit bir şekilde LSTM'nize "fırçalamak" için örneklerinizi karıştırın . ABCDEFGHIJKLMNO vs.'den sonra HIJKLMNOPQRSTU verin. Bu doğrudan Felaket Unutma ile ilgilidir. Her zaman olduğu gibi, Doğrulama ve Test setini yakından izleyin ve hatalarının sürekli arttığını görür görmez durun

Ayrıca, Sentetik Eğimler kullanılarak "başa çekiç" sorunu iyileştirilebilir. Avantajını buradan görebilirsiniz: (bağlantılı cevap uzun dizilerin faydalarını tartışır) /datascience//a/32425/43077

Yanıtlar:


10

@Imran'ın önceki cevabı doğru olsa da, bir uyarı eklemenin gerekli olduğunu hissediyorum: Orada insanların bir LSTM'ye kayan bir pencere beslediği uygulamalar var. Örneğin, burada , denetimli bir öğrenme problemi olarak öngörmeyi çerçevelemek için.

4(mn+n2+n)mn

LSTM'ler sabit boyutlu giriş gerektirmediğinden, kendi başlarına en uygun yeniden inceleme numarasını bulabilirler. Ancak, önceden otoregresif bir analiz yaptıysanız ve örneğin, geçerli zaman adımının önceki 10. adımla en fazla ilişkili olduğunu ve geçmişte 11. veya daha fazla zaman adımıyla ilişkili olmadığını belirlediyseniz, belki de sabit uzunluklu dizileri besleyerek kendinize biraz zaman kazandırabilirsiniz. Bununla birlikte, bu tür bir LSTM'nin amacını yener.

Verileriniz bir LSTM için yeterince zengin değilse, otoregresif bir model gibi çok daha basit bir şey denemenizi ve yolunuza çıkmanızı öneririm.

EDIT (bir yoruma yanıt olarak):

Üst üste binen sekanslar, özellikle sekans çok uzun olduğunda (elbette 'uzun' göreceli olmasına rağmen) giriş olarak kullanılır. LSTM'ler uzun sekanslar için bir vanilya RNN'sinden daha iyi olmasına rağmen, sekans çok uzunsa, sekansın başlangıcından itibaren zaman adımlarını hatırlamakta sorun yaşayabilirler. Bu, diziyi ileri ve geri okuyan çift yönlü LSTM gibi şeylere yol açarak ağın her giriş dizisinin başına ve sonuna maruz kalmasını geliştirdi. Üst üste binen dizilerin aynıdır, ancak üst üste binen dizilerin daha sezgisel olduğunu iddia edeceğim.


Teşekkürler, hala LSTM'nin örtüşmeyen gruplar ile eğitilmesi gerekip gerekmediğini göremiyorum. Beğendiğiniz gönderi değerli bir mesajdır, ancak yalnızca İleri Besleme ağlarını tartışır ve LSTM'nin eğitim sırasında çakışan minibatchlarındaki avantajları / tehlikeleri ele almaz. @Imran ayrıca üst üste gelen minibatch'lara karşı "reçete karşıtı" tartışmadı - onun görevine yaptığım ilk yorum.
Kari

Kari

Çok büyük bilgi!
İmran

@Kari Cevabımı değiştirdim. Bu yardımcı olur mu?
İstatistiklerSorceress

6

LSTM'ler, kayan bir giriş penceresi gerektirmez. Geçmişte gördüklerini hatırlayabilirler ve eğitim örneklerini birer birer beslerseniz, kendi başlarına hatırlamak için doğru boyutlardaki giriş penceresini seçerler.

LSTM'ler zaten aşırı sığmaya eğilimlidir ve bir sürgülü pencereyle çok sayıda gereksiz veriyi beslerseniz, evet, muhtemelen fazla uyması muhtemeldir.

Öte yandan, İleri Beslemeli Sinir Ağları ile zaman dizisi tahmini için sürgülü bir pencere gereklidir, çünkü FNN'ler sabit boyutlu bir giriş gerektirir ve bellek içermez, bu nedenle bu onlara zaman serisi verilerini beslemenin en doğal yoludur.

FNN'nin fazla uyup uymayacağı mimarisine ve verilerinize bağlıdır, ancak varsa tüm standart düzenleme teknikleri uygulanacaktır. Örneğin, daha küçük bir ağ, L2 düzenlenmesi, Bırakma vb.


Teşekkürler! Hücre durumunun eğitim partileri arasında silindiğini, bu nedenle LSTM'nin bu zamanlarda "kafa kafaya çekiç" olacağını iddia ediyorum. OPQRSTUVWXYZ'den önce ne olduğunu hatırlayamıyor. Bu, LSTM'nin "O" nun "M" yi takip ettiğini öğrenemeyeceği anlamına gelir. Bu yüzden, neden ara (üst üste binen) toplu işlem yapmamasını düşündüm ... ve bu durumda neden birden fazla üst üste binen minibatch kullanmıyorsunuz - bana göre bu daha pürüzsüz bir eğitim sağlayacaktır?
Kari

Sonuçta, bu bir LSTM için kayar pencere anlamına gelir
Kari

Eğitim grupları arasındaki hücre durumunu silmek gerekli değildir, ancak geri yayılım elbette daha da mümkün değildir.
Jan van der Vegt

Ben denedim ve - 0 öğrenme oranı ile bile hata küçük miktarda yukarı ve aşağı atlamak oldu çünkü yanlış hücre durumları eğitim sırasında "eski" olarak yeniden kullanıldı. Bu yaklaşımla 6 kattan fazla istifleyemedim - çok kaotik hale geldi ve birleşmedi. Bununla birlikte, her Backprop'tan sonra hücre durumunu sıfırlamak, her katmanda 64 nöron ile 150 katman istiflememe ve 0,001 öğrenme oranı ve 0,9 momentum ile eğitmeme izin verdi (LayerNormalization kullanıyorum, bu yüzden benim durumumda öğrenme oranı çok büyük)
Kari

1
Bu, "eski hücre durumları" ile LSTM'nin kararsız ve güvenilmez hale geldiği anlamına gelir - kararlarını tam olarak düzeltilmemiş olan son hücre durumuna (önceki minibatch'un) dayandırarak yeni bir minibatch üzerinde çalışmaya başlar . Bu nedenle, hücre durumunu silmek bu mali kusuru ortadan kaldırır, ancak LSTM deneyimini hafıza kaybı yapar
Kari
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.