Cell state
- Makine Öğrenmesi kursu
- İleri seviye
- Ders 55/78
- 5 dk
Cell state, LSTM'ın uzun süreli bellek taşıyıcısıdır.
Hücre durumu
Hücre durumu c, LSTM'in uzun süreli belleğidir; gizli durum h ise o anki çıktıdır. c sınırsızdır, h = o · tanh(c) ise (-1, 1) aralığındadır:
lstm = nn.LSTM(4, 8, batch_first=True)
h0 = torch.zeros(1, 2, 8)
c0 = torch.zeros(1, 2, 8)
output, (h_n, c_n) = lstm(torch.randn(2, 6, 4), (h0, c0)) # başlangıç durumu verilebilir
print(h_n.abs().max().item() < 1) # TrueBaşlangıç durumu verilmezse sıfır kabul edilir. Uzun bir metni parça parça işlerken bir parçanın son durumu bir sonrakine başlangıç olarak verilebilir.
Durumu taşımak
Bir diziyi tek seferde ya da iki parçada işlemek, durum taşındığı sürece aynı sonucu verir. Bu, akan veride (canlı sensör, uzun belge) çok kullanışlıdır:
x = torch.randn(1, 10, 4)
_, (h_tam, _) = lstm(x)
_, durum = lstm(x[:, :6])
_, (h_parca, _) = lstm(x[:, 6:], durum)
print(torch.allclose(h_tam, h_parca, atol=1e-6)) # TrueEğitimde uzun dizilerin parçalara bölünüp durumun taşınmasına "kesik geri yayılım" (truncated BPTT) denir; durum parçalar arasında detach() edilir.
Uygulama Parça parça işle
Tohum 0 ile nn.LSTM(4, 8, batch_first=True) kur. (1, 10, 4) girdiyi tek seferde ve 6 + 4 adımlık iki parçada (durumu taşıyarak) işle. Son gizli durumların aynı olduğunu torch.allclose(..., atol=1e-6) ile, ardından durumu taşımadan ikinci parçayı işlemenin farklı sonuç verdiğini yazdır.
Başlangıç kodu
import torch
from torch import nn
torch.manual_seed(0)
lstm = nn.LSTM(4, 8, batch_first=True)
x = torch.randn(1, 10, 4)
# buraya yazÖrnek çözüm
import torch
from torch import nn
torch.manual_seed(0)
lstm = nn.LSTM(4, 8, batch_first=True)
x = torch.randn(1, 10, 4)
_, (h_tam, _) = lstm(x)
_, durum = lstm(x[:, :6])
_, (h_parca, _) = lstm(x[:, 6:], durum)
print(torch.allclose(h_tam, h_parca, atol=1e-6))
_, (h_bos, _) = lstm(x[:, 6:])
print(not torch.allclose(h_tam, h_bos, atol=1e-6))Beklenen çıktı
True True
Soru ve cevaplar
Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.
1 Neden <code>h</code> her zaman (-1, 1) aralığındadır?
- Değildir
- h = o · tanh(c); tanh ve sigmoid sınırlıdır Doğru cevap
- c sınırlı olduğu için
- Normalleştirme yapıldığı için
Açıklama: o ∈ (0, 1) ve tanh ∈ (-1, 1); çarpımları da (-1, 1) içindedir.
2 Önceki parçanın durumunu başlangıç olarak ver.
_, (h, c) = lstm(x[:, 6:], ____)
_, (h, c) = lstm(x[:, 6:], durum)
Açıklama: İkinci argüman (h0, c0) çiftidir.
3 Kavramları eşleştir.
| Kavram | Anlamı |
|---|---|
c |
Uzun süreli bellek |
h |
Anlık çıktı |
(h0, c0) |
Başlangıç durumu |
truncated BPTT |
Parçalı eğitim |