[Machine Learning] Attention, Attention, Attention, ...!
Bài đăng này đã không được cập nhật trong 5 năm
Attention, Attention, Attention, ...
- Bài blog này được viết với mục đích tìm hiểu về Attention Mechanism trong Machine Learning. Để viết nên bài blog lần này, mình có tham khảo từ khá nhiều nguồn tài liệu (các bạn có thể tham khảo tại phần cuối của bài viết), bao gồm các bài blog, paper, .. Tuy nhiên, mình sẽ tập trung vào 1 số nguồn tài liệu sau đây:
Giới thiệu về cơ chế Attention
-
ATTENTION: dịch theo tiếng Việt là chú ý. Còn trong Deep Learning là 1 khái niệm nhận được rất nhiều sự quan tâm từ cộng đồng ML, DL trong vài năm gần đây. Một vài task điển hình sử dụng Attention:
- Task 1: Neural Machine Translation (NMT) dịch văn bản tự động, tương tự như Google Translate. Lấy 1 ví dụ với dữ liệu gồm các cặp câu Anh-Pháp. Hình bên dưới miêu tả mối liên hệ giữa các từ khi được dịch từ tiếng Anh sang tiếng Pháp sử dụng thêm cơ chế Attention. Các ô càng sáng biểu thị rằng 1 từ A từ ngôn ngữ E1 "chú ý" hay có tương quan hơn (correlation) với 1 từ B từ ngôn ngữ E2 (Đây cũng sẽ là ví dụ chính mình dùng để giải thích về cơ chế Attention tại phần bên dưới)
- Task 2: Image Captioning. Với bài toán này, Attention giúp mô hình có thể xác định được những pixel nào cần tập trung hơn để sinh text (generate text for image)
- Task 3: Text Summarizarion hay tóm tắt văn bản. Với lượng thông tin và kiến thức khổng lồ và được cập nhật thường xuyên trong thời đại 4.0 hiện nay, việc khiến cho mình luôn "update" thông tin nhanh và đầy đủ nhất vô cùng khó khăn. Từ đó, 1 bài toán được đề xuất là tóm tắt văn bản (các bài báo, tin tức) thành các đoạn văn ngắn hơn nhiều lần mà vẫn bao hàm đủ ý chính. Việc sử dụng thêm cơ chế Attention khiến mô hình có thể tập trung nhiều hơn vào các từ khóa chính hay các câu văn mang lại nhiều thông tin trong văn bản gốc. BONUS: Các bạn có thể tham khảo 1 bài viết khá hay về tóm tắt văn bản với Machine Learning của tác giả Hoàng Anh tại link sau: Tóm tắt văn bản cho tiếng Việt
- Một vài task khác: Text Classification, OCR, Voice Recognition, Generate parse trees of sentences, Chatbots, ...
Core idea
-
Trong phần này của bài blog, mình sẽ đi sâu vào tìm hiểu về cơ chế Attention với công thức miêu tả kèm theo, ví dụ chính trong phần này mình sử dụng là: Neural Machine Translation với mô hình Sequence to Sequence.
-
Trong mô hình seq2seq dùng cho bài toán NMT (Neural Machine Translation) bao gồm 2 mạng RNN chính: Encoder và Decoder. Encoder với đầu vào là câu ở ngôn ngữ gốc, đầu ra tại layer cuối cùng của Encoder gọi là 1 context vector. Với ý nghĩa lượng thông tin từ câu của Encoder sẽ được tóm gọn lại trong 1 vector đầu ra cuối cùng. Từ đó, Decoder dùng chính context vector đó, cùng với hidden state và từ trước đó để predict từ tiếp theo tại decoder qua từng timestep.
- Trong paper gốc của tác giả Bahdanau có nói:
... we conjecture that the use of a fixed-length vector is a
bottleneck in improving the performance of this basic encoder–decoder architecture,
and propose to extend this by allowing a model to automatically (soft-)search
for parts of a source sentence that are relevant to predicting a target word, without
having to form these parts as a hard segment explicitly
- Việc encode toàn bộ thông tin từ source vào 1 vector cố định khiến việc mô hình khi thực hiện trên các câu dài (long sentence) không thực sự tốt, mặc dù sử dụng LSTM (BiLSTM, GRU) để khắc phục điểm yếu của mạng RNN truyền thống với hiện tượng Vanishing Gradient, nhưng như thế có vẻ vẫn chưa đủ, đặc biệt đối với những câu dài hơn những câu trong training data. Từ đó, trong paper, tác giả Bahdanau đề xuất 1 cơ chế cho phép mô hình có thể chú trọng vào những phần quan trọng (word liên kết với word từ source đến target), và thay vì chỉ sử dụng context layer được tạo ra từ layer cuối cùng của Encoder, tác giả sử dụng tất cả các output của từng cell qua từng timestep, kết hợp với hidden state của từng cell để "tổng hợp" ra 1 context vector (attention vector) và dùng nó làm đầu vào cho từng cell trong Decoder. Cách thức "tổng hợp" ở đây có thể được tạo ra bẳng nhiều cách, mình sẽ có 1 phần đề cập bên dưới. Còn trong phần này, mình tập trung vào cơ chế "tổng hợp" Attention trong paper của tác giả Bahdanau! Gọi là
Align and Jointly model
hayAdditive Attention
.
cơ chế seq2seq phổ biến (không có attention)
.. và khi sử dụng thêm attention!
Nội dung thuật toán
- Trong bài toán NMT sử dụng seq2seq, ta có 1 chuỗi các từ trong văn bản gốc với độ dài , và 1 chuỗi các từ trong văn bản dịch tương ứng với văn bản gốc với độ dài :
- Mỗi decoder output phụ thuộc vào từ trước đó , hidden state của decoder và context vector (được tính toán như công thức bên dưới):
- Hidden state của decoder được tính thông qua 1 mạng RNN của decoder với thông tin từ hidden state trước đó của decoder , từ và 1 context vector
- Context vector là vector được tạo ra là tổng trọng số của các encoder output tại timestep thứ , với là "trọng số" biểu thị mức độ "attention" của từng hidden state của encoder, trọng số bởi hay gọi là
alignment score
:
với là tổng số timestep của encoder.
- Với mỗi thực chất được tính thông qua 1 hàm
softmax
là trọng số riêng được tính tại timestep ứng với mỗi state . Sử dụng hàmsoftmax
như là một cách để normalize đối với từng attentionenergy
, và được tính bằng 1 function với đầu vào là hidden state trước đó của decoder và encoder output
đánh mức độ tương quan (corralation) giữa 2 từ và
hay được gọi là 1 alignment model
với mục đích đáng giá mức độ tương quan của từ tại vị trí của encoder với từ output tại vị trí của decoder bằng việc gán 1 trọng số
- Trong paper của tác giả Bahdanau, alignment model được chọn với công thức như sau:
thực chất là 1 multilayer perception với , và là các ma trận trọng số.
-
Trong hình trên, các ô màu xanh lá cây là các hidden state của encoder, sau khi cho hidden state của decoder và hidden state của encoder vào
alignment model a
, ta thu được cácalignment score
, normalize bằngsoftmax
để tổngattention score
bằng 1, thu được các . Cuối cùng tính tổng các tích và và thu đượccontext vector
, dùng làm input để predict từ của decoder! -
Và ma trận bất đối xứng (confusion matrix) được tạo ra bởi
alignment score
, thể hiện mức độ tương quancorrelation
giữa source và target.
-
NÓI CÁCH KHÁC, thực chất ATTENTION MECHANISM là 1 cơ chế giúp mô hình có thể tập trung vào các phần quan trọng trên dữ liệu, bằng việc tạo 1
alignment model a
tính cácalignment score
để REWEIGHT lại các hidden state của encoder. Trong bài toán NMT sử dụng seq2seq, việc đó giúp mô hình tập trung hơn vào những từ quan trọng trong câu input , để từ đó predict từ tiếp theo tại decoder, được biểu thị bằng các ô sáng màu như trong confusion matrix bên trên, cũng là mức độ tương quancorrelation
từ (source) và từ (target)! -
Có nhiều cách để chọn
alighment model a
, các bạn tham khảo phần tại phần bên dưới
1 số cách tính alignment score khác
-
Reference: How to compute attention weights
-
Content-base Attention: Neural Turing Machine:
- Additive Attention, Bahdanau's Paper: NEURAL MACHINE TRANSLATION BY JOINTLY LEARNING TO ALIGN AND TRANSLATE, được đề cập trong bài này:
- Multiplicative Attention hay General Attention, Luong's Paper: Effective Approaches to Attention-based Neural Machine Translation
- hoặc đơn giản nhất là Dot Product (simple mechanism), Luong's Paper: Effective Approaches to Attention-based Neural Machine Translation:
Giải thích 1 cách đơn giản hơn
-
Bài toán: bạn có 1 tập dữ liệu với đầu vào mô hình seq2seq là các input: , đầu ra là các output với
-
Với cách tiếp cận encoder-decoder thông thường (chưa có attention), thông tin của input sẽ được encode vào 1 context vector với độ dài cố định từ output của layer cuối cùng của encoder
còn với mô hình sử dụng thêm cơ chế Attention, các output của từng cell của encoder đều được sử dụng
Alignment model
hoăcj đánh giá mức độ liên quan giữa input của encoder với output tiếp theo của decoder. Với , ta có:
tương tự, với các timestep tiếp theo
với alignment model a
là 1feedforward neural network
- Output của alignment model được normalize sử dụng hàm
softmax
, được coi như là trọng số ấn định mức độ tương quan của encoder input tại từng timestep với output hiện tại của decoder. Với
tương tự
- Tiếp tục, các context vector được tổng hợp như công thức bên trên , với cách làm đó, mô hình có khả năng tập trung vào các phần quan trọng của input, có vai trò để reweight lại các output encoder
Kết luận
-
Qua những phần trên, hi vọng các bạn hiểu hơn về Attention Mechanism là gì và có thể apply cơ chế này vào các bài toán hiện tại (1 số ví dụ mình có nêu bên trên). Mọi ý kiến phản hồi vui lòng comment bên dưới hoặc gửi về địa chỉ: phan.huy.hoang@framgia.com
-
Các bạn tham khảo mục
Reference
bên dưới, kèm theo đó là các paper, bài tutorial và code trong 1 số framework phổ biến! -
Các bài blog trong thời gian sắp tới, dựa trên 1 số paper sau, hi vọng nhận được sự đóng góp từ các bạn:
- Attention Is All You Need
- CRNN-CTC cho bài toán Handwriting Recognition với Attention Mechanism.
Reference
-
Paper: FEED-FORWARD NETWORKS WITH ATTENTION CAN SOLVE SOME LONG-TERM MEMORY PROBLEMS
-
Paper: NEURAL MACHINE TRANSLATION BY JOINTLY LEARNING TO ALIGN AND TRANSLATE
-
Paper: Attention is all you need
-
Colab: Attention with Tensorflow
-
Medium: Bahdanau's Attention with Keras
-
Blog: https://lilianweng.github.io/lil-log/2018/06/24/attention-attention.html
-
https://www.alibabacloud.com/blog/self-attention-mechanisms-in-natural-language-processing_593968
-
https://syncedreview.com/2017/09/25/a-brief-overview-of-attention-mechanism/
-
Blog: Custom Layer in Keras
-
Blog: Custom layer Keras
All rights reserved