Bất kỳ sự khác biệt trong chính quy hóa trong MLP giữa các cập nhật hàng loạt và cá nhân?


9

Tôi vừa mới học về chính quy hóa như một cách tiếp cận để kiểm soát sự phù hợp quá mức, và tôi muốn kết hợp ý tưởng này vào một triển khai đơn giản của backpropagation và Multceptionron (MLP) mà tôi kết hợp.

Hiện tại để tránh sự phù hợp quá mức, tôi xác nhận chéo và giữ cho mạng có điểm số tốt nhất cho đến nay trên bộ xác thực. Điều này hoạt động tốt, nhưng việc thêm chính quy sẽ có lợi cho tôi trong việc lựa chọn chính xác thuật toán và tham số chính quy sẽ làm cho mạng của tôi hội tụ trên một mô hình không phù hợp hơn một cách có hệ thống hơn.

Công thức tôi có cho thuật ngữ cập nhật (từ khóa học Coursera ML) được nêu là cập nhật theo đợt, ví dụ cho từng trọng số, sau khi tổng hợp tất cả các đồng bằng áp dụng cho toàn bộ tập huấn từ lan truyền lỗi, điều chỉnh lambda * current_weightcũng được thêm vào trước khi kết hợp delta được trừ vào cuối đợt, trong đó lambdatham số chính quy.

Việc triển khai backpropagation của tôi sử dụng cập nhật trọng lượng cho mỗi mục. Tôi lo ngại rằng tôi không thể chỉ sao chép cách tiếp cận hàng loạt, mặc dù nó có vẻ trực quan với tôi. Liệu một thuật ngữ chính quy nhỏ hơn cho mỗi mục cũng hoạt động tốt?

Ví dụ lambda * current_weight / N, trong đó N là kích thước của tập huấn luyện - thoạt nhìn có vẻ hợp lý. Mặc dù vậy, tôi không thể tìm thấy bất cứ điều gì về chủ đề này và tôi tự hỏi liệu đó có phải là do việc chính quy hóa không hoạt động tốt với cập nhật cho mỗi mục hay thậm chí đi theo một tên khác hoặc công thức bị thay đổi.

Câu trả lời:


2

Chính quy có liên quan trong học tập trên mỗi mục là tốt. Tôi sẽ đề nghị bắt đầu với một phương pháp xác nhận cơ bản để tìm hiểu lambda, cho dù bạn đang học theo đợt hay theo từng mục. Đây là cách tiếp cận dễ dàng và an toàn nhất. Hãy thử thủ công với một số giá trị khác nhau. ví dụ 0,001. 0,003, 0,01, 0,03, 0,1, v.v. và xem cách xác thực của bạn hoạt động. Sau này, bạn có thể tự động hóa quá trình này bằng cách giới thiệu phương pháp tìm kiếm tuyến tính hoặc cục bộ.

Là một lưu ý phụ, tôi tin rằng giá trị của lambda nên được xem xét liên quan đến các bản cập nhật của vectơ tham số, thay vì kích thước tập huấn luyện. Đối với đào tạo hàng loạt, bạn có một bản cập nhật tham số cho mỗi tập dữ liệu , trong khi đối với bản cập nhật trực tuyến cho mỗi mẫu (bất kể kích thước tập huấn luyện).

Gần đây tôi đã vấp phải Câu hỏi Crossvalidated này , có vẻ khá giống với Câu hỏi của bạn. Có một liên kết đến một bài báo về một thuật toán SGD mới , với một số nội dung có liên quan. Có thể hữu ích để xem (đặc biệt là các trang 1742-1743).


Có, tôi vẫn có ý định xác thực chéo để kiểm tra sự phù hợp quá mức, câu hỏi của tôi cơ bản hơn thế - tôi không thể tìm thấy bất kỳ tài liệu tham khảo nào về việc sử dụng chính quy với điều chỉnh trọng lượng cho mỗi mục trong MLP, và tôi lo ngại rằng có một điều tốt lý do cho điều đó - ví dụ: nó không hoạt động trong chế độ học tập đó, hoặc cần điều chỉnh. Câu hỏi crossvalidated rất giống nhau mặc dù và mang lại cho tôi sự tự tin hơn, cảm ơn bạn. Trang thuật toán SGD dường như có một phương pháp ngẫu nhiên khác để giới thiệu chính quy hóa, có thể là một chút nâng cao đối với tôi, nhưng chính xác là những gì tôi đang tìm kiếm.
Neil Slater

Chính quy có liên quan trong học tập trên mỗi mục là tốt. Tôi vẫn sẽ đề nghị bắt đầu với một phương pháp xác nhận cơ bản để tìm ra lambda. Đây là cách tiếp cận dễ dàng và an toàn nhất. Hãy thử thủ công với một số giá trị khác nhau. ví dụ 0,001. 0,003, 0,01, 0,03, 0,1, v.v. và xem cách xác thực của bạn hoạt động. Sau này, bạn có thể tự động hóa quá trình này bằng cách giới thiệu phương pháp tìm kiếm tuyến tính hoặc cục bộ.
bảo hiểm

Nếu bình luận của bạn ở trên đã được chỉnh sửa và thay thế câu / câu hỏi đầu tiên trong câu trả lời của bạn, thì tôi nghĩ tôi có thể chấp nhận nó.
Neil Slater

Cảm ơn đã chỉ ra, tôi đồng ý. Chỉnh sửa nó trong. Hy vọng nó là rõ ràng hơn.
bảo mật

2

Để bổ sung cho những gì insys nói:

Chính quy được sử dụng khi tính toán backpropagation cho tất cả các trọng số trong MLP của bạn. Do đó, thay vì tính toán độ dốc liên quan đến tất cả đầu vào của tập huấn luyện ( batch), bạn chỉ sử dụng một số / một mục (s) ( stochastic or semi-stochastic). Cuối cùng, bạn sẽ giới hạn kết quả của bản cập nhật liên quan đến một mục thay vì tất cả những gì cũng đúng.

Ngoài ra, nếu tôi nhớ chính xác, Andrew NG đã sử dụng L2-regularization. Các /Ntrong lambda * current_weight / Nlà không bắt buộc, nó chỉ giúp rescaling đầu vào. Tuy nhiên, nếu bạn chọn không sử dụng nó, bạn sẽ có (trong hầu hết các trường hợp) để chọn một giá trị khác cho lambda.

Bạn cũng có thể sử dụng thuật toán tìm kiếm lưới để chọn giá trị tốt nhất cho lambda( siêu tham số => giá trị bạn phải chọ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.