Giới thiệu về mạng neural hồi quy - Recurrent Neural Networks
Như các bạn đã biết, mạng neural được xây dựng để mô phỏng lại cách hoạt động của bộ não con người. Đối với mạng neural thông thường, mỗi sự kiện đầu vào x được xử lý một cách độc lập và đưa ra đầu ra y tương ứng mà không có sự trao đổi thông tin thu thập được tại mỗi đầu vào x trong mạng. Tuy nhiên, bộ não con người hoạt động một cách phức tạp hơn thế nhiều với sự kết hợp của nhiều dạng thông tin và sự kiện với nhau để đưa ra kết luận cuối cùng. Ví dụ như khi bạn đang đọc câu này, mỗi từ bạn vừa đọc sẽ đóng góp 1 phần thông tin tạo nên ý nghĩa của cả câu. Bộ não của bạn lưu giữ những thông tin của những từ bạn vừa đọc và sử dụng chúng để xử lý ngữ nghĩa của những từ tiếp theo. Đây là một quá trình phức tạp mà những mạng neural bình thường không thể mô phỏng lại được. Mạng neural hồi quy ra đời để giải quyết vấn đề này.
Mạng neural hồi quy là gì
Mạng neural hồi quy là một mạng neural chứa một vòng lặp bên trong nó.
Trong hình trên, A là mạng neural hồi quy. Nó nhận một đầu vào xt , tiến hành xử lý và đưa ra đầu ra 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 vào tiếp theo. Có thể coi một mạng neural hồi quy là một chuỗi những mạng con giống hệt nhau, mỗi mạng sẽ truyền thông tin nó vừa xử lý cho mạng phía sau nó. Nếu ta tách từng vòng lặp xử lý trong A ra thành từng mạng con theo cách suy nghĩ như trên thì ta sẽ có một mạng có kiến trúc như sau:
Chuỗi các đầu vào x0, x1, ... , xt là những sự kiện xảy ra theo thứ tự thời gian. Những sự kiện này đều có mối liên hệ về thông tin với nhau và thông tin của chúng sẽ được giữ lại để xử lý sự kiện tiếp theo trong mạng neural hồi quy. Vì tính chất này, mạng neural hồi quy phù hợp cho những bài toán với dữ liệu đầu vào dưới dạng chuỗi với các sự kiện trong chuỗi có mối liên hệ với nhau. Vì vậy, mạng neural hồi quy 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 - Neural Machine Translation, Phân loại ngữ nghĩa - Semantic classification, Nhận dạng giọng nói: Speech Recognition.
Một trong những điểm mạng của mạng neural hồi quy là cho phép tính toán trên một chuỗi các vector. Dưới đây là các kiểu hoạt động của mạng neural hồi quy:
Mỗi hình chữ nhật là 1 vector và các mũi tên thể hiện các hàm biến đổi. Vector đầu vào có màu đỏ, vector đầu ra có màu xanh biển và vector trạng thái thông tin trao đổi giữa các mạng con có màu xanh lá. Từ trái sang phải ta có:
- 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 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 giữ 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ý. Dưới đây là đoạn code minh họa quá trình này
class RNN:# ...def step(self, x): # cập nhật vector trạng thái ẩnself.h = np.tanh(np.dot(self.W_hh, self.h) + np.dot(self.W_xh, x)) # tính toán vector đầu ra y y = np.dot(self.W_hy, self.h) return y
Trong đó:
- 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
Vector trạng thái ẩn self.h được khởi tạo là một vector không. Hàm np.tanh là một hàm phi tuyến hyperbolic đưa giá trị của từng phần tử về khoảng [-1, 1]. Công thức toán học dùng để tính vector trạng thái h:
Các ma trận weights này sẽ được cập nhật trong quá trình huấn luyện để điều chỉnh hành vi của mạng neural hồi quy. Với một đầu vào x là một chuỗi các vector có độ dài 10, mạng neural hồi quy hoạt động như sau:
Đó là cách hoạt động của mạng neural hồi quy dạng many-to-one có đầu vào là chuỗi các vector và đầu ra là một vector có kích thước cố định. Tuy nhiên, kiến trúc này có một nhược điểm: Nếu kích thước chuỗi vector đầu vào x là rất lớn thì việc tính toán viector trạng thái ẩn h sẽ phải đi qua nhiều lớp tính toán. Trong quá trình backpropagate để cập nhật các tham số weights, vì việc đạo hàm phải đi qua nhiều lớp tính toán của vector h nên các giá trị cập nhật(gradient) cũng sẽ lớn dần lên, việc cập nhật các weights không theo ý muốn và khiến mạng không ổn định. Vì vậy, các biến thể nâng cấp của mạng neural hồi quy đã ra đời để khắc phục vấn đề này: LSTM - Long Short Term Memory và GRU - Gated Recurrent Unit. Hai mạng này đã bổ sung thêm cơ chế loại bỏ những thông tin không cần thiết ra khỏi vector trạng thái ẩn h, từ đó đã khắc phục được một phần nhược điểm trên.
Hy vọng qua bài viết trên, các bạn đã có một cái nhìn rõ hơn về mạng neural hồi quy. Cảm ơn các bạn đã đọc và hẹn gặp lại :D
Tham khảo: towardsdatascience An Introduction to Recurrent Neural Networks.