Kích thước lô trong mạng lưới thần kinh là gì?


175

Tôi đang sử dụng Python Keras packagecho mạng thần kinh. Đây là liên kết . Là batch_sizebằng với số lượng mẫu thử? Từ Wikipedia chúng tôi có thông tin này :

Tuy nhiên, trong các trường hợp khác, việc đánh giá độ dốc tổng có thể yêu cầu đánh giá đắt tiền của độ dốc từ tất cả các hàm triệu hồi. Khi tập huấn luyện là rất lớn và không có công thức đơn giản nào tồn tại, việc đánh giá tổng số độ dốc trở nên rất tốn kém, bởi vì việc đánh giá độ dốc đòi hỏi phải đánh giá tất cả độ dốc của hàm tổng. Để tiết kiệm chi phí tính toán ở mỗi lần lặp, mẫu gốc dốc ngẫu nhiên lấy một tập hợp các hàm triệu hồi ở mỗi bước. Điều này rất hiệu quả trong trường hợp các vấn đề máy học quy mô lớn.

Trên đây là thông tin mô tả dữ liệu thử nghiệm? Điều này có giống như batch_sizetrong máy ảnh (Số lượng mẫu trên mỗi lần cập nhật độ dốc) không?


3
Thật tốt khi thấy class.coursera.org/ml-005/lecture/preview , đặc biệt đối với bạn tuần 4-6 + 10. Wikipedia có thể không phải là tài nguyên quý giá để học các mạng thần kinh.
404pio

Câu trả lời:


230

Các kích thước hàng loạt định nghĩa số lượng mẫu sẽ được truyền qua mạng.

Chẳng hạn, giả sử bạn có 1050 mẫu đào tạo và bạn muốn thiết lập batch_sizebằng 100. Thuật toán lấy 100 mẫu đầu tiên (từ thứ 1 đến thứ 100) từ tập dữ liệu đào tạo và huấn luyện mạng. Tiếp theo, nó lấy 100 mẫu thứ hai (từ thứ 101 đến thứ 200) và huấn luyện lại mạng. Chúng tôi có thể tiếp tục làm thủ tục này cho đến khi chúng tôi tuyên truyền tất cả các mẫu thông qua mạng. Vấn đề có thể xảy ra với bộ mẫu cuối cùng. Trong ví dụ của chúng tôi, chúng tôi đã sử dụng 1050 không chia hết cho 100 mà không có phần còn lại. Giải pháp đơn giản nhất là lấy 50 mẫu cuối cùng và huấn luyện mạng.

Ưu điểm của việc sử dụng cỡ lô <số lượng tất cả các mẫu:

  • Nó đòi hỏi ít bộ nhớ hơn. Vì bạn đào tạo mạng bằng cách sử dụng ít mẫu hơn, quy trình đào tạo tổng thể đòi hỏi ít bộ nhớ hơn. Điều đó đặc biệt quan trọng nếu bạn không thể điều chỉnh toàn bộ tập dữ liệu trong bộ nhớ của máy.

  • Thông thường các mạng đào tạo nhanh hơn với các đợt nhỏ. Đó là bởi vì chúng tôi cập nhật các trọng số sau mỗi lần truyền. Trong ví dụ của chúng tôi, chúng tôi đã nhân giống 11 đợt (10 trong số đó có 100 mẫu và 1 có 50 mẫu) và sau mỗi đợt chúng tôi đã cập nhật các tham số của mạng. Nếu chúng tôi sử dụng tất cả các mẫu trong quá trình truyền, chúng tôi sẽ chỉ thực hiện 1 cập nhật cho tham số của mạng.

Nhược điểm của việc sử dụng cỡ lô <số lượng của tất cả các mẫu:

  • Lô càng nhỏ, ước tính độ dốc sẽ càng kém chính xác. Trong hình bên dưới, bạn có thể thấy rằng hướng của gradient lô nhỏ (màu xanh lá cây) dao động nhiều hơn so với hướng của gradient lô đầy đủ (màu xanh lam).

Hướng gradient cho các thiết lập hàng loạt khác nhau

Stochastic chỉ là một lô nhỏ có giá trị batch_sizebằng 1. Trong trường hợp đó, độ dốc thay đổi hướng thậm chí thường xuyên hơn so với độ dốc của lô nhỏ.


3
Không, tôi đã không. Đây là kỹ thuật phổ biến trong các mạng thần kinh và thuật ngữ này bạn có thể thấy trong các thư viện, sách và bài viết khác nhau. Bạn có muốn kiểm tra lỗi dữ liệu kiểm tra trong mỗi kỷ nguyên hoặc chỉ xác minh mô hình sau khi đào tạo?
itdxer

1
Mạng cũng hội tụ nhanh hơn vì số lượng cập nhật cao hơn đáng kể. Thiết lập kích thước lô nhỏ là một nghệ thuật, quá nhỏ và bạn có nguy cơ khiến việc học của mình quá ngẫu nhiên, nhanh hơn nhưng sẽ hội tụ thành các mô hình không đáng tin cậy, quá lớn và nó không phù hợp với bộ nhớ và vẫn mất nhiều thời gian.
Ramalho

2
Thông thường khi mọi người nói học trực tuyến họ có nghĩa batch_size=1. Ý tưởng đằng sau việc học trực tuyến là bạn cập nhật mô hình của mình ngay khi nhìn thấy ví dụ. Với kích thước lô lớn hơn, điều đó có nghĩa là trước tiên bạn đang xem qua nhiều mẫu trước khi thực hiện cập nhật. Trong kích thước RNN của lô có thể có ý nghĩa khác nhau. Thông thường, thông thường để phân chia chuỗi đào tạo thành cửa sổ có kích thước cố định (như 10 từ). Trong trường hợp này bao gồm 100 cửa sổ trong quá trình đào tạo sẽ có nghĩa là bạn có batch_size=100.
itdxer

1
@Oleg Melnikov, nếu lô cuối cùng của bạn có kích thước nhỏ hơn đáng kể (giả sử nó sẽ là 1 thay vì 50) thì ước tính độ dốc sẽ kém chính xác hơn và nó có thể làm tăng trọng lượng của bạn một chút. Trong hình trên, hãy tưởng tượng rằng bạn thực hiện 10 bản cập nhật với một lô nhỏ 100 (dòng màu xanh lá cây) và một bản cập nhật với lô nhỏ 1 (dòng màu đỏ). Điều đó có nghĩa là trong kỷ nguyên tiếp theo, một vài lần lặp đầu tiên có thể bắt đầu giải quyết vấn đề với bản cập nhật đợt 1 nhỏ nhất từ ​​kỷ nguyên trước.
itdxer

1
@OlegMelnikov Cuốn sách học sâu của MIT có một lời giải thích tốt liên quan đến vấn đề này (chương 8.1.3): deeplearningbook.org/contents/optimization.html
itdxer 26/12/17

153

Trong thuật ngữ mạng thần kinh:

  • một epoch = một vượt qua và một vượt qua tất cả các ví dụ đào tạo
  • kích thước lô = số lượng ví dụ đào tạo trong một lần chuyển tiếp / lùi. Kích thước lô càng cao, bạn càng cần nhiều dung lượng bộ nhớ.
  • số lần lặp = số lần vượt qua, mỗi lần sử dụng [cỡ lô] số ví dụ. Để rõ ràng, một đường chuyền = một đường chuyền về phía trước + một đường chuyền ngược (chúng tôi không tính đường chuyền về phía trước và đường chuyền ngược là hai đường chuyền khác nhau).

Ví dụ: nếu bạn có 1000 ví dụ đào tạo và kích thước lô của bạn là 500, thì sẽ mất 2 lần lặp để hoàn thành 1 epoch.

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


Nhưng có gì khác biệt giữa việc sử dụng số lượng ví dụ [kích thước lô] và huấn luyện mạng trên mỗi ví dụ và tiến hành với ví dụ về số lượng [kích thước lô] tiếp theo. Vì bạn truyền một ví dụ qua mạng và áp dụng SGD và lấy ví dụ tiếp theo, do đó, sẽ không có sự khác biệt nếu kích thước lô là 10 hoặc 1000 hoặc 100000. Sau khi [số lượng kích thước] các ví dụ được thực hiện, ví dụ tiếp theo của đợt tiếp theo sẽ theo sau. Nó chỉ tạo ra sự khác biệt nếu số lượng ví dụ [kích thước lô] sẽ vượt qua [số lần lặp] lần mạng và sau đó tiến hành với các ví dụ [kích thước lô] tiếp theo.
Erhard Dinhobl

Một điểm khác biệt quan trọng là bước học tập (một bước) được áp dụng một lần cho mỗi đợt, trong khi bạn phải quay vòng qua tất cả các đợt để thực hiện một kỷ nguyên. Vì vậy, sự khác biệt cũng là thuật toán không chỉ trong bộ nhớ: các lô lớn hơn có nghĩa là bạn lấy trung bình độ dốc trên nhiều mẫu hơn.
meduz

Sự khác biệt giữa kỷ nguyên và lặp đi lặp lại là gì?
Goldname

2
@Goldname 1 epoch bao gồm tất cả các ví dụ đào tạo trong khi 1 lần lặp chỉ bao gồm [cỡ lô] số lượng ví dụ đào tạo.
Franck Dernoncourt

3

Khi giải quyết vấn đề tối ưu hóa với CPU, bạn lặp đi lặp lại một thuật toán trên một số dữ liệu đầu vào. Trong mỗi lần lặp này, bạn thường cập nhật một Số liệu về vấn đề của mình khi thực hiện một số Tính toán trên Dữ liệu. Bây giờ khi kích thước dữ liệu của bạn lớn, nó có thể cần một lượng thời gian đáng kể để hoàn thành mỗi lần lặp và có thể tiêu tốn rất nhiều tài nguyên. Vì vậy, đôi khi bạn chọn áp dụng các phép tính lặp này trên Phần dữ liệu để tiết kiệm thời gian và tài nguyên tính toán. Phần này là batch_size và quá trình này được gọi là (trong phần xử lý dữ liệu hàng loạt của Mạng thần kinh). Khi bạn áp dụng các tính toán của mình trên tất cả dữ liệu của mình, thì bạn sẽ xử lý dữ liệu trực tuyến. Tôi đoán thuật ngữ này xuất phát từ những năm 60, và thậm chí trước đó. Có ai nhớ không. dơi tập tin DOS? Nhưng tất nhiên, khái niệm này có nghĩa là một luồng hoặc một phần dữ liệu sẽ được sử dụng.


2

Các tài liệu cho Kerasvề kích thước hàng loạt có thể được tìm thấy dưới fitchức năng trong mô hình (chức năng API) trang

batch_size: Số nguyên hoặc Không có. Số lượng mẫu trên mỗi bản cập nhật gradient. Nếu không được chỉ định, batch_size sẽ mặc định là 32.

Nếu bạn có một tập dữ liệu nhỏ, tốt nhất nên tạo kích thước lô bằng với kích thước của dữ liệu huấn luyện. Đầu tiên thử với một lô nhỏ sau đó tăng để tiết kiệm thời gian. Như itdxer đã đề cập, có sự đánh đổi giữa độ chính xác và tốc độ.

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.