2016-01-03 14 views
5

Trong bài đăng trên blog của Ilya Sutskever, A brief overview of Deep Learning, ông mô tả cách chọn kích thước minibatch phù hợp để đào tạo mạng thần kinh sâu hiệu quả. Ông đưa ra lời khuyên "sử dụng minibatch nhỏ hơn chạy hiệu quả trên máy tính của bạn". Xem báo giá đầy đủ bên dưới.Chọn kích thước nhỏ gọn cho việc học tập sâu

Tôi đã nhìn thấy những phát biểu tương tự của các nhà nghiên cứu học thuật sâu sắc nổi tiếng khác, nhưng vẫn chưa rõ tôi làm thế nào để tìm được kích thước nhỏ nhất chính xác. Nhìn thấy như một minibatch lớn hơn có thể cho phép một tỷ lệ học tập lớn hơn, có vẻ như nó đòi hỏi rất nhiều thí nghiệm để xác định xem một kích thước minibatch nhất định mang lại hiệu suất tốt hơn về tốc độ đào tạo.

Tôi có GPU có RAM 4 GB và sử dụng thư viện Caffe và Keras. Điều gì là trong trường hợp này một heuristic thực tế để lựa chọn một kích thước minibatch tốt cho rằng mỗi quan sát có một dấu chân bộ nhớ nhất định M?

Minibatches: Sử dụng minibatches. Máy tính hiện đại không thể hiệu quả nếu bạn xử lý một trường hợp đào tạo tại một thời điểm. Nó là bao la hiệu quả hơn để đào tạo mạng trên minibatches của 128 ví dụ, bởi vì làm như vậy sẽ cho kết quả lớn hơn thông lượng. Nó thực sự sẽ được tốt đẹp để sử dụng minibatches kích thước 1, và họ có lẽ sẽ dẫn đến hiệu suất được cải thiện và thấp hơn; nhưng lợi ích của việc thực hiện như vậy là lớn hơn số lợi ích tính toán lớn được cung cấp bởi minibatches. Nhưng đừng sử dụng các xe buýt nhỏ rất lớn vì chúng có xu hướng hoạt động kém hơn và vượt trội hơn. Vì vậy, các khuyến nghị thực tế là: sử dụng minibatch nhỏ hơn chạy hiệu quả trên máy tính của bạn.

Trả lời

6

Khi chúng tôi đào tạo mạng, khi chúng tôi tính toán chuyển tiếp, chúng tôi phải giữ tất cả các đầu ra kích hoạt trung gian cho đường chuyền ngược. Bạn chỉ cần tính toán bao nhiêu bộ nhớ bạn sẽ lưu trữ tất cả các kết quả kích hoạt có liên quan trong lần chuyển tiếp của bạn, ngoài các ràng buộc bộ nhớ khác (lưu trữ trọng số của bạn trên GPU, v.v.). Vì vậy, quan sát thấy rằng nếu mạng của bạn là khá sâu, bạn có thể muốn có một batchsize nhỏ hơn vì bạn có thể không có đủ bộ nhớ.

Chọn kích thước minibatch là hỗn hợp của các ràng buộc về bộ nhớ và hiệu suất/độ chính xác (thường được đánh giá bằng xác thực chéo).

Cá nhân tôi đoán thời gian/tính toán bằng tay bao nhiêu bộ nhớ GPU mà thẻ chuyển tiếp/lùi của tôi sẽ sử dụng hết và thử một vài giá trị. Nếu ví dụ lớn nhất tôi có thể phù hợp là khoảng 128, tôi có thể vượt qua xác nhận bằng cách sử dụng 32, 64, 96, vv chỉ để được triệt để và xem nếu tôi có thể có được hiệu suất tốt hơn. Điều này thường cho một mạng sâu hơn mà là sẽ đẩy bộ nhớ GPU của tôi (tôi cũng chỉ có một thẻ 4 GB, không có quyền truy cập vào các thẻ NVIDIA quái vật).

Tôi nghĩ rằng có xu hướng chú trọng hơn vào kiến ​​trúc mạng, kỹ thuật tối ưu hóa/thủ thuật của giao dịch, xử lý trước dữ liệu.

Các vấn đề liên quan