4.1.1. Mạng Nơ - ron hồi quy là gì ?
Mạng Nơ - ron hồi quy RNN là một dạng học sâu của mạng Nơ - ron nhân tạo, đƣợc phát triển vào những năm 1980, RNN cơ bản là một mạng gồm các nút thần kinh giống hệt nhau, mỗi nút kết nối trực tiếp (một chiều) với mọi nút khác, Mỗi nút (neuron) có một kích hoạt thời gian khác nhau có giá trị kích hoạt. Mỗi kết nối (synapse) có trọng số thực có thể điều chỉnh đƣợc . Các nút là các nút đầu vào (nhận dữ liệu từ bên ngoài mạng), các nút đầu ra (kết quả mang lại) hoặc các nút ẩn (điều chỉnh dữ liệu trên đƣờng đi từ đầu vào đến đầu ra) [7].
36 Trong sơ đồ trên, một mảng mạng thần kinh (A), có đầu vào là (Xt) và xuất ra một giá trị (ht). Một vòng lặp cho phép thông tin đƣợc truyền từ một bƣớc của mạng sang mạng kế tiếp.
Những vòng lặp này làm cho các mạng thần kinh hồi quy trở nên khó hiểu, Tuy nhiên, nó sẽ chỉ ra rằng chúng không khác gì một mạng Nơ - ron bình thƣờng. Một mạng lƣới thần kinh hồi quy có thể đƣợc coi là nhiều bản sao của cùng một mạng, mỗi lần truyền một thông điệp tới ngƣời kế nhiệm. Có thể diễn tả qua mô hình sau:
Hình 4.2: Mô tả mô hình mạng Nơ - ron hồi quy
Ý tƣởng chính của mạng Nơ - ron hồi quy RNN (Recurrent Neural Network) là sử dụng chuỗi các thông tin. 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 chứ nhỉ? 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 đó mà thôi. Về cơ bản một mạng RNN có dạng nhƣ sau:
37
Hình 4.3: Mô hình tính toán mạng Nơ - ron hồi quy
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 đơn giản 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 4 chữ “Tôn sư trong đạo”, thì mạng nơ-ron đƣợc triển khai sẽ gồm 4 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. Ví dụ, x1 là một vec-tơ tƣơng ứng với từ thứ 2 của câu (sư).
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 cả các trạng thái ẩn phía trƣớc và đầu vào tại bƣớc đó: st = f (Uxt+Wst−1). Hàm f thƣờng là một hàm phi tuyến tính nhƣ tang hyperbolic (tanh) hay ReLu. Để làm phép toán cho phần tử ẩn đầu tiên ta cần khởi tạo thêm s−1, thƣờng giá trị khởi tạo đƣợc gắn bằng 0.
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)
4.1.2. Ứng dụng của mạng Nơ - ron hồi quy RNN
Mạng Nơ - ron hồi quy RNN thƣờng đƣợc ứng dụng trong lĩnh vực xử lý ngôn ngữ tự nhiên (NLP - Natural Language Processing), nhận dạng chữ viết tay (Handwriting Recognition) [8] và đã ghi nhận đƣợc nhiều thành công, một số ứng dụng nhƣ:
38 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 khá là thú vị phải không. 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.
- Dịch máy:
Dịch máy (Machine Translation) tƣơng tự nhƣ mô hình hóa ngôn ngữ ở điểm là đầu vào là một chuỗi các từ trong ngôn ngữ nguồn (ngôn ngữ cần dịch - ví dụ là tiếng Việt). 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.
Hình 4.4: Ứng dụng RNN trong dịch máy (Machine Translation)
- Nhận dạng 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 [9]
39 - Mô tả hình ảnh:
Mạng Nơ - ron hồi quy RNN còn đƣợ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.
Hình 4.5: Ứng dụng mô tả hình ảnh của mạng RNN
4.1.3. 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ả 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).
4.2. RNN mở rộng
Trong nhiều năm, các nhà nghiên cứu đã phát triển nhiều kiểu mạng Nơ - ron hồi quy RNN tinh vi để xử lý các nhƣợc điểm của mô hình RNN truyền thống. Có hai kiểu mạng Nơ - ron hồi quy RNN đƣợc nghiên cứu nhƣ sau:
4.2.1. Mạng Nơ - ron hồi quy RNN 2 chiều
Ở mô hình RNN 2 chiều (Bidirectional RNN), đầu ra tại bƣớc t không những phụ thuộc vào các phần tử phía trƣớc mà còn phụ thuộc cả vào các phần tử phía sau. Ví dụ, để dự đoán từ còn thiếu trong câu, thì việc xem xét cả phần trƣớc và phần sau của
40 câu là cần thiết. Vì vậy, ta có thể coi mô hình là việc chồng 2 mạng RNN ngƣợc hƣớng nhau lên nhau. Lúc này đầu ra đƣợc tính toán dựa vào cả 2 trạng thái ẩn của 2 mạng RNN ngƣợc hƣớng này.
Hình 4.6: Mạng RNN 2 chiều
4.2.2. Mạng Nơ - ron hồi quy RNN (2 chiều) sâu
RNN sâu (Deep (Bidirectional) RNN) cũng tƣơng tự nhƣ RNN 2 chiều, nhƣng khác nhau ở chỗ chúng chứa nhiều tầng ẩn ở mỗi bƣớc. Trong thực tế, chúng giúp cho việc học ở mức độ cao hơn, tuy nhiên ta cũng cần phải có nhiều dữ liệu huấn luyện hơn.
Hình 4.7: Mạng RNN 2 chiều sâu
4.2.3. Mạng Long Short Term Memory (LSTM Networks)
Long Short Term Memory Network - thƣờng đƣợc gọi là "LSTM" - là một loại mạng RNN đặc biệt, có khả năng học các phụ thuộc dài hạn [10]. Mạng này đã đƣợc giới thiệu bởi Hochreiter & Schmidhuber (1997) và đã đƣợc tinh chỉnh và phổ biến bởi
41 nhiều ngƣời trong công việc ứng dụng sau này. LSTM làm việc rất tốt trên nhiều vấn đề lớn, và hiện đang đƣợc sử dụng rộng rãi.
LSTM đƣợc thiết kế để nhằm tránh vấn đề phụ thuộc lâu dài. Ghi nhớ thông tin trong thời gian dài là ứng dụng thực tế của mạng này mang lại.
Tất cả các mạng thần kinh hồi quy đều có dạng chuỗi lặp lại mô-đun của mạng thần kinh. Trong RNNs chuẩn, mô đun lặp lại này sẽ có một cấu trúc rất đơn giản, chẳng hạn nhƣ một lớp duy nhất.
Hình 4.8: Mô đun lặp lại trong một tiêu chuẩn RNN chứa một lớp duy nhất.
LSTM cũng có cấu trúc giống nhƣ dây chuyền, nhƣng mô-đun lặp đi lặp lại có một cấu trúc khác. Thay vì có một lớp mạng thần kinh duy nhất mà có nhiều tƣơng tác một cách rất đặc biệt.
42
4.2.3.1. Ý tưởng cốt lõi của LSTM
Điều cốt lõi của mạng LSTM là trạng thái tế bào (cell state) - chính đƣờng chạy thông ngang phía trên của sơ đồ hình vẽ.
Trạng thái tế bào là một dạng giống nhƣ băng truyền. Nó chạy xuyên suốt tất cả các mắt xích (các nút mạng) và chỉ tƣơng tác tuyến tính đôi chút. Vì vậy mà các thông tin có thể dễ dàng truyền đi thông suốt mà không sợ bị thay đổi.
Hình 4.10: Trạng thái tế bào
LSTM có khả năng bỏ đi hoặc thêm vào các thông tin cần thiết cho trạng thái tế báo, chúng đƣợc điều chỉnh cẩn thận bởi các nhóm đƣợc gọi là cổng (gate).
Các cổng là nơi sàng lọc thông tin đi qua nó, chúng đƣợc kết hợp bởi một tầng mạng sigmoid và một phép nhân.
43 Tầng sigmoid sẽ cho đầu ra là một số trong khoản [0, 1] [0,1], mô tả có bao nhiêu thông tin có thể đƣợc thông qua. Khi đầu ra là 00 thì có nghĩa là không cho thông tin nào qua cả, còn khi là 11 thì có nghĩa là cho tất cả các thông tin đi qua nó.
Một LSTM gồm có 3 cổng nhƣ vậy để duy trì và điều hành trạng thái của tế bào.
4.2.3.2. Bên trong LSTM
Bƣớc đầu tiên của LSTM là quyết định xem thông tin nào cần bỏ đi từ trạng thái tế bào. Quyết định này đƣợc đƣa ra bởi tầng sigmoid - gọi là “tầng cổng quên” (forget gate layer). Nó sẽ lấy đầu vào là ht−1 và xt rồi đƣa ra kết quả là một số trong khoảng [0,1] cho mỗi số trong trạng thái tế bào Ct−1. Đầu ra là 11thể hiện rằng nó giữ toàn bộ thông tin lại, còn 00 chỉ rằng toàn bộ thông tin sẽ bị bỏ đi.
Quay trở lại với ví dụ mô hình ngôn ngữ dự đoán từ tiếp theo dựa trên tất cả các từ trƣớc đó, với những bài toán nhƣ vậy, thì trạng thái tế bào có thể sẽ mang thông tin về giới tính của một nhân vật nào đó giúp ta sử dụng đƣợc đại từ nhân xƣng chuẩn xác. Tuy nhiên, khi đề cập tới một ngƣời khác thì ta sẽ không muốn nhớ tới giới tính của nhân vật nữa, vì nó không còn tác dụng gì với chủ thế mới này.
Hình 4.12: Tầng cổng quên (forget gate layer)
1
(W .[h ,x ]+b )
t f t t f
f (38)
Bƣớc tiếp theo là quyết định xem thông tin mới nào ta sẽ lƣu vào trạng thái tế bào. Việc này gồm 2 phần. Đầu tiên là sử dụng một tầng sigmoid đƣợc gọi là “tầng cổng vào” (input gate layer) để quyết định giá trị nào ta sẽ cập nhập. Tiếp theo là một
44 tầng tanh tạo ra một véc-tơ cho giá trị mới Ct˜ nhằm thêm vào cho trạng thái. Trong bƣớc tiếp theo, ta sẽ kết hợp 2 giá trị đó lại để tạo ra một cập nhập cho trạng thái.
Chẳng hạn với ví dụ mô hình ngôn ngữ của ta, ta sẽ muốn thêm giới tính của nhân vật mới này vào trạng thái tế bào và thay thế giới tính của nhân vật trƣớc đó.
Hình 4.13: Tầng cổng vào và tầng tanh 1 (W .[h ,x ]+b ) t i t t i i (39) ~ 1 tanh(W .[h ,x ]+b ) t C t t C C (40)
Giờ là lúc cập nhập trạng thái tế bào cũ Ct−1 thành trạng thái mới Ct. Ở các bƣớc trƣớc đó đã quyết định những việc cần làm, nên giờ ta chỉ cần thực hiện là xong.
Ta sẽ nhân trạng thái cũ với ft để bỏ đi những thông tin ta quyết định quên lúc trƣớc. Sau đó cộng thêm it∗Ct~. Trạng thái mới thu đƣợc này phụ thuộc vào việc ta quyết định cập nhập mỗi giá trị trạng thái ra sao.
Với bài toàn mô hình ngôn ngữ, chính là việc ta bỏ đi thông tin về giới tính của nhân vật cũ, và thêm thông tin về giới tính của nhân vật mới nhƣ ta đã quyết định ở các bƣớc trƣớc đó.
45
Hình 4.14: Quá trình bỏ đi thông tin cũ và thêm thông tin mới
~ 1
* * t
t t t t
C f C i C (41)
Cuối cùng, ta cần quyết định xem ta muốn đầu ra là gì. Giá trị đầu ra sẽ dựa vào trạng thái tế bào, nhƣng sẽ đƣợc tiếp tục sàng lọc. Đầu tiên, ta chạy một tầng sigmoid để quyết định phần nào của trạng thái tế bào ta muốn xuất ra. Sau đó, ta đƣa nó trạng thái tế bào qua một hàm tanh để có giá trị nó về khoảng [-1, 1], và nhân nó với đầu ra của cổng sigmoid để đƣợc giá trị đầu ra ta mong muốn.
Với ví dụ về mô hình ngôn ngữ, chỉ cần xem chủ thể mà ta có thể đƣa ra thông tin về một trạng từ đi sau đó. Ví dụ, nếu đầu ra của chủ thể là số ít hoặc số nhiều thì ta có thể biết đƣợc dạng của trạng từ đi theo sau nó phải nhƣ thế nào.
46 1 (W [h ,x ]+b ) t o t t o o (42) * tanh( ) t t t h o C (43)
4.2.3.3. Các biến thể của bộ nhớ dài hạn
Những thứ ta vừa mô tả ở trên là một mạng LSTM khá bình thƣờng. Nhƣng không phải tất cả các LTSM đều giống nhƣ vậy. Thực tế, các bài báo về LTSM đều sử dụng một phiên bản hơi khác so với mô hình LTSM chuẩn. Sự khác nhau không lớn, nhƣng chúng giúp giải quyết phần nào đó trong cấu trúc của LTSM.
Một dạng LTSM phổ biến đƣợc giới thiệu bởi Gers & Schmidhuber (2000) đƣợc thêm các đƣờng kết nối “peephole connections”, làm cho các tầng cổng nhận đƣợc giá trị đầu vào là trạng thái tế bào.
Hình 4.16: Các đường được thêm vào cổng
1 1 (W .[C ,h ,x ]+b ) t f t t t f f (44) 1 1 (W .[C ,h ,x ]+b ) t i t t t i i (45) 1 (W .[C ,h ,x ]+b ) t O t t t O o (46)
47 Hình trên mô tả các đƣờng đƣợc thêm vào mọi cổng, nhƣng cũng có những bài báo chỉ thêm cho một vài cổng mà thôi.
Một biến thể khác là nối 2 cổng loại trừ và đầu vào với nhau. Thay vì phân tách các quyết định thông tin loại trừ và thông tin mới thêm vào, ta sẽ quyết định chúng cùng với nhau luôn. Ta chỉ bỏ đi thông tin khi mà ta thay thế nó bằng thông tin mới đƣa vào. Ta chỉ đƣa thông tin mới vào khi ta bỏ thông tin cũ nào đó đi.
Hình 4.17: Biến thể nối hai cổng trừ và đầu vào với nhau
~ 1
* (1 ) * t
t t t t
C f C f C (47)
Một biến thể khá thú vị khác của LSTM là Gated Recurrent Unit, hay GRU đƣợc giới thiệu bởi Cho, et al. (2014). Nó kết hợp các cổng loại trừ và đầu vào thành một cổng “cổng cập nhập” (update gate). Nó cũng hợp trạng thái tế bào và trạng thái ẩn với nhau tạo ra một thay đổi khác. Kết quả là mô hình của ta sẽ đơn giản hơn mô hình LSTM chuẩn và ngày càng trở nên phổ biến.
48
Hình 4.18: Biến thể Gate Recurrent Unit
1 (W .[h ,x ]) t z t t z (48) 1 (W .[h ,x ]) t r t t r (49) ~ 1 tanh(W.[r *h ,x ]) t t t t h (50) ~ 1 (1 ) * * t t t t t h z h z h (51)
Trên đây chỉ là một vài biến thế đƣợc chú ý nhiều nhất, thực tế có rất nhiều các biến thể khác nhau của LSTM nhƣ Depth Gated RNNs của Yao, et al. (2015). Cũng