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:
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.
Ş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:
nerede fonksiyonları , ve sinir ağları ile modellenmiştir. İfadeyi basitleştirmek için sadece argümanları kaldırırım:
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.
İş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"vektö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 .
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:
burada , hücre durumu vektörünün her bir bileşenine uygulanan sigmoid bir işlevdir.
Yani sorum şu: Bu mimari sorunu neden (veya tam olarak nasıl) çözüyor?
Özellikle aşağıdakileri anlamıyorum:
- "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?
- 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 .