Chương 1: Tổng quan về nội dung, mục tiêu và bố cục của luận văn. Chương 2: Cơ sở lý thuyết có liên quan đến đề tài như RNN, LSTM, Word Embedding, CBOW, các công trình nghiên cứu liên quan đến đề tài. Chương 3: Trình bày các phương pháp khi sử dụng thực hiện luận văn. Chương 4: Mô tả thực tế và đánh giá kết quả.
Chương 5: Kết luận và hướng phát triển của đề tài. CƠ SỞ LÝ THUYẾT VÀ CÁC NGHIÊN CỨU LIÊN QUAN 2. Mạng nơ-ron hồi quy - Recurrent Neural Network (RNN) 2. Tổng quan mạng RNN Mạng nơ-ron hồi quy (RNN - Recurrent Neural Network) là một thuật toán được chú ý rất nhiều trong thời gian gần đây bởi các kết quả tốt thu được trong lĩnh vực xử lý ngôn ngữ tự nhiên.
RNN ra đời với ý tưởng chính là sử dụng một bộ nhớ để lưu lại thông tin từ từ những bước tính toán xử lý trước để dựa vào nó có thể đưa ra dự đoán chính xác nhất cho bước dự đoán hiện tại. Trong các mạng nơ-ron truyền thống tất cả các đầu vào và cả đầu ra là độc lập với nhau. Tức là chúng không liên kết thành chuỗi với nhau. Nhưng các mô hình này không phù hợp trong rất nhiều bài toán.
Ví dụ, nếu muốn đoán từ tiếp theo có thể xuất hiện trong một câu thì ta cũng cần biết các từ trước đó xuất hiện lần lượt thế nào? RNN được gọi là hồi quy (Recurrent) bởi lẽ chúng 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 đó. Trên lý thuyết, RNN có thể sử dụng được thông tin của một văn bản rất dài, tuy nhiên thực tế thì nó chỉ có thể nhớ được một vài bước trước đó (ta cùng bàn cụ thể vấn đề này ở phía sau) mà thôi. Về cơ bản một mạng RNN có dạng như sau: Kiến trúc cơ bản của RNN: Hình 2.
Mô hình RNN dàn trải ra Nguồn: https://noron.vn/post/gioi-thieu-ve-mang-neural-hoiquy-recurrent- neur-40wwa1jsk2si 3 Trong hình trên, A là mạng neural hồi quy. Nó nhận đầu vào xt, tiến hành xử lý và cho ra đầu ra là ht. Điểm đặc biệt của A là nó sẽ lưu lại giá trị của ht để sử dụng cho đầu tiếp theo. Có thể thấy rằng mạng neural hồi quy này là một chuỗi mạng giống hệt nhau lặp đi lặp lại và mỗi mạng con sẽ truyền đi thông tin mà nó vừa xử lý cho mạng phía sau nó.
Ta có thể tách vòng lặp ở A ra và vẽ lại để dễ hiểu kiến trúc của RNN như sau: Hình 2. Mô hình RNN dàn trải ra Nguồn: https://noron.vn/post/gioi-thieu-ve-mang-neural-hoiquy-recurrent- neur-40wwa1jsk2si Ta thấy rằng, chuỗi các ngõ vào x0, x1 , …, xt là những sự kiện, dữ liệu có dạng chuỗi thời gian (time series). Các sự kiện này có mối liên hệ với nhau về thông tin liên tiếp như tiếng nói hay văn bản, các thông tin của các sự kiện phía trước sẽ được giữ lại để làm cơ sở một phần hoặc toàn bộ tính toán cho dữ liệu phía sau trong mạng neural hồi quy. Vì vậy, mô hình RNNs có ứng dụng quan trọng trong các bài toán xử lý ngôn ngữ tự nhiên như: Dịch máy, phân loại ngữ nghĩa, Nhận diện giọng nói.
Một trong các điểm mạnh của mạng neural hồi quy so với mạng ANN thông thường đó là khả năng tính toán trên một chuỗi vector. Dưới đây là các kiểu hoạt động của mạng RNN: 4 Hình 2. Đầu vào được tô màu đỏ, mạng RNN màu xanh, đầu ra màu xanh dương Nguồn: Andrej Karpathy Theo hình vẽ trên, từ trái sang phải ta có các mô hình ứng dụng RNN: Mạng neural kiểu Vanilla: Đầu vào và đầu ra có kích thước cố định (Bài toán nhận diện ảnh - Image Classification) Đầu ra có dạng chuỗi: Đầu vào cố định và đầu ra là một chuỗi các vector (Bài toán tạo tiêu đề cho ảnh - Image Captioning) Đầu vào có dạng chuỗi: Đầu vào là một chuỗi vector và đầu ra cố định (Bài toán phân loại ngữ nghĩa - Sentiment Classification) Đầu vào và đầu ra có dạng chuỗi: Bài toán Dịch máy - Neural Machine Translation Đầu vào và đầu ra có dạng chuỗi đồng bộ: Đầu vào và đầu ra là một chuỗi vector có độ dài bằng nhau (Bài toán phân loại video và gắn nhãn từng frame - Video Classification) Có thể nhận thấy rằng độ dài các chuỗi đầu vào hay đầu ra tại mỗi trường hợp không bắt buộc phải cố định vì kích thước vector trạng thái thông tin trao đổi trong mạng neural hồi quy là cố định. Giờ chúng ta sẽ đi sâu hơn vào phương thức hoạt động của mạng neural hồi quy.
Phương thức hoạt động Mạng neural hồi quy nhận một vector đầu vào x và đưa ra vector đầu ra y. Để có thể lưu trữ được thông tin của các sự kiện trong quá khứ, mạng neural hồi quy lưu trữ trong chính nó một vector trạng thái ẩn h. Vector trạng thái này sẽ lưu trữ những thông tin của những sự kiện đã được xử lý bằng cách cập nhật lại giá trị mỗi khi một sự kiện mới được xử lý. Ta có: W_hh: Ma trận weights cho vector trạng thái ẩn.
W_xh: Ma trận weights cho vector đầu vào x. W_hy: Ma trận weights dùng để tính vector đầu ra y Với ht ta tính toán dựa vào ht-1, như vậy ta cần khởi tạo vector đầu vào (thông thường là một vector 0). Các mô hình RNN sử dụng các hàm phi tuyến như hàm kích hoạt. Ví dụ công thức với hàm kích hoạt tanh: ht = tanh(Whhht-1 + Wxhxt) [7] Các ma trận trọng số được cập nhật trong quá trình huấn luyện và cập nhật ngược trở lại theo thuật toán back propagation để điều chỉnh hành vi của mạng neural hồi quy.
5 Khả năng của RNN Ở các bài toán máy dịch hiện đại áp dụng RNN vào cho thấy kết quả chính xác cao và chất lượng cải thiện đáng kể. Trong lĩnh vực xử lý ngôn ngữ tự nhiên (NLP - Natural Language Processing), đã ghi nhận được nhiều thành công của RNN cho nhiều vấn đề khác nhau. Tại thời điểm này, tôi muốn đề cập tới một mô hình phổ biến nhất được sử dụng của RNN là LSTM. LSTM (Long Short-Term Memory) thể hiện được sự ưu việt ở điểm có thể nhớ được nhiều bước hơn mô hình RNN truyền thống.
Nhưng vì LSTM về cơ bản giống với cấu trúc của RNN truyền thống, chúng chỉ khác nhau ở cách tính toán của các nút ẩn. Chúng ta sẽ cùng xem chi tiết hơn về LSTM trong phần sau. Chúng ta cùng nhau xem một vài ứng dụng của RNN trong xử lý ngôn ngữ tự nhiên dưới đây: a. Mô hình hóa ngôn ngữ Mô hình ngôn ngữ cho phép ta dự đoán được xác xuất của một từ nào đó xuất hiện sau một chuỗi các từ đi liền trước nó.
Do có khả năng ước lượng được độ tương tự của các câu nên nó còn được ứng dụng cho việc dịch máy. Một điểm lý thú của việc có thể dự đoán được từ tiếp theo là ta có thể xây dựng được một mô hình tự sinh từ cho phép máy tính có thể tự tạo ra các văn bản mới từ tập mẫu và xác xuất đầu ra của mỗi từ. Vậy nên, tùy thuộc vào mô hình ngôn ngữ mà ta có thể tạo ra được nhiều văn bản khác nhau. Trong mô hình ngôn ngữ, đầu vào thường là một chuỗi các từ (được mô tả bằng vec-tơ one-hot) và đầu ra là một chuỗi các từ dự đoán được.
Khi huấn luyện mạng, ta sẽ gán ot = xt+1 vì ta muốn đầu ra tại bước t chính là từ tiếp theo của câu. Một số bài báo về mô hình hóa ngôn ngữ và sinh văn bản. Còn đầu ra sẽ là một chuỗi các từ trong ngôn ngữ đích (ngôn ngữ dịch - ví dụ là tiếng Anh). Điểm khác nhau ở đây là đầu ra của ta chỉ xử lý sau khi đã xem xét toàn bộ chuỗi đầu vào.
Vì từ dịch đầu tiên của câu dịch cần phải có đầy đủ thông tin từ đầu vào cần dịch mới có thể suy luận được. Ứng dụng RNN cho bài toán dịch máy Nguồn: http://cs224d.edu/lectures/CS224dLecture8. Nhận diện giọng nói Đưa vào một chuỗi các tín hiệu âm thanh, ta có thể dự đoán được chuỗi các đoạn ngữ âm đi kèm với xác xuất của chúng. Mô tả hình ảnh Cùng với ConvNet, RNN được sử dụng để tự động tạo mô tả cho các ảnh chưa được gán nhãn.
Sự kết hợp này đã đưa ra được các kết quả khá kinh ngạc. Ví dụ như các ảnh dưới đây, các mô tả sinh ra có mức độ chính xác và độ tường tận khá cao. Ứng dụng RNN tạo tiêu đề cho ảnh. Nguồn: http://cs.edu/people/karpathy/deepimagesent/ Huấn luyện RNN Huấn luyện mạng RNN cũng tương tự như các mạng nơ-ron truyền thống, tuy nhiên giải thuật lan truyền ngược (backpropagation) phải thay đổi một chút.
Đạo hàm tại mỗi đầu ra phụ thuộc không chỉ vào các tính toán tại bước đó, mà còn phụ thuộc vào các bước trước đó nữa, vì các tham số trong mạng RNN được sử dụng chung cho tất cả 7 các bước trong mạng. Ví dụ, để tính đạo hàm tại t=4 ta phải lan truyền ngược cả 3 bước phía trước rồi cộng tổng đạo hàm của chúng lại với nhau. Việc tính đạo hàm kiểu này được gọi là lan truyền ngược liên hồi (BPTT - Backpropagation Through Time). Tuy nhiên, với các bước phụ thuộc càng xa thì việc học sẽ càng khó khăn hơn vì sẽ xuất hiện vấn đề hao hụt/bùng nổ (vanishing/exploding) của đạo hàm.
Có một vài phương pháp được đề xuất để giải quyết vấn đề này và các kiểu mạng RNN hiện nay đã được thiết kế để triệt tiêu bớt chúng như LSTM chẳng hạn. Long Short Term Memory (LSTM) Một vấn đề khi sử dụng RNN đó là vấn đề phụ thuộc gần xa, tức là RNN không thể nhớ được các thông tin quá dài. Đối với những chuỗi quá dài, những thông tin ban đầu sẽ bị “lãng quên” dần, bộ nhớ chỉ ghi nhớ những thông tin gần hơn. Nguyên nhân là do khi huấn luyện mạng RNN, việc tính đạo hàm qua quá nhiều bước sẽ dẫn đến việc tiêu biến đạo hàm (gradient vanishing).
Vì vậy, Long Short Term Memory (LSTM) ra đời để giải quyết vấn đề này. LSTM là một dạng đặc biệt của mạng nơ-ron hồi quy, với nhiều bài toán thì nó tốt hơn mạng hồi quy thuần. Hầu hết các kết quả thú vị thu được từ mạng RNN là được sử dụng với LSTM. Về mặt lý thuyết, rõ ràng là RNN có khả năng xử lý các phụ thuộc xa (long-term dependencies).