Mạng lưới thần kinh kết hợp quá mức. Bỏ học không giúp được gì


16

Tôi đang chơi một chút với convnets. Cụ thể, tôi đang sử dụng bộ dữ liệu mèo-vs-dog kaggle bao gồm 25000 hình ảnh được dán nhãn là mèo hoặc chó (mỗi loại 12500).

Tôi đã quản lý để đạt được độ chính xác phân loại khoảng 85% trên bộ thử nghiệm của mình, tuy nhiên tôi đặt mục tiêu đạt được độ chính xác 90%.

Vấn đề chính của tôi là quá mức. Bằng cách nào đó, nó luôn luôn kết thúc xảy ra (thông thường sau kỷ nguyên 8-10). Kiến trúc mạng của tôi được lấy cảm hứng từ VGG-16, cụ thể hơn là hình ảnh của tôi được thay đổi kích thước thành 128x128x3 , và sau đó tôi chạy:

Convolution 1 128x128x32 (kernel size is 3, strides is 1)
Convolution 2 128x128x32 (kernel size is 3, strides is 1)
Max pool    1 64x64x32   (kernel size is 2, strides is 2)
Convolution 3 64x64x64   (kernel size is 3, strides is 1)
Convolution 4 64x64x64   (kernel size is 3, strides is 1)
Max pool    2 32x32x64   (kernel size is 2, strides is 2)
Convolution 5 16x16x128  (kernel size is 3, strides is 1)
Convolution 6 16x16x128  (kernel size is 3, strides is 1)
Max pool    3 8x8x128    (kernel size is 2, strides is 2)
Convolution 7 8x8x256    (kernel size is 3, strides is 1)
Max pool    4 4x4x256    (kernel size is 2, strides is 2)
Convolution 8 4x4x512    (kernel size is 3, strides is 1)
Fully connected layer 1024 (dropout 0.5)
Fully connected layer 1024 (dropout 0.5)

Tất cả các lớp ngoại trừ lớp cuối cùng có chức năng kích hoạt.

Lưu ý rằng tôi đã thử các kết hợp khác nhau (tôi bắt đầu với các kết hợp đơn giản hơn).

Ngoài ra, tôi đã tăng dữ liệu bằng cách phản chiếu các hình ảnh, để tổng cộng tôi có 50000 hình ảnh.

Ngoài ra, tôi đang chuẩn hóa hình ảnh bằng cách sử dụng chuẩn hóa tối đa tối thiểu, trong đó X là hình ảnh

X= =X-0/255-0

Mã được viết theo dòng chảy và kích thước lô là 128.

Các lô dữ liệu đào tạo nhỏ kết thúc quá mức và có độ chính xác 100% trong khi dữ liệu xác nhận dường như ngừng học ở khoảng 84-85%.

Tôi cũng đã cố gắng tăng / giảm tỷ lệ bỏ học.

Trình tối ưu hóa đang được sử dụng là AdamOptimizer với tỷ lệ học tập là 0,0001

Hiện tại tôi đã chơi với vấn đề này trong 3 tuần qua và 85% dường như đã đặt ra một rào cản trước mặt tôi.

Đối với hồ sơ, tôi biết rằng tôi có thể sử dụng học chuyển để đạt được kết quả cao hơn nhiều, nhưng tôi rất thú vị khi xây dựng mạng này như một trải nghiệm tự học.

Cập nhật:

Tôi đang chạy mạng SAME với kích thước lô khác nhau, trong trường hợp này tôi đang sử dụng kích thước lô nhỏ hơn nhiều (16 thay vì 128) cho đến nay tôi đang đạt được độ chính xác 87,5% (thay vì 85%). Điều đó nói rằng, mạng cuối cùng kết thúc quá mức. Tuy nhiên, tôi không hiểu làm thế nào việc bỏ học 50% đơn vị không giúp được gì ... rõ ràng tôi đang làm gì đó sai ở đây. Có ý kiến ​​gì không?

Cập nhật 2:

Có vẻ như vấn đề đã xảy ra với kích thước lô, vì với kích thước nhỏ hơn (16 thay vì 128), tôi hiện đạt được độ chính xác 92,8% trên bộ thử nghiệm của mình, với kích thước lô nhỏ hơn mà mạng vẫn mặc quần áo (các lô nhỏ kết thúc với độ chính xác 100%), tuy nhiên, tổn thất (lỗi) tiếp tục giảm và nói chung là ổn định hơn. Nhược điểm là thời gian chạy chậm hơn NHIỀU, nhưng nó hoàn toàn đáng để chờ đợi.


2
Bạn có thể cho biết thêm chi tiết xung quanh đánh giá của bạn về sự phù hợp quá mức? Chẳng hạn, độ chính xác xác nhận giảm ở bất kỳ điểm nào, bên cạnh sự khác biệt từ kết quả đào tạo và xác nhận? Làm thế nào về chức năng mất?
Neil Slater

Câu hỏi hay, vì vậy, bằng cách đánh giá quá cao, ý tôi là thực tế là các lô nhỏ trong tàu đạt được độ chính xác 100% và tổn thất 0,08 trong khi xác nhận dường như chưa bao giờ dưới 0,35 và độ chính xác của nó hiện vẫn ở mức 88%. Theo xác nhận, nó dường như không giảm (ít nhất là không quá nhiều), dường như trở nên bằng phẳng, tuy nhiên làm thế nào mà lô nhỏ đạt được mức tổn thất thấp như vậy trong khi xác nhận vẫn còn cách xa nó?
Juan Antonio Gomez Moriano

Tôi không biết câu trả lời cho bạn, tuy nhiên hành vi này - sự khác biệt lớn giữa đào tạo và xác nhận, nhưng vẫn xác thực được chấp nhận - là điều tôi đã thấy trước đây một vài lần. Tôi gần như ngần ngại gọi nó là phù hợp vì đôi khi kết quả kiểm tra là chấp nhận được.
Neil Slater

"Tuy nhiên, tôi không hiểu làm thế nào việc bỏ học 50% số đơn vị không giúp ích" Tôi đã thấy mọi người sử dụng các giá trị bỏ học cao hơn nhiều với thành công.
Ricardo Cruz

Câu trả lời:


14

Ok, vì vậy sau rất nhiều thử nghiệm, tôi đã có được kết quả / hiểu biết sâu sắc.

Ở nơi đầu tiên, mọi thứ đều bằng nhau, các lô nhỏ hơn trong tập huấn luyện giúp ích rất nhiều để tăng hiệu suất chung của mạng, vì mặt tiêu cực, quá trình đào tạo chậm hơn.

Điểm thứ hai, dữ liệu rất quan trọng, không có gì mới ở đây nhưng như tôi đã học được khi chiến đấu với vấn đề này, nhiều dữ liệu hơn dường như luôn giúp ích được một chút.

Điểm thứ ba, bỏ học rất hữu ích trong các mạng lớn có nhiều dữ liệu và nhiều lần lặp, trong mạng của tôi, tôi chỉ áp dụng bỏ qua trên các lớp được kết nối đầy đủ cuối cùng, các lớp chập không được áp dụng bỏ học.

Điểm thứ tư (và đây là điều tôi đang học đi học lại): những người đi đường thần kinh mất rất nhiều để đào tạo, ngay cả trên các GPU tốt (tôi đã đào tạo mạng này trên floydhub, sử dụng thẻ NVIDIA khá đắt tiền), vì vậy BỆNH NHÂN là chìa khóa .

Kết luận cuối cùng: Kích thước hàng loạt quan trọng hơn mà người ta có thể nghĩ, rõ ràng là dễ dàng đạt được mức tối thiểu cục bộ khi các lô lớn hơn.

Mã tôi đã viết có sẵn như là một cuốn sổ tay con trăn, tôi nghĩ rằng nó đã được ghi lại

https://github.com/moriano/loco-learning/blob/master/cats-vs-dogs/cats-vs-dogs.ipynb


Cảm ơn đã đăng những phát hiện của bạn. Câu hỏi nhanh: Tôi đang đối mặt với một vấn đề tương tự và tôi đã thấy điều này trong sổ ghi chép bạn đã đăng : NOTE USE EITHER mean centering or min-max, NOT BOTH. Tôi hiện đang chia các hình ảnh đầu vào của mình cho 255 bên trong input_fn(API ước tính hàng chục). Sau đó, bên trong mô hình, tôi đang chạy đầu vào đó thông qua định mức hàng loạt. Tôi có nên vẫn chỉ làm một trong những bình thường hóa? Xem github.com/formigone/tf-imagenet/blob/master/models/iêu
Rodrigo-silveira

Tôi hiểu rằng việc chia cho 255 chỉ được thực hiện một lần cho mỗi hình ảnh và lý do là để giữ tất cả các giá trị trong khoảng từ 0 đến 1 vì điều đó sẽ mang lại sự ổn định về số.
Juan Antonio Gomez Moriano

Chắc chắn, tôi nhận được điều đó. Nhưng bạn có nghĩ rằng cũng hợp lý khi hàng loạt bình thường hóa các giá trị đó trong phạm vi [0, 1] không?
Rodrigo-silveira

Điều đó, tôi không biết, đã được một thời gian kể từ khi tôi sử dụng bình thường hóa hàng loạt :)
Juan Antonio Gomez Moriano

3

Tôi đề nghị bạn phân tích các sơ đồ học tập về độ chính xác xác nhận của bạn như Neil Slater đề xuất. Sau đó, nếu độ chính xác xác nhận giảm xuống cố gắng giảm kích thước mạng của bạn (có vẻ quá sâu), hãy thêm bỏ học vào các lớp CONV và BatchN normalization sau mỗi lớp. Nó có thể giúp thoát khỏi tình trạng thừa và tăng độ chính xác kiểm tra.


Cảm ơn vì lời khuyên, sẽ thử nó, tuy nhiên tôi có ấn tượng rằng các lớp CONV không yêu cầu bỏ học, trên hầu hết các bài báo tôi đã đọc, bỏ học dường như luôn được áp dụng cho các lớp được kết nối đầy đủ, không phải cho các kết luận.
Juan Antonio Gomez Moriano

3

Có một số giải pháp có thể cho vấn đề của bạn.

  1. Sử dụng Dropout trong các lớp trước (lớp chập) quá.

  2. Mạng của bạn dường như khá lớn đối với một nhiệm vụ "dễ dàng" như vậy; cố gắng giảm nó Các kiến ​​trúc lớn cũng được đào tạo trên các bộ dữ liệu lớn hơn nhiều.

Nếu bạn muốn giữ kiến ​​trúc "lớn" của mình, hãy thử:

  1. Tăng cường hình ảnh để hầu như tăng dữ liệu đào tạo của bạn

  2. Hãy thử đào tạo đối thủ. Nó đôi khi giúp.


"Mạng của bạn dường như khá lớn đối với một nhiệm vụ" dễ dàng "như vậy; hãy cố gắng giảm bớt nó. Các kiến ​​trúc lớn cũng được đào tạo trên các bộ dữ liệu lớn hơn nhiều." Tôi không đồng ý, vì tôi đã thêm nhiều kết quả, độ chính xác tăng lên (ban đầu tôi đã đạt được 68% chỉ với hai kết quả). Ngoài ra, tôi đã tăng dữ liệu của mình, tôi hoạt động với 50000 hình ảnh.
Juan Antonio Gomez Moriano

2

Một điều chưa được đề cập và bạn có thể cân nhắc cho tương lai: bạn vẫn có thể tăng tỷ lệ bỏ học của mình ở các lớp được kết nối đầy đủ.

Tôi đã đọc một bài báo sử dụng tỷ lệ bỏ học 90%. Mặc dù nó có nhiều nút (2048 nếu tôi nhớ chính xác), tôi đã tự thử nó trên các lớp có ít nút hơn và nó rất hữu ích trong một số trường hợp.

Tôi chỉ nhìn lên đó là giấy. Tôi không thể nhớ lại bài báo nào tôi vừa nhớ nhưng tôi thấy những bài này cũng có một số thành công với tỷ lệ bỏ học 90%.

Karpathy, A., Toderici, G., Shetty, S., Leung, T., Sukthankar, R., & Fei-Fei, L. (2014). Phân loại video quy mô lớn với các mạng thần kinh tích chập. Trong Kỷ yếu của hội thảo về Tầm nhìn Máy tính và Nhận dạng Mẫu (trang 1725-1732).

Simonyan, K., & Zisserman, A. (2014). Mạng tích chập hai luồng để nhận dạng hành động trong video. Trong những tiến bộ trong hệ thống xử lý thông tin thần kinh (trang 568-576).

Varol, G., Laptev, I., & Schmid, C. (2017). Kết luận thời gian dài hạn để công nhận hành động. Giao dịch của IEEE về phân tích mẫu và trí thông minh của máy.


0

Tôi cũng có vấn đề này. Sau khi nháy mắt với nó hàng giờ, tình cờ tôi quyết định xáo trộn dữ liệu trước khi đưa nó vào hệ thống và voila, nó bắt đầu hoạt động. Tôi phải mất một chút để nhận ra rằng chính sự xáo trộn đã làm nên chuyện! Hy vọng điều này sẽ cứu ai đó khỏi sự thất vọng!

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.