2.4.1 Giới thiệu
Mạng nơ-ron hồi quy (Recurrent Neural Network)[10] được phát triển từ những năm 1980. Kiến trúc của mạng này gồm một đầu vào, một hoặc nhiều tầng ẩn và một tầng đầu ra. Điểm khác biệt là cấu trúc RNN là một chuỗi lặp các mô-đun giống nhau, với ý tưởng lưu trữ thơng tin đã xử lý phía trước đó. RNN khác mạng Multilayer Perceptron ở việc các kết quả ở bước xử lý trước đó có ảnh hưởng đến kết quả của bước xử lý hiện tại và các bước tiếp theo. Điều này tạo nên khá năng ghi nhớ của mạng RNN.
Hình 2.9 mơ tả kiến trúc tổng qt của mạng RNN [11]:
Hình 2.9:Kiến trúc cơ bản của mạng RNN (Nguồn: [11]).
CHƯƠNG 2 KIẾN THỨC NỀN TẢNG 15 • xt là đầu vào tại bướct.
• U,V,W là các ma trận trọng số.
• st là trạng thái ẩn tại bướct. Đây được xem như bộ nhớ của mạng RNN và được tính bằng công thức:
st= f(U xt+W st−1)
Hàm f là một hàm activation như được giới thiệu ở trên, thông thường là hàmTanhhoặc Relu. Ở bước tính tốn đầu tiên, st−1 chưa có giá trị nên có thể khởi tạo một cách ngẫu nhiên hoặc được gán bằng 0.
• ot là đầu ra tại bướct, được tính bằng:
ot=g(V st)
Hàmgcũng là một hàm activation như f và thường là hàmTanhhoặcRelu.
Trong quá trình huấn luyện cho mạng RNN, thuật toán lan truyền ngược được sử dụng phổ biến và được gọi là lan truyền ngược theo thời gian (backpropagation through time). Quá trình cập nhật trọng số cho mạng được bắt đầu từ đầu ra cuối cùng của mạng, cập nhật trọng số cho từng đơn vị theo tổng lỗi của đầu ra. Với một chuỗi thơng tin dài, việc tích luỹ độ lỗi các đạo hàm dẫn tới tiêu biến đạo hàm hoặc bùng nổ đạo hàm. Do đó, việc huấn luyện mạng RNN gặp nhiều vấn đề khó khăn và khơng ổn định.
2.4.2 Một số ứng dụng của RNN
RNN thường được sử dụng các bài toán NLP và các bài tốn xử lí giọng nói. Dưới đây là một số ứng dụng của RNN.
2.4.2.1 One-to-one
Hình 2.10:One-to-one RNN (Nguồn: [12]).
Với một dữ liệu đầu vào, mơ hình này sinh ra nhiều dữ liệu đầu ra, phù hợp với các bài toán như tạo bình luận cho ảnh (Image Captioning), sinh văn bản (Text Generation), sinh âm nhạc (Music Generation).
CHƯƠNG 2 KIẾN THỨC NỀN TẢNG 16
2.4.2.2 Many-to-one
Hình 2.11:Many-to-one RNN (Nguồn: [12]).
Mơ hình này tính tốn trên tồn bộ dữ liệu đầu vào và cho ra duy nhất một đầu ra, do đó phù hợp với các bài toán phân loại văn bản (Text Classification), phân loại sắc thái văn bản (Sentiment Classification).
2.4.2.3 Many-to-many loại 1
Hình 2.12:Many-to-many RNN loại 1(Nguồn: [12]).
Mơ hình này tính tốn từng giá trị đầu ra cho mỗi giá trị đầu vào, do đó được sử dụng trong bài tốn nhận biết thực thể có tên (Name Entity Recognition) hoặc gán nhãn từ loại (Part of Speech Tagging).
2.4.2.4 Many-to-many loại 2
Mơ hình này tổng hợp các giá trị đầu vào sau đó sinh ra các giá trị đầu ra và thường được sử dụng trong bài toán dịch máy (Machine Translation).
CHƯƠNG 2 KIẾN THỨC NỀN TẢNG 17
Hình 2.13:Many-to-many RNN loại 2 (Nguồn: [12]).
2.4.3 Long Short-Term Memory networks
Như đã đề cập trước đó, khi chuỗi thơng tin q dài sẽ dẫn đến trường hợp RNN sẽ đánh mất các thơng tin quan trọng ở phía trước q xa. Về mặt lý thuyết, RNN có thể lưu trữ được thơng tin từ bước đầu tiên đến bước hiện tại, nhưng qua nhiều bước tính tốn, đạo hàm càng tiêu biến dẫn đến RNN đánh mất lượng thơng tin trước đó nếu q xa. Để khắc phục nhược điểm trên, nhiều biến thể của RNN được đề xuất, trong số đó phổ biến nhất là Gated Recurrent Unit (GRU) và Long Short-Term Memory (LSTM). Trong nội dung luận văn này, tơi chỉ trình bày LSTM vì tính phổ biến của nó.
Hình 2.14:Kiến trúc của LSTM (Nguồn: [13]).
Kiến trúc của LSTM (Hình 2.14) [13] phức tạp hơn RNN rất nhiều. Để nhớ được nhiều thông tin, LSTM sử dụng các cổng để giữ lại các thông tin quan trọng và bỏ đi những thông tin dư thừa. Thành phần quan trọng nhất của LSTM làcell state, đây chính là bộ nhớ của LSTM, ngồi
ra cịn một thành phần khác làhidden state. Cell state và hidden state ở thời điểmt được kí hiệu làCt vàht. Cell state và hidden state sẽ lần lượt được cập nhật ở mỗi thời điểm thông qua các cổng, chi tiết như sau:
• Cổng forget giúp tính tốn các thơng tin cần loại bỏ: ft=σ Wf[ht−1,xt] +bf • Cổng input giúp tính tốn các thơng tin cần giữ lại:
CHƯƠNG 2 KIẾN THỨC NỀN TẢNG 18 • Cổng output giúp tính tốn các thơng tin cần xuất ra ở bước hiện tại:
ot =σ(Wo[ht−1,xt] +bo)
• Cập nhật cell state bằng cách sử dụng cổng input và cổng forget: Ct= ft∗Ct−1+it∗C˜t
vớiC˜t được tính bằng:
˜
Ct =tanh(WC[ht−1,xt] +bC)
• Cập nhật hidden state bằng cách sử dụng cổng output: ht =ot∗tanh(Ct)
2.4.4 Sequence to sequence model
Mơ hình Sequence to Sequence (hay cịn được gọi là mơ hình Encoder-Decoder) [14] là ứng dụng của RNN được trình bày ở trên. Trong mơ hình này, cả input và output đều là những se- quences (dữ liệu dạng chuỗi, ví dụ như đoạn văn bản, đoạn âm thanh), do đó rất phù hợp với các bài toán như Machine Translation, Auto Speech Recognition, Optical Character Recognition, ... Các bài tốn này đều xử lí trên dữ liệu dạng chuỗi, do đó khơng thể dùng các kiến trúc Deep Neural Networks (DNN) thơng thường như MLP.
Mơ hình Sequence to Sequece (được viết gọn thành seq-to-seq hoặc seq2seq), bao gồm 2 thành phần chính là Encoder và Decoder. Encoder có nhiệm vụ biến đổi input thành các biểu diễn trung gian (thường gọi là các context vector). Decoder có nhiệm vụ biến đổi các context vector thành các ouput của bài tốn. Thơng thường cả Encoder và Decoder đều là các lớp RNN (hoặc LSTM) chồng lên nhau.
Mục đích của mơ hình này là tính xấp xỉ xác suất:
p(y1, ...,ym|x1, ...,xn)
với(x1, ...,xn)là chuỗi input và(y1, ...,ym)là chuỗi output của bài tốn. Có thể thấy độ dài của input và output có thể khác nhau, tức làm6=n. Để tính được xác suất này, đầu tiên, mơ hình sẽ dùng Encoder để tính ra vectorvcủa chuỗi input, vcó số chiều cố định và có thể xem như là vector biểu diễn của toàn bộ chuỗi input và cũng chính là hidden state cuối cùng của Encoder. Sau đó mơ hình sẽ dùngvđể khởi tạo giá trị hidden state ở Decoder và lần lượt tính xác suất củay1, ...,ym: p(y1, ...,ym|x1, ...,xn) = m ∏ t=1 p(yt|v,y1, ...,yy−1)
CHƯƠNG 2 KIẾN THỨC NỀN TẢNG 19
Hình 2.15:Kiến trúc mơ hình Sequence-to-sequence (Nguồn: [15]).