RNN, hay mạng nơ-ron hồi quy, là một mạng nơ-ron được xây dựng cho dữ liệu dạng chuỗi như văn bản, tiếng nói hoặc chuỗi thời gian. Ở mỗi bước, nó kết hợp đầu vào hiện tại với một hidden state từ bước trước, nên đầu ra có thể phụ thuộc vào những gì đã xuất hiện trước đó.
Đó là ý tưởng cốt lõi: RNN có một dạng bộ nhớ đang chạy. LSTM là một loại RNN có cổng, quản lý bộ nhớ đó cẩn thận hơn khi thông tin quan trọng cần tồn tại qua nhiều bước.
RNN làm gì ở mỗi bước thời gian
Tại bước thời gian , một RNN đơn giản cập nhật hidden state theo quy tắc như
Ở đây là đầu vào hiện tại, là hidden state trước đó, và là hidden state mới. Các ma trận và cùng bias được học trong quá trình huấn luyện.
Nếu mô hình cũng tạo ra đầu ra ở mỗi bước, một dạng phổ biến là
Quy tắc đầu ra chính xác phụ thuộc vào bài toán. Có bài toán cần một đầu ra cho mỗi bước, trong khi bài toán khác chỉ dùng hidden state cuối cùng.
Vì sao hidden state quan trọng
Mạng truyền thẳng nhìn một đầu vào rồi chuyển sang đầu vào khác. RNN tái sử dụng một phần phép tính trước đó của nó. Chính sự tái sử dụng này khiến nó hữu ích cho văn bản, tiếng nói, chuỗi thời gian và các dữ liệu có thứ tự khác.
Bạn có thể hình dung hidden state như một ghi chú ngắn mà mô hình tự viết cho chính nó sau mỗi bước. Bước tiếp theo đọc ghi chú đó, cập nhật nó và truyền phiên bản đã chỉnh sửa đi tiếp.
Nếu bạn thay đổi thứ tự của cùng một tập đầu vào, các hidden state thường cũng thay đổi. Thứ tự trong chuỗi là điều quan trọng.
Ví dụ RNN có tính toán
RNN thực tế thường dùng vector và các hàm kích hoạt phi tuyến. Để phép tính dễ theo dõi hơn, hãy dùng một ví dụ đồ chơi với trạng thái chỉ là một số:
Bây giờ xử lý chuỗi , , .
Bước đầu tiên:
Bước thứ hai:
Bước thứ ba:
Điều quan trọng ở đây không phải là công thức cụ thể. Mà là sự phụ thuộc vào trạng thái trước đó. Ở bước 2, phép cập nhật không chỉ dùng ; nó còn dùng cả những gì được mang từ bước 1 sang. Đó là ý tưởng cốt lõi của RNN.
Nếu bạn đổi thứ tự và dùng , , , thì
Trạng thái cuối cùng sẽ khác dù cùng những con số đó xuất hiện. Đó chính là lý do RNN là mô hình chuỗi chứ không phải mô hình xem đầu vào như một túi phần tử không có thứ tự.
Vì sao RNN cơ bản gặp khó với chuỗi dài
Trong RNN cơ bản, thông tin cũ phải tồn tại qua rất nhiều lần cập nhật lặp lại. Nếu chuỗi dài, điều đó có thể rất khó. Tín hiệu hữu ích có thể mờ dần, và trong quá trình huấn luyện, gradient cũng có thể bị nhỏ dần hoặc bùng nổ qua nhiều bước.
Đó là lý do RNN thuần thường gặp khó khi bài toán phụ thuộc vào thông tin từ rất xa trong chuỗi. Vấn đề không phải là cơ chế hồi quy sai. Vấn đề là bộ nhớ dài hạn khó được duy trì chỉ với một phép cập nhật hidden state đơn giản.
LSTM cải thiện bộ nhớ của RNN như thế nào
LSTM, viết tắt của long short-term memory, là một RNN có cổng. Nó đưa vào một đường đi bộ nhớ có cấu trúc hơn, thường được gọi là cell state, cùng với các cổng điều khiển thông tin nào bị quên, thông tin mới nào được ghi vào, và phần nào được đưa ra làm đầu ra.
Bạn không cần toàn bộ các phương trình cổng để hiểu ý chính. Thiết kế này cho mô hình nhiều quyền kiểm soát bộ nhớ hơn. Nếu một chi tiết cần tồn tại qua nhiều bước, LSTM có khả năng giữ nó tốt hơn RNN thường.
Điều đó không có nghĩa là LSTM nhớ mọi thứ mãi mãi. Nó có nghĩa là kiến trúc này giỏi hơn trong việc học khi nào nên giữ thông tin và khi nào nên loại bỏ nó.
RNN và LSTM khác nhau thế nào theo cách dễ hiểu
RNN cơ bản có một trạng thái đang chạy và cập nhật nó lặp đi lặp lại. LSTM bổ sung một cơ chế bộ nhớ mạnh hơn xung quanh ý tưởng đó.
Nếu chuỗi ngắn và sự phụ thuộc chỉ mang tính cục bộ, RNN thường có thể là đủ. Nếu bài toán phụ thuộc vào thông tin từ sớm hơn nhiều trong chuỗi, LSTM thường là lựa chọn an toàn hơn.
Những nhầm lẫn thường gặp về RNN và LSTM
Nghĩ rằng RNN nhìn toàn bộ chuỗi cùng một lúc
Thường là không. Cách hình dung tiêu chuẩn là xử lý từng bước, với trạng thái được mang sang phía trước.
Cho rằng LSTM giải quyết bộ nhớ một cách hoàn hảo
Nó giúp với các phụ thuộc dài hạn, nhưng vẫn là một mô hình được huấn luyện với dung lượng hữu hạn và các giới hạn thực tế.
Bỏ qua thứ tự của chuỗi
RNN được xây dựng cho dữ liệu có thứ tự. Xáo trộn các phần tử trong chuỗi sẽ làm thay đổi phép tính.
Xem hidden state như bộ nhớ có thể đọc hiểu như ngôn ngữ con người
Hidden state là một biểu diễn số được học, không phải một bản tóm tắt sạch sẽ như câu văn.
Khi nào người ta dùng RNN và LSTM
Chúng được dùng cho các bài toán chuỗi như mô hình hóa ngôn ngữ, tiếng nói, chữ viết tay, luồng dữ liệu cảm biến và dự báo chuỗi thời gian. Ngày nay, nhiều bài toán ngôn ngữ dùng transformer thay thế, nhưng RNN và LSTM vẫn quan trọng vì chúng giúp giải thích bộ nhớ chuỗi rất rõ ràng và vẫn hữu ích trong các bối cảnh nhỏ hơn hoặc chuyên biệt hơn.
Hãy tự thử một phiên bản của bạn
Hãy viết một chuỗi gồm bốn bước của riêng bạn và áp dụng quy tắc đồ chơi . Sau đó đổi chỗ hai đầu vào và so sánh trạng thái cuối cùng. Thí nghiệm nhỏ đó sẽ làm vai trò của cơ chế hồi quy trở nên rõ ràng hơn nhiều so với chỉ nhìn vào tên viết tắt.
Nếu muốn khám phá thêm một trường hợp khác, hãy so sánh trang này với phần giải thích về transformer hoặc chuỗi Markov và chú ý xem mỗi mô hình xử lý thông tin quá khứ như thế nào.
Cần trợ giúp giải bài?
Tải câu hỏi lên và nhận lời giải từng bước đã được xác minh trong vài giây.
Mở GPAI Solver →