Thích Màu Hường
Senior Member
Mình đang có vấn đề này trong việc hiểu cách mà LSTM hay nói rộng hơn la các mô hình RNN hoạt động. Hi vọng có bạn nào hiểu giải thích lại vấn đề này cho mình.
Theo những gì mình đọc, thì mô hình sẽ nhớ "memory" qua mỗi bước thời gian. Khi mình đọc cái này, mình nghĩ mô hình sẽ tự động nhớ tìm các mốc thời gian trước đó trong dataset.
Nhưng khi mình làm thử, thì mình thấy các giá trị trước đó lại được truyền vào model như 1 feature, kiểu như thế này. Cột t thậm chí chỉ có giá trị để sort, chứ thực sự cũng ko truyền vào model.
t (x0) y tại t-1 (x1) y tại t-2 (x2) y 2020-01-01 9 8 10 2020-01-02 10 9 11 2020-01-03 11 10 12
Hiện tại thì mình ko thấy nó khác gì với regression cả. Vậy thực sự cái gọi là "memory" ở trong LSTM hay bao quát hơn là trong RNN nó nằm ở đâu? Ý là lúc dựng regression thì nó sẽ ưu tiên các giá trị ở cuối train dataset hơn là ở đầu chăng.
Hiện giờ mình có khá nhiều vấn đề trong việc hiểu cách hoạt động các model deel learning này. Công việc của mình thì ko phải là data scientist, không phải là người implement trực tiếp, nhưng lại cần hiểu tất cả vấn đề ở tầm khái quát. Hi vọng có bác nào rành giải thích giúp mình.
Short answer: bạn hiểu đúng rồi đó "memory" trong RNN chỉ là lấy cái ouput của thời điểm t - 1 trước đó đưa vào làm input thêm với cái input đang xử lý ở thời điểm t. Cái memory này chỉ có tác dụng trong 1 lần loop cho 1 sequence, khi qua sequence khác nó sẽ reset.
Khác nhau với các giải thuật "không nhớ" khác là cách mình input data point. Ví dụ với RandomForest hay simple ANN, để xử lý data dạng time series bạn phải flat data ở các thời điểm t vào 1 input rồi đưa vào model xử lý 1 lần.
Ví dụ trên thì X = [y tại t-1, y tại t-2]
Còn RNN thì sẽ có thêm 1 chiều là time nên lúc đưa vào thì đưa theo 1 sequence các data point. Lúc đưa vào model RNN nó sẽ xử lý mổi sequence bằng cách loop qua từng sequence element (data point từng thời điểm t) để ra ouput cuối cùng. Ví dụ trên thì input là 1 sequence:
X:
[[y tại t-2], <~~~ sequence element
[y tại t-1]] <~~~ sequence element
Long answer:
Simple RNN bản chất cũng là chính cái model ANN "không nhớ", nhưng thay vì xử lý 1 đường thẳng từ input -> hidden layers -> ouput thì RNN sẽ có 1 cái vòng lặp để đem cái ouput này (thời điểm t-1) đưa ngược lại (recurrent) làm cái input thêm vào cái sequence element (thời điểm t) đang xử lý để cho cái state ở thời điểm t-1 "có tham gia" vào quá trình quyết định ouput của thời điểm t.
Ý tưởng của RNN bắt nguồn từ cách xử lý thông tin của não người. Ví dụ bài toán phân loại 1 cái comment review sản phẩm là tốt hay xấu. Các model không nhớ như Random Forest, ANN thì phải convert toàn bộ đoạn comment này thành 1 vector rồi xử lý 1 lần. Trong khi não người khi đọc comment sẽ đọc từng từ, từng câu và khi đọc não người sẽ nhớ những từ, câu đã đọc trước đó và lấy nó làm dữ kiện để hiểu các từ, câu tiếp theo.
Hình này mình lấy trong sách Deep Learning with Python của François Chollet, François Chollet là tác giả tạo ra Keras. Hình bên phải minh họa khi loop qua từng sequence element thì output sinh ra được đem vào input để xử lý sequence element tiếp theo.
LSTM thì bản chất vẫn là RNN chỉ khác 1 chổ là ouput sinh ra được mang đi xuyên suốt các sequence element tiếp theo thay vì chỉ đem vào input của sequence element liền sau nó. Giống như đọc comment review có 5 dòng thì mình đọc tới dòng thứ 4 vẫn nhớ được dòng 1, 2, 3 nói gì. Simple RNN vẫn có khả năng này nhưng thông tin bị mất mát do nó bị biến đổi thành ouput qua các lần loop chứ ko truyền trực tiếp như LSTM.
Last edited: