Tối ưu hóa các mô hình AI bằng cách tỉa thưa (pruning) — giảm độ phức tạp, tăng hiệu quả và triển khai nhanh hơn trên các thiết bị biên mà không làm giảm hiệu suất.
Cắt tỉa là một kỹ thuật quan trọng trong học máy , nhằm mục đích giảm kích thước và độ phức tạp tính toán của mạng nơ-ron (NN) bằng cách loại bỏ các tham số không cần thiết. Giống như việc cắt tỉa cành chết khỏi cây để thúc đẩy sự phát triển khỏe mạnh, cắt tỉa mô hình xác định và loại bỏ các trọng số hoặc kết nối mô hình đóng góp tối thiểu vào đầu ra của hệ thống. Mục tiêu chính là tạo ra một mô hình thưa thớt duy trì độ chính xác cao, đồng thời giảm đáng kể mức sử dụng bộ nhớ và cải thiện độ trễ suy luận . Quá trình này rất cần thiết để triển khai các kiến trúc phức tạp, chẳng hạn như Ultralytics YOLO11 , trên các thiết bị hạn chế về tài nguyên, nơi lưu trữ và khả năng xử lý bị hạn chế.
Quá trình này thường bắt đầu với một mô hình được huấn luyện trước. Các thuật toán phân tích mạng để tìm các tham số - thường được biểu diễn dưới dạng tenxơ - có giá trị gần bằng 0 hoặc có tác động hạn chế đến dự đoán cuối cùng. Các tham số này sau đó được loại bỏ hoặc "đặt về 0". Vì việc loại bỏ các kết nối có thể tạm thời làm giảm hiệu suất, mô hình thường trải qua một quá trình gọi là tinh chỉnh (fine-tuning) , trong đó nó được huấn luyện lại trong một vài kỷ nguyên để cho phép các trọng số còn lại điều chỉnh và khôi phục độ chính xác đã mất.
Có hai loại cắt tỉa chính:
Điều quan trọng là phải phân biệt việc cắt tỉa với các chiến lược tối ưu hóa mô hình khác, mặc dù chúng thường được sử dụng song song:
Việc cắt tỉa đóng vai trò quan trọng trong việc hỗ trợ Edge AI trên nhiều ngành công nghiệp khác nhau:
Trong khi các mô hình YOLO Ultralytics được tối ưu hóa cao ngay khi xuất xưởng, các nhà phát triển có thể thử nghiệm cắt tỉa bằng cách sử dụng tiêu chuẩn PyTorch tiện ích. Ví dụ sau đây minh họa cách áp dụng cắt tỉa không có cấu trúc cho một lớp tích chập tiêu chuẩn có trong các mô hình thị giác máy tính.
import torch
import torch.nn.utils.prune as prune
from ultralytics.nn.modules import Conv
# Initialize a standard convolutional block used in YOLO models
layer = Conv(c1=64, c2=128)
# Apply L1 unstructured pruning to remove 30% of the lowest magnitude weights
prune.l1_unstructured(layer.conv, name="weight", amount=0.3)
# Verify the sparsity (percentage of zero weights)
sparsity = float(torch.sum(layer.conv.weight == 0)) / layer.conv.weight.nelement()
print(f"Layer sparsity achieved: {sparsity:.2%}")
Những tiến bộ trong tương lai về kiến trúc hiệu quả, chẳng hạn như YOLO26 sắp ra mắt, nhằm mục đích tích hợp các nguyên tắc tối ưu hóa này một cách tự nhiên, tạo ra các mô hình nhỏ hơn, nhanh hơn và chính xác hơn theo thiết kế.