Uzun Kısa Süreli Bellek (LSTM) tekrarlayan sinir ağının ardındaki sezgi nedir?


11

Tekrarlayan Sinir Ağının (RNN) arkasındaki fikir benim için açık. Bunu şu şekilde anlıyorum:
Bir dizi gözlemimiz var ( ) (veya başka bir deyişle, çok değişkenli zaman serileri). Her bir tek gözlem bir olan boyutlu sayısal vektör. RNN-modeli içinde, bir sonraki gözlemin bir önceki gözlemin bir işlevi olduğunu ve gizli durumların da sayısal olarak temsil edildiği önceki "gizli durum" vektörler (gözlenen ve gizli durumların boyutları farklı olabilir). Gizli devletlerin kendilerinin de önceki gözlem ve gizli duruma bağlı oldukları varsayılır:o1,o2,,onoiNoi+1oihi

oi,hi=F(oi1,hi1)

Son olarak, RNN modelinde fonksiyonunun bir sinir ağı olduğu varsayılır. Sinir ağını, mevcut verileri (bir dizi gözlem) kullanarak eğitiriz. Eğitimdeki amacımız, önceki gözlemleri kullanarak bir sonraki gözlemi olabildiğince doğru bir şekilde tahmin edebilmektir.F

Şimdi, LSTM ağı RNN ağının bir modifikasyonudur. Anladığım kadarıyla, LSTM'nin arkasındaki motivasyon, RNN'ye özgü kısa bellek problemini çözmektir (geleneksel RNN, zamanla çok fazla ayrılmış olaylarla ilgili sorunlara sahiptir).

LSTM ağlarının nasıl çalıştığını anlıyorum. İşte bulduğum LSTM'nin en iyi açıklaması . Basit fikir aşağıdakiler gibidir:

Gizli durum vektörüne ek olarak, gizli durum vektörü ( ) ile aynı boyuta (boyutluluğa) sahip bir "hücre durumu" vektörü . Uzun vadeli hafızayı modellemek için "hücre durumu" vektörünün tanıtıldığını düşünüyorum. Geleneksel RNN'de olduğu gibi, LSTM ağı giriş olarak gözlemlenen ve gizlenen durumu alır. Bu girişi kullanarak yeni bir "hücre durumunu" aşağıdaki şekilde hesaplıyoruz:ci

ci+1=ω1(oi,hi)ci+ω2(oi,hi)cint(oi,hi),

nerede fonksiyonları , ve sinir ağları ile modellenmiştir. İfadeyi basitleştirmek için sadece argümanları kaldırırım:ω1ω2cint

ci+1=ω1ci+ω2cint

Dolayısıyla, yeni "hücre durumu vektörünün" ( ) eski durum vektörünün ( ) ve "ara" hücre durumu vektörünün ( ). Vektörler arasındaki çarpma bileşen bazındadır (iki N boyutlu vektörü çarpar ve sonuç olarak başka bir N boyutlu vektör elde ederiz). Başka bir deyişle, bileşene özgü ağırlıkları kullanarak iki hücre durumu vektörünü (eskisi ve ortası) karıştırıyoruz.cici1cint

İşte açıklanan işlemler arasındaki sezgi. Hücre durumu vektörü bir bellek vektörü olarak yorumlanabilir. İkinci ağırlık vektörü (bir sinir ağı tarafından hesaplanır) bir "tutma" (veya unutma) geçididir. Değerleri, hücre durumu vektöründen (veya uzun süreli bellek vektöründen) karşılık gelen bir değeri tutup tutmamamıza (silmemize) karar verir. Başka bir sinir ağı tarafından hesaplanan ilk ağırlık vektörü ( ) "yazma" veya "ezberle" geçidi olarak adlandırılır. Yeni bir belleğin ("ara" hücre durumu vektörü) kaydedilmesi gerekip gerekmediğine (veya daha kesin olarak, belirli bir bileşeninin kaydedilmesi / yazılması gerektiğine) karar verir. "Orta"ω2ω1ω1vektör). Aslında, iki ağırlık vektörü ( ve ) ile eski ve yeni belleği "karıştırdığımızı" söylemek daha doğru olur .ω1ω2

Yani, yukarıda tarif edilen karıştırma (veya unutma ve ezberleme) sonra yeni bir hücre durumu vektörü var. Sonra başka bir sinir ağı kullanarak bir "ara" gizli durumu hesaplıyoruz (daha önce olduğu gibi girdi olarak gözlemlenen durumu ve gizli durumu ). Son olarak, gerçekte çıkardığımız yeni (veya "son") gizli durumu elde etmek için yeni hücre durumunu (bellek) "ara" gizli durumla ( ) birleştiririz:oihihint

hi+1=hintS(ci+1),

burada , hücre durumu vektörünün her bir bileşenine uygulanan sigmoid bir işlevdir.S

Yani sorum şu: Bu mimari sorunu neden (veya tam olarak nasıl) çözüyor?

Özellikle aşağıdakileri anlamıyorum:

  1. "Yeni" bir bellek (hücre durumu) elde etmek için "eski" bellek (veya hücre durumu) ile karıştırılmış "ara" bellek (hücre durumu vektörü) oluşturmak için bir sinir ağı kullanırız. Karıştırma için ağırlıklandırma faktörleri de sinir ağları tarafından hesaplanır. Ama neden "yeni" hücre durumunu (veya hafızayı) hesaplamak için sadece bir sinir ağı kullanamıyoruz. Başka bir deyişle, neden gözlemlenen durumu, gizli durumu ve eski belleği "yeni" belleği hesaplayan bir sinir ağına girdi olarak kullanamıyoruz?
  2. Sonunda yeni bir gizli durumu hesaplamak için gözlenen ve gizli durumları kullanırız ve sonra yeni hesaplanan gizli durumun bileşenini düzeltmek için "yeni" hücre durumunu (veya (uzun süreli) belleği) kullanırız. Başka bir deyişle, hücre durumunun bileşenleri, sadece hesaplanan gizli durumun karşılık gelen bileşenlerini azaltan ağırlıklar olarak kullanılır. Peki hücre durumu vektörü neden bu şekilde kullanılıyor? Yeni gizli durumu neden hücre durumu vektörünü (uzun süreli bellek) bir nöral ağın girişine (gözlenen ve gizli durumları girdi olarak da alan) koyarak hesaplayamıyoruz?

Katma:

Farklı kapıların ("sakla", "yaz" ve "oku") nasıl organize edildiğini netleştirmeye yardımcı olabilecek bir video .


1
LSTM'leri benden daha iyi anlıyor görünüyorsunuz, bu yüzden gerçek bir cevap yayınlamayacağım, çünkü aradığınız şey olmayabilir: LSTM kapıları (çoğunlukla unutmak kapıları) aktivasyonları ve degradeleri uzun süre tutmasına izin verir gerektiği gibi. Bu nedenle, t zamanındaki bilgiler, keyfi olarak büyük n için t + n zamanına kadar saklanabilir.
rcpinto

@rcpinto, ben de önerilen "mimarlık" arkasındaki ana fikir uzun süre (birçok zaman adımları) bilgi tutmak sağlamak olduğunu düşünüyorum. Ama tam olarak neyi mümkün kıldığını anlamıyorum. İki kapı ağı ("sakla" ve "yaz") ağırlıkların büyük ve yazma ağırlıklarının küçük olması gerektiğini öğrenebilir (o zaman hafızayı uzun süre saklarız). Ancak bu yalnızca bir ağ tarafından gerçekleştirilemez mi? Sinir ağı (gizli durumu (bellek) ve gözlemlenebilir durumu girdi olarak alır) gizli durumun değişmeden saklanması gerektiğini öğrenemez mi?
Roman

Gerçekten de, tekrarlayan ağırlık matrisini kimliğe ayarlayın ve her zaman son aktivasyonu koruyacaktır. Sorun her zaman bir parçadır, bu da yeni girdilerin nöron aktivasyonunu biriktireceği ve hızla doyuracağı anlamına gelir, bu da bir çeşit unutmadır. Bu nedenle, önceki bir hafızayı silme veya yeni anıların oluşumunu engelleme yeteneği çok önemlidir.
rcpinto

@rcpinto, ancak "önceki bir belleği silme veya yeni bir bellek oluşumunu engelleme" özelliği tek bir sinir ağı içinde gerçekleştirilemez mi? Sinir ağı, bellek vektörünü (veya bir gizli durum vektörünü) ve gözlemlenen durum vektörünü girdi olarak alır. Böyle bir ağ, gözlenen durum vektöründeki bileşenlerin değerlerine dayalı olarak gizli durumun bazı bileşenlerini (belleğini) saklamaya veya değiştirmeye "karar veremez" mi?
Roman

LSTM'ler bunu yapabilir çünkü kapılar mevcut giriş ve duruma göre açılır veya kapanır. Basit RNN'lerde böyle bir kavram yoktur. Bu durumda, devletin kendisi her zaman doğrudan girişe / duruma doğrudan tepki vererek yeni bilginin saklanıp saklanmayacağını "seçmesini" önler. Ayrıca, saklanan hafızayı silmek için bir mekanizma yoktur, nöronun giriş ağırlıklarına göre her zaman birikir ve bu ağırlıklar antrenmandan sonra değişemez. LSTM kapıları çoklayıcı olduğundan, çıkarım sırasında ağırlık değişimini simüle ederek mevcut giriş / duruma tepki verir.
rcpinto

Yanıtlar:


1

Sorularınızı anladığım gibi, resminiz temel olarak girdiyi, önceki gizli durumu ve önceki hücre durumunu birleştiriyor ve bunları bağımsız olarak hesaplamak yerine çıkış gizli durumunu ve hücre durumunu hesaplamak için bir veya birkaç tamamen bağlı katmandan geçiriyor. "hücre durumu ile aritmetik olarak etkileşime giren güncellemeler. Bu temelde gizli durumun sadece bir kısmını çıktısı alan normal bir RNN yaratacaktır.

Bunu yapmamanın temel nedeni, LSTM'nin hücre durumu hesaplamalarının yapısının uzun diziler boyunca sürekli hata akışını sağlamasıdır . Hücre durumunu doğrudan hesaplamak için ağırlıklar kullandıysanız, her bir adımda geri çoğaltmanız gerekir! Bu tür işlemlerden kaçınmak büyük ölçüde RNN'leri rahatsız eden yok olan / patlayan degradeleri çözer.

Ayrıca, bilgileri daha uzun süre boyunca kolayca tutabilme yeteneği de güzel bir bonus. Sezgisel olarak, ağın daha uzun süreler boyunca hücre durumunu korumak için sıfırdan öğrenmesi çok daha zor olacaktır.

It değerinde LSTM, en yaygın alternatif belirterek GRU , benzer şekilde gizlenmiş halde kendisi doğrudan faaliyet ağırlıklarını öğrenmeden gizli devlet güncellemelerini hesaplar.


0

Eğer doğru anladıysam, her iki sorunuz da buna bağlı. Bilgileri işlemek için hem tanh hem de sigmoid kullandığımız iki yer. Bunun yerine, tüm bilgileri alan tek bir sinir ağı kullanmalıyız.

Tek bir sinir ağı kullanmanın dezavantajlarını bilmiyorum. Kanımca, uygun şekilde kullanılacak vektörü doğru bir şekilde öğrenen sigmoid doğrusallığı olmayan tek bir sinir ağı kullanabiliriz (ilk durumda hücre durumuna eklenir veya ikinci durumda gizli durum olarak aktarılır).

Bununla birlikte, bunu şimdi yapma şeklimiz, görevi iki kısımda kırıyoruz, bir kısmı saklanacak veri miktarını öğrenmek için sigmoid doğrusal olmama özelliğini kullanıyor. Tanh'ı doğrusal olmama olarak kullanan diğer kısım, sadece önemli olan bilgiyi öğrenme görevini yapmaktır.

Basit bir ifadeyle, sigmoid ne kadar tasarruf edeceğini ve tanh'ın neyi kurtaracağını öğrenir ve iki parçaya ayırmak eğitimi kolaylaştırır.

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.