[RNN] RNN là gì?

Bài ra mắt RNN này được dịch lại từ trang blog WILDML .

Mạng nơ-ron hồi quy ( RNN – Recurrent Neural Network ) là một thuật toán được chú ý quan tâm rất nhiều trong thời hạn gần đây bởi những hiệu quả tốt thu được trong nghành nghề dịch vụ giải quyết và xử lý ngôn từ tự nhiên .Tuy nhiên, ta vẫn thiếu những bài viết lý giải tường tận về cách hoạt động giải trí, cách thiết kế xây dựng mạng RNN, nên trong chuỗi bài viết này tôi sẽ viết về những yếu tố đó. Chuỗi bài viết được chia thành 4 phần sau :

Mục lục

1. Mô hình ngôn ngữ

Ok, giờ tôi sẽ trình bày về mô hình ngôn ngữ dựa trên RNN.
Ứng dụng của mô hình ngôn ngữ gồm 2 dạng.
Một là đánh giá độ chính xác của một câu dựa theo mức độ tương tự của chúng trên thực tế.
Việc đánh giá này giúp ta ước lượng được độ chính xác của văn phạm lẫn ngữ nghĩa của một câu.
Những mô hình này thường được ứng dụng trong các hệ thống dịch máy (Machine Translation).
Hai là tự động sinh văn bản (tôi cho rằng ứng dụng này hấp dẫn hơn).
Ví dụ huấn luyện mô hình với các tác phẩm của Shakespeare có thể cho phép ta sinh ra
các câu từ tựa như cách Shakespeare viết.
Ngoài ra, nếu có thời gian, các bạn có thể tham khảo thêm bài viết thú vị này (tiếng Anh) của Andrej Karpathy về khả năng của các mô hình ngôn ngữ mức độ từ vựng.

Bạn đang đọc: [RNN] RNN là gì?

Bài viết này dành cho những bạn đã biết cơ bản về mạng nơ-rơn ( Neural Network ), nếu bạn chưa biết về mạng nơ-ron thì hãy đọc bài viết Cài đặt mạng nơ-ron cơ bản. Bài viết đó sẽ giúp bạn có cái nhìn cơ bản về ý tưởng sáng tạo và cách kiến thiết xây dựng một mạng nơ-ron cơ bản – mạng nơ-ron phi hồi quy .

2. Mạng hồi quy RNN là gì?

Ý tưởng chính của RNN ( Recurrent Neural Network ) là sử dụng chuỗi những thông tin. Trong những mạng nơ-ron truyền thống cuội nguồn tổng thể những nguồn vào và cả đầu ra là độc lập với nhau. Tức là chúng không link thành chuỗi với nhau. Nhưng những quy mô này không tương thích trong rất nhiều bài toán. Ví dụ, nếu muốn đoán từ tiếp theo hoàn toàn có thể Open trong một câu thì ta cũng cần biết những từ trước đó Open 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 thi cùng một tác vụ cho toàn bộ những thành phần của một chuỗi với đầu ra nhờ vào vào cả những phép tính trước đó. Nói cách khác, RNN có năng lực nhớ những thông tin được thống kê giám sát trước đó. Trên triết lý, RNN hoàn toàn 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 tiễn thì nó chỉ hoàn toàn có thể nhớ được một vài bước trước đó ( ta cùng bàn đơn cử yếu tố này sau ) mà thôi. Về cơ bản một mạng RNN có dạng như sau :Mô hình trên miêu tả phép tiến hành nội dung của một RNN. Triển khai ở đây hoàn toàn có thể hiểu đơn thuầ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 5 chữ “ Đẹp trai lắm gái theo ”, thì mạng nơ-ron được tiến hành sẽ gồm 5 tầng nơ-ron tương ứng với mỗi chữ một tầng. Lúc đó việc đo lường và thống kê bên trong RNN được thực thi như sau :

  • $ \color{blue}x_t $ là đầu vào tại bước $ \color{blue}t $.
    Ví dụ, $ \color{deeppink}x_1 $ là một vec-tơ one-hot tương ứng với từ thứ 2 của câu (trai).
  • $ \color{blue}s_t $ là trạng thái ẩn tại bước $ \color{blue}t $.
    Nó chính là bộ nhớ của mạng.
    $ \color{blue}s_t $ đượ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 đó:
    $ \color{blue}s_t = f(U x_t + W s_{t-1} ) $.
    Hàm $ \color{blue}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 $ \color{deeppink}s_{-1} $,
    thường giá trị khởi tạo được gắn bằng 0.

  • USD \ color { blue } o_t USD là đầu ra tại bước USD \ color { blue } t USD. Ví dụ, ta muốn Dự kiến từ tiếp theo hoàn toàn có thể Open trong câu thì USD \ color { blue } o_t USD chính là một vec-tơ xác xuất những từ trong list từ vựng của ta : USD \ color { blue } o_t = \ mathrm { softmax } ( V s_t ) USD

3. Khả năng của RNN

Trong nghành nghề dịch vụ giải quyết và xử lý ngôn từ tự nhiên ( NLP – Natural Language Processing ), đã ghi nhận được nhiều thành công xuất sắc của RNN cho nhiều yếu tố khác nhau. Tại thời gian này, tôi muốn đề cập tới một quy mô thông dụng nhất được sử dụng của RNN là LSTM. LSTM ( Long Short-Term Memory ) biểu lộ được sự ưu việt ở điểm hoàn toàn có thể nhớ được nhiều bước hơn quy mô RNN truyền thống lịch sử. Nhưng bạn không cần phải quá lo ngại vì LSTM về cơ bản giống với cấu trúc của RNN truyền thống cuội nguồn, chúng chỉ khác nhau ở cách thống kê giám sát của những nút ẩn. Chúng ta sẽ cùng xem cụ thể hơn về LSTM trong bài viết tiếp theo. Còn giờ, ta cùng nhau xem một vài ứng dụng của RNN trong giải quyết và xử lý ngôn từ tự nhiên dưới đây .

3.1. Mô hình hóa ngôn ngữ và sinh văn bản

Mô hình ngôn từ được cho phép ta Dự kiến được xác xuất của một từ nào đó Open sau một chuỗi những từ đi liền trước nó. Do có năng lực ước đạt được độ tương tự như của những 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 hoàn toàn có thể Dự kiến được từ tiếp theo là ta hoàn toàn có thể thiết kế xây dựng được một quy mô tự sinh từ được cho phép máy tính hoàn toàn có thể tự tạo ra những 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 quy mô ngôn từ mà ta hoàn toàn có thể tạo ra được nhiều văn bản khác nhau khá là mê hoặc phải không. Trong quy mô ngôn từ, đầu vào thường là một chuỗi những từ ( được diễn đạt bằng vec-tơ one-hot ) và đầu ra là một chuỗi những từ Dự kiến được. Khi đào tạo và giảng dạy mạng, ta sẽ gán USD \ color { blue } o_t = x_ { t + 1 } USD vì ta muốn đầu ra tại bước USD \ color { blue } t USD chính là từ tiếp theo của câu .

Dưới đây là một vài nghiên cứu về mô hình hoá ngôn ngữ và sinh văn bản:

3.2. Dịch máy

Dịch máy ( Machine Translation ) tương tự như như quy mô hóa ngôn từ ở điểm là nguồn vào là một chuỗi những từ trong ngôn từ nguồn ( ngôn từ cần dịch – ví dụ là tiếng Việt ). Còn đầu ra sẽ là một chuỗi những từ trong ngôn từ đích ( ngôn từ dịch – ví dụ là tiếng Anh ). Điểm khác nhau ở đây là đầu ra của ta chỉ giải quyết và xử lý sau khi đã xem xét hàng loạt chuỗi nguồn vào. Vì từ dịch tiên phong của câu dịch cần phải có không thiếu thông tin từ đầu vào cần dịch mới hoàn toàn có thể suy luận được .Dưới đây là một vài điều tra và nghiên cứu về dịch máy :

3.3. Nhận dạng giọng nói

Đưa vào một chuỗi những tín hiệu âm thanh, ta hoàn toàn có thể Dự kiến được chuỗi những đoạn ngữ âm đi kèm với xác xuất của chúng .Dưới đây là một vài nghiên cứu và điều tra về nhận dạng giọng nói :

3.4. Mô tả hình ảnh

Cùng với ConvNet, RNN được sử dụng để tự động hóa tạo diễn đạt cho những ảnh chưa được gán nhãn. Sự tích hợp này đã đưa ra được những hiệu quả khá kinh ngạc. Ví dụ như những ảnh dưới đây, những miêu tả sinh ra có mức độ đúng chuẩn và độ tường tận khá cao .

4. Huấn luyện RNN

Huấn luyện mạng RNN cũng tựa như như những mạng nơ-ron truyền thống lịch sử, tuy nhiên giải thuật Viral ngược ( backpropagation ) phải đổi khác một chút ít. Đạo hàm tại mỗi đầu ra nhờ vào không chỉ vào những giám sát tại bước đó, mà còn phụ thuộc vào vào những bước trước đó nữa, vì những tham số trong mạng RNN được sử dụng chung cho toàn bộ những bước trong mạng. Ví dụ, để tính đạo hàm tại USD \ color { deeppink } t = 4 USD ta phải Viral 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à Viral ngược liên hồi ( BPTT – Backpropagation Through Time ). Nếu giờ bạn chưa thể hiểu được BPTT thế nào thì cũng đừng thấp thỏm vì trong bài sau ta sẽ xem xét đơn cử nó là gì sau. Còn giờ, chỉ cần nhớ rằng với những bước nhờ vào càng xa thì việc học sẽ càng khó khăn vất vả hơn vì sẽ Open yếu tố hao hụt / bùng nổ ( vanishing / exploding ) của đạo hàm. Có một vài chiêu thức được đề xuất kiến nghị để xử lý yếu tố này và những kiểu mạng RNN lúc bấy giờ đã được phong cách thiết kế để triệt tiêu bớt chúng như LSTM ví dụ điển hình .

5. RNN mở rộng

Trong nhiều năm, những nhà nghiên cứu đã tăng trưởng nhiều kiểu RNN phức tạp để giải quyết và xử lý những điểm yếu kém của quy mô RNN truyền thống lịch sử. Chúng ta sẽ xem chi tiết cụ thể một vài quy mô đó ở những bài viết sau, còn ở bài này, tôi chỉ trình làng ngắn ngọn 2 quy mô dưới đây .

5.1. RNN 2 chiều

Ở mô hình RNN 2 chiều (Bidirectional RNN), đầu ra tại bước $ \color{blue}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 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.

5.2. RNN (2 chiều) sâu

RNN sâu ( Deep ( Bidirectional ) RNN ) cũng tựa như 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 trong thực tiễn, 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 tài liệu giảng dạy hơn .

5.3. Mạng LSTM

Gần đây, mạng LSTM mà ta có đề cập một chút ít phía trên được chú ý quan tâm và sử dụng khá phổ cập. Về cơ bản quy mô của LSTM không khác quy mô truyền thống cuội nguồn của RNN, nhưng chúng sử dụng hàm giám sát khác ở những trạng thái ẩn. Bộ nhớ của LSTM được gọi là tế bào ( Cell ) và bạn hoàn toàn có thể tưởng tượng rằng chúng là những hộp đen nhận nguồn vào là trạng thái phía trước USD \ color { blue } h_ { t-1 } USD và đầu vào hiện tại USD \ color { blue } x_t USD. Bên trong hộp đen này sẽ tự quyết định hành động cái gì cần phải nhớ và cái gì sẽ xoá đi. Sau đó, chúng sẽ tích hợp với trạng thái phía trước, nhớ hiện tại và đầu vào hiện tại. Vì vậy mà ta ta hoàn toàn có thể truy xuất được quan hệ của những từ phụ thuộc vào xa nhau rất hiệu suất cao. Có thể khi mới làm quen với LSTM thì chúng hơi khó hiểu đôi chút, nhưng nếu bạn có hứng thú thì hãy xem bài viết xuất sắc này ( bản dịch tại đây ) .

6. Kết luận

Okey, được rồi, tôi hi vọng là bạn đã hiểu cơ bản về RNN và khả năng của chúng.
Trong bài viết tiếp theo, chúng ta sẽ cài đặt phiên bản đầu tiên của mô hình ngôn ngữ RNN sử dụng Python
và Theano.
Giờ nếu bạn có thắc mắc gì thì có thể để lại câu hỏi ở phía dưới nhé!

5/5 - (1 vote)

Bài viết liên quan

Subscribe
Notify of
guest
0 Comments
Inline Feedbacks
View all comments