Neden bir RNN'de zaman içinde geri yayılır?


14

Tekrarlayan bir sinir ağında, genellikle birkaç zaman adımında ilerler, ağı "açar" ve daha sonra girdi dizisi boyunca geri yayılırsınız.

Neden sadece sekanstaki her bir adımdan sonra ağırlıkları güncellemiyorsunuz? (1 kısaltma uzunluğunun kullanılmasına eşdeğerdir, bu yüzden açılacak bir şey yoktur) Bu, yok olan degrade sorununu tamamen ortadan kaldırır, algoritmayı büyük ölçüde basitleştirir, muhtemelen yerel minima'da takılma olasılığını azaltır ve en önemlisi iyi çalışıyor gibi görünüyor . Bu şekilde metin üretmek için bir model geliştirdim ve sonuçlar BPTT eğitimli modellerde gördüğüm sonuçlarla karşılaştırılabilir görünüyordu. Ben sadece bu konuda kafam karıştı çünkü gördüğüm RNNs hakkında her öğretici BPTT, neredeyse doğru öğrenme için gerekli gibi diyor, durum böyle değil.

Güncelleme: Bir cevap ekledim


Bu araştırmaya katılmak için ilginç bir yön, probleminizde elde ettiğiniz sonuçları standart RNN problemleri hakkındaki literatürde yayınlanan karşılaştırmalar ile karşılaştırmak olacaktır. Bu gerçekten harika bir makale olurdu.
Sycorax, Reinstate Monica'ya

"Güncelleme: Bir yanıt ekledim" ifadeniz önceki düzenlemeyi mimari açıklamanız ve bir resimle değiştirdi. Bilerek mi?
amip, Reinstate Monica'yı

Evet, gerçekten asıl soru ile alakalı görünmediği ve çok fazla yer kapladığı için çıkardım, ancak yardımcı olursa geri ekleyebilirim
Frobot

İnsanların mimarinizi anlama konusunda büyük problemleri var gibi görünüyor, bu yüzden sanırım ek açıklamalar yararlı. İsterseniz sorunuzu yerine cevabınıza ekleyebilirsiniz.
amip, Reinstate Monica'yı

Yanıtlar:


4

Düzenleme: İki yöntemi karşılaştırırken büyük bir hata yaptım ve cevabımı değiştirmek zorundayım. Şu anki adımda ilerlerken, yaptığım şekilde ortaya çıkıyor, aslında daha hızlı öğrenmeye başlıyor. Hızlı güncellemeler en temel kalıpları çok çabuk öğrenir. Ancak daha büyük bir veri setinde ve daha uzun eğitim süresiyle, BPTT aslında en üste çıkıyor. Sadece birkaç dönem için küçük bir örnek test ediyordum ve yarışı kazanan her kimin kazanan olacağını varsayıyordum. Ama bu beni ilginç bir bulguya götürdü. Sadece tek bir adım adım ilerleyerek antrenmanınıza başlarsanız, BPTT olarak değiştirin ve ne kadar geriye yayıldığınızı yavaşça artırın, daha hızlı yakınsama elde edersiniz.


Güncellemeniz için teşekkür ederim. Gelen kaynağı son görüntünün o ilgili bu diyor biri birinden ayarı: "RNN olmadan işleme Vanilya modunda, sabit boyutlu girişten sabit boyutlu çıkışı (örneğin görüntü sınıflaması)" Demek istediğimiz buydu. Açıkladığınız gibi bir durumu yoktur ve bir RNN değildir. "ileri geri yayılmadan önce tek bir giriş üzerinden yayılması" - Ben buna YSA diyorum. Ama bu metin ile iyi performans olmaz, bu yüzden bir şey var ve kod yok çünkü hiçbir fikrim yok
ragulpr

O kısmı okumadım ve haklısın. Kullandığım model aslında en sağdaki "çoktan çoğa". "bire bir" bölümünde gerçekten hepsi bu bağlı ve çizim sadece dışarı bıraktı kabul. ama aslında fark etmediğim en sağdaki seçeneklerden biri (RNN'ler hakkında bir blogda bir tane olması tuhaf, bu yüzden hepsinin tekrarladığını varsaydım). Daha mantıklı olmak için cevabın bu kısmını düzenleyeceğim
Frobot

Durumun bu olduğunu hayal ettim, bu yüzden kayıp fonksiyonunuzu görmek için ısrar ettim. Eğer çok fazla ise kaybınız benziyorsa ve aynı bir RNN ve tüm diziyi yayıyor / giriyorsunuz ama sonra sadece BPTT'yi kesiyorsunuz yazımdaki kırmızı kısmı hesaplayın, ancak daha fazla geri ödeme yapmayın. error=t(yty^t)2
ragulpr

Kayıp fonksiyonum zamanla toplanmıyor. Bir girdi alıyorum, bir çıktı alıyorum, sonra bir kayıp hesaplıyorum ve ağırlıkları güncelliyorum, sonra t + 1'e geçiyorum, böylece toplanacak hiçbir şey yok. Orijinal
kayda

Sadece kodunu yaz, daha fazla tahmin yapmıyorum, bu aptalca.
ragulpr

2

RNN, her katmanın yeni girdi alabileceği ancak aynı parametrelere sahip olabileceği bir Derin Sinir Ağıdır (DNN). BPT, Gradient Descent için süslü bir kelime olan böyle bir ağda Geri Yayılım için süslü bir kelimedir.

Ki bu RYSA çıkışlar her aşamada ve errort=(yt - y t)2y^t

errort=(yty^t)2

Ağırlıkları öğrenmek için fonksiyonun "parametredeki bir değişiklik kayıp fonksiyonunu ne kadar etkiliyor?" ve parametreleri şu şekilde hareket ettirin:

errort=2(yty^t)y^t

Yani, her katmanda tahminin ne kadar iyi olduğuna dair geri bildirim aldığımız bir DNN var. Parametredeki bir değişiklik DNN'deki (timestep) her katmanı değiştireceğinden ve her katman bunun hesaba katılması gereken sonraki çıktılara katkıda bulunduğundan.

Bunu yarı açık olarak görmek için basit bir nöron-bir katman ağı alın:

y^t+1=f(a+bxt+cy^t)ay^t+1=f(a+bxt+cy^t)cay^tby^t+1=f(a+bxt+cy^t)(xt+cby^t)cy^t+1=f(a+bxt+cy^t)(y^t+ccy^t)y^t+1=f(a+bxt+cy^t)([0xty^t]+cy^t)

İle öğrenme hızı bir eğitim aşaması o zaman: δ

[a~b~c~][abc]+δ(yty^t)y^t

Gördüğümüz olduğu için hesapla için Eğer ihtiyaç dışarı hesapla yani roll . Ne önermektir basitçe kırmızı kısım gözardı kırmızı kısmı için hesapla değil -recurse ayrıca. Sanırım kaybın şöyle bir şeyy^t+1y^tt

error=t(yty^t)2

Belki de her adım, kümelenmede yeterli olan kaba bir yöne katkıda bulunur? Bu, sonuçlarınızı açıklayabilir, ancak yöntem / kayıp işleviniz hakkında daha fazla şey duymakla gerçekten ilgilenirim! Ayrıca iki zaman aralığı pencereli YSA ile bir karşılaştırmayla ilgilenirsiniz.

edit4: Yorumları okuduktan sonra mimariniz bir RNN değil gibi görünüyor.

RNN: Durum bilgisi olan - gizli durumu süresiz olarak ileriht statefull Bu sizin modeliniz ama eğitim farklı.

Modeliniz: Vatansız - her adımda yeniden inşa edilen gizli durum vatansız edit2: DNN'lere daha fazla ref ekledi edit3: sabit adım adım ve bazı gösterim düzenleme5: Yanıt / açıklamadan sonra modelinizin yorumu düzeltildi.


1
Cevabınız için teşekkür ederim. Sanırım ne yaptığımı yanlış anlamış olabilirsiniz. İleri yayılımda sadece bir adım yaparım, böylece arka yayılımda da sadece bir adımdır. Antrenman sırasında çoklu girdiler arasında ilerlemiyorum. Öğrenmeye izin vermek için kümelenmede yeterli olan kaba bir yön hakkında ne demek istediğini görüyorum, ancak degradelerimi sayısal olarak hesaplanmış gradyanlarla kontrol ettim ve 10'dan fazla ondalık basamakla eşleşti. Arka pervane iyi çalışıyor. Çapraz entropi kaybı kullanıyorum.
Frobot

1
Açık bir karşılaştırmaya sahip olduğumuz için aynı modelimi alıp BPTT ile yeniden eğitmeye çalışıyorum. Ayrıca ertesi gün için bir hisse senedi fiyatının yükselip yükselmeyeceğini tahmin etmek için bu "bir adım" algoritmasını kullanarak bir model eğittim, bu da iyi bir doğruluk elde ediyor, bu yüzden BPTT ile tek adım geri pervane karşılaştırmak için iki farklı modelim olacak.
Frobot

Yalnızca bir adımı ileri doğru ilerletirseniz, bu, ilk katmana son adımın özellik girişi olan iki katmanlı bir YSA, ikinci katmanda geçerli adıma özellik girişi olan, ancak her iki katman için aynı ağırlıklara / parametrelere sahip mi? Girdi yani 2 boyutlu sabit bir zaman penceresi kullanan bir YSA ile benzer sonuçlar veya daha iyi sadece bir adım ileri taşır, uzun vadeli bağımlılıkları öğrenebilir mi? y^t+1=f(xt,xt1)
ragulpr

1
Boyut 1 kayar pencere kullanıyorum, ancak sonuçlar girişleri (xt, xt − 1) ile boyut 2 ANN sürgülü pencere yapmak çok farklı. Büyük bir metin gövdesini öğrenirken kasıtlı olarak taklit edebilirim ve metnin tamamını 0 hatalarla çoğaltabilir, bu da giriş olarak yalnızca (xt, xt − 1) olsaydı imkansız olan uzun vadeli bağımlılıkları bilmeyi gerektirir. kalan tek soru, BPTT kullanmanın bağımlılıkların daha uzun olmasına izin verip vermeyeceğidir, ancak dürüstçe olması gerektiği gibi görünmüyor.
Frobot

Güncellenmiş gönderime bak. Mimariniz bir RNN değil, vatansızdır, bu nedenle açık bir şekilde özelliklere dönüştürülmemiş uzun süreli bağımlılıklar öğrenilemez. Önceki tahminler gelecekteki tahminleri etkilemez. Bunu, mimariniz için . BPTT teorik olarak BP ile özdeştir ancak bir RNN mimarisinde gerçekleştirilir, bu yüzden yapamazsınız ama ne demek istediğinizi görüyorum ve cevap hayır. Durumsal RNN üzerinde deneyler görmek gerçekten ilginç olurdu ama sadece BPTT olsa ^^y^t2y^t=0
ragulpr

1

"Zaman içinde açılma" sadece zincir kuralının bir uygulamasıdır,

dF(g(x),h(x),m(x))dx=Fgdgdx+Fhdhdx+Fmdmdx

, zaman adımında bir çıkışı , girişi ve önceki durum olan parametrelerinin bir fonksiyonudur (bunun yerine zaman adımında tekrar dönüştürülebileceğini unutmayın . çıktı, burada önemli değil). Degrade inişin amacını hatırlayın: bazı hata fonksiyonu verildiğinde , mevcut örnek (veya örnekler) için hataya bakalım ve sonra aynı şekilde tekrar verelim, azalacaktır. .H t θ x t H t - 1 H t t L θtHtθxtHt1HttLθ

bizim mevcut hataya tam olarak nasıl katkıda bulundu? Biz mevcut giriş, bir ağırlıklı toplamı aldı bulduğumuz giriş boyunca backpropagate gerekir, böylece ayarlama nasıl çalışmak, . Ama bizim da aynı zamanda bir fonksiyonu olan 'in bazı katkılarının sonucuydu , değil mi? Bu yüzden , ve nin bir fonksiyonu olan i bulmamız gerekiyor . Fakat aynı zamanda fonksiyonudur . Ve bunun gibi.x t Turkce ∇ Turkce θ bir ( x t , θ ) θ lH t - 1 θ Turkce ∇ Turkce θ lH t - 1 x t - 1 θ lH t - 2 H t - 2 θθxtθa(xt,θ)θHt1θθHt1xt1θHt2Ht2θ


Geleneksel bir RNN'de neden zaman içinde yayıldığını anlıyorum. Geleneksel bir RNN'nin neden her seferinde sadece bir tane kullanmak çok daha basit ve aynı zamanda işe yaradığında, eğitim için neden birden fazla giriş kullandığını bulmaya çalışıyorum
Frobot

Bir RNN'ye aynı anda birden çok girişte besleyebilmenin tek anlamı, bir partinin parçası olarak çoklu eğitim örneklerinde beslemektir. Parti boyutu isteğe bağlıdır ve herhangi bir boyut için yakınsama garanti edilir, ancak daha yüksek parti boyutları daha doğru gradyan tahminlerine ve daha hızlı yakınsamaya neden olabilir.
Matthew Hampsey

"Aynı anda birden fazla giriş" ile kastettiğim bu değil. Çok iyi bir şey söylemedim. Genellikle egzersiz sırasındaki çeşitli girdiler arasında ilerlemeyi, sonra hepsini geriye doğru ilerletmeyi, sonra ağırlıkları güncellemeyi kastediyordum. Öyleyse soru, bir kerede yalnızca bir girdi yaparken neden tüm diziyi yaymak çok daha kolay ve hala çalışıyor
Frobot

Burada biraz açıklama yapılması gerektiğini düşünüyorum. "Girdiler" dediğinizde, birden fazla eğitim örneğinden mi bahsediyorsunuz, yoksa tek bir eğitim örneğinde birden çok zaman adımından mı bahsediyorsunuz?
Matthew Hampsey

1
Bugünün sonuna kadar bu soruya bir cevap göndereceğim. BPTT versiyonunu bitirdim, sadece eğitip karşılaştırmak zorundayım. Bundan sonra hala bazı kod görmek istiyorsanız bana ne görmek istediğinizi bildirin ve sanırım hala gönderebilirim
Frobot
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.