Đặt vấn đề
Không có gì bắt buộc một cái máy phải đọc câu này giống như con người.
Con người đọc:
Con mèo đang nằm trên mái nhà.
Ta nhìn chữ Con, rồi mèo, rồi đang, rồi nằm.
Từng chữ một.
Trong một thời gian rất dài, neural network cũng sống gần giống như vậy.
Một từ đi vào.
Máy suy nghĩ.
Từ tiếp theo đi vào.
Máy lại suy nghĩ.
Cứ thế, thông tin được truyền từ bước này sang bước khác giống như một đứa trẻ chơi trò truyền tin: người đầu tiên nói vào tai người thứ hai, người thứ hai nói cho người thứ ba, rồi người thứ ba nói cho người thứ tư.
Đó là thế giới của RNN, rồi LSTM.
Nó hoạt động.
Thậm chí hoạt động rất tốt.
Nhưng có một vấn đề hơi buồn cười.
Chúng ta có những chiếc GPU chứa hàng nghìn lõi tính toán có thể cùng lúc làm một núi phép nhân, nhưng lại bắt chúng ngồi chờ:
1x1 → x2 → x3 → x4 → x5 → ...
Không tính từ thứ năm trước khi tính xong từ thứ tư.
Không tính từ thứ tư trước khi xong từ thứ ba.
Một đội quân hàng nghìn người đứng thành hàng, nhưng chỉ có một cái xẻng.
Rồi năm 2017, một bài báo xuất hiện với cái tên khá ngông:
Attention Is All You Need.
Ý tưởng của nó gần như là:
Hay là bỏ luôn cái hàng đó đi?
Và từ khoảnh khắc ấy, Transformer không chỉ sinh ra một kiến trúc neural network mới.
Nó thay đổi hướng tiến hóa của cả ngành AI.
Trước Transformer, thế giới trông như thế nào?
Trước khi nói Transformer làm được gì, cần quay lại một chút để xem người ta đã giải bài toán chuỗi như thế nào.
RNN: ký ức được chuyền tay
Giả sử có câu:
1Tôi sinh ra ở Việt Nam và tôi rất yêu đất nước này.
Để hiểu chữ “này” đang nói về cái gì, mô hình cần nhớ thông tin xuất hiện từ khá lâu trước đó.
Recurrent Neural Network (RNN) giải quyết bằng một trạng thái ẩn:
$$ h_t = f(x_t, h_{t-1}) $$
Trong đó:
- $x_t$ là dữ liệu tại thời điểm hiện tại.
- $h_{t-1}$ là ký ức từ bước trước.
- $h_t$ là ký ức mới.
Nghe khá hợp lý.
Ta đọc một từ, cập nhật trí nhớ, rồi đọc từ tiếp theo.
Nhưng khi chuỗi dài lên, ký ức phải chạy qua quá nhiều bước.
Thông tin từ đầu câu có thể bị yếu dần.
Gradient trong lúc huấn luyện cũng có thể nhỏ dần hoặc lớn mất kiểm soát.
Đó là vấn đề vanishing gradient và exploding gradient.
LSTM: chiếc balô thông minh hơn
LSTM, viết đầy đủ là Long Short-Term Memory, xuất hiện để giải quyết một phần vấn đề đó.
Thay vì chỉ có một trạng thái đơn giản, LSTM có các cổng:
- forget gate
- input gate
- output gate
Có thể tưởng tượng mỗi LSTM mang theo một cái balô.
Mỗi khi đọc thêm một từ, nó quyết định:
Cái này quan trọng, bỏ vào balô.
Hoặc:
Cái này hết tác dụng rồi, vứt đi.
Nhờ vậy LSTM nhớ được quan hệ xa tốt hơn RNN thông thường.
Trong nhiều năm, LSTM gần như là một trong những lựa chọn mặc định cho:
- dịch máy
- nhận dạng giọng nói
- phân tích văn bản
- language modeling
- dự báo chuỗi thời gian
Nó không hề tệ.
Vấn đề của nó nằm ở một tầng sâu hơn.
LSTM vẫn phải bước từng bước.
Cái cổ chai mang tên tuần tự
Giả sử câu có 1.000 token.
LSTM phải tính:
1token 1
2 ↓
3token 2
4 ↓
5token 3
6 ↓
7...
8 ↓
9token 1000
Muốn tính trạng thái thứ 500, ta cần trạng thái thứ 499.
Muốn có 499, phải có 498.
Nghĩa là có một chuỗi phụ thuộc rất dài.
Trong khi GPU lại thích kiểu:
1████████████████████████████
2làm một đống phép tính cùng lúc
3████████████████████████████
GPU giống một nhà máy có 10.000 công nhân.
LSTM bước vào rồi bảo:
Mọi người khoan làm. Anh số 1 làm trước. Anh số 1 làm xong thì anh số 2 mới được làm.
10.000 công nhân nhìn nhau.
Một người làm.
9.999 người uống trà.
Đương nhiên đây là cách nói phóng đại để dễ hình dung, vì các phép tính bên trong mỗi timestep vẫn được song song hóa.
Nhưng phụ thuộc tuần tự giữa các timestep là có thật.
Và khi dữ liệu, model và số lượng GPU ngày càng lớn, cái cổ chai này càng khó chịu.
CNN thì sao?
CNN, hay Convolutional Neural Network, lại có một triết lý khác.
Nó nhìn vào những vùng nhỏ.
Ví dụ một kernel:
1[ x1 x2 x3 ]
sẽ xử lý một cửa sổ cục bộ.
Sau đó trượt sang:
1 [ x2 x3 x4 ]
CNN có lợi thế lớn: các vị trí có thể được xử lý song song tốt hơn RNN.
Đó cũng là lý do trước Transformer đã có nhiều nghiên cứu dùng convolution cho sequence modeling.
Nhưng CNN có một đặc điểm:
thông tin thường lan truyền qua nhiều lớp.
Giả sử token đầu tiên muốn “nói chuyện” với token thứ 100.
Nếu kernel nhỏ, thông tin phải đi qua nhiều tầng convolution mới chạm được nhau.
Transformer chọn một con đường khác.
Nó nói:
Sao phải nhờ 98 người đứng giữa chuyển lời?
Cho hai đứa nói chuyện trực tiếp luôn.
Đó chính là Attention.
Attention: cho mọi từ nhìn nhau
Giả sử có câu:
1Con chó đuổi con mèo vì nó chạy quá nhanh.
Từ “nó” là gì?
LSTM phải mang thông tin từ những từ trước thông qua hidden state.
Transformer làm cách khác.
Khi xử lý “nó”, nó có thể trực tiếp nhìn sang:
1Con
2chó
3đuổi
4con
5mèo
6vì
7nó
8chạy
9quá
10nhanh
và tự hỏi:
Trong những từ này, từ nào liên quan đến mình nhất?
Đây là tư tưởng trung tâm của self-attention.
Không truyền một ký ức duy nhất từ trái sang phải.
Mỗi token có thể trực tiếp tương tác với các token khác.
Khoảng cách trong câu bỗng nhiên co lại.
Hai token cách nhau 500 vị trí về mặt văn bản vẫn có thể trao đổi thông tin trong một lớp Attention.
Đây là một thay đổi rất lớn.
Query, Key và Value
Transformer biến mỗi token thành ba vector:
- Query
- Key
- Value
Thường được ký hiệu:
$$ Q,\ K,\ V $$
Cách dễ hình dung nhất là một thư viện.
Bạn bước vào và hỏi:
Tôi muốn tìm sách về khủng long.
Câu hỏi đó là Query.
Mỗi cuốn sách có một nhãn mô tả.
Đó là Key.
Nội dung thật sự bên trong sách là Value.
Ta so Query với Key để biết cuốn nào đáng đọc.
Trong Transformer, Attention có dạng:
$$ \operatorname{Attention}(Q,K,V)=\operatorname{softmax}\left(\frac{QK^\top}{\sqrt{d_k}}\right)V $$
Nhìn công thức hơi giống một con bạch tuộc toán học.
Nhưng bản chất chỉ là:
1Tôi đang cần gì?
2 ↓
3Trong đám token kia, ai liên quan?
4 ↓
5Cho token liên quan nhiều trọng số lớn
6 ↓
7Trộn thông tin của chúng lại
Xong Attention.
Quá dễ.
Ít nhất là về ý tưởng.
Self-Attention thay đổi cuộc chơi ở đâu?
Điểm quan trọng nhất không phải chỉ là Transformer “hiểu ngữ cảnh tốt hơn”.
Quan trọng hơn là cách tính toán của nó phù hợp với phần cứng hiện đại.
Giả sử có một câu gồm:
1x1 x2 x3 x4 x5 x6 x7 x8
LSTM nhìn thấy một con đường:
1x1 → x2 → x3 → x4 → x5 → x6 → x7 → x8
Self-Attention lại tạo ra một ma trận quan hệ:
1 x1 x2 x3 x4 x5 x6 x7 x8
2x1
3x2
4x3
5x4
6x5
7x6
8x7
9x8
Máy tính có thể thực hiện phần lớn những phép tính này thông qua các phép nhân ma trận lớn.
Mà GPU cực kỳ thích nhân ma trận.
Thế là một chuỗi phản ứng bắt đầu.
Transformer song song hóa tốt hơn.
↓
GPU được tận dụng tốt hơn.
↓
Ta có thể huấn luyện trên nhiều dữ liệu hơn.
↓
Ta có thể xây model lớn hơn.
↓
Model lớn hơn tiếp tục học được những pattern phức tạp hơn.
↓
Người ta lại xây cụm GPU lớn hơn.
↓
Model lại tiếp tục lớn.
Một kiến trúc toán học bắt đầu kéo theo cả một hệ sinh thái phần cứng phía sau nó.
Đây mới là thứ khiến Transformer trở nên đặc biệt.
Transformer ban đầu hoạt động như thế nào?
Transformer trong bài báo năm 2017 được thiết kế chủ yếu cho machine translation.
Kiến trúc gồm hai phần:
1Input
2 ↓
3Encoder
4 ↓
5Encoder
6 ↓
7Encoder
8 ↓
9Representation
10 ↓
11Decoder
12 ↓
13Decoder
14 ↓
15Output
Encoder đọc input.
Decoder sinh output.
Bên trong mỗi block có những thành phần quan trọng:
1Multi-Head Attention
2 ↓
3Feed Forward Network
4 ↓
5Residual Connection
6 ↓
7Layer Normalization
Trong thực tế kiến trúc Transformer về sau có rất nhiều thay đổi.
Ở bài viết này, mình chỉ trình bày phiên bản đơn giản nhất để dễ hình dung.
Multi-Head Attention: một câu, nhiều cách nhìn
Một Attention head có thể học một loại quan hệ.
Nhưng ngôn ngữ không chỉ có một loại quan hệ.
Trong câu:
1Tùng đưa điện thoại cho Nam vì anh ấy cần gọi cho mẹ.
Ta có thể quan tâm đến:
- quan hệ chủ ngữ
- động từ
- người sở hữu
- đại từ
- khoảng cách
- ngữ nghĩa
Transformer vì vậy dùng Multi-Head Attention.
Có thể tưởng tượng tám đứa trẻ cùng đọc một câu.
Một đứa chỉ quan tâm:
Ai làm việc?
Đứa thứ hai:
Làm gì?
Đứa thứ ba:
Làm với ai?
Đứa thứ tư:
Từ “anh ấy” đang nói tới ai?
Sau đó chúng gom những gì quan sát được lại.
Không có quy định cứng rằng mỗi head nhất định phải học đúng một quan hệ ngữ pháp như vậy, nhưng ví dụ này khá dễ để hình dung bản chất.
Nhưng mất RNN rồi, Transformer biết thứ tự bằng cách nào?
Đây là một câu hỏi rất hay.
Nếu Transformer nhìn các token cùng lúc:
1tôi ăn cơm
và:
1cơm ăn tôi
thì làm sao biết thứ tự?
Bản thân self-attention không tự chứa khái niệm vị trí.
Vì vậy Transformer ban đầu thêm Positional Encoding.
Nói đơn giản:
Mỗi token không chỉ nói:
Tôi là chữ “cơm”.
Nó còn đeo một tấm bảng:
Tôi đang đứng ở vị trí số 3.
Biểu diễn của token vì vậy trở thành tổ hợp giữa:
1ý nghĩa token
2+
3thông tin vị trí
Các Transformer hiện đại sử dụng nhiều kỹ thuật positional representation khác nhau, ví dụ RoPE, nhưng nguyên lý vẫn tương tự:
model cần biết không chỉ token là gì, mà token đang đứng ở đâu.
Khoảnh khắc lịch sử: “Attention Is All You Need”
Năm 2017, nhóm nghiên cứu tại Google công bố bài báo:
Attention Is All You Need.
Điều táo bạo nằm ngay trong tên bài báo.
Attention trước đó không phải thứ hoàn toàn mới.
Attention đã được sử dụng cùng các mô hình recurrent trong machine translation.
Nhưng Transformer đặt ra một câu hỏi khác:
Nếu Attention tốt như vậy, tại sao còn cần recurrence?
Và họ loại recurrence khỏi kiến trúc chính.
Không RNN.
Không LSTM.
Đồng thời cũng không cần convolution làm cơ chế trộn thông tin chính của sequence model.
Chỉ còn:
1Attention
2+
3Feed Forward Network
4+
5Residual Connection
6+
7Normalization
Một thiết kế nhìn qua khá đơn giản.
Nhưng nó mở một cánh cửa rất lớn.
Từ Transformer đến BERT
Năm 2018, BERT xuất hiện.
BERT sử dụng Transformer Encoder và học biểu diễn ngôn ngữ từ lượng văn bản rất lớn.
Thay vì mỗi bài toán NLP phải xây một model từ đầu:
1sentiment model
2translation model
3question answering model
4classification model
người ta bắt đầu có một mô hình nền đã học ngôn ngữ trước.
Sau đó fine-tune cho từng nhiệm vụ.
Đây là một thay đổi lớn trong NLP.
Pre-training bắt đầu trở thành trung tâm.
Rồi GPT đi theo con đường khác
GPT sử dụng kiến trúc decoder-only Transformer.
Nhiệm vụ nghe cực kỳ ngây thơ:
Nhìn những token trước và đoán token tiếp theo.
Ví dụ:
1Hôm nay trời rất
model đoán:
1đẹp
Rồi:
1Hôm nay trời rất đẹp
đoán tiếp.
Cứ thế.
Một nhiệm vụ tưởng đơn giản đến mức trẻ con cũng hiểu.
Nhưng khi:
- model đủ lớn
- dữ liệu đủ nhiều
- compute đủ mạnh
thì khả năng mới bắt đầu xuất hiện.
Model học:
- ngữ pháp
- kiến thức
- cấu trúc văn bản
- dịch thuật
- lập trình
- hỏi đáp
- suy luận ở một mức độ nhất định
Transformer dần biến từ một kiến trúc dịch máy thành nền móng của Large Language Model.
Transformer vượt khỏi ngôn ngữ
Rồi người ta nhìn sang hình ảnh.
CNN lúc đó là vua.
Một bức ảnh được CNN nhìn bằng những vùng nhỏ:
1pixel → cạnh → texture → bộ phận → vật thể
Một ý tưởng kỳ quặc xuất hiện:
Nếu chia ảnh thành những miếng nhỏ rồi coi mỗi miếng giống một token thì sao?
Ví dụ:
1┌───┬───┬───┬───┐
2│ 1 │ 2 │ 3 │ 4 │
3├───┼───┼───┼───┤
4│ 5 │ 6 │ 7 │ 8 │
5├───┼───┼───┼───┤
6│ 9 │10 │11 │12 │
7└───┴───┴───┴───┘
Mỗi ô trở thành một patch.
Patch được biến thành vector.
Rồi cho Transformer xử lý.
Đó là tư tưởng của Vision Transformer (ViT).
Transformer tiếp tục lan sang:
- image generation
- speech
- video
- protein
- robotics
- multimodal AI
Một kiến trúc sinh ra để dịch câu tiếng Anh sang tiếng Đức bắt đầu ngồi giữa gần như mọi loại dữ liệu.
Hơi ngáo.
Nhưng lịch sử công nghệ đôi khi vận hành như vậy.
Vì sao Transformer thực sự mở ra kỷ nguyên mới?
Có một hiểu nhầm phổ biến:
Transformer thắng vì Attention thông minh hơn LSTM.
Đúng một phần.
Nhưng chưa đủ.
Điểm quan trọng hơn là Transformer tạo ra một kiến trúc có khả năng scale.
1. Song song hóa tốt hơn
Trong training, các token trong một sequence có thể được xử lý song song hơn nhiều so với recurrent network.
Điều này phù hợp với GPU và TPU.
2. Khoảng cách truyền thông tin ngắn
Trong RNN:
1token 1
2 ↓
3token 2
4 ↓
5token 3
6 ↓
7...
8 ↓
9token 100
Muốn thông tin từ token 1 đến token 100, nó phải đi qua rất nhiều bước.
Trong self-attention:
1token 1 ───────────── token 100
Chúng có thể tương tác trực tiếp trong một layer.
3. Có thể tăng kích thước model
Khi training hiệu quả hơn trên accelerator, người ta bắt đầu tăng:
1millions parameters
2 ↓
3hundreds of millions
4 ↓
5billions
6 ↓
7tens of billions
8 ↓
9hundreds of billions
Sau này xuất hiện cả những kiến trúc Mixture-of-Experts với tổng số tham số lên tới hàng nghìn tỷ.
Không phải toàn bộ sự tăng trưởng đó chỉ nhờ Transformer.
Ta còn cần:
- GPU/TPU mạnh hơn
- distributed training
- mixed precision
- data parallelism
- tensor parallelism
- pipeline parallelism
- optimizer tốt hơn
- FlashAttention
- Mixture-of-Experts
- hệ thống training phân tán khổng lồ
Nhưng Transformer là mảnh đất cực kỳ thuận lợi để tất cả những thứ đó mọc lên.
LSTM có chết không?
Không.
CNN cũng không chết.
Trong kỹ thuật, hiếm khi một công nghệ mới xuất hiện rồi toàn bộ công nghệ cũ lập tức biến thành hóa thạch.
LSTM vẫn có thể hữu ích với:
- sequence nhỏ
- hệ thống tài nguyên hạn chế
- một số bài toán streaming
- những hệ thống legacy đã tối ưu tốt
CNN vẫn cực kỳ hiệu quả trong nhiều bài toán computer vision, đặc biệt khi:
- cần model nhỏ
- cần inference nhanh
- dữ liệu training không quá lớn
- inductive bias về locality hữu ích
Transformer cũng có nhược điểm.
Self-attention truyền thống cần xây ma trận attention kích thước:
$$ N \times N $$
Vì vậy chi phí tính toán và bộ nhớ thường tăng theo:
$$ O(N^2) $$
khi sequence dài.
Nếu có:
11.000 token
ma trận attention có khoảng:
11.000.000
quan hệ.
Nếu lên:
1100.000 token
con số lý thuyết đã thành:
110.000.000.000
quan hệ.
Đó là lý do sau này xuất hiện cả một khu rừng nghiên cứu:
- sparse attention
- linear attention
- FlashAttention
- sliding-window attention
- state-space models
- recurrent alternatives
- hybrid architectures
Lịch sử không kết thúc ở Transformer.
Transformer chỉ mở một cánh cửa mới.
Thứ Transformer thực sự thay đổi
Nếu phải thu gọn toàn bộ câu chuyện vào một hình ảnh, mình sẽ chọn hình ảnh này.
LSTM là một đoàn người đứng nối đuôi nhau trong đêm.
Người đầu tiên cầm một mẩu giấy.
Anh ta đọc.
Ghi thêm vài chữ.
Đưa cho người tiếp theo.
Tờ giấy đi qua hàng trăm bàn tay.
Thông tin sống nhờ vào việc người trước nhớ để trao cho người sau.
Transformer thì bật đèn toàn bộ căn phòng.
Mọi người nhìn thấy nhau.
Mỗi người có thể hỏi:
Trong căn phòng này, ai liên quan đến thứ tôi đang nghĩ?
Hàng nghìn sợi dây được kéo ra cùng lúc.
Token này nối token kia.
Ma trận nhân ma trận.
Hàng tỷ transistor trên GPU đóng rồi mở.
Dòng điện chạy qua những lớp silicon mỏng hơn mắt người có thể thấy.
Những con chip nóng lên.
Quạt quay.
Nước làm mát chảy.
Những cụm máy tính cách chúng ta hàng nghìn kilomet cùng tham gia huấn luyện một mạng neural network.
Và tất cả bắt đầu từ một ý tưởng nghe rất nhỏ:
Đừng bắt thông tin phải đi từng bước nữa.
Một thay đổi về kiến trúc kéo theo một thay đổi về quy mô
Đây có lẽ là bài học thú vị nhất của Transformer.
Một thuật toán không tồn tại riêng trong sách giáo khoa.
Nó sống trên phần cứng thật.
Mỗi phép nhân là transistor thật.
Mỗi tensor cần bộ nhớ thật.
Mỗi lần truyền dữ liệu giữa GPU là những bit thật chạy qua interconnect thật.
Một kiến trúc phù hợp hơn với phép nhân ma trận song song có thể làm GPU hiệu quả hơn.
GPU hiệu quả hơn khiến model lớn trở nên khả thi.
Model lớn tạo nhu cầu cho cụm GPU lớn hơn.
Cụm GPU lớn hơn lại thúc đẩy:
1HBM
2NVLink
3InfiniBand
4distributed training
5FlashAttention
6Mixture-of-Experts
Thuật toán thay đổi phần cứng.
Phần cứng lại thay đổi thuật toán.
Một vòng xoắn cứ thế đi lên.
Và vì vậy, nói rằng Transformer chỉ là “một neural network dùng Attention” có lẽ hơi thiếu.
Nó giống một điểm chuyển pha hơn.
Trước Transformer, câu hỏi thường là:
Làm sao để model nhớ được chuỗi dài hơn?
Sau Transformer, câu hỏi dần trở thành:
Nếu chúng ta cho model nhiều dữ liệu hơn, nhiều compute hơn và nhiều tham số hơn nữa thì chuyện gì sẽ xảy ra?
Câu hỏi thứ hai chính là thứ mở đường cho thời đại foundation model và LLM ngày nay.
Tổng kết
Transformer không phải kiến trúc đầu tiên biết Attention.
Nó cũng không làm LSTM hay CNN trở nên vô dụng.
Điều đặc biệt của Transformer nằm ở việc nó kết hợp được nhiều thứ cùng lúc:
- cho các token tương tác trực tiếp bằng self-attention
- giảm sự phụ thuộc tuần tự của recurrent network
- khai thác tốt phép nhân ma trận trên GPU/TPU
- học quan hệ xa hiệu quả hơn
- đặc biệt phù hợp với việc tăng dữ liệu, compute và kích thước model
Từ bài toán dịch máy năm 2017, Transformer đi đến BERT, GPT, Vision Transformer rồi tới những hệ thống multimodal khổng lồ ngày nay.
Nhưng nếu bóc tất cả những cái tên hào nhoáng đó ra, bên dưới vẫn còn một ý tưởng cực kỳ giản dị:
thay vì bắt thông tin truyền tay từng bước, hãy để những phần cần nhau nhìn thấy nhau trực tiếp.
Một thay đổi nhỏ trong cách những con số nói chuyện với nhau.
Một thay đổi lớn trong cách con người xây AI.
Và đôi khi lịch sử công nghệ bắt đầu như thế.
Không phải bằng một tiếng nổ.
Mà bằng một câu hỏi hơi ngáo:
Tại sao chúng ta cứ phải làm như cũ?
Tham khảo
- Vaswani et al., Attention Is All You Need, 2017.
- Hochreiter & Schmidhuber, Long Short-Term Memory, 1997.
- Devlin et al., BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding, 2018.
- Radford et al., Improving Language Understanding by Generative Pre-Training, 2018.
- Dosovitskiy et al., An Image is Worth 16x16 Words: Transformers for Image Recognition at Scale, 2020.
Bình luận