1.3.1 Khái niệm về mạng RNN
Mạng thần kinh nhân tạo (Artificial Neural Network - ANN) là một trong các phương pháp phổ biến trong học máy (Machine Learning - ML), được xây dựng dựa trên ý tưởng mô phỏng chức năng của não bộ con người trong việc “học” để thực hiện các nhiệm vụ mà không cần phải lập trình theo các quy tắc cụ thể. Do vậy, ANN là một phương pháp hiệu quả để xử lý mối quan hệ phi tuyến phức tạp giữa dữ liệu đầu vào và đầu ra của một hệ thống với hiệu quả khá cao (Aydın et al., 2014). ANN có thể được áp dụng hiệu quả trong các vấn đề liên quan đến nhận dạng, phân loại, ước tính và tối ưu hóa.
Cấu trúc cơ bản của một ANN thường bao gồm các node gọi là neuron. Các neuron này được nhóm vào trong các lớp dữ liệu đầu vào (input), dữ liệu đầu ra
(output) và một hoặc nhiều các lớp ẩn (hidden layer). Cấu trúc của một ANN 3 lớp được trình bày ở Hình 1.22.
Hình 1.13 Sơ đồ mô hình mạng thần kinh nhân tạo 3 lớp [Nguồn internet]
Có sáu loại hình mạng thần kinh nhân tạo, tuy nhiên hai loại phổ biến nhất là Mạng Neuron Hồi Quy (Recurrent Neural Network - RNN ) và Mạng Neuron Nhân Tạo Truyền Thẳng (Feedforward Neural Network - sau đây gọi là FNN).
Mạng nơ-ron hồi quy (RNN - Recurrent Neural Network) 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). Ý tưởng của RNN đó là thiết kế một mạng nơ-ron sao cho có khả năng xử lý được thông tin dạng chuỗi như câu hỏi. 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ớ, có khả năng nhớ được thông tin đã tính toán trước đó, không như các mạng nơ-ron 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 đó.
Ý tưởng của RNN đó 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, RNN 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, RNN 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 đó.
RNN sử dụng các liên kết giữa các node để tạo ra một sơ đồ được định hướng như là một chuỗi, qua đó cho phép dữ liệu chuyển tới và lui. Mạng này thực hiện cùng một tác vụ cho tất cả các phần tử của một chuỗi với đầu ra phụ thuộc vào cả các phép tính trước đó. Nói cách khác, RNN có khả năng nhớ các thông tin được tính toán trước đó. Do đó, loại mạng này được áp dụng khá phổ biến trong các ứng dụng liên quan đến nhận dạng giọng nói và chữ viết.
Về lý thuyết, RNN có thể sử dụng thông tin theo trình tự dài tùy ý, nhưng trong thực tế, chúng bị giới hạn chỉ nhìn lại một vài bước. Về cơ bản, một mạng RNN có dạng như sau:
Hình 1.14 Quá trình xử lý thông tin trong mạng RNN [Nguồn internet]
Mô hình trên mô tả phép triển khai nội dung của một RNN. Triển khai ở đây có thể hiểu là ta vẽ ra một mạng nơ-ron chuỗi tuần tự. Ví dụ ta có một câu gồm 5 chữ “Mạng nơ-ron hồi quy RNN”, thì mạng nơ-ron được triển khai sẽ gồm 5 tầng nơ-ron tương ứng với mỗi chữ một tầng. Lúc đó việc tính toán bên trong RNN được thực hiện như sau:
xt là đầu vào tại bước t.
St là trạng thái ẩn tại bước t. Nó chính là bộ nhớ của mạng. St được tính toán dựa trên tất cả các trạng thái ẩn phía trước và đầu vào tại bước đó:
Hàm f (tanh) thường là một hàm phi tuyến tính như tang hyperbolic (tanh) hay
ReLu.
21
Ot là đầu ra tại bước t. Ví dụ, ta muốn dự đoán từ tiếp theo có thể xuất hiện trong câu thì Ot chính là một vec-tơ xác xuất các từ trong danh sách từ vựng của ta:
Ot = softmax(Vst)
1.3.2 Huấn luyện mạng RNN
Huấn luyện RNN tương tự như huấn luyện Neural Network truyền thống. Chú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 đó.
1.3.3 Các phiên bản mở rộng của RNN
Trong vài năm qua, các nhà nghiên cứu đã phát triển nhiều loại mạng RNNs ngày càng tinh vi để giải quyết các mặt hạn chế của RNN. Dưới đây, là một số phiên bản mở rộng của RNN.
Bidirectional RNN (RNN 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) RNN: Tương tự như Bidirectional RNN, điểm khác biệt đó là mô hình này gồm nhiều tầng Bidirectional RNN 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.
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 trạng thái ẩn. 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 và giá trị . 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.
1.4 MẠNG LSTM (Mạng Long Short Term Memory)1.4.1 Giới thiệu về LSTM 1.4.1 Giới thiệu về LSTM
Điểm thuận lợi của mạng nơ-ron hồi quy (RNN) là khả năng sử dụng thông tin ngữ cảnh khi ánh xạ giữa chuỗi đầu vào và chuỗi đầu ra. Tuy nhiên, với kiến trúc RNN tiêu chuẩn phạm vi của ngữ cảnh có thể được truy cập khá hạn chế. Vấn đề là do ảnh hưởng của đầu vào trên tầng ẩn, và vì thế trên đầu ra của mạng hoặc là suy giảm hoặc là tăng lên cấp số nhân theo chu kỳ xung quanh các kết nối hồi quy của mạng. Hiệu ứng này còn gọi là vấn đề biến mất đạo hàm (vanishing gradient problem). Một lượng lớn các nghiên cứu được đưa ra vào những năm 1990 để giải quyết vấn đề giảm đạo hàm cho mạng RNN. Các nghiên cứu bao gồm quá trình huấn luyện không cần tính đạo hàm, như thuật toán giả mô phỏng và rời rạc lỗi truyền, hoặc dùng thời gian trễ, thời gian ràng buộc. Mạng LSTM (Long Short Term Memory) được đưa ra cũng là cách tiếp cận giải quyết vấn đề này. Kiến trúc mạng LSTM bao gồm một tập các mạng con được kết nối hồi quy, còn gọi là các khối nhớ. Các khối có thể được liên tưởng như là phiên bản khác của các chip nhớ trong máy tính số. Mỗi khối nhớ chứa một hoặc nhiều ô nhớ tự liên kết và ba đơn vị: đầu vào, đầu ra và cổng quên cung cấp khả năng liên tục viết, đọc và hoạt động khởi động cho các ô nhớ.
Một mạng LSTM tương đương với mạng RNN trừ việc các đơn vị tổng hợp trong tầng ẩn được thay thế bằng các khối nhớ. Các khối LSTM cũng có thể được hòa trộn với các đơn vị tổng hợp mặc dù về cơ bản là không cần thiết. Tầng đầu ra có thể được sử dụng cho các mạng LSTM như cho mạng RNN chuẩn. Các cổng nhân lên cho phép các ô nhớ LSTM được lưu trữ và truy cập thông tin trên một thời gian dài, vì thế giảm nhẹ vấn đề biến mất đạo hàm. Ví dụ ngay khi cổng đầu vào được đóng lại (có hàm kích hoạt gần 0), sự kích hoạt của ô sẽ không bị ghi đè bởi đầu vào đang đến trong mạng, do đó có thể cung cấp cho mạng sau này bằng cách mở cổng đầu ra. LSTM khá thành công trong một loạt các nhiệm vụ yêu cầu bộ nhớ phạm vi dài, và nó còn được áp dụng trong các vấn đề trong thế giới thực như là cấu trúc thứ cấp proteion, sinh âm nhạc, nhận dạng âm thanh, nhận dạng chữ viết, …
23
Ý tưởng ban đầu của RNN là kết nối những thông tin trước đó nhằm hỗ trợ cho các xử lý hiện tại. Nhưng đôi khi, chỉ cần dựa vào một số thông tin gần nhất để thực hiện tác vụ hiện tại. Ví dụ, trong mô hình hóa ngôn ngữ, chúng ta cố gắng dự đoán từ tiếp theo dựa vào các từ trước đó. Nếu chúng ta dự đoán từ cuối cùng trong câu “Mặt trời lặn ở phía …”, thì chúng ta không cần truy tìm quá nhiều từ trước đó, ta có thể đoán ngay từ tiếp theo sẽ là “Tây”. Trong trường hợp này, khoảng cách tới thông tin liên quan được rút ngắn lại, mạng RNN có thể học và sử dụng các thông tin quá khứ.
Nhưng cũng có trường hợp chúng ta cần nhiều thông tin hơn, nghĩa là phụ thuộc vào ngữ cảnh. Ví dụ nhưng khi dự đoán từ cuối cùng trong đoạn văn bản “Tôi là người Việt Nam. Tôi đang sống ở nước ngoài. Tôi có thể nói thuần thục tiếng … .” Từ thông tin gần nhất cho thấy rằng từ tiếp theo là tên một ngôn ngữ, nhưng khi chúng ta muốn biết cụ thể ngôn ngữ nào, thì cần quay về quá khứ xa hơn, để tìm được ngữ cảnh Việt Nam. Và như vậy, RRN có thể phải tìm những thông tin có liên quan và số lượng các điểm đó trở nên rất lớn. Không được như mong đợi, RNN không thể học để kết nối các thông tin lại với nhau.
Hình 1.15 RNN phụ thuộc long-term [13] .
Hạn chế ở mạng RNN là hidden layer không có trí nhớ dài hạn, hay còn được nhắc tới với tên vanishing/exploding gradient problem [3]. Nếu chỉ dừng lại ở việc áp dụng phương án học chuỗi với RNN thì vấn đề độ dài câu đối thoại sẽ là một bài toán khó. Bằng việc cải tiến, bổ sung các module nhớ cho RNN, LSTM (Long Short Term Memory network) một là trường hợp đặc biệt của RNN được tích hợp sẵn trong phương pháp học chuỗi seq2seq đã giải quyết được vấn đề này.
Long Short Term Memory có khả năng học long-term dependencies. Mô hình này được giới thiệu bởi Hochreiter & Schmidhuber (1997) và được cải tiến lại. Mô hình này có khả năng tương thích với nhiều bài toán nên được sử dụng rộng rãi ở các
ngành liên quan. LSTM được thiết kế nhằm loại bỏ vấn đề phụ thuộc quá dài. Ta quan sát lại mô hình RNN bên dưới, các layer đều mắc nối với nhau. Trong RNN chuẩn, module repeating này có cấu trúc rất đơn giản chỉ gồm một lớp đơn giản tanh layer.
Hình 1.16 Các module lặp của mạng RNN chứa một layer [13] .
LSTM cũng có cấu trúc mắt xích tương tự, nhưng các module lặp có cấu trúc khác hẳn. Thay vì chỉ có một layer neural network, thì LSTM có tới bốn layer, tương tác với nhau theo một cấu trúc cụ thể.
Hình 1.17 Các mô-đun lặp của mạng LSTM chứa bốn layer [13] .
Trong đó, các ký hiệu sử dụng trong mạng LSTM gồm có: hình chữ nhật là các lớp ẩn của mạng nơ-ron, hình tròn biểu diễn toán tử Pointwise, đường kẻ gộp lại với nhau biểu thị phép nối các toán hạng, và đường rẽ nhánh biểu thị cho sự sao chép từ vị trí này sang vị trí khác. Mô hình thiết kế của LSTM là một bảng mạch số, gồm các mạch logic và các phép toán logic trên đó. Thông tin, hay nói khác hơn là tần số của dòng điện di chuyển trong mạch sẽ được lưu trữ, lan truyền theo cách thiết kế bảng mạch. Mấu chốt của LSTM là cell state (trạng thái nhớ), đường kẻ ngang chạy dọc ở trên top diagram. Cell state giống như băng chuyền, chạy xuyên thẳng toàn bộ mắc
25
xích, chỉ một vài tương tác nhỏ tuyến tính (minor linear interaction) được thực hiện. Điều này giúp cho thông tin ít bị thay đổi xuyên suốt quá trình lan truyền.
Hình 1.18 Cell state của LSTM giống như một băng truyền [13] .
LSTM có khả năng thêm hoặc bớt thông tin vào cell state, được quy định một cách cẩn thận bởi các cấu trúc gọi là cổng (gate). Các cổng này là một cách (tuỳ chọn) để định nghĩa thông tin băng qua. Chúng được tạo bởi hàm sigmoid và một toán tử nhân pointwise.
Hình 1.19 Cổng trạng thái LSTM được tạo bởi hàm sigmoid và toán tử nhân. [13]
Hàm kích hoạt Sigmoid có giá trị từ 0 - 1, mô tả độ lớn thông tin được phép truyền qua tại mỗi lớp mạng. Nếu ta thu được zero điều này có nghĩa là “không cho bất kỳ cái gì đi qua”, ngược lại nếu thu được giá trị là một thì có nghĩa là “cho phép mọi thứ đi qua”. Một LSTM có ba cổng như vậy để bảo vệ và điều khiển cell state. Quá trình hoạt động của LSTM được thông qua các bước cơ bản sau.
Bước đầu tiên của mô hình LSTM là quyết định xem thông tin nào chúng ta cần loại bỏ khỏi cell state. Tiến trình này được thực hiện thông qua một sigmoid layer gọi là “forget gate layer” – cổng chặn.
Đầu vào là ℎt-1 và xt, đầu ra là một giá trị nằm trong khoảng [0, 1] cho cell state Ct-1. Số 1 tương đương với “giữ lại thông tin”, số 0 tương đương với “loại bỏ thông tin”.
Bước tiếp theo, cần quyết định thông tin nào cần được lưu lại tại cell state. Ta có hai phần là single sigmoid layer được gọi là “input gate layer” quyết định các giá trị chúng ta sẽ cập nhật. Tiếp theo, một tanh layer tạo ra một vector ứng viên mới Ct được thêm vào trong cell state.
Hình 1.20 LSTM focus I [13]
Công thức tính:
Ở bước tiếp theo, sẽ kết hợp hai thành phần này lại để cập nhật vào cell state. Lúc cập
nhật vào cell state cũ, Ct-1, vào cell state mới Ct. Ta sẽ đưa state cũ hàm ft,để quên
đi những gì trước đó. Sau đó, ta sẽ thêm it ∗ Ct. Đây là giá trị ứng viên mới, co giãn
(scale) số lượng giá trị mà ta muốn cập nhật cho mỗi state.
Hình 1.21 LSTM focus c. [13]
27
Công thức tính ft
Cuối cùng, cần quyết định xem thông tin output là gì. Output này cần dựa trên cell state, nhưng sẽ được lọc bớt thông tin. Đầu tiên, áp dụng single sigmoid layer để quyết định xem phần nào của cell state chúng ta dự định sẽ output. Sau đó, ta sẽ đẩy cell state qua tanh (đẩy giá trị vào khoảng -1 và 1) và nhân với một output sigmoid gate, để giữ lại những phần ta muốn output ra ngoài.
Hình 1.22 LSTM focus o. [13]
1.4.2 Mô hình LSTM
Mô hình LSTM là một bước đột phá đạt được từ mô hình RNN. Nó giải quyết triệt để vấn đề không xử lý được câu hỏi dài mà những mô hình khác đang gặp phải.
Hình 1.23 Mô hình LSTM Networks. [13]
Ở hình 1.36, mỗi một đường mang một véc-tơ từ đầu ra của một nút tới đầu vào của một nút khác. Các hình trong màu hồng biểu diễn các phép toán như: phép cộng