ViT — Chia ảnh thành patch, self-attention cho vision
Vision Transformer (ViT) biến ảnh thành chuỗi patch 16×16, áp dụng self-attention toàn cục từ lớp đầu — giải phóng mô hình khỏi giới hạn của CNN, mở đường cho CLIP và Multimodal LLM.
Thay vì dùng mạng tích chập (CNN) với các bộ lọc cục bộ, Vision Transformer (ViT) cắt ảnh thành các khối 16×16 pixel, xem mỗi khối như một "từ" (token), và đổ vào bộ Transformer giống hệt như xử lý ngôn ngữ. Đây là cách mà CLIP "hiểu" ảnh để so sánh với text, cách Stable Diffusion nén ảnh vào không gian latent, và nền tảng để GPT-4V "nhìn" được thế giới.
Vấn đề
Convolutional Neural Networks (CNN) đã thống trị thị giác máy tính suốt một thập kỷ nhờ hai giả định cố hữu (inductive bias): locality (pixel lân cận quan trọng hơn) và translation invariance (cùng một bộ lọc lặp lại khắp ảnh). Nhưng chính những giả định này tạo ra bottleneck: để kết nối hai vùng xa nhau (ví dụ, khuôn mặt ở góc trên-trái và góc dưới-phải), thông tin phải "truyền tay" qua hàng chục lớp convolution. ViT giải quyết bằng cách bỏ hẳn các giả định đó, cho phép mọi pixel "nói chuyện" trực tiếp với nhau ngay từ lớp đầu tiên.
Ý tưởng cốt lõi
Hình ảnh là một câu, mỗi patch là một từ.
Thay vì xem ảnh là ma trận pixel 2D, ViT chia ảnh thành các grid 16×16 pixel, flatten mỗi grid thành vector (với ảnh RGB 16×16 sẽ là vector 768 chiều), rồi chiếu lên không gian embedding qua một lớp linear đơn giản. Kết quả: một ảnh 224×224 pixel biến thành chuỗi 196 "token" — dài hơn một câu tiếng Anh trung bình, nhưng ngắn hơn nhiều so với context window của modern LLM.
Điểm mấu chốt là global self-attention. Trong khi CNN phải chờ thông tin "diffuse" qua nhiều lớp, Transformer attention cho phép patch ở vị trí (0,0) truy cập trực tiếp thông tin từ patch (14,14) ngay tại lớp đầu. Điều này tạo receptive field toàn cục (global receptive field) tức thì, đặc biệt hữu ích cho các tác vụ cần hiểu ngữ cảnh rộng như phân loại ảnh phức tạp hoặc grounding trong multimodal systems.
Một chi tiết tinh tế: vì Transformer không có khái niệm "vị trí" nội tại, ViT thêm position embeddings (học được, 1D) cho mỗi patch. Ngoài ra, giống BERT, một token đặc biệt [CLS] được prepend vào đầu chuỗi; hidden state cuối cùng của nó được dùng làm đại diện toàn cục cho toàn bộ ảnh, cho dù bài toán là classification hay retrieval.
Tại sao nó hoạt động
Cơ chế patch embedding. Quá trình biến đổi là thuần toán học: ảnh đầu vào được reshape thành , với (patch size), số lượng patch. Một ma trận projection (thường ) ánh xạ mỗi patch vector thành embedding chiều. Chuỗi cuối cùng là: .
Attention tự học locality. Mặc dù không có inductive bias về không gian, ViT vẫn học được rằng patch lân cận thường liên quan: attention weights giữa patch (i,j) và (i±1, j±1) thường lớn hơn ngẫu nhiên. Nhưng khác CNN, khi cần liên kết xa (ví dụ: đối tượng bị che một phần, hoặc tương quan giữa chân và mặt trong ảnh người), ViT có thể "nhảy cóc" qua attention thay vì truyền qua nhiều lớp trung gian.
Trade-off dữ liệu và tính toán. ViT không có "máu mặt" như CNN. ResNet-50 có thể học tốt trên ImageNet-1k (1.28M ảnh) từ scratch, nhưng ViT-Base cần pre-training trên ImageNet-21k (14M ảnh) hoặc JFT-300M (300M ảnh) để vượt trội. Lý do: CNN được "hard-code" để tìm cạnh và kết cấu cục bộ, còn ViT phải học từ đầu rằng thế giới có cấu trúc không gian. Tuy nhiên, khi đã có đủ dữ liệu, ViT scale tốt hơn (FLOPs hiệu quả hơn) và đạt accuracy cao hơn trên downstream tasks.
Chi phí bộ nhớ O(N²). Self-attention có độ phức tạp với số patch. Với ảnh 224×224 và patch 16×16, — chấp nhận được. Nhưng với ảnh 1024×1024, , bộ nhớ attention matrix bùng nổ (16× lớn hơn). Đây là lý do các biến thể như Swin Transformer (windowed attention) hoặc Linear Attention được phát triển cho độ phân giải cao.
Ý nghĩa thực tế
So sánh với CNN:
| Đặc điểm | ViT (Transformer) | CNN (ResNet) |
|---|---|---|
| Inductive bias | Không (học từ dữ liệu) | Có (locality, translation invariance) |
| Receptive field | Toàn cục ngay lớp 1 | Tăng dần theo độ sâu |
| Dữ liệu cần thiết | Rất lớn (ImageNet-21k+) | Vừa phải (ImageNet-1k) |
| Long-range dependencies | Tốt (trực tiếp) | Kém (qua nhiều lớp) |
| Tính toán | với số patch | tương đối ổn định |
| Interpretability | Attention map rõ ràng | Feature map khó giải thích |
Ai đang dùng:
- OpenAI: CLIP dùng ViT làm image encoder để tạo không gian chung với text, cho phép zero-shot classification và retrieval.
- Stability AI: Stable Diffusion dùng ViT-based encoder (VAE) để nén ảnh vào latent space trước khi chạy diffusion process.
- Meta: Segment Anything Model (SAM) dùng ViT để encode ảnh với prompt segmentation.
- Google: Tích hợp trong các hệ thống tìm kiếm và Google Photos.
Hạn chế thực tế:
- Data hunger: Không thể train ViT từ đầu (from scratch) với chỉ vài nghìn ảnh như CNN. Cần pre-training trên dataset lớn rồi fine-tune.
- Độ phân giải cao: Patch 16×16 trên ảnh 4K tạo ra ~16k tokens — attention quadratic khiến inference chậm và tốn VRAM. Các mô hình hiện đại như ViT-G/14 dùng các trick như pooling hoặc hierarchical transformers để giải quyết.
- Thiếu prior về hình học: ViT phải học rằng "trên" là gì, "gần" là gì, trong khi CNN được sinh ra đã biết điều này qua cấu trúc convolution.
Đào sâu hơn
Paper gốc: "An Image is Worth 16x16 Words: Transformers for Image Recognition at Scale" (Dosovitskiy et al., 2020/2021 ICLR) — công trình mở đầu cho kỷ nguyên Transformer trong Computer Vision.
Bài liên quan TroiSinh:
-
Cùng cụm (Vision & Multimodal):
- CLIP — Match image-text bằng contrastive learning — Cách ViT được dùng làm image encoder trong CLIP để tạo không gian chung với text.
- Multimodal LLM — Cách GPT-4V và Gemini "nhìn" được ảnh — Kiến trúc kết hợp ViT với LLM decoder để xử lý ảnh như ngôn ngữ.
- Diffusion Models — Noise → Image — ViT/Transformer backbone trong Stable Diffusion để nén và tái tạo ảnh.
-
Đọc tiếp:
- Transformer Architecture — Self-attention từ cơ bản — Hiểu rõ self-attention mechanism mà ViT kế thừa.
- Embeddings & Vector Space — Cách patch embedding hoạt động dưới góc độ vector.
- Multi-Agent Systems — Các agent đa phương thức sử dụng ViT để "nhìn" và tương tác với môi trường.
Code Generation — Từ Codex đến Cursor, cách LLM viết code
Giải mã cách AI viết code: từ autocomplete dựa trên probability đến agentic workflows với execution feedback. Tại sao code generation lại là 'low entropy canyon'?
CLIP — Match image-text bằng contrastive learning, zero-shot classification
CLIP biến classification thành bài toán retrieval: học không gian embedding chung cho ảnh và văn bản từ 400 triệu cặp dữ liệu internet, mở khóa zero-shot classification không cần label cố định.