Chủ Nhật, 30 tháng 12, 2018

[Machine Learning][Deep Learning] Recurrent Neural Network


  • Sequence data
Sequence data hay dữ liệu tuần tự là loại dữ liệu mà các thành phần phụ thuộc lẫn nhau về mặt thời gian hay ngữ nghĩa, ví dụ: 1 đoạn audio, 1 câu nói, hoặc 1 chuỗi DNA ...
  • Tại sao không dùng Neural Network thường (Standard Neural Network) như hình dưới.
Với các dữ liệu dạng tuần tự, khi ta dùng NN thường (có input, hidden layer và output) sẽ có 2 hai vấn đề:
- Các dữ liệu đầu vào là không cùng length, mà với NN thường, các thông số này phải được xác định trước ví dụ như số units của input layer, output layer.
- Các dữ liệu xử lý trong NN thường là các dữ liệu độc lập nghĩa là chúng không liên quan tới nhau, mà trong dữ liệu tuần tự, ta muốn quan sát các dữ liệu xung quanh để tính toán đầu ra một cách chính xác. Ví dụ như trong câu: The president of US is George Bush, khi này nếu ta đang xây dựng 1 mô hình Name Entity Recognition (NER), để phát hiện George Bush là tên người, nếu mạng NN biết được president là 1 danh từ chỉ người có trong câu khi đó đầu ra sẽ chính xác hơn (confidence score sẽ cao hơn).
  • Kiến trúc RNN
RNN được cho bởi kiến trúc như hình sau:
Các đầu ra ŷ<t> sẽ phụ thuộc vào đầu vào x<t> cũng như các dữ liệu trước đó được cho bởi a<t-1>. Lúc này, ta có thể tận dụng các feature của các sample xuất hiện trước đó trong 1 chuỗi.
Tuy nhiên, mô hình RNN lại có 1 nhược điểm đó là nó chỉ có thể tận dụng các feature của các sample xuất hiện trước đó mà không thể tận dụng các sample ở phía sau. Khi này, một mô hình mới là Bidirectional RNN được đề xuất để giải quyết vấn đề này.
Ngoài ra, trong RNN, ta vẫn phải thực hiện forward và back propagation. Khi thực hiện back propagation, t sẽ giảm dần nghĩa là ta quay ngược lại thời gian theo ngược chiều của chuỗi được cho, lúc này thuật toán được gọi là back propagation through time (BPTT)

Không có nhận xét nào:

Đăng nhận xét