🎯 Mục tiêu bài học
Sau bài này, bạn sẽ:
✅ Hiểu Attention là gì và tại sao quan trọng
✅ Hiểu Query, Key, Value qua ví dụ thực tế
✅ Biết Self-Attention hoạt động như thế nào
✅ Hiểu Multi-Head Attention
Đây là nền tảng của ChatGPT, BERT và tất cả AI hiện đại!
Ôn lại bài trước
Bài trước (LSTM) ta đã học:
- RNN có vấn đề với câu dài (quên thông tin xa)
- LSTM cải thiện bằng cách có "bộ nhớ"
- Nhưng vẫn xử lý tuần tự từ trái sang phải
Vấn đề: Xử lý tuần tự = chậm, không tận dụng được GPU song song
Giải pháp: Attention - có thể "nhìn" mọi nơi cùng lúc!
🎯 Attention là gì?
Analogy: Đọc sách
Khi bạn đọc câu: "Con mèo ngồi trên thảm vì nó mệt"
Để hiểu "nó" là gì, bạn phải nhìn lại các từ trước.
Bạn không đọc lại từ đầu, mà chú ý vào "con mèo" → Đó là Attention!
Định nghĩa đơn giản
Attention = Khả năng chú ý vào những phần quan trọng của input.
So sánh với RNN/LSTM
| RNN/LSTM | Attention | |
|---|---|---|
| Cách xử lý | Tuần tự (từ trái sang phải) | Song song (nhìn tất cả cùng lúc) |
| Câu dài | Dễ quên thông tin xa | Nhớ được mọi thứ |
| Tốc độ | Chậm (không song song) | Nhanh (song song trên GPU) |
| Ví dụ | Đọc sách từng trang | Nhìn bao quát cả trang |
Minh họa
Checkpoint
Bạn đã hiểu Attention = "khả năng chú ý"?
🔑 Query, Key, Value - Tìm kiếm Google
Analogy: Google Search
Khi bạn search Google:
- Query (Q): Từ khóa bạn gõ vào ("best pizza hanoi")
- Key (K): Tiêu đề các trang web
- Value (V): Nội dung các trang web
Google so sánh Query với Keys → Tìm Keys khớp nhất → Trả về Values tương ứng!
Trong Attention
| Thuật ngữ | Ý nghĩa | Analogy Google |
|---|---|---|
| Query (Q) | "Tôi đang tìm gì?" | Từ khóa search |
| Key (K) | "Có những gì?" | Tiêu đề trang |
| Value (V) | "Thông tin cần lấy" | Nội dung trang |
Ví dụ cụ thể
Công thức (đơn giản)
Không cần nhớ công thức! Chỉ cần nhớ:
- Q = Tôi cần gì?
- K = Có gì ở đây?
- V = Lấy thông tin gì?
Checkpoint
Bạn đã hiểu Query, Key, Value?
👀 Self-Attention - Tự Chú Ý
Định nghĩa
Self-Attention = Mỗi từ "nhìn" tất cả các từ khác trong cùng câu.
"Self" vì Q, K, V đều từ cùng một input.
Minh họa
Tại sao Self-Attention mạnh?
| Lợi ích | Giải thích |
|---|---|
| Nhìn xa | Từ đầu câu vẫn "thấy" từ cuối câu |
| Song song | Mọi từ tính toán cùng lúc (nhanh!) |
| Linh hoạt | Tự học nên chú ý vào đâu |
Code đơn giản
1import tensorflow as tf2from tensorflow.keras import layers34# Self-Attention trong Keras5class SimpleSelfAttention(layers.Layer):6 def __init__(self, d_model=64):7 super().__init__()8 self.d_model = d_model9 # Q, K, V projections10 self.wq = layers.Dense(d_model)11 self.wk = layers.Dense(d_model)12 self.wv = layers.Dense(d_model)13 14 def call(self, x):15 # x shape: (batch, seq_len, d_model)16 Q = self.wq(x)17 K = self.wk(x)18 V = self.wv(x)19 20 # Attention scores21 scores = tf.matmul(Q, K, transpose_b=True) # Q × K^T22 scores = scores / tf.sqrt(tf.cast(self.d_model, tf.float32)) # Scale23 24 # Softmax → weights25 weights = tf.nn.softmax(scores, axis=-1)26 27 # Output = weights × V28 output = tf.matmul(weights, V)29 30 return output, weights3132# Demo33self_attn = SimpleSelfAttention(d_model=64)34x = tf.random.normal((2, 5, 64)) # 2 câu, 5 từ mỗi câu, 64-dim3536output, weights = self_attn(x)37print(f"Input: {x.shape}")38print(f"Output: {output.shape}")39print(f"\nAttention weights (câu 1):")40print(weights[0].numpy().round(2))1Input: (2, 5, 64)2Output: (2, 5, 64)3 4Attention weights (câu 1):5[[0.21 0.19 0.20 0.20 0.20]6 [0.19 0.22 0.20 0.19 0.20]7 [0.20 0.20 0.21 0.19 0.20]8 [0.20 0.19 0.19 0.22 0.20]9 [0.20 0.20 0.20 0.20 0.20]]Checkpoint
Bạn đã hiểu Self-Attention = "mỗi từ nhìn tất cả từ khác"?
🔀 Multi-Head Attention - Nhiều Góc Nhìn
Analogy: Xem phim với nhiều camera
Một camera chỉ quay được một góc.
Nhiều camera (Multi-Head) quay nhiều góc khác nhau → Hiểu toàn cảnh hơn!
Tương tự, Multi-Head Attention = Nhiều "attention head" song song, mỗi head học một kiểu quan hệ khác nhau.
Mỗi Head học gì?
| Head | Có thể học | Ví dụ |
|---|---|---|
| Head 1 | Ngữ pháp | "sat" → chú ý vào subject "cat" |
| Head 2 | Đại từ | "it" → chú ý vào "cat" |
| Head 3 | Vị trí | Từ gần nhau chú ý nhau |
| Head 4 | Nghĩa | Từ cùng chủ đề chú ý nhau |
Minh họa
Code với Keras
1import tensorflow as tf2from tensorflow.keras import layers34# Multi-Head Attention có sẵn trong Keras!5mha = layers.MultiHeadAttention(6 num_heads=4, # 4 heads7 key_dim=64, # Dimension của mỗi head8)910# Input11x = tf.random.normal((2, 10, 256)) # 2 câu, 10 từ, 256-dim1213# Self-Attention (Q=K=V=x)14output = mha(query=x, key=x, value=x)1516print(f"Input shape: {x.shape}")17print(f"Output shape: {output.shape}")1Input shape: (2, 10, 256)2Output shape: (2, 10, 256)Tin vui: Keras có sẵn MultiHeadAttention!
Bạn chỉ cần gọi: layers.MultiHeadAttention(num_heads=8, key_dim=64)
Checkpoint
Bạn đã hiểu Multi-Head = "nhiều góc nhìn cùng lúc"?
🎭 Attention Mask - Che Thông Tin
Tại sao cần Mask?
Có 2 lý do cần "che" một số positions:
- Padding Mask: Câu ngắn phải pad thêm → Không muốn attention vào padding
- Look-ahead Mask: Khi generate text, không được "nhìn trước" tương lai
Padding Mask & Look-ahead Mask
Code tạo mask
1import tensorflow as tf2import numpy as np34def create_padding_mask(seq):5 """Mask cho padding tokens (giá trị 0)"""6 mask = tf.cast(tf.equal(seq, 0), tf.float32)7 return mask[:, tf.newaxis, tf.newaxis, :]89def create_look_ahead_mask(size):10 """Mask không cho nhìn tương lai"""11 mask = 1 - tf.linalg.band_part(tf.ones((size, size)), -1, 0)12 return mask1314# Demo15seq = tf.constant([[1, 2, 3, 0, 0]]) # Câu có 3 từ + 2 padding1617padding_mask = create_padding_mask(seq)18print("Padding mask shape:", padding_mask.shape)19print("Padding mask:\n", padding_mask[0, 0, 0].numpy())2021look_ahead = create_look_ahead_mask(5)22print("\nLook-ahead mask:\n", look_ahead.numpy())1Padding mask shape: (1, 1, 1, 5)2Padding mask:3 [0. 0. 0. 1. 1.]4 5Look-ahead mask:6[[0. 1. 1. 1. 1.]7 [0. 0. 1. 1. 1.]8 [0. 0. 0. 1. 1.]9 [0. 0. 0. 0. 1.]10 [0. 0. 0. 0. 0.]]Checkpoint
Bạn đã hiểu Attention Mask dùng để làm gì?
🎯 Tổng kết
Những điểm cần nhớ
| Khái niệm | Một câu giải thích | Analogy |
|---|---|---|
| Attention | Chú ý vào phần quan trọng | Highlight khi đọc sách |
| Q, K, V | Query hỏi, Key khớp, Value trả | Google Search |
| Self-Attention | Mỗi từ nhìn tất cả từ khác | Họp nhóm, ai cũng nghe ai |
| Multi-Head | Nhiều attention song song | Nhiều camera quay phim |
| Mask | Che thông tin không cần | Bịt mắt không nhìn đáp án |
Attention giải quyết vấn đề gì?
| Vấn đề của RNN | Attention giải quyết |
|---|---|
| Quên thông tin xa | Nhìn được mọi vị trí |
| Xử lý tuần tự | Xử lý song song |
| Chậm | Nhanh hơn nhiều |
Bài tiếp theo
Transformer Architecture - Kiến trúc kết hợp Attention để tạo ra BERT, GPT, ChatGPT!
🎉 Tuyệt vời! Bạn đã hiểu Attention - nền tảng của AI hiện đại!
Fun fact: ChatGPT, BERT, Google Translate đều dùng Attention. Bạn vừa học cơ chế cốt lõi của chúng!
