TL; DR: Kích thước lô nhỏ quá lớn thường dẫn đến độ chính xác thấp hơn !
Đối với những người quan tâm, đây là một lời giải thích.
Có hai khái niệm về tốc độ:
- Tốc độ tính toán
- Tốc độ hội tụ của một thuật toán
Tốc độ tính toán đơn giản là tốc độ thực hiện các phép tính số trong phần cứng. Như bạn đã nói, nó thường cao hơn với kích thước lô nhỏ lớn hơn. Đó là bởi vì các thư viện đại số tuyến tính sử dụng vector hóa cho các phép toán vectơ và ma trận để tăng tốc chúng, với chi phí sử dụng nhiều bộ nhớ hơn. Lợi nhuận có thể có ý nghĩa đến một điểm. Từ kinh nghiệm của tôi, có một điểm sau đó chỉ có mức tăng biên về tốc độ, nếu có. Điểm này phụ thuộc vào tập dữ liệu, phần cứng và thư viện được sử dụng để tính toán số (dưới mui xe).
Nhưng, đừng quên rằng còn có một khái niệm khác về tốc độ, cho chúng ta biết thuật toán của chúng ta hội tụ nhanh như thế nào.
Thứ nhất, thuật toán của chúng ta hội tụ có ý nghĩa gì? Chà, tùy thuộc vào chúng tôi xác định và quyết định khi nào chúng tôi hài lòng với độ chính xác hoặc lỗi mà chúng tôi nhận được, được tính trên bộ xác thực. Chúng ta có thể xác định trước và chờ thuật toán đến điểm đó hoặc chúng ta có thể theo dõi quá trình đào tạo và quyết định dừng nó khi lỗi xác thực bắt đầu tăng đáng kể (mô hình bắt đầu điều chỉnh quá mức tập dữ liệu). Chúng tôi thực sự không nên dừng nó ngay lập tức, khoảnh khắc đầu tiên lỗi bắt đầu tăng lên, nếu chúng tôi làm việc với các lô nhỏ, bởi vì chúng tôi sử dụng Stochastic Gradient Descent, SGD. Trong trường hợp (lô đầy đủ) Gradient Descent, sau mỗi epoch, thuật toán sẽ giải quyết ở mức tối thiểu, có thể là cục bộ hoặc toàn cục. SGD không bao giờ thực sự ổn định ở mức tối thiểu. Nó cứ dao động xung quanh nó. Nó có thể tiếp tục vô tận,
Bây giờ, sau tất cả lý thuyết đó, có một "cái bẫy" mà chúng ta cần chú ý. Khi sử dụng cỡ lô nhỏ hơn, việc tính toán sai số có nhiều nhiễu hơn so với khi chúng ta sử dụng cỡ lô lớn hơn. Người ta sẽ nói, tốt, điều đó thật tệ phải không? Vấn đề là, tiếng ồn đó có thể giúp thuật toán nhảy ra khỏi mức tối thiểu cục bộ xấu và có nhiều cơ hội tìm thấy mức tối thiểu cục bộ tốt hơn, hoặc hy vọng mức tối thiểu toàn cầu.
Do đó, nếu chúng ta có thể tìm ra giải pháp tốt hơn nhanh hơn bằng cách sử dụng kích thước lô nhỏ hơn thay vì kích thước lớn hơn, chỉ bằng sự trợ giúp của tiếng ồn "không mong muốn", chúng ta có thể điều chỉnh giữa tổng thời gian để thuật toán của chúng ta tìm ra mức thỏa đáng giải pháp và độ chính xác cao hơn.
Điều tôi muốn nói là, với độ chính xác (hoặc lỗi) nhất định, kích thước lô nhỏ hơn có thể dẫn đến tổng thời gian đào tạo ngắn hơn, không dài hơn, như nhiều người tin.
Hoặc, nếu chúng tôi quyết định giữ nguyên thời gian đào tạo như trước đây, chúng tôi có thể có độ chính xác cao hơn một chút với kích thước lô nhỏ hơn và rất có thể chúng tôi sẽ, đặc biệt là nếu chúng tôi đã chọn tỷ lệ học tập phù hợp.
Nếu bạn có thời gian, hãy xem bài viết này:
Đánh giá có hệ thống về các tiến bộ CNN trên ImageNet
Đặc biệt, hãy xem "3.7. Kích thước hàng loạt và tốc độ học tập", và Hình 8. Bạn sẽ thấy kích thước lô nhỏ dẫn đến độ chính xác kém hơn , ngay cả khi điều chỉnh tỷ lệ học tập theo kinh nghiệm.
Nói chung, kích thước lô 32 là điểm khởi đầu tốt và bạn cũng nên thử với 64, 128 và 256. Các giá trị khác (thấp hơn hoặc cao hơn) có thể tốt cho một số bộ dữ liệu, nhưng phạm vi đã cho nói chung là tốt nhất để bắt đầu thử nghiệm với. Mặc dù, dưới 32, nó có thể trở nên quá chậm vì tốc độ tính toán thấp hơn đáng kể, vì không khai thác vector hóa đến mức tối đa. Nếu bạn gặp lỗi "hết bộ nhớ", bạn vẫn nên thử giảm kích thước lô nhỏ.
Vì vậy, nó không chỉ đơn giản là sử dụng kích thước lô nhỏ nhất có thể phù hợp với bộ nhớ.
Để kết luận và trả lời câu hỏi của bạn, kích thước lô nhỏ hơn (không quá nhỏ) thường không chỉ dẫn đến số lần lặp nhỏ hơn của thuật toán đào tạo, so với kích thước lô lớn, mà còn có độ chính xác tổng thể cao hơn, nghĩa là, một mạng lưới thần kinh hoạt động tốt hơn, trong cùng một khoảng thời gian đào tạo, hoặc ít hơn.
Đừng quên rằng tiếng ồn cao hơn có thể giúp nó nhảy ra khỏi mức tối thiểu cục bộ xấu, thay vì để nó bị mắc kẹt trong đó.