Hiểu dừng sớm trong các mạng thần kinh và ý nghĩa của nó khi sử dụng xác nhận chéo


8

Tôi hơi bối rối và bối rối trước ý tưởng về cách xác định kỹ thuật dừng sớm. Nếu bạn xem Wikipedia , nó được định nghĩa như sau:

  1. Chia dữ liệu đào tạo thành tập huấn luyện và tập xác thực, ví dụ theo tỷ lệ 2 trên 1.
  2. Chỉ huấn luyện về tập huấn luyện và đánh giá lỗi theo từng ví dụ trên tập xác thực một lần trong một thời gian, ví dụ sau mỗi kỷ nguyên thứ năm.
  3. Dừng đào tạo ngay khi lỗi trên bộ xác nhận cao hơn lần cuối cùng được kiểm tra.
  4. Sử dụng các trọng số mà mạng đã có trong bước trước đó là kết quả của quá trình đào tạo.

Tôi đã sử dụng phương pháp này trong các thí nghiệm của mình (với xác thực chéo 10 lần). Tôi đang kiểm tra lỗi xác thực trên mỗi epoch (và cũng tính toán độ chính xác xác thực) và đặt tham số kiên nhẫn là 2. Điều đó có nghĩa là, nếu lỗi xác thực tăng lên trong 2 epoch liên tiếp -> dừng đào tạo. Sau đó, tôi đã sử dụng kết quả của kỷ nguyên cuối cùng khi mô hình kết thúc.

Ian Goodfellow sử dụng một định nghĩa khác trong cuốn sách học sâu của mình . Bước thứ 4, ông đề nghị sử dụng các trọng số của mô hình hoạt động tốt nhất (nghĩa là lưu mô hình mỗi khi kiểm tra lỗi xác nhận).

Tôi không cần mô hình đã lưu, tôi chỉ cần kết quả cho công việc của mình. Vì vậy, đối với tôi, đề xuất dừng sớm của Goodfellow có nghĩa là tôi chỉ cần đạt độ chính xác cao nhất mà tôi đạt được cho kết quả cuối cùng của mình? Bằng cách nào đó điều này có vẻ không hợp pháp. Tôi không có thông tin này trong tình huống thực tế khi không có bộ phát triển. Nhưng trong trường hợp đó, lý do để sử dụng dừng sớm ở nơi đầu tiên là gì? Xác định số lượng kỷ nguyên bằng cách lấy trung bình số lượng kỷ nguyên cho các nếp gấp và sử dụng nó cho lần chạy thử sau này?


Thông thường, bạn sẽ có dữ liệu thử nghiệm riêng biệt mà bạn sẽ sử dụng để có được ước tính không thiên vị về hiệu suất mô hình của mình.
Aaron

Đúng. Tôi có đào tạo, phát triển và thử nghiệm tách. Nhưng sử dụng dừng sớm trên phần tách thử nghiệm sẽ là gian lận. Vì vậy, tôi không thể sử dụng phương pháp dừng sớm trên bộ kiểm tra cho lần chạy cuối cùng. Trong trường hợp đó, việc dừng sớm sẽ chỉ hữu ích để tìm ra có bao nhiêu epoch chạy trên bộ thử nghiệm (để ngăn chặn quá mức). Theo như tôi hiểu bây giờ.
V1nc3nt

Cần phải chỉ ra rằng có một câu hỏi tương tự tồn tại , nhưng vì câu hỏi này ở đây là về một mô hình duy nhất, trong khi câu hỏi trước đó đề cập đến một loại hỗn hợp của các mô hình (hoặc vì vậy tôi tin rằng - thành thật mà nói, cả câu hỏi và câu trả lời có khá khó hiểu đối với tôi). Vì vậy, tôi không cảm thấy rằng câu hỏi trước đó có câu trả lời cho các câu hỏi được đặt ra bởi OP ở đây.
fnl

Câu trả lời:


7

Xác định số lượng kỷ nguyên bằng cách lấy trung bình số lượng kỷ nguyên cho các nếp gấp và sử dụng nó cho lần chạy thử sau này?

Câu trả lời ngắn nhất có thể: Có! Nhưng hãy để tôi thêm một số bối cảnh ...

Tôi tin rằng bạn đang đề cập đến Phần 7.8, trang 246ff, về Dừng sớm trong cuốn sách Học sâu. Tuy nhiên, quy trình được mô tả ở đó khác biệt đáng kể so với quy trình của bạn. Goodfellow et al. đề nghị chia dữ liệu của bạn thành ba bộ trước: tập huấn luyện, phát triển và kiểm tra. Sau đó, bạn huấn luyện (trên tập huấn luyện) cho đến khi lỗi từ mô hình đó tăng (trên tập dev), tại điểm bạn dừng lại. Cuối cùng, bạn sử dụng mô hình được đào tạo có lỗi thiết lập dev thấp nhất và đánh giá nó trên tập kiểm tra. Không có xác nhận chéo liên quan ở tất cả.

Tuy nhiên, dường như bạn đang cố gắng thực hiện cả dừng sớm (ES) và xác thực chéo (CV), cũng như đánh giá mô hình tất cả trên cùng một bộ. Đó là, dường như bạn đang sử dụng tất cả dữ liệu của mình cho CV, đào tạo về mỗi lần phân tách với ES và sau đó sử dụng hiệu suất trung bình trên các phân tách CV đó làm kết quả đánh giá cuối cùng của bạn. Nếu đó là trường hợp, đó thực sự là quá phù hợp (và chắc chắn không phải là những gì được mô tả bởi Goodfellow và cộng sự), và cách tiếp cận của bạn cung cấp cho bạn kết quả ngược lại với ý nghĩa của ES - như một kỹ thuật chính quy để ngăn chặnquá phù hợp. Nếu không rõ lý do tại sao: Bởi vì bạn đã "đạt đỉnh" tại các trường hợp đánh giá cuối cùng của mình trong thời gian đào tạo để tìm ra khi nào ("sớm") ngừng đào tạo; Nghĩa là, bạn đang tối ưu hóa đối với các trường hợp đánh giá trong quá trình đào tạo, mà (quá mức) phù hợp mô hình của bạn (trên dữ liệu đánh giá), theo định nghĩa.

Vì vậy, bây giờ, tôi hy vọng đã trả lời [hai] câu hỏi khác của bạn.

Câu trả lời của broson higgs (cho câu hỏi cuối cùng của bạn, như được trích dẫn ở trên) đã đưa ra một cách có ý nghĩa để kết hợp CV và ES để giúp bạn tiết kiệm thời gian đào tạo: Bạn chỉ có thể chia dữ liệu đầy đủ của mình thành hai bộ - một dev và một bộ kiểm tra - và sử dụng bộ dev để làm CV trong khi áp dụng ES trên mỗi lần phân chia. Đó là, bạn huấn luyện trên mỗi phần tách của bộ dev của bạn và dừng lại khi lỗi thấp nhất trong các trường hợp đào tạo bạn đặt sang một bên để đánh giá sự phân chia đó đã đạt được [1]. Sau đó, bạn tính trung bình số epoch cần thiết để đạt được lỗi thấp nhất đó từ mỗi lần phân tách và huấn luyện trên toàn bộ dev được đặt cho số epoch (trung bình) đó. Cuối cùng, bạn xác nhận kết quả đó trong bài kiểm tra mà bạn đặt sang một bên và chưa chạm vào.

[1] Mặc dù không giống như broson higgs, tôi khuyên bạn nên đánh giá sau mỗi kỷ nguyên. Hai lý do cho điều đó: (1), so với đào tạo, thời gian đánh giá sẽ không đáng kể. (2), hãy tưởng tượng tối thiểu của bạn. lỗi ở epoch 51, nhưng bạn đánh giá ở epoch 50 và 60. Không chắc là lỗi ở epoch 60 sẽ thấp hơn ở epoch 50; Tuy nhiên, bạn sẽ chọn 60 làm tham số kỷ nguyên của mình, rõ ràng là tối ưu phụ và trên thực tế thậm chí còn đi ngược lại một chút so với mục đích sử dụng ES ở vị trí đầu tiên.


Cảm ơn bạn vì câu trả lời. Tôi đã chia dữ liệu của tôi trong dev và thử nghiệm. Tôi không bao giờ chạm vào bộ thử nghiệm. Tôi tiếp tục chia bộ dev thành 10 lần và làm CV trên đó. Đào tạo 9 lần, dev 1 lần. Nếp gấp dev được sử dụng cho ES và đã kiểm tra từng epoch rồi. Vì tôi đã không giải thích cách tôi chia tay (xin lỗi!); Tôi đã làm những gì bạn đề nghị tôi làm hay tôi đã làm bạn sai ở đâu đó?
V1nc3nt

Làm tốt lắm - bạn đã làm mọi thứ chính xác, tôi muốn nói!
fnl

Vì vậy, cuối cùng dừng lại sớm chỉ là một cách để điều chỉnh "số lượng kỷ nguyên" siêu tham số. Tôi bắt đầu sử dụng nó dưới ấn tượng sai và tôi sợ rằng tôi phải bắt đầu lại và lặp lại tất cả các thử nghiệm của mình, vì tôi đã sử dụng nó sai cách. Nhưng tôi có thể kết hợp nó một cách trơn tru. Cảm ơn bạn đã giúp đỡ.
V1nc3nt

3

Cách mà bạn có thể sử dụng xác thực chéo để xác định số lượng kỷ nguyên tối ưu để đào tạo với việc dừng sớm là: giả sử chúng tôi đã đào tạo từ 1 đến 100 kỷ nguyên. Đối với mỗi lần gấp, hãy huấn luyện mô hình của bạn và ghi lại lỗi xác nhận cứ sau 10 giây. Lưu các quỹ đạo của lỗi xác nhận so với số epoch được đào tạo và tính trung bình chúng với nhau trên tất cả các nếp gấp. Điều này sẽ mang lại một đường cong "lỗi thử nghiệm trung bình so với epoch". Điểm dừng để sử dụng là số lượng kỷ nguyên giảm thiểu lỗi kiểm tra trung bình. Sau đó, bạn có thể đào tạo mạng của mình trên tập huấn luyện đầy đủ (không xác thực chéo) cho nhiều kỷ nguyên đó.

Mục đích của việc dừng sớm là để tránh quá mức. Bạn sử dụng xác thực chéo N lần để ước tính lỗi tổng quát hóa của mô hình của mình bằng cách tạo N bộ kiểm tra / thử nghiệm tổng hợp và (thường) lấy trung bình các kết quả. Hy vọng rằng, bộ thử nghiệm (còn gọi là dữ liệu trong thế giới thực mới) mà bạn được cung cấp sau này sẽ đủ tương tự với các bộ thử nghiệm tổng hợp mà bạn đã tạo bằng CV để điểm dừng bạn tìm thấy trước đó gần với tối ưu cho thử nghiệm mới này dữ liệu.


Những gì bạn mô tả trong đoạn đầu tiên của bạn không thực sự là "dừng sớm" như tôi nghĩ, vì bạn phải chạy mô hình của mình cho 100 epoch này trên mỗi lần để so sánh kết quả, phải không? Nhưng thông thường, bạn cũng muốn dừng việc xác thực chéo, nếu tôi hiểu chính xác (cũng tiết kiệm rất nhiều thời gian). Dù sao, nó có vẻ là một cách hợp lý để tìm ra có bao nhiêu kỷ nguyên để chạy cho lần chạy thử cuối cùng. Nhưng bạn có nên sử dụng dừng sớm như đề xuất (cũng cho CV) và sử dụng phương pháp bạn mô tả trong đoạn đầu tiên của bạn trên mô hình điều chỉnh tốt nhất, cuối cùng không?
V1nc3nt

1
Làm thế nào tôi đã mô tả "dừng lại sớm" là cách (tôi tin) hầu hết mọi người sẽ làm điều đó. Thông thường, khi một người đang tạo ra lỗi kiểm tra so với các đường cong epoch trong CV, bạn chỉ cần sửa tổng số epoch bạn đào tạo. Hy vọng rằng vào thời điểm bạn đạt đến số lượng kỷ nguyên được phép tối đa, đường cong lỗi đã bị san phẳng. Nếu không, quay lại và lặp lại quá trình với giới hạn epoch tối đa lớn hơn. Mặt khác, nếu chương trình của bạn cho bạn biết rằng lỗi kiểm tra đã giảm 50 epoch, thì bạn không cần phải đào tạo nó đến 100. Mục tiêu là chỉ cần đào tạo đủ để bạn thấy lỗi kiểm tra của bạn dừng lại nâng cao.
tiếng cười khúc khích

1
Tôi cũng muốn chỉ ra rằng một lý do khác để duy trì số lượng kỷ nguyên đào tạo tối đa nhất quán trong các lần là vì trong 1 lần, lỗi kiểm tra có thể ngừng cải thiện ở mức 60 epoch, nhưng trong một trường hợp khác, nó có thể dừng ở mức 80 epoch. Khi bạn tính trung bình tất cả các lỗi kiểm tra cùng nhau trên các nếp gấp để xác định điểm dừng thực sự, bạn sẽ cần dữ liệu lỗi kiểm tra ở mỗi epoch cho mỗi lần gấp. Dừng việc đào tạo trong một thời gian sớm có thể ngăn bạn có được điều đó.
tiếng cười khúc khích

Trên thực tế lần đầu tiên tôi bắt đầu sử dụng dừng sớm, bởi vì đào tạo mất nhiều thời gian. Mô hình có rất nhiều thông số và dữ liệu. Vì vậy, tôi muốn nó dừng lại ngay khi lỗi xác thực tăng (trong 2 epoch liên tiếp được gọi là tham số "kiên nhẫn"). Vì vậy, tôi không thể thực sự đào tạo nó cho đến khi việc học dừng lại. Nhưng tôi vẫn có thể làm những gì bạn đề xuất trên mô hình cuối cùng và so sánh các quỹ đạo lỗi từ các epoch của tất cả các nếp gấp của nó và lấy số epoch có sai số trung bình thấp nhất. Tôi đã hiểu đúng về bạn chưa? Tất nhiên tôi chỉ có thể so sánh tối thiểu các kỷ nguyên được tính toán của tất cả các nếp gấp.
V1nc3nt

1
Vincent, tôi nghĩ bạn hiểu chính xác. Khi tính trung bình các đường cong lỗi với nhau, bạn thực sự phải dừng ở số epoch tối thiểu trên các nếp gấp. Để an toàn, tôi khuyên bạn nên quay lại và huấn luyện các mô hình trong các nếp gấp khác cho đến thời gian dừng tối đa được tìm thấy.
tiếng cười khúc khích
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.