Trao đổi kích thước lô so với số lần lặp để đào tạo mạng lưới thần kinh


221

Khi đào tạo một mạng lưới thần kinh, nó tạo ra sự khác biệt gì để thiết lập:

  • kích thước lô đến và số lần lặp đến bab
  • so với kích thước lô đến và số lần lặp đến dcd

trong đó ?ab=cd

Nói cách khác, giả sử rằng chúng ta huấn luyện mạng thần kinh với cùng một số ví dụ đào tạo, làm thế nào để đặt kích thước lô tối ưu và số lần lặp? (trong đó kích thước lô * số lần lặp = số ví dụ đào tạo được hiển thị cho mạng thần kinh, với cùng ví dụ đào tạo được hiển thị nhiều lần)

Tôi biết rằng kích thước lô càng cao, càng cần nhiều dung lượng bộ nhớ và nó thường làm cho việc tính toán nhanh hơn. Nhưng về mặt hiệu suất của mạng được đào tạo, nó có gì khác biệt?


1
Kiểm tra blog này mô tả cách chọn kích thước lô phù hợp trong khi so sánh ảnh hưởng của các kích cỡ lô khác nhau đến độ chính xác của bộ dữ liệu Cifar-10.
Teja Sreenivas

Câu trả lời:


207

Từ Nitish Shirish Keskar, Dheevatsa Mudigere, Jorge Nocedal, Mikhail Smelyanskiy, Ping Tak Peter Tang. Về đào tạo hàng loạt cho học tập sâu: Khoảng cách khái quát hóa và Sharp Minima. https://arxiv.org/abs/1609.04836 :

Phương pháp giảm độ dốc ngẫu nhiên và các biến thể của nó là các thuật toán được lựa chọn cho nhiều tác vụ Deep Learning. Các phương pháp này hoạt động theo chế độ hàng loạt nhỏ trong đó một phần dữ liệu huấn luyện, thường là 32--512 điểm dữ liệu, được lấy mẫu để tính toán xấp xỉ với độ dốc. Trong thực tế, người ta đã quan sát thấy rằng khi sử dụng một lô lớn hơn, có sự suy giảm đáng kể về chất lượng của mô hình, được đo bằng khả năng khái quát hóa của nó.Đã có một số nỗ lực để điều tra nguyên nhân của sự sụt giảm khái quát hóa này trong chế độ hàng loạt lớn, tuy nhiên câu trả lời chính xác cho hiện tượng này là, cho đến nay vẫn chưa rõ. Trong bài báo này, chúng tôi trình bày nhiều bằng chứng bằng số hỗ trợ cho quan điểm rằng các phương pháp lô lớn có xu hướng hội tụ đến các bộ giảm thiểu sắc nét của các chức năng đào tạo và kiểm tra - và cực tiểu sắc nét dẫn đến việc khái quát kém hơn. Ngược lại, các phương pháp lô nhỏ luôn hội tụ đến các bộ giảm thiểu phẳng và các thí nghiệm của chúng tôi ủng hộ quan điểm thường thấy rằng điều này là do nhiễu vốn có trong ước tính độ dốc. Chúng tôi cũng thảo luận về một số chiến lược theo kinh nghiệm giúp các phương pháp hàng loạt lớn loại bỏ khoảng cách khái quát hóa và kết thúc bằng một loạt các ý tưởng nghiên cứu trong tương lai và các câu hỏi mở.

[Càng]

2f(x)2f(x)

[Càng]

nhập mô tả hình ảnh ở đây

Ngoài ra, một số hiểu biết tốt từ Ian Goodfellow trả lời về lý do tại sao không sử dụng toàn bộ tập huấn luyện để tính toán độ dốc? trên Quora:

Quy mô của tỷ lệ học tập bị giới hạn chủ yếu bởi các yếu tố như hàm chi phí cong như thế nào. Bạn có thể nghĩ về độ dốc giảm dần khi thực hiện xấp xỉ tuyến tính cho hàm chi phí, sau đó di chuyển xuống dốc dọc theo chi phí gần đúng đó. Nếu hàm chi phí rất phi tuyến tính (có độ cong cao) thì phép tính gần đúng sẽ không tốt cho đến nay, do đó chỉ các kích thước bước nhỏ là an toàn. Bạn có thể đọc thêm về điều này trong Chương 4 của sách giáo khoa học sâu, về tính toán số: http://www.deeplearningbook.org/contents/numerical.html

Khi bạn đặt m ví dụ trong một xe buýt nhỏ, bạn cần thực hiện tính toán O (m) và sử dụng bộ nhớ O (m), nhưng bạn giảm lượng không chắc chắn trong gradient theo hệ số chỉ O (sqrt (m)). Nói cách khác, có lợi nhuận cận biên giảm dần để đưa thêm ví dụ vào xe buýt nhỏ. Bạn có thể đọc thêm về điều này trong Chương 8 của sách giáo khoa học sâu, về các thuật toán tối ưu hóa để học sâu: http://www.deeplearningbook.org/contents/optimization.html

Ngoài ra, nếu bạn nghĩ về nó, thậm chí sử dụng toàn bộ tập huấn luyện không thực sự mang lại cho bạn độ dốc thực sự. Độ dốc thực sự sẽ là độ dốc mong đợi với kỳ vọng được thực hiện trên tất cả các ví dụ có thể, được phân bổ theo trọng số của phân phối tạo dữ liệu. Sử dụng toàn bộ tập huấn luyện chỉ là sử dụng kích thước xe buýt rất lớn, trong đó kích thước của xe buýt nhỏ của bạn bị giới hạn bởi số tiền bạn chi cho việc thu thập dữ liệu, thay vì số tiền bạn chi cho việc tính toán.

Liên quan: Giảm dần hàng loạt so với giảm dần độ dốc ngẫu nhiên


Vì batch_size chỉ phân chia tập dữ liệu huấn luyện thành các đợt, nên sắp xếp lại tập dữ liệu (không tạm thời) để có phương sai đồng nhất trên tất cả các đợt? Làm như vậy có thể giảm nhu cầu tối ưu hóa kích thước lô, điều này chỉ tốt khi tìm thấy sự hội tụ nhanh hơn. Nếu vậy, nó sẽ được thực hiện như thế nào? Tôi đã nghĩ rằng nó có thể không cung cấp một cực tiểu phẳng hơn. Sẽ đánh giá cao hướng dẫn chi tiết.
user12348

@ user12348 Bạn sẽ sắp xếp lại tập dữ liệu như thế nào? Làm thế nào bạn có thể ước tính rằng kích thước dữ liệu nhất định sẽ tạo ra vector tính năng cụ thể sau khi đào tạo?
Đám mây Cho

46

Tôi giả sử bạn đang nói về việc giảm kích thước lô trong thuật toán giảm độ dốc ngẫu nhiên theo lô nhỏ và so sánh với kích thước lô lớn hơn yêu cầu số lần lặp ít hơn.

Andrew Ng. cung cấp một cuộc thảo luận tốt về điều này và một số hình ảnh trong lớp coursera trực tuyến của anh ấy trên ML và mạng lưới thần kinh. Vì vậy, phần còn lại của bài đăng này chủ yếu là một sự hồi sinh những lời dạy của ông từ lớp học đó.

Chúng ta hãy thực hiện hai thái cực, ở một bên, mỗi bước giảm độ dốc đang sử dụng toàn bộ tập dữ liệu. Bạn đang tính toán độ dốc cho mỗi mẫu. Trong trường hợp này, bạn biết chính xác tốt nhất trực tiếp đến mức tối thiểu địa phương. Bạn không lãng phí thời gian đi sai hướng. Vì vậy, về mặt số bước giảm dần, bạn sẽ đến đó trong một vài lần.

Tất nhiên tính toán độ dốc trên toàn bộ dữ liệu là đắt tiền. Vì vậy, bây giờ chúng ta đi đến cực đoan khác. Một lô cỡ chỉ 1 mẫu. Trong trường hợp này, độ dốc của mẫu đó có thể khiến bạn hoàn toàn sai hướng. Nhưng này, chi phí tính toán một gradient khá nhỏ. Khi bạn thực hiện các bước liên quan đến chỉ một mẫu bạn "đi lang thang" xung quanh một chút, nhưng trung bình bạn hướng tới mức tối thiểu cục bộ hợp lý tương tự như trong việc giảm độ dốc toàn bộ.

Đây có thể là một khoảnh khắc để chỉ ra rằng tôi đã thấy một số tài liệu cho thấy rằng có lẽ việc nảy xung quanh gốc dốc ngẫu nhiên 1 mẫu này có thể giúp bạn thoát ra khỏi một cực tiểu địa phương mà chế độ hàng loạt đầy đủ sẽ không tránh được, nhưng điều đó gây tranh cãi. Một số câu trả lời tốt khác ở đây giải quyết câu hỏi này trực tiếp hơn tôi có.

Về khả năng tính toán, trong khi quy trình GD ngẫu nhiên mẫu đơn mất nhiều lần lặp hơn, thì cuối cùng bạn sẽ đến đó với chi phí thấp hơn chế độ hàng loạt, "thông thường". Đây là cách Andrew Ng đặt nó.

Bây giờ chúng ta hãy tìm nền tảng trung gian mà bạn hỏi về. Chúng tôi có thể nhận ra rằng các thư viện BLAS hiện đại làm cho toán học vectơ khá hiệu quả, do đó, tính toán 10 hoặc 100 mẫu cùng một lúc, giả sử bạn đã vectơ mã của mình đúng cách, sẽ chỉ hoạt động nhiều hơn so với tính toán 1 mẫu (bạn cũng đạt được hiệu quả của cuộc gọi bộ nhớ thủ thuật tính toán được xây dựng trong các thư viện toán học hiệu quả nhất). Và tính trung bình trên một lô gồm 10, 100, 1000 mẫu sẽ tạo ra một độ dốc gần đúng hợp lý hơn cho độ dốc chế độ hàng loạt đầy đủ thực sự. Vì vậy, các bước của chúng tôi bây giờ chính xác hơn, có nghĩa là chúng tôi cần ít hơn trong số chúng để hội tụ và với chi phí chỉ cao hơn một chút so với GD mẫu đơn.

Tối ưu hóa kích thước chính xác của lô nhỏ mà bạn nên sử dụng thường để lại bản dùng thử và lỗi. Chạy một số thử nghiệm trên một mẫu của bộ dữ liệu với các con số từ hàng chục đến vài nghìn và xem cái nào hội tụ nhanh nhất, sau đó đi với nó. Kích thước hàng loạt trong các phạm vi có vẻ khá phổ biến trên các tài liệu. Và nếu dữ liệu của bạn thực sự là IID, thì định lý giới hạn trung tâm về sự biến đổi của các quy trình ngẫu nhiên cũng sẽ gợi ý rằng các phạm vi đó là một xấp xỉ hợp lý của độ dốc đầy đủ.

Việc quyết định chính xác thời điểm dừng lặp thường được thực hiện bằng cách theo dõi lỗi tổng quát hóa của bạn đối với lỗi chưa được kiểm tra trên bộ xác thực và chọn điểm tại đó lỗi xác thực ở điểm thấp nhất. Việc đào tạo quá nhiều lần lặp lại cuối cùng sẽ dẫn đến việc quá mức, tại thời điểm đó, lỗi của bạn trên bộ xác nhận sẽ bắt đầu tăng lên. Khi bạn thấy điều này xảy ra sao lưu và dừng lại ở điểm tối ưu.


22

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 đó.


14

Tôi đang thêm một câu trả lời khác cho câu hỏi này để tham khảo một tài liệu hội nghị ICLR mới (2018) từ Google gần như trực tiếp giải quyết câu hỏi này.

Tiêu đề: Không phân rã tỷ lệ học tập, tăng kích thước hàng loạt

https://arxiv.org/abs/1711.00361

Bản tóm tắt từ bài viết trên được sao chép ở đây:

Đó là thực tế phổ biến để phân rã tỷ lệ học tập. Ở đây chúng tôi cho thấy một người thường có thể có được đường cong học tập giống nhau trên cả tập huấn luyện và kiểm tra bằng cách thay vào đó tăng kích thước lô trong quá trình đào tạo. Quy trình này thành công đối với việc giảm độ dốc ngẫu nhiên (SGD), SGD với động lượng, động lượng Nesterov và Adam. Nó đạt độ chính xác kiểm tra tương đương sau cùng một số kỷ nguyên đào tạo, nhưng với ít cập nhật tham số hơn, dẫn đến độ song song lớn hơn và thời gian đào tạo ngắn hơn. Chúng tôi có thể giảm thêm số lượng cập nhật tham số bằng cách tăng tốc độ học tập và nhân rộng kích thước lô B∝ϵ. Cuối cùng, người ta có thể tăng hệ số động lượng m và thang đo B∝1 / (1 m), mặc dù điều này có xu hướng làm giảm nhẹ độ chính xác của thử nghiệm. Quan trọng, kỹ thuật của chúng tôi cho phép chúng tôi định lại lịch trình đào tạo hiện có cho đào tạo hàng loạt lớn mà không cần điều chỉnh siêu tham số. Chúng tôi đào tạo ResNet-50 trên ImageNet với độ chính xác xác thực 76,1% trong vòng dưới 30 phút.


1
Yêu cầu bộ nhớ lớn hơn có vẻ là một sự đánh đổi tồi tệ vì đơn giản là tránh làm giảm giá trị. Ngoài ra IMHO có dấu chân bộ nhớ tăng lên trong quá trình đào tạo tạo ra một thuật toán có thể mở rộng ít hơn, không nhiều hơn.
P-Gn

3

Tôi cho thấy một số kinh nghiệm thực nghiệm ở đây . Tôi đã thực hiện một thử nghiệm với kích thước lô 4 và kích thước lô 4096. Kích thước 4096 đang thực hiện các giao dịch ngược ít hơn 1024 lần. Vì vậy, trực giác của tôi là các lô lớn hơn thực hiện ít hơn và các bước tìm kiếm thô hơn cho giải pháp tối ưu, và do đó bằng cách xây dựng sẽ ít có khả năng hội tụ vào giải pháp tối ưu.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.