Tại sao không quá nhiều mạng lưới thần kinh tàn phá để phân loại MNIST?


8

Tôi có một mạng nơ ron đơn giản (NN) để phân loại MNIST. Nó bao gồm 2 lớp ẩn, mỗi lớp có 500 nơ-ron. Do đó kích thước của NN là: 784-500-500-10. ReLU được sử dụng trong tất cả các nơ-ron, softmax được sử dụng ở đầu ra và entropy chéo là hàm mất.

Điều khiến tôi thắc mắc là tại sao quá mức không xuất hiện để tàn phá NN?

Xem xét số lượng tham số (trọng lượng) của NN. Đó là khoảng Tuy nhiên, trong thí nghiệm của tôi, tôi chỉ sử dụng ví dụ (một phần mười của tập huấn luyện MNIST) để huấn luyện NN. (Điều này chỉ để giữ cho thời gian chạy ngắn. Lỗi đào tạo và kiểm tra sẽ giảm đáng kể nếu tôi sử dụng nhiều ví dụ đào tạo hơn.) Tôi lặp lại thí nghiệm 10 lần. Độ dốc dốc ngẫu nhiên đồng bằng được sử dụng (không có RMS prop hoặc động lượng); không sử dụng thường xuyên / thả ra / dừng sớm được sử dụng. Các lỗi đào tạo và lỗi kiểm tra được báo cáo là:6000

784×500+500×500+500×10= =647000.
6000

Không.1234567số 8910EtrmộtTôin(%)7,810,39,111.08,79,29,38.310,38,6EteSt(%)11,713,913.214.112.113.213.311.913.412,7

Lưu ý rằng trong tất cả 10 thử nghiệm (mỗi thử nghiệm khởi tạo tham số ngẫu nhiên độc lập), lỗi thử nghiệm khác với lỗi đào tạo chỉ bằng khoảng. 4%, mặc dù tôi đã sử dụng các ví dụ 6K để đào tạo các thông số 647K. Kích thước VC của mạng nơ ron theo thứ tự ít nhất, trong đólà số cạnh (trọng số). Vậy tại sao lỗi kiểm tra không cao hơn (ví dụ 30% hoặc 50%) so với lỗi đào tạo? Tôi đánh giá rất cao nếu ai đó có thể chỉ ra nơi tôi đã bỏ lỡ. Cảm ơn rất nhiều!Ôi(|E|tôiog(|E|))|E|

[EDITS 2017/6/30]

Để làm rõ tác dụng của việc dừng sớm, tôi đã thực hiện lại 10 thí nghiệm, mỗi lần thử nghiệm với 20 kỷ nguyên. Tỷ lệ lỗi được hiển thị trong hình dưới đây:

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

Khoảng cách giữa lỗi kiểm tra và huấn luyện đã tăng lên khi nhiều kỷ nguyên được sử dụng trong khóa đào tạo. Tuy nhiên, phần đuôi của lỗi kiểm tra gần như không thay đổi sau khi lỗi đào tạo được đưa về 0. Hơn nữa, tôi thấy xu hướng tương tự cho các kích cỡ khác của tập huấn luyện. Tỷ lệ lỗi trung bình ở cuối 20 kỷ nguyên đào tạo được vẽ theo quy mô của tập huấn luyện dưới đây:

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

Vì vậy, quá mức xảy ra, nhưng nó dường như không tàn phá NN. Xem xét số lượng tham số (647K) mà chúng ta cần cho đào tạo và số lượng ví dụ đào tạo chúng ta có (<60K), câu hỏi vẫn còn là: tại sao việc quá mức dễ dàng khiến NN trở nên vô dụng? Hơn nữa, điều này có đúng với ReLU NN cho tất cả các nhiệm vụ phân loại với đầu ra softmax và hàm mục tiêu entropy chéo không? Có ai đó đã nhìn thấy một ví dụ phản tác dụng?


Tôi không thể thấy bất kỳ bình luận nào về số lượng kỷ nguyên được sử dụng. Bạn đã thử chạy nhiều hơn / ít epoch hơn để thấy hiệu quả có chưa? Bạn đề cập đến việc không sử dụng dừng sớm, nhưng có lẽ bạn đang quyết định dừng lại bằng cách nào đó? Bạn đang chạy cho số lượng lớn các kỷ nguyên, như vậy mạng dường như đã hội tụ?
Neil Slater

@NeilSlater Tôi chỉ sử dụng 1 epoch trong thử nghiệm và chấm dứt SGD sau nó. (Điều này là để giữ cho thời gian chạy ngắn, vì tôi đang thực hiện trên Matlab để kiểm soát và hiển thị tốt hơn). Tuy nhiên, nhìn vào giá trị của hàm mất trong SGD (kích thước lô nhỏ = 1), tuy nhiên, nó có vẻ hội tụ, tức là đầu ra max softmax đang lơ lửng gần 1. Tôi cũng đã thử 60K ví dụ (1 epoch) và thấy xu hướng tương tự, tức là lỗi đào tạo ~ 3% và lỗi kiểm tra ~ 4%.
syeh_106

Tôi nghĩ rằng câu trả lời sau các thí nghiệm mở rộng của bạn là sự kết hợp giữa câu trả lời của tôi và Bashar. Nó có thể hữu ích nếu bạn nghĩ về kiểm tra tỷ lệ lỗi: đào tạo - lỗi đào tạo 0% với lỗi kiểm tra 7% không phải là hiệu suất tốt - đây là vấn đề quá lớn. Ngay cả tỷ lệ lỗi 2,5% của bạn trên các ví dụ đào tạo 60k cũng tệ hơn 10 lần so với tỷ lệ lỗi hiện đại về vấn đề này. Tuy nhiên, tôi đoán câu hỏi của bạn là "tại sao mạng không bị thoái lui trở lại tỷ lệ lỗi 50% hoặc thậm chí 90%"? Câu trả lời được nêu trong câu trả lời của Bashar, mặc dù tôi vẫn tự hỏi liệu các lỗi kiểm tra có tăng lên với nhiều kỷ nguyên hơn không
Neil Slater

1
@NeilSlater Chắc chắn, kích thước bước SGD = 0,001. Các trọng số được khởi tạo ngẫu nhiên và thống nhất trên [-0.2, +0.2] trên 2 lớp đầu tiên, [-1, + 1] trên lớp đầu ra.
syeh_106

1
Tôi cập nhật câu trả lời của tôi với một số điều tra bổ sung. Về cơ bản, nó đồng ý với những phát hiện của bạn và đưa ra một số giải thích về bối cảnh và vẫy tay
Neil Slater

Câu trả lời:


7

Tôi đã sao chép kết quả của bạn bằng cách sử dụng Keras và nhận được những con số rất giống nhau vì vậy tôi không nghĩ bạn đang làm gì sai.

Vì thích thú, tôi chạy thêm nhiều kỷ nguyên để xem điều gì sẽ xảy ra. Độ chính xác của kết quả kiểm tra và đào tạo vẫn khá ổn định. Tuy nhiên, các giá trị tổn thất trôi xa hơn theo thời gian. Sau 10 kỷ nguyên hoặc lâu hơn, tôi đã đạt được độ chính xác 100%, độ chính xác kiểm tra 94,3% - với các giá trị tổn thất tương ứng khoảng 0,01 và 0,22. Sau 20.000 kỷ nguyên, độ chính xác hầu như không thay đổi, nhưng tôi đã mất huấn luyện 0,000005 và mất kiểm tra 0,36. Các khoản lỗ vẫn còn phân kỳ, mặc dù rất chậm. Theo tôi, mạng rõ ràng là quá phù hợp.

Vì vậy, câu hỏi có thể được đặt lại: Tại sao, mặc dù phù hợp quá mức, một mạng lưới thần kinh được đào tạo cho bộ dữ liệu MNIST vẫn khái quát rõ ràng khá hợp lý về mặt chính xác?

Thật đáng để so sánh độ chính xác 94,3% này với những gì có thể sử dụng các phương pháp ngây thơ hơn.

Ví dụ, hồi quy softmax tuyến tính đơn giản (về cơ bản là cùng một mạng thần kinh không có các lớp ẩn), cho độ chính xác ổn định nhanh của tàu 95,1% và kiểm tra 90,7%. Điều này cho thấy rất nhiều dữ liệu phân tách tuyến tính - bạn có thể vẽ siêu phẳng theo 784 kích thước và 90% hình ảnh chữ số sẽ nằm trong "hộp" chính xác mà không cần tinh chỉnh thêm. Từ điều này, bạn có thể mong đợi một giải pháp phi tuyến tính quá mức sẽ nhận được kết quả tồi tệ hơn 90%, nhưng có thể không tệ hơn 80% vì hình thành một ranh giới quá phức tạp xung quanh, ví dụ như "5" được tìm thấy trong hộp cho "3" sẽ chỉ gán không chính xác một lượng nhỏ 3 đa tạp ngây thơ này. Nhưng chúng tôi tốt hơn so với dự đoán ràng buộc thấp hơn 80% này từ mô hình tuyến tính.

Một mô hình ngây thơ khác có thể là khớp mẫu, hoặc hàng xóm gần nhất. Đây là một sự tương tự hợp lý với những gì mà sự phù hợp quá mức đang làm - nó tạo ra một khu vực địa phương gần với mỗi ví dụ đào tạo nơi nó sẽ dự đoán cùng một lớp. Các vấn đề với sự phù hợp quá mức xảy ra trong không gian ở giữa nơi các giá trị kích hoạt sẽ tuân theo bất cứ điều gì mạng "tự nhiên" làm. Lưu ý trường hợp xấu nhất, và những gì bạn thường thấy trong các sơ đồ giải thích, sẽ là một bề mặt gần như hỗn loạn rất cong đi qua các phân loại khác. Nhưng trên thực tế, mạng nơ ron có thể nội suy trơn tru hơn giữa các điểm - điều thực sự phụ thuộc vào bản chất của các đường cong bậc cao mà mạng kết hợp thành xấp xỉ và mức độ phù hợp với dữ liệu.

Tôi đã mượn mã cho một giải pháp KNN từ blog này trên MNIST với K Hàng xóm gần nhất . Sử dụng k = 1 - tức là chọn nhãn gần nhất trong số 6000 ví dụ đào tạo chỉ bằng cách khớp các giá trị pixel, cho độ chính xác 91%. Thêm 3% mà mạng nơ ron được đào tạo quá mức đạt được dường như không quá ấn tượng vì tính đơn giản của phép so khớp pixel mà KNN với k = 1 đang thực hiện.

Tôi đã thử một vài biến thể của kiến ​​trúc mạng, các chức năng kích hoạt khác nhau, số lượng và kích cỡ của các lớp khác nhau - không có sử dụng chính quy. Tuy nhiên, với 6000 ví dụ đào tạo, tôi không thể khiến bất kỳ ai trong số họ vượt qua mức độ chính xác của bài kiểm tra. Thậm chí giảm xuống chỉ còn 600 ví dụ đào tạo chỉ làm cho cao nguyên thấp hơn, với độ chính xác ~ 86%.

Kết luận cơ bản của tôi là các ví dụ của MNIST có sự chuyển tiếp tương đối trơn tru giữa các lớp trong không gian đặc trưng và các mạng thần kinh có thể phù hợp với các lớp này và nội suy giữa các lớp theo cách "tự nhiên" được đưa ra cho các khối xây dựng NN để xấp xỉ hàm - mà không cần thêm các thành phần tần số cao vào sự gần đúng có thể gây ra vấn đề trong một kịch bản overfit.

Đây có thể là một thử nghiệm thú vị để thử với bộ "MNIST ồn ào" trong đó một lượng nhiễu hoặc méo ngẫu nhiên được thêm vào cả ví dụ đào tạo và kiểm tra. Các mô hình chính quy sẽ được mong đợi sẽ hoạt động tốt trên tập dữ liệu này, nhưng có lẽ trong kịch bản đó, việc khớp quá mức sẽ gây ra nhiều vấn đề rõ ràng hơn với độ chính xác.


Đây là từ trước khi cập nhật với các thử nghiệm thêm của OP.

Từ ý kiến ​​của bạn, bạn nói rằng tất cả các kết quả kiểm tra của bạn được thực hiện sau khi chạy một kỷ nguyên duy nhất. Về cơ bản, bạn đã sử dụng dừng sớm, mặc dù viết rằng bạn không có, bởi vì bạn đã dừng việc đào tạo ở điểm sớm nhất có thể với dữ liệu đào tạo của bạn.

Tôi sẽ đề nghị chạy thêm nhiều kỷ nguyên nếu bạn muốn xem mạng thực sự hội tụ như thế nào. Bắt đầu với 10 epoch, xem xét tăng lên 100. Một epoch không nhiều cho vấn đề này, đặc biệt là trên 6000 mẫu.

Mặc dù số lần lặp tăng lên không được đảm bảo để làm cho mạng của bạn hoạt động quá mức kém hơn so với trước đây, nhưng bạn thực sự chưa có cơ hội và kết quả thử nghiệm của bạn cho đến nay vẫn chưa có kết luận.

Trong thực tế, tôi sẽ hy vọng một nửa kết quả dữ liệu thử nghiệm của bạn sẽ được cải thiện sau kỷ nguyên thứ 2, thứ 3, trước khi bắt đầu giảm khỏi các số liệu đào tạo khi số lượng kỷ nguyên tăng lên. Tôi cũng hy vọng lỗi đào tạo của bạn sẽ đạt 0% khi mạng tiếp cận hội tụ.


Bạn đúng. Bằng cách chỉ chạy 1 epoch, tôi đã vô tình thực hiện dừng sớm, vô tình. Tôi sẽ thử đề xuất của bạn và có thể cập nhật câu hỏi của tôi nếu cần.
syeh_106

Câu trả lời cập nhật và kết quả điều tra của bạn rất hữu ích, làm sáng tỏ hơn về câu hỏi này. Tôi đánh giá rất cao nó. Mạng lưới thần kinh nhân tạo xuất hiện đẹp và hấp dẫn với tôi. Chỉ là, khi tôi cố gắng xác định lý do tại sao / làm thế nào / khi nó hoạt động, phân tích / lý thuyết nghiêm ngặt và định lượng dường như không nhiều.
syeh_106

3

Nói chung, mọi người nghĩ về việc quá mức như là một chức năng của mô hình phức tạp. Điều này thật tuyệt, bởi vì độ phức tạp của mô hình là một trong những điều mà bạn có thể kiểm soát. Trong thực tế, có nhiều yếu tố khác liên quan đến vấn đề quá mức: - số lượng mẫu đào tạo - số lần lặp - kích thước của đầu vào (trong trường hợp của bạn, tôi tin rằng đây là lý do tại sao bạn không cung cấp quá mức) - Khó khăn của vấn đề: nếu bạn gặp vấn đề đơn giản, có thể phân tách tuyến tính, thì bạn không phải lo lắng nhiều về việc thừa.

Có một bản demo trực quan được cung cấp bởi google tenorflow cho phép bạn thay đổi tất cả các tham số này. http://playground.tensorflow.org Bạn có thể thay đổi vấn đề đầu vào, số lượng mẫu, thứ nguyên của đầu vào, mạng, số lần lặp.

Tôi thích nghĩ về việc quá mức như Quá mức = mô hình lớn + các tính năng không liên quan

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.