Transformer: Khi máy tính thôi đọc từng chữ một và một kỷ nguyên mới bắt đầu

Đặ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 gradientexploding 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
23token 2
45token 3
67...
89token 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
 6 7 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ì?
23Trong đám token kia, ai liên quan?
45Cho token liên quan nhiều trọng số lớn
67Trộ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
1011Decoder
1213Decoder
1415Output

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
23Feed Forward Network
45Residual Connection
67Layer 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
23token 2
45token 3
67...
89token 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
23hundreds of millions
45billions
67tens of billions
89hundreds 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

Bình luận