Ý tưởng đằng sau Mạng thần kinh tái phát (RNN) là rõ ràng đối với tôi. Tôi hiểu nó theo cách sau:
Chúng tôi có một chuỗi các quan sát ( ) (hay nói cách khác là chuỗi thời gian đa biến). Mỗi quan sát đơn là một vectơ số chiều. Trong mô hình RNN, chúng tôi giả định rằng quan sát tiếp theo là một chức năng của quan sát trước đó cũng như "trạng thái ẩn" trước đó , trong đó các trạng thái ẩn cũng được biểu thị bằng số vectơ (kích thước của các trạng thái quan sát và ẩn có thể khác nhau). Bản thân các trạng thái ẩn cũng được giả định phụ thuộc vào quan sát trước đó và trạng thái ẩn:
Cuối cùng, trong mô hình RNN, hàm được coi là một mạng thần kinh. Chúng tôi đào tạo (phù hợp) mạng lưới thần kinh bằng cách sử dụng dữ liệu có sẵn (một chuỗi các quan sát). Mục tiêu của chúng tôi trong khóa đào tạo là có thể dự đoán các quan sát tiếp theo một cách chính xác nhất có thể bằng các quan sát trước đó.
Bây giờ, mạng LSTM là một sửa đổi của mạng RNN. Theo tôi hiểu, động lực đằng sau LSTM là giải quyết vấn đề bộ nhớ ngắn đặc biệt với RNN (RNN thông thường gặp rắc rối với các sự kiện liên quan cách nhau quá xa).
Tôi hiểu cách các mạng LSTM hoạt động. Dưới đây là lời giải thích tốt nhất về LSTM mà tôi đã tìm thấy. Ý tưởng cơ bản là như sau:
Ngoài vectơ trạng thái ẩn, chúng tôi giới thiệu một vectơ "trạng thái ô" có cùng kích thước (chiều) với vectơ trạng thái ẩn ( ). Tôi nghĩ rằng vectơ "trạng thái tế bào" được giới thiệu để mô hình bộ nhớ dài hạn. Như trong trường hợp RNN thông thường, mạng LSTM lấy trạng thái quan sát và ẩn làm đầu vào. Sử dụng đầu vào này, chúng tôi tính toán một "trạng thái ô" mới theo cách sau:
trong đó các chức năng của , và được mô hình hóa bởi các mạng thần kinh. Để làm cho biểu thức đơn giản hơn, tôi chỉ cần loại bỏ các đối số:
Vì vậy, chúng ta có thể thấy rằng "vectơ trạng thái ô" mới ( ) là tổng trọng số của vectơ trạng thái cũ ( ) và vectơ trạng thái ô "trung gian" ( ). Phép nhân giữa các vectơ là thành phần khôn ngoan (chúng tôi nhân hai vectơ N chiều và kết quả là vectơ N chiều khác). Nói cách khác, chúng ta trộn hai vectơ trạng thái ô (một vectơ cũ và trung gian) bằng cách sử dụng các trọng số riêng của thành phần.
Đây là trực giác giữa các hoạt động được mô tả. Vectơ trạng thái tế bào có thể được hiểu là một vectơ bộ nhớ. Vectơ trọng số thứ hai (được tính theo mạng thần kinh) là một cổng "giữ" (hoặc quên). Giá trị của nó quyết định nếu chúng ta giữ hoặc quên (xóa) một giá trị tương ứng từ vectơ trạng thái ô (hoặc vectơ bộ nhớ dài hạn). Vectơ trọng số đầu tiên ( ), được tính bởi một mạng thần kinh khác, được gọi là cổng "ghi" hoặc "ghi nhớ". Nó quyết định nếu một bộ nhớ mới (vectơ trạng thái ô "trung gian") phải được lưu (hay chính xác hơn, nếu một thành phần cụ thể của nó phải được lưu / ghi). "Trung gian"vectơ). Trên thực tế, sẽ chính xác hơn để nói rằng, với hai vectơ trọng số ( và ), chúng tôi "trộn" bộ nhớ cũ và mới.
Vì vậy, sau khi trộn mô tả ở trên (hoặc quên và ghi nhớ), chúng ta có một vectơ trạng thái tế bào mới. Sau đó, chúng tôi tính toán trạng thái ẩn "trung gian" bằng cách sử dụng một mạng thần kinh khác (như trước đây, chúng tôi sử dụng trạng thái quan sát và trạng thái ẩn làm đầu vào). Cuối cùng, chúng tôi kết hợp trạng thái ô mới (bộ nhớ) với trạng thái ẩn "trung gian" ( ) để có trạng thái ẩn mới (hoặc "cuối cùng") mà chúng tôi thực sự xuất ra:
Trong đó là hàm sigmoid được áp dụng cho từng thành phần của vectơ trạng thái tế bào.
Vì vậy, câu hỏi của tôi là: Tại sao (hoặc chính xác) kiến trúc này giải quyết vấn đề như thế nào?
Cụ thể tôi không hiểu như sau:
- Chúng tôi sử dụng mạng thần kinh để tạo bộ nhớ "trung gian" (vectơ trạng thái ô) được trộn với bộ nhớ "cũ" (hoặc trạng thái ô) để có bộ nhớ "mới" (trạng thái ô). Các yếu tố trọng số cho việc trộn cũng được tính toán bởi các mạng thần kinh. Nhưng tại sao chúng ta không thể sử dụng chỉ một mạng thần kinh để tính toán trạng thái tế bào "mới" (hoặc bộ nhớ). Hay nói cách khác, tại sao chúng ta không thể sử dụng trạng thái quan sát, trạng thái ẩn và bộ nhớ cũ làm đầu vào cho mạng thần kinh tính toán bộ nhớ "mới"?
- Cuối cùng, chúng tôi sử dụng các trạng thái được quan sát và ẩn để tính toán trạng thái ẩn mới và sau đó chúng tôi sử dụng trạng thái ô "mới" (hoặc (dài hạn)) để sửa thành phần của trạng thái ẩn mới được tính toán. Nói cách khác, các thành phần của trạng thái ô được sử dụng giống như các trọng số chỉ làm giảm các thành phần tương ứng của trạng thái ẩn được tính toán. Nhưng tại sao vector trạng thái tế bào được sử dụng theo cách đặc biệt này? Tại sao chúng ta không thể tính toán trạng thái ẩn mới bằng cách đặt vectơ trạng thái ô (bộ nhớ dài hạn) vào đầu vào của mạng nơ ron (cũng lấy trạng thái quan sát và ẩn làm đầu vào)?
Thêm:
Đây là một video có thể giúp làm rõ cách tổ chức các cổng khác nhau ("giữ", "viết" và "đọc").