Như ta đã đề cập trước đó, trong các ứng dụng, ví dụ Name Entity Recognition, cho một đầu vào x(t) ở thời điểm t, để xác định x(t) có phải là 1 entiry cần tìm hay không, ta cần phải lấy thông tin không chỉ từ các dữ liệu trước thời điểm t mà còn phải sau thời điểm t. Ví dụ trong câu sau:
He said: "Teddy Roosevelt was a great president!"
Giả sử x(3) là Teddy, x(4) là Roosevelt, khi này ta sẽ cần xem xét cả các dữ liệu đằng sau để đưa ra quyết định x(3) và x(4) có phải entity cần tìm hay không.
Mô hình BRNN được cho bởi hình dưới đây:
Lúc này , thay vì chỉ có 1 đường forward, ta sẽ có thêm 1 đường backward, với mỗi giá trị ví dụ để tính toán output y3, tất cả các giá trị input xi đều sẽ tham gia. Các block trong mạng có thể là GRU block hoặc LSTM block.
Tuy nhiên, một nhược điểm của BRNN là ta chỉ có thể áp dụng mô hình này nếu toàn bộ tập dữ liệu đầu vafolaf biết trước, do đó các ứng dụng yêu cầu đáp ứng real-time có thể sẽ bị hạn chế.
Ví dụ như trong ứng dụng Speech Recognition, người dùng phải nói hết câu thì hệ thống mới có thể thực hiện.
Dù vậy, trong các ứng dụng về NLP, hầu hết các input là các corpus nên ta có thể sử dụng BRNN.
Hiển thị các bài đăng có nhãn RNN. Hiển thị tất cả bài đăng
Hiển thị các bài đăng có nhãn RNN. Hiển thị tất cả bài đăng
Thứ Ba, 1 tháng 1, 2019
[Machine Learning][Deep Learning] Kiến trúc Long Short Term Memory (LSTM) trong RNN
Trong kiến trúc LSTM, c<t> và a<t> sẽ không tương đương nữa, lúc này LSTM sẽ gồm 3 gates Γu, Γf và Γo.
Mỗi gate đều được tính toán từ a<t-1> và x<t>, sơ đồ của 1 unit được mô tả như hình dưới đây.
Khi này, dựa vào các giá trị của các gate, ta cũng có thể sử dụng những feature xa trong 1 sequence hoặc giải quyết được vanishing/exploding gradient. LSTM là một mô hình tổng quát hơn và ra đời trước GRU rất lâu. Ta có thể thấy GRU là mô hình đơn giản hơn LSTM nhiều do đó ta có thể xây dựng được các hệ thống lớn hơn, tuy nhiên LSTM lại có performance cao do nó có 3 gates thay vì 2 gates của GRU.
Thứ Hai, 31 tháng 12, 2018
[Machine Learning][Deep Learning] Kiến trúc Gated Recurrent Unit (GRU) trong RNN
Kiến trúc của 1 unit trong 1 RNN như ta đã đề cập trước đó có mô hình như dưới đây:
Lúc này, a<t> sẽ phụ thuộc vào chuỗi dữ liệu trước đó bên cạnh tác động của exploding/vanishing gradient.
Ví dụ trong câu: The cat, which already ate two big fishes and three apples ..., was full.
Lúc này The cat là số ít sẽ đi kèm với động từ tobe was, tuy nhiên ở giữa lại là 1 chuỗi dài, và trong RNN thường, ta không thể sử dụng feature The cat do chủ ngữ The cat và động từ was cách xa nhau trong chuỗi.
Một kiến trúc mới của RNN là GRU sẽ giải quyết vấn đề này.
Trong GRU, ta định nghĩa c là 1 memory cell, và c<t> = a<t> (a<t> trong RNN thường, nhưng trong GRU, ta dùng c<t> thay vì a<t>). Γu là hàm gate được tính bởi sigmoid function sẽ có giá trị xấp xỉ 0 hoặc 1. Với mỗi thời điểm t, Γu sẽ quyết định việc update c<t> = č<t> bằng biểu thức sau đây:
Nghĩa là nếu Γu = 1, ta sẽ update, nếu Γu=0, giá trị c<t> = c<t-1>, không có sự biến đổi trong mạng RNN. Do vậy trong chuỗi đã cho ở phần đầu, ta sẽ xác định được những step nào nên có sự biến đổi và những step nào nên được giữ nguyên.
Ở đây ta thấy chỉ có cat và was sẽ được update, những step t giữa chúng sẽ có giá trị Γu=0 ứng với việc giữ nguyên. Do đó, ta có thể coi như trong câu chỉ còn The cat was full vì các step t có giá trị Γu=0 sẽ không đóng vai trò trong việc tính toán output. Thực ra vai trò của chúng là rất nhỏ vì Γu là xấp xỉ bằng 0, nhưng do đi qua nhiều step t, nên giá trị này trở nên nhỏ vô cùng gần 0, do đó ta vừa có thể tính toán output từ 1 step t rất ra trước đó, vừa có thể khắc phục vanishing hoặc exploding gradient khi mà ta bỏ qua hầu hết những thành phần không quan trọng trong sequence.
Mô hình đơn giản của 1 GRU unit sẽ như sau:
Thực tế trong mô hình GRU, ta có thêm 1 gate nữa là Γr trong đó gate này thể hiện sự giống nhau giữa c<t-1> và č<t>.
Mô hình GRU lúc này sẽ gồm 2 gate được biểu diễn như sau:
Thứ Ba, 4 tháng 12, 2018
[Natural Language Processing] Giới thiệu về RNN trong xử lý ngôn ngữ tự nhiên
RNN là một biến thể của mạng neuron (Neraul Network) trong đó ta có thể xử lý các chuỗi dữ liệu liên quan tới nhau ví dụ trong các ứng dụng như nhận dạng giọng nói, mô hình hóa ngôn ngữ, dịch ngôn ngữ hay viết tiêu đề cho ảnh tự động.
Ta có thể thấy tại mỗi bước của RNN, chúng đều sử dụng chung tham số U (ma trận trọng số cho input), W (ma trận chuyển trạng thái) và vocabulary V. Ta thấy rằng, mỗi state sẽ phụ thuộc vào kết quả của state trước đó, nhưng việc ta xử lý 1 chuỗi dữ liệu dài trong thực tế là rất khó.
Do đó, ta sẽ phải sử dụng các kiến trúc khác nhau là biến thể của RNN ví dụ như LSTM để giải quyết vấn đề này.
Để hiểu rõ hơn, ta có ví dụ như sau:
Ta có thể thấy tại mỗi bước của RNN, chúng đều sử dụng chung tham số U (ma trận trọng số cho input), W (ma trận chuyển trạng thái) và vocabulary V. Ta thấy rằng, mỗi state sẽ phụ thuộc vào kết quả của state trước đó, nhưng việc ta xử lý 1 chuỗi dữ liệu dài trong thực tế là rất khó.
Do đó, ta sẽ phải sử dụng các kiến trúc khác nhau là biến thể của RNN ví dụ như LSTM để giải quyết vấn đề này.
Để hiểu rõ hơn, ta có ví dụ như sau:
Trong ví dụ này, V là [h,e,l,o] gồm 4 phần tử mà training sequence của ta là từ "hello". Khi này, với một kí tự ví dụ như 'h', ta thu được đầu ra là từ 'e', từ 'e' này lại là đầu vào để dự đoán từ tiếp theo trong chuỗi. Quá trình này kết thúc, ta thu được từ 'hello'.
Hình dưới đây thể hiện rõ hơn quá trình hoạt động của RNN.
Trong hình trên, Lt-1, Lt và Lt+1 là thứ tự của các layer.
Output của trạng thái trước sẽ là input của trạng thái sau, ví dụ như Ot-1 sẽ tương ứng với xt.
Đăng ký:
Bài đăng (Atom)

