TROISINH
FrontierVision & Multimodal

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 xRH×W×Cx \in \mathbb{R}^{H \times W \times C} được reshape thành xpRN×(P2C)x_p \in \mathbb{R}^{N \times (P^2 \cdot C)}, với P=16P=16 (patch size), N=HW/P2N = HW/P^2 số lượng patch. Một ma trận projection ER(P2C)×DE \in \mathbb{R}^{(P^2 \cdot C) \times D} (thường D=768D=768) ánh xạ mỗi patch vector thành embedding DD chiều. Chuỗi cuối cùng là: [xclass;xp1E;;xpNE]+Epos[\mathbf{x}_{\text{class}}; \mathbf{x}_p^1\mathbf{E}; \dots; \mathbf{x}_p^N\mathbf{E}] + \mathbf{E}_{\text{pos}}.

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 O(N2)O(N^2) với NN số patch. Với ảnh 224×224 và patch 16×16, N=196N=196 — chấp nhận được. Nhưng với ảnh 1024×1024, N=4096N=4096, 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ểmViT (Transformer)CNN (ResNet)
Inductive biasKhông (học từ dữ liệu)Có (locality, translation invariance)
Receptive fieldToàn cục ngay lớp 1Tăng dần theo độ sâu
Dữ liệu cần thiếtRất lớn (ImageNet-21k+)Vừa phải (ImageNet-1k)
Long-range dependenciesTốt (trực tiếp)Kém (qua nhiều lớp)
Tính toánO(N2)O(N^2) với số patchO(H×W)O(H \times W) tương đối ổn định
InterpretabilityAttention map rõ ràngFeature 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:

On this page