Hành trình làm cho mạng tích chập ngày càng sâu hơn và hiệu quả hơn — từ LeNet sơ khai, qua cú nổ AlexNet, tới sự gọn gàng của VGG và Inception. Cuối cùng ta gặp một vấn đề nan giải khi mạng quá sâu, chính là tiền đề mở đường cho ResNet ở bài tiếp theo.
LeNet-5 do Yann LeCun và cộng sự đề xuất là một trong những mạng tích chập đầu tiên thực sự hoạt động, dùng để nhận dạng chữ số viết tay (bài toán MNIST, áp dụng vào đọc mã ZIP và séc ngân hàng). Đây là kiến trúc đặt nền móng cho toàn bộ ngành CNN về sau.
Cấu trúc của nó rất kinh điển và lặp đi lặp lại một mô-típ: conv → pool → conv → pool → các tầng fully-connected (FC). Mỗi tầng tích chập trích đặc trưng cục bộ (cạnh, nét cong), tầng pooling thu nhỏ kích thước và tăng tính bất biến vị trí, rồi các tầng FC ở cuối tổng hợp lại để phân loại.
# Sơ đồ rút gọn LeNet-5 (ảnh vào 32x32 thang xám) Input 32x32x1 Conv 5x5, 6 filter # -> 28x28x6 AvgPool 2x2 # -> 14x14x6 Conv 5x5, 16 filter # -> 10x10x16 AvgPool 2x2 # -> 5x5x16 FC 120 -> FC 84 -> Softmax 10 # 10 chữ số
LeNet nhỏ (chỉ khoảng 60 nghìn tham số) và dùng hàm kích hoạt tanh/sigmoid. Hạn chế của thời đó là thiếu dữ liệu lớn và sức tính toán, nên ý tưởng phải chờ hơn một thập kỷ mới bùng nổ.
AlexNet là cú hích lịch sử: nó thắng cuộc thi ImageNet 2012 với cách biệt rất lớn (giảm sai số top-5 từ ~26% xuống ~16%), bỏ xa các phương pháp thủ công truyền thống. Khoảnh khắc này được xem là điểm khởi đầu chính thức của kỷ nguyên deep learning cho thị giác máy tính.
Về bản chất AlexNet giống một LeNet "phóng to" (5 tầng conv + 3 tầng FC), nhưng tập hợp nhiều cải tiến then chốt:
tanh/sigmoid, giúp huấn luyện nhanh hơn nhiều lần và giảm hiện tượng gradient tiêu biến ở mạng sâu.sigmoid (đạo hàm \( \lt 0.25 \)) gặp phải. Đây là một mảnh ghép giúp mạng sâu hơn trở nên khả thi.VGG (nhóm Visual Geometry Group, Oxford) theo đuổi một triết lý cực kỳ gọn: chỉ dùng tích chập 3×3 xếp chồng lên nhau và pooling 2×2, lặp lại đều đặn để tạo ra mạng rất sâu (VGG-16 và VGG-19 với 16–19 tầng có trọng số). VGG chứng minh một thông điệp mạnh mẽ: độ sâu là yếu tố quyết định đến chất lượng đặc trưng.
Vì sao lại là 3×3 thay vì một kernel lớn? Xếp chồng hai tầng conv 3×3 có vùng tiếp nhận (receptive field) tương đương một tầng conv 5×5, và ba tầng 3×3 tương đương một tầng 7×7 — nhưng cách dùng nhiều tầng nhỏ lại lợi hơn:
# Một "block" điển hình của VGG Conv 3x3, C filter -> ReLU Conv 3x3, C filter -> ReLU MaxPool 2x2 # giảm một nửa chiều cao & rộng
Cùng năm với VGG, GoogLeNet (kiến trúc Inception) đi theo hướng ngược lại với "to và đều": thay vì ép phải chọn một kích thước kernel, nó chạy song song nhiều kích thước cùng lúc rồi ghép kết quả lại. Một Inception module gồm các nhánh:
Tất cả các nhánh xử lý cùng một đầu vào rồi được nối (concatenate) theo chiều kênh, để mạng tự "chọn" tỉ lệ phù hợp ở mỗi vị trí.
Chìa khóa tiết kiệm tính toán là conv 1×1 làm "bottleneck". Trước khi đưa qua conv 3×3 hay 5×5 đắt đỏ, ta dùng conv 1×1 để giảm số chiều (số kênh) xuống trước, rồi mới tích chập. Ví dụ đầu vào có 256 kênh: đưa thẳng qua conv 5×5 ra 64 kênh tốn \( 5^2 \times 256 \times 64 \approx 410 \text{K} \) phép nhân-cộng cho mỗi vị trí; nếu chèn 1×1 hạ xuống 32 kênh trước thì chỉ còn \( (1^2\times256\times32) + (5^2\times32\times64) \approx 60 \text{K} \) — giảm gần 7 lần.
Nhờ vậy GoogLeNet sâu (22 tầng) nhưng chỉ ~5 triệu tham số — nhẹ hơn VGG cả chục lần. Nó cũng bỏ các tầng FC khổng lồ, thay bằng global average pooling (lấy trung bình mỗi bản đồ đặc trưng thành một số) ngay trước tầng phân loại, cắt giảm tham số mạnh mà vẫn giữ độ chính xác.
Sau VGG và Inception, có vẻ công thức là cứ chồng thêm tầng thì mạng càng mạnh. Nhưng thực nghiệm cho thấy điều ngược ngạc nhiên: khi đẩy độ sâu lên quá cao (vài chục tầng trở lên), độ chính xác đầu tiên bão hòa, rồi giảm xuống — và đáng nói là cả sai số trên tập huấn luyện cũng tăng.
Hai nguyên nhân chính:
Chính bài toán này là động lực ra đời của ResNet: thay vì bắt mỗi khối học trực tiếp ánh xạ mong muốn \( H(x) \), nó để khối học phần dư (residual) \( F(x) = H(x) - x \) rồi cộng lại thành \( H(x) = F(x) + x \) thông qua một "đường tắt" (skip connection). Cách này giúp gradient đi thẳng qua được và mạng sâu hàng trăm tầng vẫn huấn luyện ổn định.
| Kiến trúc | Năm | Độ sâu | Điểm nổi bật | Số tham số |
|---|---|---|---|---|
| LeNet-5 | 1998 | ~5 tầng | CNN tiên phong; mô-típ conv-pool-FC cho nhận dạng chữ số | ~60 nghìn (rất nhỏ) |
| AlexNet | 2012 | 8 tầng | Thắng ImageNet; ReLU, Dropout, augmentation, train trên GPU | ~60 triệu (lớn) |
| VGG-16 | 2014 | 16–19 tầng | Chỉ conv 3×3 xếp chồng; chứng minh độ sâu quan trọng | ~138 triệu (rất nặng) |
| GoogLeNet | 2014 | 22 tầng | Inception module song song; 1×1 bottleneck; global avg pooling | ~5 triệu (nhẹ) |