Tekrarlayan Bir Sinir Ağında (RNN) Katmanı Unut -


13

Unut katmanında bir RNN her değişkenlerin boyutlarını anlamaya çalışıyorum, ancak doğru yolda olup olmadığından emin değilim. Bir sonraki resim ve denklem Colah'ın "LSTM Ağlarını Anlamak" adlı blog yazısıdır :

resim açıklamasını buraya girin

nerede:

  • , m 1 vektörboyutunun girilmesidirxtm1
  • n 1 vektörboyutunun gizli durumudurht1n1
  • bir birleştirme (örneğin, x t = [ 1 , 2 , 3 ] , h t - 1 = [ 4 , 5 , 6 ] ise , [ x t , h t - 1 ] = [ 1 , 2 , 3 , 4 , 5 , 6 ] )[xt,ht1]xt=[1,2,3],ht1=[4,5,6][xt,ht1]=[1,2,3,4,5,6]
  • boyutu ağırlıkları olan K * ( m + n ) matrisi, k, hücre durumları sayısını (bir m = 3 ve n = 3 olan yukarıdaki örnekte, ve 3 hücre durumları, daha sonra varsa ağırlık f = 3 3 matris)wfk(m+n)km=3n=3wf=33
  • boyutu önyargı k * 1 vektörü, k, hücre durumlarının sayısı (yana olan k = 3 , yukarıda bir örnek olarak, daha sonra b , f a, 3 * 1 vektörü).bfk1kk=3bf31

Biz ayarlanırsa olması: [ 1 2 3 4 5 6 5 6 7 8 9 10 3 4 5 6 7 8 ]wf

[1234565678910345678]

Ve olmalıdır: [ 1 , 2 , 3 ]bf[1,2,3]

Daha sonra Wf.[ht1,xt]=

[1234565678910345678].[123456]=[91175133]

Sonra, önyargı ekleyebilir Wf.[ht1,xt]+bf=

[91175133]+[123]=[92177136]

11+exx=[92177136]

[111]

Ct1k=3

Yukarıdaki varsayım doğru mu?

Bu aynı zamanda hücre durumu ve gizli durumun aynı olduğu anlamına mı geliyor?

Yanıtlar:


14

Harika bir soru!

tl; dr: Hücre durumu ve gizli durum iki farklı şeydir, ancak gizli durum hücre durumuna bağlıdır ve gerçekten de aynı boyuta sahiptirler.

Daha uzun açıklama

İkisi arasındaki fark aşağıdaki şemadan görülebilir (aynı blogun bir parçası):

Hücre durumu batıdan doğuya tepeden geçen kalın çizgidir.

Hücre durumu batıdan doğuya tepeden geçen kalın çizgidir. Tüm yeşil bloğa 'hücre' denir.

Önceki zaman adımındaki gizli durum, geçerli zaman adımındaki girişin bir parçası olarak ele alınır.

Ancak, tam bir adım atmadan ikisi arasındaki bağımlılığı görmek biraz daha zor. Bunu başka bir bakış açısı sağlamak için yapacağım, ancak blogdan büyük ölçüde etkilendi. Benim gösterimim aynı olacak ve açıklamamda blogdaki resimleri kullanacağım.

Operasyonların sırasını blogda sunulduklarından biraz farklı düşünmeyi seviyorum. Şahsen, giriş kapısından başlamak gibi. Aşağıda bu bakış açısını sunacağım, ancak blogun bir LSTM hesaplaması kurmanın en iyi yolu olabileceğini ve bu açıklamanın tamamen kavramsal olduğunu unutmayın.

İşte olanlar:

Giriş kapısı

resim açıklamasını buraya girin

txtht1

xt=[1,2,3]ht=[4,5,6]

xtht1[1,2,3,4,5,6]

WiWi[xt,ht1]+biWibi

Altı boyutlu bir girişten (birleştirilmiş giriş vektörünün uzunluğu) hangi durumların güncelleneceğine dair üç boyutlu bir karara gideceğimizi varsayalım. Bu, 3x6 ağırlık matrisine ve 3x1 bias vektörüne ihtiyacımız olduğu anlamına gelir. Bunlara bazı değerler verelim:

Wi=[111111222222333333]

bi=[111]

Hesaplama şöyle olacaktır:

[111111222222333333][123456]+[111]=[224262]

it=σ(Wi[xt,ht1]+bi)

σ(x)=11+exp(x)x

σ([224262])=[11+exp(22),11+exp(42),11+exp(62)]=[1,1,1]

İngilizce olarak bu, tüm eyaletlerimizi güncelleyeceğimiz anlamına gelir.

Giriş kapısı ikinci bir kısma sahiptir:

Ct~=tanh(WC[xt,ht1]+bC)

Bu bölümün amacı, eğer yaparsak, durumu nasıl güncelleyeceğimizi hesaplamaktır. Bu aşamadaki yeni girdiden hücre durumuna katkıdır. Hesaplama, yukarıda gösterilenle aynı prosedürü izler, ancak sigmoid ünitesi yerine tanh ünitesi ile.

Ct~it

itCt~

Ardından, sorunuzun en önemli noktası olan unutma kapısı geliyor.

Unutma kapısı

resim açıklamasını buraya girin

Unutma kapısının amacı, artık ilgili olmayan önceden öğrenilmiş bilgileri kaldırmaktır. Blogda verilen örnek dil tabanlıdır, ancak kayan bir pencere de düşünebiliriz. Bir hastalık salgını sırasında bir bölgedeki bulaşıcı bireylerin sayısı gibi doğal olarak tamsayılarla temsil edilen bir zaman serisini modelliyorsanız, belki de hastalık bir bölgede öldüğünde, hastalığın nasıl ilerleyeceğini düşünerek.

Giriş katmanı gibi, unut katmanı da önceki zaman adımındaki gizli durumu ve geçerli zaman adımındaki yeni girişi alır ve bunları birleştirir. Mesele, neyi unutup neyi hatırlayacağınıza stokastik olarak karar vermektir. Önceki hesaplamada, 1'lerin hepsinin sigmoid katman çıktısını gösterdim, ancak gerçekte 0.999'a daha yakındı ve yuvarlandım.

Hesaplama, giriş katmanında yaptığımız gibi görünüyor:

ft=σ(Wf[xt,ht1]+bf)

Bu bize 0 ile 1 arasında değerler içeren 3 boyutlu bir vektör verecektir.

[0.5,0.8,0.9]

Daha sonra, bu üç bilgiden hangisinin unutulacağı bu değerlere dayanarak stochast karar veriyoruz. Bunu yapmanın bir yolu, birörnek (0, 1) dağılımından bir sayı üretmektir ve bu sayı birimin 'açma' (1, 2 ve 3 üniteleri için 0,5, 0,8 ve 0,9) olasılığından düşükse sırasıyla), o birimi açıyoruz. Bu durumda, bu bilgiyi unuttuğumuz anlamına gelir.

Hızlı not: giriş katmanı ve unut katmanı bağımsızdır. Bahis yapan biri olsaydım, bu paralellik için iyi bir yer olurdu.

Hücre durumunu güncelleme

resim açıklamasını buraya girin

Şimdi hücre durumunu güncellemek için gereken her şeye sahibiz. Giriş ve unutma kapılarındaki bilgilerin bir kombinasyonunu alıyoruz:

Ct=ftCt1+itCt~

Kenara: Hadamard ürünü

x1=[1,2,3]x2=[3,2,1]

x1x2=[(13),(22),(31)]=[3,4,3]

Kenara çekil.

Bu şekilde, hücre durumuna (girdi) ne eklemek istediğimizi hücre durumundan uzaklaştırmak istediğimiz (unut) ile birleştiririz. Sonuç, yeni hücre durumudur.

Çıkış kapısı

resim açıklamasını buraya girin

Bu bize yeni gizli durumu verecektir. Esasen çıkış kapısının amacı, sonraki hücre durumunu güncellerken modelin bir sonraki bölümünün hangi bilgileri dikkate almasını istediğimize karar vermektir. Blogdaki örnek yine dildir: isim çoğulsa, sonraki adımdaki fiil çekimleri değişecektir. Bir hastalık modelinde, belirli bir alandaki bireylerin duyarlılığı başka bir alandan farklıysa, bir enfeksiyon alma olasılığı değişebilir.

Çıktı katmanı aynı girişi tekrar alır, ancak güncellenmiş hücre durumunu dikkate alır:

ot=σ(Wo[xt,ht1]+bo)

Yine, bu bize bir olasılık vektörü verir. Sonra hesaplıyoruz:

ht=ottanh(Ct)

Dolayısıyla, mevcut hücre durumu ve çıkış kapısı, neyin verileceği konusunda anlaşmalıdır.

tanh(Ct)[0,1,1]ot[0,0,1][0,0,1]

htyt=σ(Wht)

ht

LSTM'lerde birçok varyant var, ancak bu temel unsurları kapsıyor!


Cevabınız için teşekkürler! Fazladan bir sorum var, umursamıyorsun. Derin bir sinir ağı derin olabilir, çünkü ReLU'nun türevi 1'dir (Çıktı 0'dan büyükse). Bu hücre için de aynı durum geçerli mi? Tanh ve Sigmoid'in 1'in sabit bir türevine nasıl sahip olabileceğinden emin değilim?
user1157751

Zevkle! Bir sinir ağı birden fazla gizli katmanı olduğunda 'derin' kabul edilir. Aktivasyon fonksiyonlarının türevleri (tanh, sigmoid, ReLU) ağın nasıl eğitildiğini etkiler. Dediğiniz gibi, ReLU'nun girdisi 0'dan büyükse sabit bir eğime sahip olduğundan, işlevin o bölgesinde bulunuyorsak türevi 1'dir. Tanh ve sigmoid birimlerinin aktivasyon bölgelerinin ortasında olduğumuzda 1'e yakın bir türevi vardır, ancak türevleri sabit olmayacaktır. Belki türevler hakkında ayrı bir blog yazısı
yapmalıyım

Aktivasyon bölgesinde 1'e yakın türevlerinin bir örneğini gösterebilir misiniz? Türev hakkında konuşan birçok kaynak gördüm ama matematik yapılmadı mı?
user1157751

İyi fikir, ama bununla ilgili doğru bir yazı yazmam biraz zaman alacak. Bu arada, tanh fonksiyonunun şeklini düşünün - bu uzun bir 'S'. Ortada, türevin en yüksek olduğu yerdir. S'nin düz olduğu yerde (S'nin kuyrukları) türev 0'dır. Bir kaynağı, adı geçen sigmoidlerin maksimum 0.25 türevine sahip olduğunu gördüm, ancak tanh için eşdeğer bir bağım yok.
İstatistikler

Anlamadığım kısım, x> 0 olan sabit 1 türevi olan ReLU'dan farklıdır, ancak sigmoid ve tanh, her iki türevi için değişken değere sahiptir. Bu nasıl "sabit" olabilir?
user1157751
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.