Deep learning có 2 mô hình lớn là Convolutional Neural Network (CNN) cho bài toán có input là ảnh và Recurrent neural network (RNN) cho bài toán dữ liệu dạng chuỗi (sequence). Mình đã giới thiệu về Convolutional Neural Network (CNN) và các ứng dụng của deep learning trong computer vision bao gồm: classification, object detection, segmentation. Có thể nói là tương đối đầy đủ các dạng bài toán liên quan đến CNN. Bài này mình sẽ giới thiệu về RNN.
Đang xem: Recurrent là gì
Recurrent Neural Network là gì?
Bài toán: Cần phân loại hành động của người trong video, input là video 30s, output là phân loại hành động, ví dụ: đứng, ngồi, chạy, đánh nhau, bắn súng,…
Khi xử lý video ta hay gặp khái niệm FPS (frame per second) tức là bao nhiêu frame (ảnh) mỗi giây. Ví dụ 1 FPS với video 30s tức là lấy ra từ video 30 ảnh, mỗi giây một ảnh để xử lý.
Ta dùng 1 FPS cho video input ở bài toán trên, tức là lấy ra 30 ảnh từ video, ảnh 1 ở giây 1, ảnh 2 ở giây 2,… ảnh 30 ở giây 30. Bây giờ input là 30 ảnh: ảnh 1, ảnh 2,… ảnh 30 và output là phân loại hành động. Nhận xét:
Các ảnh có thứ tự ví dụ ảnh 1 xẩy ra trước ảnh 2, ảnh 2 xẩy ra trước ảnh 3,… Nếu ta đảo lộn các ảnh thì có thể thay đổi nội dung của video. Ví dụ: nội dung video là cảnh bắn nhau, thứ tự đúng là A bắn trúng người B và B chết, nếu ta đảo thứ tự ảnh thành người B chết xong A mới bắn thì rõ ràng bây giờ A không phải là kẻ giết người => nội dung video bị thay đổi.Ta có thể dùng CNN để phân loại 1 ảnh trong 30 ảnh trên, nhưng rõ ràng là 1 ảnh không thể mô tả được nội dung của cả video. Ví dụ: Cảnh người cướp điện thoại, nếu ta chỉ dùng 1 ảnh là người đấy cầm điện thoại lúc cướp xong thì ta không thể biết được cả hành động cướp.
=> Cần một mô hình mới có thể giải quyết được bài toán với input là sequence (chuỗi ảnh 1->30) => RNN ra đời.
Dữ liệu dạng sequence
Dữ liệu có thứ tự như các ảnh tách từ video ở trên được gọi là sequence, time-series data.
Trong bài toán dự đoán đột quỵ tim cho bệnh nhân bằng các dữ liệu tim mạch khám trước đó. Input là dữ liệu của những lần khám trước đó, ví dụ i1 là lần khám tháng 1, i2 là lần khám tháng 2,… i8 là lần khám tháng 8. (i1,i2,..i8) được gọi là sequence data. RNN sẽ học từ input và dự đoán xem bệnh nhân có bị đột quy tim hay không.
Xem thêm: Hướng Dẫn Cách Chơi Identity V, Identity V On The App Store
Ví dụ khác là trong bài toán dịch tự động với input là 1 câu, ví dụ “tôi yêu Việt Nam” thì vị trí các từ và sự xắp xếp cực kì quan trọng đến nghĩa của câu và dữ liệu input các từ <‘tôi’, ‘yêu’, ‘việt’, ‘nam’> được gọi là sequence data. Trong bài toán xử lý ngôn ngữ (NLP) thì không thể xử lý cả câu được và người ta tách ra từng từ làm input, giống như trong video người ta tách ra các ảnh (frame) làm input.
Phân loại bài toán RNN

Loss function
Backpropagation Through Time (BPTT)
Có 3 tham số ta cần phải tìm là W, U, V. Để thực hiện gradient descent, ta cần tính: displaystyle frac{partial L}{partial U}, frac{partial L}{partial V} , frac{partial L}{partial W}.
Tính đạo hàm với V thì khá đơn giản:
displaystyle frac{partial L}{partial V} = frac{partial L}{partial hat{y}} * frac{partial hat{y}}{partial V}
Tuy nhiên với U, W thì lại khác.
displaystyle frac{partial L}{partial W} = frac{partial L}{partial hat{y}} * frac{partial hat{y}}{partial s_{30}} * frac{partial s_{30}}{partial W}
Do s_{30} = f(W*s_{29} + V*x_{30}) có s_{29} phụ thuộc vào W. Nên áp dụng công thức hồi cấp 3 bạn học: displaystyle (f(x) * g(x))” = f”(x) * g(x) + f(x) * g”(x) . Ta có
displaystylefrac{partial s_{30}}{partial W} = frac{partial s”_{30}}{partial W} + frac{partial s_{30}}{partial s_{29}} * frac{partial s_{29}}{partial W} , trong đó displaystyle frac{partial s”_{30}}{partial W} là đạo hàm của s_{30} với W khi coi s_{29} là constant với W.
Xem thêm: Motion Graphic Là Gì – Những Điều Cần Biết Về Motion Graphic
Tương tự trong biểu thức s_{29} có s_{28} phụ thuộc vào W, s_{28} có s_{27} phụ thuộc vào W … nên áp dụng công thức trên và chain rule:
displaystyle frac{partial L}{partial W} = sum_{i=0}^{30} frac{partial L}{partial hat{y}} * frac{partial hat{y}}{partial s_{30}} * frac{partial s_{30}}{partial s_i} * frac{partial s”_i}{partial W}, trong đó displaystyle frac{partial s_{30}}{partial s_i} = prod_{j=i}^{29} frac{partial s_{j+1}}{partial s_j} và displaystyle frac{partial s”_{i}}{partial W} là đạo hàm của s_{i} với W khi coi s_{i-1} là constant với W.
Nhìn vào công thức tính đạo hàm của L với W ở trên ta có thể thấy hiện tượng vanishing gradient ở các state đầu nên ta cần mô hình tốt hơn để giảm hiện tượng vaninshing gradient => Long short term memory (LSTM) ra đời và sẽ được giới thiệu ở bài sau. Vì trong bài toán thực tế liên quan đến time-series data thì LSTM được sử dụng phổ biến hơn là mô hình RNN thuần nên bài này không có code, bài sau sẽ có code ứng dụng với LSTM.