Links
🌌

RNN'deki Vanishing Gradients

  • 10.000 zaman adımı büyüklüğünde bir dizi verisini işleyen bir RNN, optimize edilmesi çok zor olan 10.000 derin katmana sahiptir 🙄
  • Derin Sinir Ağlarında da, daha derin ağlar vanishing gradient problem sorununa giriyor 🥽
  • Bu da, uzun dizi boyutuna sahip RNN'lerde de olur 🐛

🧙‍♀️ Çözümler

  • GRU Gated Recurrent Unit
  • LSTM Long Short-Term Memory

🚪 Gated Recurrent Unit (GRU)

GRU'lar standart tekrarlayan sinir ağlarının gelişmiş versiyonlarıdır ✨, GRU güncelleme kapısı ve sıfırlama kapısını kullanır
  • Temel olarak, bunlar çıktıya hangi bilgilerin aktarılması gerektiğine karar veren iki vektördür
  • Onlarla ilgili özel olan şey, bilgiyi uzun zaman önce tutmak için eğitilebilecekleridir
    • Zamanla kaybolmadan veya tahminle ilgili bilgileri çıkarmadan
Kapı
Açıklama
🔁 Güncelleme Kapısı
Modele, geçmiş bilgilerin ne kadarının (önceki zaman adımlarından) geleceğe aktarılması gerektiğini belirlemede yardımcı olur
0️⃣ Sıfırlama Kapısı
Modele, geçmiş bilgilerin ne kadarının unutacağına karar vermede yardımcı olur

🔁 Güncelleme Kapısı

Bu kapı göz önüne alındığında, vanishing gradient problemi ortadan kalkar çünkü model kendi başına geçmiş bilgilerin ne kadarını geleceğe taşıdığını öğreniyor.
Kısaca: Şimdi ne kadar geçmiş önemli olmalı? 🙄

0️⃣ Sıfırlama Kapısı

Geçmiş bilgilerinin ne kadarının unutulacağına karar vermek için model tarafından kullanıldığından, bu kapı güncelleme kapısıyla karşılaştırıldığında tam tersi bir işlevselliğe sahiptir.
Kısaca: Önceki bilgi düşürülecek mi? 🙄

💬 Current Memory Content

Geçmişten ilgili bilgileri saklamak için sıfırlama kapısını kullanacak bellek içeriği.

🎈 Final Memory at Current Time Step

Mevcut birim için bilgi tutan ve onu daha sonra ağa iletecek bir vektör.

👀 Görselleştirme

🎉 GRU Özeti

  • vanishing gradient problemini gidermek için bir çözümdür
  • Model her seferinde yeni girişi kaybetmekte kalmıyor, ilgili bilgileri saklıyor ve ağın bir sonraki zaman adımlarına aktarıyor

🤸‍♀️ Long Short-Term Memory (LSTM)

0️⃣ Sıfırlama Kapısı (Forget Gate)

  • Bir metinde kelimeler okuduğumuzu varsayalım ve örneğin tekil mi yoksa çoğul mu olduğu gibi gramer yapılarını takip etmek için bir LSTM kullanmak istiyoruz.
  • Eğer konu tekil bir kelimeden çoğul kelimeye geçerse, tekil / çoğul durumun önceden depolanmış hafıza değerinden kurtulmanın bir yolunu bulmalıyız.
  • LSTM'de, sıfırlama (forget) kapısı bunu yapmamıza izin veriyor
Γf<t>=σ(Wf[a<t1>,x<t>]+bf)\Gamma ^{<t>}_f = \sigma(W_f[a^{<t-1>}, x^{<t>}]+b_f)
  • Burada, $W_f$ sıfırlama kapısı davranışını yöneten ağırlıklardır.
    [a<t1>vex<t>][a^{<t-1>} ve x^{<t>}]
    'yi birleştiriyoruz ve
    WfW_f
    ile çarpıyoruz. Yukarıdaki denklem, 0 ile 1 arasında değerleri olan bir
    Γf<t>\Gamma_f^{<t>}
    vektörüyle sonuçlanır
  • Bu sıfırlama kapısı vektörü, önceki hücre durumu
    c<t1>c^{<t-1>}
    olan ile element-wise çarpılır
  • Eğer
    Γf<t>\Gamma_f^{<t>}
    'nın değerlerinden biri 0 ise (veya 0'a yakınsa), LSTM'nin bu bilgi parçasını
    c<t1>c^{<t-1>}
    'nin karşılık gelen bileşeninden çıkarması gerektiği anlamına gelir (örneğin: tekil nesne).
  • Değerlerden biri 1 ise, bilgiyi olduğu gibi korunacaktır.

🔄 Güncelleme Kapısı (Update Gate)

Odaklandığımız nesnenin tekil olduğunu unuttuğumuzda, yeni nesnenin artık çoğul olduğunu yansıtacak şekilde güncellemenin bir yolunu bulmalıyız. Güncelleme kapısının formülü aşağıdaki gibidir:
Γu<t>=σ(Wu[a<t1>,x<t>]+bu)\Gamma ^{<t>}_u = \sigma(W_u[a^{<t-1>}, x^{<t>}]+b_u)
Sıfırlama kapısında olduğuna benzer şekilde, burada
 Gammau<t>\ Gamma_u^{<t>}
yine 0 ile 1 arasındaki değerlerden oluşan bir vektördür. Bu,
ctc^{⟨t⟩}
'i hesaplamak için,
c~<t>\tilde{c}^{<t>}
ile element-wise çarpılacaktır.

👩‍🔧 Hücreyi Güncelleme

Yeni nesneyi güncellemek için önceki hücre durumumuza ekleyebileceğimiz yeni bir sayı vektörü oluşturmamız gerekiyor. Kullandığımız denklem aşağıdaki gibidir:
c~<t>=tanh(Wc[a<t1>,x<t>]+bc)\tilde{c}^{<t>}=tanh(W_c[a^{<t-1>}, x^{<t>}]+b_c)
Son olarak, yeni hücre durumu:
c<t>=Γf<t>c<t1>+Γu<t>c~<t>c^{<t>}=\Gamma _f^{<t>}*c^{<t-1>} + \Gamma _u^{<t>}*\tilde{c}^{<t>}

🚪 Çıkış Kapısı (Output Gate)

Hangi çıktıları kullanacağımıza karar vermek için aşağıdaki iki formülü kullanıyoruz:
Γo<t>=σ(Wo[a<t1>,x<t>]+bo)\Gamma _o^{<t>}=\sigma(W_o[a^{<t-1>}, x^{<t>}]+b_o)
a<t>=Γo<t>tanh(c<t>)a^{<t>} = \Gamma _o^{<t>}*tanh(c^{<t>})
Birinci denklemde, sigmoid fonksiyonunu kullanarak neyin çıktısı alınacağına karar verirken, ikinci denklemde önceki durumu tanh fonksiyonu ile çarpıyoruz.
GRU, LSTM'den daha yeni, LSTM daha güçlü, ancak GRU'nun uygulanması daha kolay 🚧

🌞 Yazının Aslı

🧐 Daha Fazla Oku