Tối ưu hóa các mô hình machine learning bằng cách tỉa bớt mô hình. Đạt được khả năng suy luận nhanh hơn, giảm sử dụng bộ nhớ và hiệu quả năng lượng cho các triển khai có tài nguyên hạn chế.
Cắt tỉa mô hình là một kỹ thuật tối ưu hóa mô hình được thiết kế để giảm kích thước và độ phức tạp tính toán của mạng nơ-ron bằng cách loại bỏ các tham số không cần thiết. Khi các mô hình trí tuệ nhân tạo phát triển lớn hơn để đạt hiệu suất cao hơn, chúng thường bị tham số hóa quá mức, chứa nhiều kết nối hoặc nơ-ron không đóng góp nhiều vào kết quả đầu ra cuối cùng. Bằng cách xác định và loại bỏ các thành phần dư thừa này, các nhà phát triển có thể tạo ra các mô hình tinh gọn hơn, đòi hỏi ít bộ nhớ và năng lượng hơn, đồng thời cung cấp khả năng suy luận thời gian thực nhanh hơn. Quá trình này đặc biệt quan trọng khi triển khai các kiến trúc phức tạp như YOLO11 trên phần cứng khan hiếm tài nguyên, chẳng hạn như điện thoại di động hoặc cảm biến nhúng.
Quá trình cắt tỉa thường bao gồm ba giai đoạn chính: huấn luyện, cắt tỉa và tinh chỉnh . Ban đầu, một mô hình lớn được huấn luyện để hội tụ nhằm nắm bắt các đặc điểm phức tạp. Trong giai đoạn cắt tỉa, một thuật toán sẽ đánh giá tầm quan trọng của các tham số cụ thể - thường là weights and biases - dựa trên các tiêu chí như độ lớn hoặc độ nhạy. Các tham số được coi là không đáng kể sẽ được đặt về 0 hoặc bị loại bỏ hoàn toàn.
Tuy nhiên, việc chỉ cắt bỏ một phần của mạng có thể làm giảm độ chính xác của nó. Để khắc phục điều này, mô hình trải qua một vòng đào tạo lại tiếp theo được gọi là tinh chỉnh. Bước này cho phép các tham số còn lại điều chỉnh và bù đắp cho các kết nối bị thiếu, thường khôi phục hiệu suất của mô hình về mức gần như ban đầu. Hiệu quả của phương pháp này được hỗ trợ bởi Giả thuyết Vé số , cho rằng các mạng dày đặc chứa các mạng con nhỏ hơn có khả năng đạt được độ chính xác tương đương khi được đào tạo riêng lẻ.
Các chiến lược cắt tỉa thường được phân loại theo cấu trúc của các thành phần bị loại bỏ:
Mặc dù cả hai đều là kỹ thuật tối ưu hóa phổ biến, điều quan trọng là phải phân biệt giữa cắt tỉa và lượng tử hóa mô hình . Cắt tỉa tập trung vào việc giảm số lượng tham số (kết nối hoặc nơ-ron), từ đó thay đổi đáng kể kiến trúc của mô hình. Ngược lại, lượng tử hóa làm giảm độ chính xác của các tham số đó, ví dụ, chuyển đổi số dấu phẩy động 32 bit thành số nguyên 8 bit. Các phương pháp này thường bổ sung cho nhau; trước tiên, nhà phát triển có thể cắt tỉa mô hình để loại bỏ sự dư thừa, sau đó lượng tử hóa nó để giảm thiểu hơn nữa dung lượng bộ nhớ cho việc triển khai .
Việc cắt tỉa đóng vai trò quan trọng trong việc giúp công nghệ thị giác máy tính tiên tiến có thể tiếp cận được trong các tình huống thực tế:
Các framework như PyTorch cung cấp các tiện ích tích hợp để áp dụng cắt tỉa theo chương trình. Ví dụ sau đây minh họa cách áp dụng cắt tỉa phi cấu trúc cho một lớp tích chập, một thao tác phổ biến trước khi xuất mô hình sang định dạng được tối ưu hóa như ONNX .
import torch
import torch.nn.utils.prune as prune
# Initialize a standard convolutional layer
layer = torch.nn.Conv2d(in_channels=3, out_channels=64, kernel_size=3)
# Apply L1 unstructured pruning to remove 30% of the connections
# This sets the smallest 30% of weights (by absolute value) to zero
prune.l1_unstructured(layer, name="weight", amount=0.3)
# Verify sparsity: calculate the percentage of zero parameters
sparsity = float(torch.sum(layer.weight == 0)) / layer.weight.nelement()
print(f"Layer sparsity: {sparsity:.2%}")