Epoch vs Lặp lại khi đào tạo mạng lưới thần kinh


Câu trả lời:


574

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


Thuật ngữ "đợt" không rõ ràng: một số người sử dụng nó để chỉ định toàn bộ tập huấn luyện và một số người sử dụng nó để chỉ số lượng ví dụ đào tạo trong một lần chuyển tiếp / lùi (như tôi đã làm trong câu trả lời này). Để tránh sự mơ hồ đó và làm rõ rằng lô tương ứng với số lượng ví dụ đào tạo trong một lần chuyển tiếp / lùi, người ta có thể sử dụng thuật ngữ mini-batch .


37
Tôi bối rối. Tại sao bạn sẽ đào tạo nhiều hơn một kỷ nguyên - trên tất cả dữ liệu nhiều lần? Điều đó sẽ không dẫn đến quá nhiều?
Soubriquet

29
@Soubriquet Mạng thần kinh thường được đào tạo bằng phương pháp tối ưu hóa lặp (hầu hết thời gian, giảm độ dốc), thường cần thực hiện một vài lần trên tập huấn luyện để có kết quả tốt.
Franck Dernoncourt

6
Nhưng nếu có rất nhiều mẫu đào tạo f, giả sử 1 triệu đô la, chỉ cần một kỷ nguyên là đủ? Mọi người thường làm gì nếu tập huấn luyện rất lớn? Chỉ cần chia tập huấn luyện thành các đợt và chỉ thực hiện một kỷ nguyên?
pikachuchameleon

5
@pikachuchameleon Điều này phụ thuộc vào độ phức tạp của nhiệm vụ: một kỷ nguyên có thể thực sự là đủ trong một số trường hợp.
Franck Dernoncourt

9
@MaxPower - thông thường, bước được thực hiện sau mỗi lần lặp , như câu trả lời của Franck Dernoncourt; đó là những gì chúng ta làm với thông tin từ đường chuyền ngược. Trong một độ dốc giảm dần hàng loạt nhỏ với m lần lặp trên mỗi epoch, chúng tôi cập nhật các tham số m lần trên mỗi epoch.
dan mackinlay

142

Đại Kỷ Nguyênlặp lại mô tả những điều khác nhau.


Đại Kỷ Nguyên

Một epoch mô tả số lần thuật toán nhìn thấy toàn bộ tập dữ liệu. Vì vậy, mỗi lần thuật toán nhìn thấy tất cả các mẫu trong bộ dữ liệu, một epoch đã hoàn thành.

Lặp lại

Một lần lặp mô tả số lần một loạt các dữ liệu được truyền qua các thuật toán. Trong trường hợp mạng thần kinh, điều đó có nghĩa là vượt qua chuyển tiếpvượt qua ngược . Vì vậy, mỗi khi bạn chuyển một lô dữ liệu qua NN, bạn đã hoàn thành một lần lặp .


Thí dụ

Một ví dụ có thể làm cho nó rõ ràng hơn.

Giả sử bạn có bộ dữ liệu gồm 10 ví dụ (hoặc mẫu). Bạn có kích thước lô là 2 và bạn đã chỉ định bạn muốn thuật toán chạy trong 3 epoch.

Do đó, trong mỗi kỷ nguyên, bạn có 5 đợt (10/2 = 5). Mỗi lô được chuyển qua thuật toán, do đó bạn có 5 lần lặp trên mỗi epoch. Vì bạn đã chỉ định 3 epoch, bạn có tổng cộng 15 lần lặp (5 * 3 = 15) để đào tạo.


15
Bạn có thể giải thích nếu các trọng số được cập nhật sau mỗi kỷ nguyên hoặc sau mỗi lần lặp không?
Kế thừa Geek

7
@InheritedGeek các trọng số được cập nhật sau mỗi đợt không epoch hoặc lặp.
thisvdhavin

2
@bhavindhedhi 1 đợt = 1 lần lặp, phải không?
Bee

2
@Bee Không, lấy ví dụ 10000 mẫu đào tạo và 1000 mẫu mỗi đợt sau đó sẽ mất 10 lần lặp để hoàn thành 1 epoch.
thisvdhavin

4
@bhavindhedhi Tôi nghĩ rằng những gì Bee đã hỏi là trong ví dụ của bạn về tổng số 10000 mẫu với 1000 mẫu mỗi đợt, bạn thực sự có tổng số 10 lô, tương đương với 10 lần lặp. Tôi nghĩ điều đó có ý nghĩa, nhưng không chắc đó có phải là một cách diễn giải đúng đắn hay không.
Michael Du

24

Nhiều thuật toán đào tạo mạng thần kinh liên quan đến việc thực hiện nhiều bản trình bày của toàn bộ dữ liệu được đặt vào mạng thần kinh. Thông thường, một bản trình bày duy nhất của toàn bộ tập dữ liệu được gọi là "epoch". Ngược lại, một số thuật toán trình bày dữ liệu cho mạng thần kinh một trường hợp duy nhất tại một thời điểm.

"Lặp lại" là một thuật ngữ tổng quát hơn nhiều, nhưng vì bạn đã hỏi về nó cùng với "epoch", tôi giả sử rằng nguồn của bạn đang đề cập đến việc trình bày một trường hợp duy nhất cho một mạng lưới thần kinh.


3
tuyệt vời, bạn có thể tham khảo một ấn phẩm mà điều này là chi tiết?
Alex

17

Để hiểu sự khác biệt giữa những điều này, bạn phải hiểu Thuật toán Giảm dần Gradient và Biến thể của nó .

Trước khi tôi bắt đầu với câu trả lời thực tế, tôi muốn xây dựng một số nền tảng.

Một là bộ dữ liệu đầy đủ. Kích thước của nó là tổng số ví dụ đào tạo trong bộ dữ liệu có sẵn.

Kích thước lô nhỏ là số lượng ví dụ mà thuật toán học xử lý trong một lần chạy (tiến và lùi).

Một nhỏ là một phần nhỏ trong bộ dữ liệu có kích thước lô nhỏ nhất định .

Lặp lại là số lô dữ liệu mà thuật toán đã thấy (hoặc đơn giản là số lần vượt qua thuật toán đã thực hiện trên tập dữ liệu).

Epochs là số lần thuật toán học tập nhìn thấy bộ dữ liệu hoàn chỉnh. Bây giờ, điều này có thể không bằng số lần lặp , vì tập dữ liệu cũng có thể được xử lý theo lô nhỏ, về bản chất, một lần chuyển có thể chỉ xử lý một phần của tập dữ liệu. Trong những trường hợp như vậy, số lần lặp không bằng số lượng kỷ nguyên .

Trong trường hợp giảm dần độ dốc Batch, toàn bộ lô được xử lý trên mỗi lần đào tạo. Do đó, trình tối ưu hóa giảm dần độ dốc dẫn đến sự hội tụ mượt mà hơn so với giảm dần độ dốc Mini-batch, nhưng mất nhiều thời gian hơn. Độ dốc giảm dần hàng loạt được đảm bảo để tìm tối ưu nếu nó tồn tại.

Giảm dần độ dốc Stochastic là trường hợp đặc biệt của độ dốc giảm dần theo lô nhỏ trong đó kích thước lô nhỏ1 .

Giảm dần độ dốc hàng loạt so với độ dốc giảm dần hàng loạt

So sánh các hệ số gradient gradient, stochastic và mini-batch.


12

Bạn có một dữ liệu đào tạo mà bạn xáo trộn và chọn các đợt nhỏ từ nó. Khi bạn điều chỉnh trọng số và độ lệch của mình bằng một lô nhỏ, bạn đã hoàn thành một lần lặp. Khi bạn hết đợt hàng nhỏ, bạn đã hoàn thành một kỷ nguyên. Sau đó, bạn xáo trộn dữ liệu đào tạo của bạn một lần nữa, chọn lại các đợt nhỏ của bạn và lặp lại tất cả chúng. Đó sẽ là kỷ nguyên thứ hai của bạn.


Nó có thể được liên kết để xác nhận chéo?
sk

8

Thông thường, bạn sẽ chia bộ kiểm tra của mình thành các đợt nhỏ để mạng học hỏi và thực hiện đào tạo từng bước qua số lớp của bạn, áp dụng giảm dần độ dốc. Tất cả các bước nhỏ này có thể được gọi là lặp .

Một kỷ nguyên tương ứng với toàn bộ tập huấn luyện đi qua toàn bộ mạng một lần. Nó có thể hữu ích để hạn chế điều này, ví dụ để chống lại quá mức.


7

Một epoch chứa một vài lần lặp. Đó thực sự là cái "kỷ nguyên" này. Chúng ta hãy định nghĩa 'epoch' là số lần lặp trên tập dữ liệu để huấn luyện mạng thần kinh.


4
epoch không phải là một con số ... điều này có thể làm với việc đọc lại, tôi nghĩ vậy.
Nikana Reklawyks

Bị bỏ qua vì điều này là sai: một epoch là số tập hoặc đợt sao cho mô hình đã xem tất cả dữ liệu huấn luyện một lần.
John ALLen

7

Theo hiểu biết của tôi, khi bạn cần đào tạo NN, bạn cần một bộ dữ liệu lớn liên quan đến nhiều mục dữ liệu. khi NN đang được đào tạo, các mục dữ liệu đi vào từng cái một, được gọi là lặp; Khi toàn bộ dữ liệu đi qua, nó được gọi là epoch.


6

Tôi tin rằng việc lặp lại tương đương với một đợt chuyển tiếp + backprop trong đợt SGD. Epoch đang đi qua toàn bộ dữ liệu một lần (như một người khác đã đề cập).


5

Tôi đoán trong bối cảnh thuật ngữ mạng thần kinh:

  • Epoch: Khi mạng của bạn kết thúc trên toàn bộ tập huấn luyện (nghĩa là một lần cho mỗi trường hợp đào tạo), nó sẽ hoàn thành một epoch .

Để xác định lần lặp (còn gọi là các bước ), trước tiên bạn cần biết về kích thước lô :

  • Kích thước hàng loạt: Có thể bạn sẽ không muốn xử lý tất cả các trường hợp đào tạo tại một lần chuyển tiếp vì nó không hiệu quả và cần một bộ nhớ lớn. Vì vậy, những gì thường được thực hiện là chia các trường hợp đào tạo thành các tập hợp con (tức là các đợt), thực hiện một lần vượt qua tập hợp con được chọn (tức là đợt), sau đó tối ưu hóa mạng thông qua truyền ngược. Số lượng các trường hợp đào tạo trong một tập hợp con (tức là, đợt) được gọi là batch_size .

  • Lặp lại: (còn gọi là các bước đào tạo) Bạn biết rằng mạng của bạn phải vượt qua tất cả các trường hợp đào tạo trong một lần để hoàn thành một kỷ nguyên. Nhưng chờ đã! khi bạn chia các trường hợp đào tạo của mình thành các đợt, điều đó có nghĩa là bạn chỉ có thể xử lý một đợt (một tập hợp các trường hợp đào tạo) trong một lần chuyển tiếp, vậy còn các đợt khác thì sao? Đây là lúc thuật ngữ Iteration phát huy tác dụng:

    • Định nghĩa: Số lần chuyển tiếp (Số lượng đợt mà bạn đã tạo) mà mạng của bạn phải thực hiện để hoàn thành một kỷ nguyên (nghĩa là vượt qua tất cả các trường hợp đào tạo) được gọi là Lặp lại .

Ví dụ: khi bạn có 1000 trường hợp đào tạo và bạn muốn thực hiện theo đợt với kích thước 10; bạn phải thực hiện 10000/10 = 1000 lần lặp để hoàn thành một kỷ nguyên.

Hy vọng điều này có thể trả lời câu hỏi của bạn!


3

epoch là một phép lặp của tập hợp con của các mẫu để đào tạo, ví dụ, thuật toán giảm độ dốc trong mạng trung tính. Một tài liệu tham khảo tốt là: http://neuralnetworksanddeeplearning.com/chap1.html

Lưu ý rằng trang có mã cho thuật toán giảm độ dốc sử dụng epoch

def SGD(self, training_data, epochs, mini_batch_size, eta,
        test_data=None):
    """Train the neural network using mini-batch stochastic
    gradient descent.  The "training_data" is a list of tuples
    "(x, y)" representing the training inputs and the desired
    outputs.  The other non-optional parameters are
    self-explanatory.  If "test_data" is provided then the
    network will be evaluated against the test data after each
    epoch, and partial progress printed out.  This is useful for
    tracking progress, but slows things down substantially."""
    if test_data: n_test = len(test_data)
    n = len(training_data)
    for j in xrange(epochs):
        random.shuffle(training_data)
        mini_batches = [
            training_data[k:k+mini_batch_size]
            for k in xrange(0, n, mini_batch_size)]
        for mini_batch in mini_batches:
            self.update_mini_batch(mini_batch, eta)
        if test_data:
            print "Epoch {0}: {1} / {2}".format(
                j, self.evaluate(test_data), n_test)
        else:
            print "Epoch {0} complete".format(j)

Nhìn vào mã. Đối với mỗi epoch, chúng tôi tạo ngẫu nhiên một tập hợp con của các đầu vào cho thuật toán giảm độ dốc. Tại sao epoch có hiệu quả cũng được giải thích trong trang. Xin vui lòng xem qua.


1

kỷ nguyên

Một khóa đào tạo đầy đủ trên toàn bộ tập dữ liệu sao cho mỗi ví dụ đã được nhìn thấy một lần. Do đó, một epoch đại diện cho các lần lặp đào tạo kích thước N / đợt , trong đó N là tổng số ví dụ.

lặp đi lặp lại

Một bản cập nhật duy nhất về trọng lượng của một người mẫu trong quá trình đào tạo. Lặp lại bao gồm tính toán độ dốc của các tham số liên quan đến mất mát trên một dữ liệu.

như tiền thưởng:

lô hàng

Tập hợp các ví dụ được sử dụng trong một lần lặp (nghĩa là cập nhật một độ dốc ) của đào tạo mô hình .

Xem thêm kích thước lô .

nguồn: https://developers.google.com/machine-learning/glossary/


0

1.Epoch là 1 chu kỳ hoàn chỉnh trong đó mạng nơ-ron đã thấy tất cả dữ liệu của anh ta.
2. Người ta có thể nói 100.000 hình ảnh để huấn luyện mô hình, tuy nhiên không gian bộ nhớ có thể không đủ để xử lý tất cả các hình ảnh cùng một lúc, do đó chúng tôi chia tách đào tạo mô hình trên các khối dữ liệu nhỏ hơn được gọi là lô. ví dụ kích thước lô là 100.
3. Chúng ta cần che tất cả các hình ảnh bằng nhiều lô. Vì vậy, chúng ta sẽ cần 1000 lần lặp để bao gồm tất cả 100.000 hình ảnh. (Kích thước 100 lô * 1000 lần lặp)
4. Một khi Mạng thần kinh xem xét toàn bộ dữ liệu, nó được gọi là 1 Epoch (Điểm 1). Người ta có thể cần nhiều kỷ nguyên để đào tạo mô hình. (chúng ta hãy nói 10 kỷ nguyên).

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.