Quá mức có thể xảy ra ngay cả với mất xác nhận vẫn giảm?


12

Tôi có một mô hình + LSTM tích chập trong Keras, tương tự như mô hình này (ref 1), mà tôi đang sử dụng cho một cuộc thi Kaggle. Kiến trúc được hiển thị dưới đây. Tôi đã đào tạo nó trên bộ 11000 mẫu được dán nhãn của mình (hai lớp, tỷ lệ lưu hành ban đầu là ~ 9: 1, vì vậy tôi đã tăng tỷ lệ 1 đến khoảng 1/1) cho 50 epoch với tỷ lệ phân tách 20%. Tôi đã bị quá mức trắng trợn trong một thời gian nhưng tôi nghĩ rằng nó đã được kiểm soát với các lớp tiếng ồn và bỏ học.

Mô hình trông giống như nó được đào tạo tuyệt vời, cuối cùng đã ghi được 91% trên toàn bộ tập huấn luyện, nhưng khi thử nghiệm trên tập dữ liệu thử nghiệm, rác tuyệt đối.

Mất theo kỷ nguyên

Xác nhận chính xác bằng epoch

Lưu ý: độ chính xác xác nhận cao hơn độ chính xác đào tạo. Điều này trái ngược với "quá mức" điển hình.

Trực giác của tôi là, với sự phân tách xác thực nhỏ, mô hình vẫn đang quản lý để phù hợp quá mạnh với tập hợp đầu vào và mất tính tổng quát. Manh mối khác là val_acc lớn hơn acc, có vẻ tanh. Đó có phải là kịch bản có khả năng nhất ở đây?

Nếu điều này là quá mức, việc tăng phân tách xác thực sẽ giảm thiểu điều này hay tôi sẽ gặp vấn đề tương tự, vì trung bình, mỗi mẫu sẽ vẫn còn một nửa tổng số kỷ nguyên?

Ngươi mâu:

Layer (type)                     Output Shape          Param #     Connected to                     
====================================================================================================
convolution1d_19 (Convolution1D) (None, None, 64)      8256        convolution1d_input_16[0][0]     
____________________________________________________________________________________________________
maxpooling1d_18 (MaxPooling1D)   (None, None, 64)      0           convolution1d_19[0][0]           
____________________________________________________________________________________________________
batchnormalization_8 (BatchNormal(None, None, 64)      128         maxpooling1d_18[0][0]            
____________________________________________________________________________________________________
gaussiannoise_5 (GaussianNoise)  (None, None, 64)      0           batchnormalization_8[0][0]       
____________________________________________________________________________________________________
lstm_16 (LSTM)                   (None, 64)            33024       gaussiannoise_5[0][0]            
____________________________________________________________________________________________________
dropout_9 (Dropout)              (None, 64)            0           lstm_16[0][0]                    
____________________________________________________________________________________________________
batchnormalization_9 (BatchNormal(None, 64)            128         dropout_9[0][0]                  
____________________________________________________________________________________________________
dense_23 (Dense)                 (None, 64)            4160        batchnormalization_9[0][0]       
____________________________________________________________________________________________________
dropout_10 (Dropout)             (None, 64)            0           dense_23[0][0]                   
____________________________________________________________________________________________________
dense_24 (Dense)                 (None, 2)             130         dropout_10[0][0]                 
====================================================================================================
Total params: 45826

Đây là lời gọi để phù hợp với mô hình (trọng lượng lớp thường là khoảng 1: 1 kể từ khi tôi lấy mẫu đầu vào):

class_weight= {0:1./(1-ones_rate), 1:1./ones_rate} # automatically balance based on class occurence
m2.fit(X_train, y_train, nb_epoch=50, batch_size=64, shuffle=True, class_weight=class_weight, validation_split=0.2 )

SE có một số quy tắc ngớ ngẩn rằng tôi có thể đăng không quá 2 liên kết cho đến khi điểm của tôi cao hơn, vì vậy đây là ví dụ trong trường hợp bạn quan tâm: Tham chiếu 1: machinelearningmastery DOT com SLASH-sort-lstm-recapse-neural-mạng- trăn

Câu trả lời:


8

Tôi không chắc bộ xác nhận có cân bằng hay không. Bạn có một vấn đề mất cân bằng dữ liệu nghiêm trọng. Nếu bạn lấy mẫu bằng nhau và ngẫu nhiên từ mỗi lớp để đào tạo mạng của mình và sau đó phần trăm những gì bạn đã lấy mẫu được sử dụng để xác thực mạng của bạn, điều này có nghĩa là bạn đào tạo và xác thực bằng cách sử dụng bộ dữ liệu cân bằng. Trong thử nghiệm, bạn đã sử dụng cơ sở dữ liệu mất cân bằng. Điều này có nghĩa là bộ xác nhận và thử nghiệm của bạn không tương đương. Trong trường hợp như vậy, bạn có thể có độ chính xác xác nhận cao và độ chính xác kiểm tra thấp. Vui lòng tìm tài liệu tham khảo này nói chủ yếu về vấn đề mất cân bằng dữ liệu cho DNN, bạn có thể kiểm tra cách họ lấy mẫu để thực hiện đào tạo, xác thực và kiểm tra https://pdfs.semanticscholar.org/69a6/8f9cf874c69e2232f47808016c2736b90c35.pdf


1
Bộ xác nhận được lấy từ cùng một bộ với tập huấn luyện. Tôi không chắc chắn 100% nhưng tôi tin rằng Keras sẽ cắt giảm xác nhận trước khi xáo trộn và đào tạo (nghĩa là nếu bạn cung cấp dữ liệu không bị xáo trộn, phần xác thực sẽ tách ra một phần phân phối của bạn). Vì vậy, tôi tự cân bằng và xáo trộn trước khi chuyển đến Keras. Vấn đề duy nhất có thể là tôi đang nhân đôi số 1 và thêm nhiễu gaussian, có thể tăng cường quá mức.
DeusXMachina

2
Tôi nghĩ rằng bạn không cần phải phụ thuộc vào Keras để xác thực, bạn có thể chia dữ liệu của mình thành ba phần. Đào tạo, xác nhận và thử nghiệm. Mẫu từ dữ liệu đào tạo và đào tạo mạng của bạn. Không chơi với phân phối trong bộ xác nhận và thử nghiệm. Tối ưu hóa mạng của bạn trên bộ xác nhận và sau đó kiểm tra bộ thử nghiệm. Tôi đã chỉnh sửa câu trả lời của mình để thêm một tài liệu tham khảo hữu ích
Bashar Haddad

5

Nếu mất tập luyện của bạn dưới sự mất xác nhận của bạn, bạn đang bị quá mức , ngay cả khi xác nhận vẫn còn giảm.

Đó là dấu hiệu cho thấy mạng của bạn đang học các mẫu trong tập huấn luyện không được áp dụng trong xác thực


Tôi hiểu rằng tổn thất đào tạo sẽ ít hơn mất xác nhận - đây chỉ là quá mức cho tập huấn luyện. Nhưng độ chính xác xác nhận cao hơn độ chính xác đào tạo . Đó là phần kỳ lạ!
DeusXMachina

Không nếu bộ của bạn bị mất cân bằng. Ví dụ: trong trình phân loại nhị phân, nếu bạn có ít hơn 1 tỷ lệ trong bộ xác thực và mô hình của bạn chỉ xuất 0, bạn sẽ có độ chính xác xác thực cao hơn
in đậm
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.