Tải bản đầy đủ (.docx) (15 trang)

Tìm hiểu về rnn, lstm, gru

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (889.17 KB, 15 trang )

Mạng hồi quy RNN
Để có thể hiểu rõ về RNN, trước tiên chúng ta cùng nhìn lại mơ hình Neural Network
dưới đây:

Nó đơn giản là một mơ hình tạo ra dữ liệu đầu ra (outputs) từ một loạt dữ liệu đầu
vào (inputs) thông qua một loạt các tham số. Để đạt được đầu ra, dữ liệu đầu vào đi
qua các lớp khác nhau, nghĩa là các chức năng kết nối dữ liệu với nhau được tính
theo các trọng số khác nhau.
Có thể một ví dụ đồ họa sẽ làm rõ một chút cách thức hoạt động của nó trong thực
tế:
Như bạn có thể thấy, thuật ngữ "mạng lưới thần kinh" được hiểu nhanh chóng khi
nhìn vào sơ đồ này, vì nó nhắc nhở chúng ta rõ ràng về mối liên kết giữa các tế bào
thần kinh trong não. Dữ liệu được nhập thông qua lớp đầu vào, được xử lý bởi hai
lớp ẩn (ngồi ra, trong ví dụ này, bị sai lệch bởi một loạt đầu vào bổ sung) và tạo ra
giá trị cuối cùng trong lớp đầu ra bằng cách nhân các giá trị với các giá trị khác nhau


trọng số, thu được một tổng đôi khi được xử lý bởi hàm kích hoạt để tạo ra các hành
vi phi tuyến tính phức tạp hơn.
Nói tóm lại, nếu chúng ta muốn mô tả một mạng lưới thần kinh, chúng ta cần xác
định:
● Số đầu vào
● số lượng đầu ra
● Số lớp ẩn
● Tế bào thần kinh trên mỗi lớp ẩn
● Giá trị của các trọng số liên kết mỗi nơ-ron

Các giá trị cuối cùng này, trọng số hoặc trọng số, có được thơng qua đào tạo có
giám sát của mạng thần kinh, một quy trình theo đó các bộ đầu vào khác nhau trong
quá khứ được đưa vào và các trọng số được tối ưu hóa để thu được lỗi ít nhất có
thể giữa đầu ra do mạng tạo ra và các giá trị thực tế.


Như đã biết thì Neural Network bao gồm 3 phần chính là Input layer, Hidden layer và
Output layer, ta có thể thấy là đầu vào và đầu ra của mạng neuron này là độc lập với
nhau. Như vậy mơ hình này khơng phù hợp với những bài tốn dạng chuỗi như mơ
tả, hồn thành câu, ... vì những dự đốn tiếp theo như từ tiếp theo phụ thuộc vào vị
trí của nó trong câu và những từ đằng trước nó.
Và như vậy 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 tốn xử lý trước để dựa vào nó có thể đưa ra dự đốn chính
xác nhất cho bước dự đốn hiện tại. Nếu các bạn vẫn chưa hiểu gì thì hãy cùng
xem mơ hình mạng RNN sau và cùng phân tích để hiểu rõ hơn:



Ứng dụng và ví dụ
Để hiểu hơn về mơ hình RNN ta lấy một ví dụ sau: Cho tập input x = [h,e,l,o], sử
dụng mơ hình RNN để tạo ra một từ có nghĩa. Ta sẽ encode các chữ cái dưới dạng
one hot encoding.


Và kết quả như sau:
Ta thấy kí tự bắt đầu là "h" từ đó ta tìm ra chữ cái tiếp theo có xác suất lớn nhất là
"e" và "e" tiếp tục trở thành input vào của cụm tiếp theo,... cứ như vậy cho đến khi
tạo thành một từ có nghĩa, trong trường hợp này là từ "hello".
Ta sẽ cùng tìm hiểu một số lĩnh vực chính mà RNN cũng như LSTM được ứng
dụng.
Mơ hình ngơn ngữ và tự động sinh văn bản
RNN cho phép ta dự đoán xác suất của một từ mới nhờ vào các từ đã biết liền trước
nó. Cơ chế này hoạt động giống với ví dụ bên trên, với các đầu ra của cụm này sẽ là
đầu vào của cụm tiếp theo cho đến khi ta được một câu hoàn chỉnh. Các input
thường được encode dưới dạng 1 vector one hot encoding. Ví dụ với tập dataset
gồm 50000 câu ta lấy ra được một dictionary gồm 4000 từ, từ "hot" nằm ở vị trí 128

thì vector one hot của từ "hot" sẽ là một vector gồm 4000 phần tử đều bằng 0 chỉ có
duy nhất vị trí 128 bằng 1. Mơ hình này này chính là mơ hình Many to Many với số
lượng đầu ra, đầu vào và lớp ẩn bằng nhau.


Một vài lĩnh vực :
Mơ tả hình ảnh
Trong lĩnh vực này mạng convolution neural network thường được sử dụng để
detect các object có trong ảnh sau đó RNN sẽ sinh ra các câu có nghĩa mơ tả bức
ảnh đó. Sự kết hợp này mang lại sự hiệu quả đáng kinh ngạc.


Hình ảnh trên là cách những người thiết kế đã kết hợp mạng CNN VGG16 (bỏ đi 2
lớp FC-1000 và Softmax) với mạng RNN.

Kết luận
Trên đây ta đã có được cái nhìn tổng quan nhất về RNN là gì và nó được ứng dụng
như thế nào. Ở phần sau ta sẽ đi vào tìm hiểu về Training cũng như đi trả lời câu hỏi
mất mát đạo hàm là gì và vì sao nó lại khiến mạng RNN truyền thống khơng thể nhớ
được những bước ở xa.

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. Ngồ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ài viết này dành cho các 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 và cách 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 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 tốn. Ví dụ, nếu muốn đố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 tố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 sau) mà thôi. Về cơ bản một mạng RNN có dạng như sau:


A recurrent neural network and the unfolding in time of the computation involved in its
forward computation. Source: Nature
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 5
chữ “Đẹp trai lắm gái theo”, thì mạng nơ-ron được triển khai sẽ gồm 5 tầng nơ-ron
tương ứng với mỗi chữ một tầng. Lúc đó việc tính tốn bên trong RNN được thực
hiện như sau:


3. Khả năng của RNN

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 bạn khơng cần phải
quá lo lắ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 tốn của các nút ẩn. Chúng ta sẽ cùng xem chi tiết 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 xử lý ngôn ngữ tự nhiên dưới đây.

5. RNN mở rộng

Trong nhiều năm, các nhà nghiên cứu đã phát triển nhiều kiểu RNN tinh vi để xử lý
các nhược điểm của mơ hình RNN truyền thống. Chúng ta sẽ xem chi tiết một vài
mơ hình đó ở các bài viết sau, cịn ở bài này, tơi chỉ giới thiệu ngắn ngọn 2 mơ hình
dưới đây.
5.1. 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ự đố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 tốn dựa vào cả 2 trạng thái ẩn của
2 mạng RNN ngược hướng này.

Bidirectional RNNs



5.2. 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.

Deep (Bidirectional) RNNs

RNN, LSTM, GRU
Mạng thần kinh hồi quy (Recurrent Neural Network - RNN) là một lớp của mạng nơron nhân tạo, nơi kết nối giữa các nút để tạo thành đồ thị có hướng dọc theo một
trình tự thời gian. Điều này cho phép mạng thể hiện hành vi động tạm thời. Có
nguồn gốc từ mạng thần kinh truyền thẳng, RNN có thể dùng trạng thái trong (bộ
nhớ) để xử lý các chuỗi đầu vào có độ dài thay đổi. Điều này làm cho RNN có thể áp
dụng cho các tác vụ như nhận dạng chữ viết tay (handwriting recognition) hay nhận
dạng tiếng nói có tính chất kết nối, không phân đoạn.
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 tố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 tố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.
Xây dựng mạng Recurrent Neural Network (RNN)
Trong bài tốn xử lý ngơn ngữ (NLP) thì không thể xử lý cả câu được và người ta
tách ra từng từ làm input, giống như trong video người ta tách ra các ảnh (frame)
làm input.
Phân loại bài toán RNN
● One to one: mẫu bài toán cho Neural Network (NN) và Convolutional Neural
Network (CNN), 1 input và 1 output, ví dụ với CNN input là ảnh và output là
ảnh được segment.
● One to many: bài tốn có 1 input nhưng nhiều output, ví dụ: bài tốn caption
cho ảnh, input là 1 ảnh nhưng output là nhiều chữ mô tả cho ảnh đấy, dưới
dạng một câu.
● Many to one: bài tốn có nhiều input nhưng chỉ có 1 output, ví dụ bài toán
phân loại hành động trong video, input là nhiều ảnh (frame) tách ra từ video,
ouptut là hành động trong video
● Many to many: bài tốn có nhiều input và nhiều output, ví dụ bài tốn dịch từ
tiếng anh sang tiếng việt, input là 1 câu gồm nhiều chữ: “I love Vietnam” và
output cũng là 1 câu gồm nhiều chữ “Tôi yêu Việt Nam”.


Ưu và nhược điểm của một kiến trúc RNN thông thường được tổng kết ở bảng dưới
đây:
Ưu điểm

Hạn chế

• Khả năng xử lí đầu vào với bất kì độ

• Tính tốn chậm

dài nào
• Kích cỡ mơ hình khơng tăng theo
kích cỡ đầu vào
• Q trình tính tốn sử dụng các

• Khó để truy cập các thơng tin từ một
khoảng thời gian dài trước đây
• Khơng thể xem xét bất kì đầu vào


thơng tin cũ
• Trọng số được chia sẻ trong suốt
thời gian

sau này nào cho trạng thái hiện tại




×