LSTM và GRU: cổng và trí nhớ dài hạn
Cổng quên cổng cập nhật, trạng thái cell, so sánh LSTM GRU RNN cơ bản và thí nghiệm chuỗi trong bài này.
KhóThuật toán ~60 phút
Ôn lại trước khi học
Giới thiệu
Bài này học cổng nhớ dài của LSTM và GRU gọn. Dùng để nhớ ý đầu câu khi đọc tới cuối đoạn.
Kiến thức cần nhớ
LSTM
- Định nghĩa: thêm đường cell chạy suốt chuỗi ít bị ghi đè.
- Cổng quên quyết giữ bao nhiêu trí nhớ cũ.
- Cổng nạp quyết thêm bao nhiêu điều mới.
- Ví dụ đời thường: như sổ tay chỉ xóa dòng hết hạn.
- Cổng ra quyết lộ bao nhiêu thành đáp án hiện tại.
GRU
- Định nghĩa: bản gọn với 2 cổng, không tách cell riêng.
- Cổng cập nhật pha trộn giữa nhớ cũ và đề xuất mới.
- Cổng đặt lại quyết bỏ bao nhiêu quá khứ khi đề xuất.
- Ví dụ đời thường: như gộp sổ nháp và sổ chính làm một.
- Ẩn vừa là trí nhớ vừa là đầu ra luôn.
| Mô hình | Tham số | Trí nhớ |
|---|---|---|
| RNN cơ bản | Ít nhất, nhanh nhất | Chỉ nhớ ngắn |
| GRU | Vừa, huấn luyện nhanh | Nhớ trung và dài |
| LSTM | Nhiều nhất, chậm nhất | Nhớ dài tốt nhất |
Khi nào chọn
- Chuỗi ngắn thì RNN cơ bản đã đủ và nhanh.
- Dữ liệu vừa thì GRU là điểm cân bằng tốt.
- Chuỗi rất dài thì LSTM giữ xa tốt hơn.
- Luôn kẹp gradient và chuẩn hóa để ổn định.
Ví dụ
- Input: câu dài 30 từ, ý ở từ số 2 -> Output: LSTM nhớ, RNN quên.
- Giải thích: đường cell bảo toàn trí nhớ xa tốt hơn.
# Cổng quên quyết giữ bao nhiêu cũ
f = sigmoid(x @ Wf + h_cu @ Uf) # gần 1 là giữ
cell = f * cell_cu + i * ung_vien # cập nhật nhẹ
💻 Bài tập
Ngôn ngữ: Python 3 với NumPy cho Bài 1, PyTorch cho Bài 2-3. Nộp vào day-101/.
Bài 1: LSTM và GRU cell tự cài (forward)
| Cell | Công thức cần cài |
|---|---|
| LSTM | , , , |
| GRU | , , |
- Copy trọng số từ
torch.nn.LSTMCellvàtorch.nn.GRUCell(chú ý thứ tự cổng trong PyTorch) sang bản NumPy. Output phải khớp sai số1e-6. - Đếm tham số: LSTM gấp 4 lần RNN, GRU gấp 3 lần. Kiểm tra bằng số.
Bài 2: Bài toán nhớ xa
Chuỗi dài T gồm số ngẫu nhiên. Nhãn là phần tử thứ 2 của chuỗi. Mô hình chỉ đọc hết chuỗi rồi đoán (many-to-one).
T RNN_acc GRU_acc LSTM_acc
10 ...
30 ...
100 ...
Cùng số epoch, cùng hidden size, có gradient clipping. Chỉ ra T mà RNN bắt đầu thua.
Bài 3: Dự báo chuỗi thời gian (nâng cao)
Dữ liệu: nhiệt độ hằng ngày (dữ liệu công khai) hoặc sóng sin cộng nhiễu.
- Cửa sổ 30 ngày, đoán ngày 31. Chuẩn hóa bằng mean/std của tập train.
- Chia theo thời gian 70/15/15, không xáo trộn.
- So LSTM, GRU và baseline "ngày mai bằng hôm nay". In MAE test.
- Vẽ dự báo chồng lên giá trị thật trên tập test.
✅ Tiêu chí hoàn thành
- Cell NumPy khớp PyTorch.
- Bảng nhớ xa có số thật, thấy rõ RNN thua ở
Tlớn. - Bài 3 có baseline và LSTM/GRU thắng baseline.
- Giải thích được vai trò cổng quên bằng công thức .
❓ Câu hỏi ôn tập
- Đường cell khác trí nhớ RNN sao?
- Cổng quên làm gì?
- GRU gọn hơn LSTM ở đâu?
- Chuỗi ngắn nên dùng gì?
🌕 Bạn đã hoàn thành ngày 101. Làm hết bài tập phía trên rồi sang ngày tiếp theo.