Recurrent Neural Networks là gì

A recurrent neural network and the unfolding in time of the computation involved in its forward computation
A recurrent neural network and the unfolding in time of the computation involved in its forward computation

Recurrent Neural Networks (RNNs) là một trong những mô hình Deep learning được đánh giá có nhiều ưu điểm trong các tác vụ xử lý ngôn ngữ tự nhiên (NLP). Tuy nhiên để nắm bắt ngay mô hình này không phải là điều đơn giản, ta cần có background thật vững về Neural Network, khảo sát rất nhiều tài liệu cũng như tự cài đặt một vài chương trình minh hoạ đơn giản để có thể hiểu được cơ chế hoạt động của mô hình này.

Do đó, trong bài viết này, tôi sẽ trình bày các khái niệm, các đặc điểm cũng như những ứng dụng của RNNs (tạm dịch là mạng nơ-ron tái phát) trong các bài toán thực tế.

RNNs là gì?

Ý tưởng của RNNs đó là thiết kế một Neural Network sao cho có khả năng xử lý được thông tin dạng chuỗi (sequential information), ví dụ một câu là một chuỗi gồm nhiều từ.

Recurrent có nghĩa là thực hiện lặp lại cùng một tác vụ cho mỗi thành phần trong chuỗi. Trong đó, kết quả đầu ra tại thời điểm hiện tại phụ thuộc vào kết quả tính toán của các thành phần ở những thời điểm trước đó.

Nói cách khác, RNNs là một mô hình có trí nhớ (memory), có khả năng nhớ được thông tin đã tính toán trước đó. Không như các mô hình Neural Network truyền thống đó là thông tin đầu vào (input) hoàn toàn độc lập với thông tin đầu ra (output). Về lý thuyết, RNNs có thể nhớ được thông tin của chuỗi có chiều dài bất kì, nhưng trong thực tế mô hình này chỉ nhớ được thông tin ở vài bước trước đó.

Quan sát sơ đồ biểu diễn RNNs, ta thấy rằng mô hình này có khả năng biểu diễn mối quan hệ phụ thuộc giữa các thành phần trong chuỗi. Ví dụ, nếu chuỗi của chúng ta là một câu có 5 từ thì Neural Network này sẽ unfold (dàn ra) thành Neural Network có 5 layer, mỗi layer tương ứng với mỗi từ. Dưới đây là ý nghĩa các kí hiệu toán học.

  • x_t là input tại thời điểm thứ t. Ví dụ, x_1one-hot vector của từ thứ hai trong câu (vị trí các từ được đánh số từ 0).
  • s_thidden state (memory) tại thời điểm thứ ts_t được tính dựa trên các hidden state trước đó kết hợp với input của thời điểm hiện tại s_t = f(Ux_t + Ws_{t-1}). Hàm f là hàm nonlinearity (tanh hay ReLU). s_{-1} là hidden state được khởi tạo là một vector không.
  • o_t là output tại thời điểm thứ to_t là một vector chứa xác suất của toàn bộ các từ trong từ điển o_t = softmax(Vs_t).

Không như Neural Network truyền thống, tại mỗi layer phải sử dụng một parameter khác. RNNs chỉ sử dụng một bộ parameters (U, V, W) cho toàn bộ các bước.

Những ứng dụng của RNNs

Mô hình ngôn ngữ (Language modeling) và phát sinh văn bản (Generating text)

Mô hình ngôn ngữ cho ta biết xác suất của một câu trong một ngôn ngữ là bao nhiêu (ví dụ xác suất p(hôm nay tôi đi học") = 0.0001). Đây cũng là bài toán dự đoán xác suất từ tiếp theo của một câu cho trước là bao nhiêu.

Từ bài toán này, ta có thể mở rộng thành bài toán phát sinh văn bản (generating text/generative model). Mô hình này cho phép ta phát sinh văn bản mới dựa vào tập dữ liệu huấn luyện. Ví dụ, khi huấn luyện mô hình này bằng các văn bản truyện Kiều, ta có thể phát sinh được các đoạn văn tựa truyện Kiều. Tuỳ theo loại dữ liệu huấn luyện, ta sẽ có nhiều loại ứng dụng khác nhau.

Trong mô hình ngôn ngữ, input là chuỗi các từ (được mã hoá thành one-hot vector), output là chuỗi các từ dự đoán được từ mô hình này. Khi huấn luyện mô hình, ta đặt o_t = x_{t + 1}, do chúng ta muốn output tại thời điểm t phải giống với từ ở thời điểm t + 1.

Dịch máy (Machine Translation)

Bài toán dịch máy tương tự như mô hình ngôn ngữ. Trong đó, input là chuỗi các từ của ngôn ngữ nguồn (ví dụ tiếng Đức), output là chuỗi các từ của ngôn ngữ đích (ví dụ tiếng Anh). Điểm khác biệt ở đây đó là output chỉ có thể dự đoán được khi input đã hoàn toàn được phân tích. Điều này là do từ được dịch ra phải có đầy đủ thông tin của các từ trước đó.

RNN for Machine Translation
RNN for Machine Translation

Phát sinh mô tả cho ảnh (Generating Image Descriptions)

RNNs kết hợp với Convolution Neural Netwokrs có thể phát sinh ra được các đoạn mô tả cho ảnh. Mô hình này hoạt động bằng cách tạo ra những câu mô tả từ các feature rút trích được trong bức ảnh.

Deep Visual-Semantic Alignments for Generating Image Descriptions
Deep Visual-Semantic Alignments for Generating Image Descriptions

Huấn luyện RNNs

Huấn luyện RNNs tương tự như huấn luyện Neural Network truyền thống. Ta cũng sử dụng đến thuật toán backpropagation (lan truyền ngược) nhưng có một chút tinh chỉnh. Gradient tại mỗi output không chỉ phụ thuộc vào kết quả tính toán của bước hiện tại mà còn phụ thuộc vào kết quả tính toán của các bước trước đó.

Ví dụ, để tính gradient tại thời điểm t = 4, ta cần backpropagation 3 bước trước đó và cộng dồn các gradient này lại với nhau. Kĩ thuật này gọi là Backpropagation Through Time (BPPTT). Điểm hạn chế ở đây đó là hidden layer không có trí nhớ dài hạn. Vấn đề này còn gọi là vanishing/exploding gradient problem và LSTMs được sinh ra để giải quyết vấn đề này.

Các phiên bản mở rộng của RNNs

Trong vài năm qua, các nhà nghiên cứu đã phát triển nhiều loại RNNs ngày càng tinh vi để giải quyết các mặt hạn chế của RNN. Dưới đây, ta sẽ điểm qua một số phiên bản mở rộng của RNNs.

Bidirectional RNNs (RNNs hai chiều): dựa trên ý tưởng output tại thời điểm t không chỉ phụ thuộc vào các thành phần trước đó mà còn phụ thuộc vào các thành phần trong tương lai. Ví dụ, để dự đoán một từ bị thiếu (missing word) trong chuỗi, ta cần quan sát các từ bên trái và bên phải xung quanh từ đó. Mô hình này chỉ gồm hai RNNs nạp chồng lên nhau. Trong đó, các hidden state được tính toán dựa trên cả hai thành phần bên trái và bên phải của mạng.

Deep (Bidirectional) RNNs
Deep (Bidirectional) RNNs

Deep (Bidirectional) RNNs: tương tự như Bidirectional RNNs, điểm khác biệt đó là mô hình này gồm nhiều tầng Bidirectional RNNs tại mỗi thời điểm. Mô hình này sẽ cho ta khả năng thực hiện các tính toán nâng cao nhưng đòi hỏi tập huấn luyện của chúng ta phải đủ lớn.

Deep (Bidirectional) RNNs
Deep (Bidirectional) RNNs

Long short-term memory networks (LSTM): mô hình này có cấu trúc tương tự như RNNs nhưng có cách tính toán khác đối với các hidden state. Memory trong LSTMs được gọi là cells (hạt nhân). Ta có thể xem đây là một hộp đen nhận thông tin đầu vào gồm hidden state s_{t - 1} và giá trị x_t. Bên trong các hạt nhân này, chúng sẽ quyết định thông tin nào cần lưu lại và thông tin nào cần xóa đi, nhờ vậy mà mô hình này có thể lưu trữ được thông tin dài hạn.

Xem thêm về cách cài đặt

Tham khảo

14 thoughts on “Recurrent Neural Networks là gì

  1. Bạn có nền tảng tốt quá! Hiện nay các bài viết về Deep learning mà thuần Tiếng Việt như thế này hiếm quá! Bạn giải thích rất hay! Là nguồn tài liệu tốt cho các bạn cùng đam mê muốn nắm bắt tốt hơn. Cảm ơn!

    Like

  2. Cám ơn anh rất nhiều ạ. Mà anh ơi, em đang làm đề tài “Cài đặt thuật toán học dựa trên mạng RNN và áp dụng vào bài toán language modeling để dự đoán từ tiếp theo xuất hiện trong một câu”, em tìm tài liệu cả tuần rồi mà không thấy ạ. Chỉ thấy phần nhận diện giọng nói và dự đoán câu trong văn bản. Nếu anh tìm thấy tài liệu đó có thể share cho em không ạ 😦

    Like

Gửi phản hồi

Mời bạn điền thông tin vào ô dưới đây hoặc kích vào một biểu tượng để đăng nhập:

WordPress.com Logo

Bạn đang bình luận bằng tài khoản WordPress.com Log Out / Thay đổi )

Twitter picture

Bạn đang bình luận bằng tài khoản Twitter Log Out / Thay đổi )

Facebook photo

Bạn đang bình luận bằng tài khoản Facebook Log Out / Thay đổi )

Google+ photo

Bạn đang bình luận bằng tài khoản Google+ Log Out / Thay đổi )

Connecting to %s