유효성 검사 손실이 계속 떨어지더라도 과적 합이 발생할 수 있습니까?


12

나는 Keras에 컨볼 루션 + LSTM 모델을 가지고 있는데, 이것과 비슷한 (참조 1), 나는 Kaggle 콘테스트에 사용하고 있습니다. 아키텍처는 아래와 같습니다. 20 % 검증 분할로 50 에포크에 대해 레이블이 지정된 11000 샘플 세트 (두 클래스, 초기 유병률은 ~ 9 : 1이므로 1에서 약 1/1 비율로 업 샘플링했습니다)에 대해 학습했습니다. 한동안 소음과 드롭 아웃 레이어로 제어 할 수 있다고 생각했습니다.

모델은 훈련 세트 전체에서 91 %를 기록했지만 테스트 데이터 세트를 테스트 할 때 절대 쓰레기로 훌륭하게 훈련 된 것처럼 보였다.

획기적인 손실

신기원 별 검증 정확도

주의 : 검증 정확도는 훈련 정확도보다 높습니다. 이것은 "일반적인"과적 합의 반대입니다.

내 직감은 작고 작은 유효성 검사 분할을 감안할 때 모델이 여전히 입력 세트에 너무 강력하게 맞추고 일반화를 잃어 가고 있다는 것입니다. 다른 단서는 val_acc가 acc보다 크다는 것입니다. 가장 가능성이 높은 시나리오입니까?

이것이 과적 합이라면, 검증 분할을 늘리면 이것을 완화시킬 수 있습니까? 아니면 평균적으로 각 샘플이 총 에포크의 절반을 볼 수 있기 때문에 동일한 문제가 발생합니까?

모델:

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

다음은 모델에 맞는 호출입니다 (입력을 업 샘플링했기 때문에 클래스 가중치는 일반적으로 약 1 : 1입니다).

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는 내 점수가 높아질 때까지 2 개 이하의 링크를 게시 할 수 있다는 어리석은 규칙을 가지고 있으므로 관심이있는 경우를 예로 들어 보겠습니다. 파이썬 케라

답변:


8

유효성 검사 세트의 균형이 맞는지 확실하지 않습니다. 데이터 불균형 문제가 심각합니다. 각 클래스에서 동일하게 무작위로 샘플링하여 네트워크를 학습 한 다음 샘플링 한 비율의 백분율을 사용하여 네트워크를 검증하는 경우 균형 데이터 세트를 사용하여 학습하고 검증합니다. 테스트에서 불균형 데이터베이스를 사용했습니다. 이는 검증 및 테스트 세트가 동일하지 않음을 의미합니다. 이 경우 검증 정확도가 높고 테스트 정확도가 낮을 ​​수 있습니다. DNN의 데이터 불균형 문제에 대해 주로 언급하는이 참조를 찾아보십시오. 훈련, 유효성 검사 및 테스트를 수행하기 위해 샘플링하는 방법을 확인할 수 있습니다 https://pdfs.semanticscholar.org/69a6/8f9cf874c69e2232f47808016c2736b90c35.pdf


1
검증 세트는 훈련 세트와 동일한 세트에서 가져옵니다. 100 % 확신 할 수는 없지만 Keras는 셔플 링 및 교육 전에 유효성 검사를 수행한다고 생각합니다 (즉, 데이터를 섞지 않은 데이터에 공급하면 유효성 검사 분할이 배포의 일부를 잘라냅니다). 그래서 Keras에 전달하기 전에 수동으로 균형을 잡고 섞습니다. 유일한 문제는 1을 복제하고 가우스 잡음을 추가하여 초과 적합을 향상시킬 수 있다는 것입니다.
DeusXMachina

2
유효성 검사를 위해 Keras에 의존 할 필요가 없다고 생각합니다. 데이터를 세 부분으로 나눌 수 있습니다. 교육, 검증 및 테스트. 교육 데이터에서 샘플링하고 네트워크를 교육하십시오. 유효성 검증 및 테스트 세트에서 분배를 사용하지 마십시오. 유효성 검사 세트에서 네트워크를 최적화 한 다음 테스트 세트를 확인하십시오. 유용한 참고 자료를 추가하기 위해 답변을 편집했습니다.
Bashar Haddad

5

귀하의 경우 훈련 손실이 당신 검증 손실 아래에 간다, 당신은 overfitting하는 유효성 검사가 계속 떨어지고있다하더라도.

네트워크가 검증 세트에는 적용되지 않는 기차 세트의 패턴을 학습하고 있다는 신호입니다.


훈련 손실이 검증 손실보다 적다는 것을 이해합니다. 이것은 훈련 세트에 비해 너무 적합합니다. 그러나 검증 정확도는 훈련 정확도보다 높습니다 . 그것은 이상한 부분입니다!
DeusXMachina

세트의 균형이 맞지 않으면 아닙니다. 예를 들어, 이진 분류에서, 당신은 더 적은 1 검증 세트의 비율이있는 경우에만 출력 0 모델, 당신은 더 높은 검증의 정확성 것
굵은
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.