การบรรจุมากเกินไปสามารถเกิดขึ้นได้แม้จะมีการสูญเสียการตรวจสอบยังคงลดลง?


12

ฉันมีโมเดล + LSTM แบบ convolutional ใน Keras คล้ายกับที่นี่ (อ้างอิง 1) ที่ฉันใช้สำหรับการแข่งขัน Kaggle สถาปัตยกรรมที่แสดงด้านล่าง ฉันได้ฝึกมันในชุดตัวอย่างที่มีป้ายกำกับของฉัน 11000 ตัวอย่าง (สองคลาสความชุกเริ่มต้นคือ ~ 9: 1 ดังนั้นฉันจึงเพิ่ม 1 ต่อ 1 เป็นอัตราส่วน 1/1) สำหรับ 50 epochs ที่มีการตรวจสอบความถูกต้อง 20% ชั่วครู่หนึ่ง แต่ฉันคิดว่ามันสามารถควบคุมเสียงและเลเยอร์กลางคันได้

แบบจำลองดูเหมือนว่าจะเป็นการฝึกอบรมที่ยอดเยี่ยมในตอนท้ายได้คะแนน 91% จากชุดฝึกอบรมทั้งหมด แต่เมื่อทดสอบชุดข้อมูลการทดสอบแล้วขยะสมบูรณ์

การสูญเสียโดยยุค

การตรวจสอบความถูกต้องโดยยุค

ข้อสังเกต: ความแม่นยำในการตรวจสอบความถูกต้องสูงกว่าความแม่นยำในการฝึกอบรม นี่คือสิ่งที่ตรงกันข้ามกับการ overfitting "ทั่วไป"

ปรีชาญาณของฉันคือเมื่อแยกการตรวจสอบความถูกต้องของไอซ์เล็กโมเดลยังคงจัดการเพื่อให้พอดีกับชุดอินพุตและการสูญเสียลักษณะทั่วไปมากเกินไป เบาะแสอื่น ๆ คือ val_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 ลิงก์จนกว่าคะแนนของฉันจะสูงกว่าดังนั้นนี่คือตัวอย่างในกรณีที่คุณสนใจ: Ref 1: กลไกการเรียนรู้ DOT com SLASH ลำดับ -lstm-recurrent-neural-Networks- หลาม keras

คำตอบ:


8

ฉันไม่แน่ใจว่าชุดการตรวจสอบมีความสมดุลหรือไม่ คุณมีปัญหาข้อมูลที่ไม่สมดุลอย่างรุนแรง หากคุณสุ่มตัวอย่างอย่างเท่าเทียมกันและสุ่มจากแต่ละชั้นเรียนเพื่อฝึกอบรมเครือข่ายของคุณแล้วเปอร์เซ็นต์ของสิ่งที่คุณสุ่มตัวอย่างจะใช้ในการตรวจสอบความถูกต้องเครือข่ายของคุณซึ่งหมายความว่าคุณฝึกอบรมและตรวจสอบความถูกต้องโดยใช้ชุดข้อมูลที่สมดุล ในการทดสอบคุณใช้ฐานข้อมูลที่ไม่สมดุล ซึ่งหมายความว่าชุดการตรวจสอบและการทดสอบของคุณไม่เท่ากัน ในกรณีเช่นนี้คุณอาจมีการตรวจสอบความถูกต้องสูงและความแม่นยำในการทดสอบต่ำ โปรดหาข้อมูลอ้างอิงนี้ที่พูดถึงปัญหาความไม่สมดุลของข้อมูลเป็นหลักสำหรับ DNN คุณสามารถตรวจสอบว่าพวกเขาทำตัวอย่างอย่างไรในการฝึกอบรมการตรวจสอบและทดสอบhttps://pdfs.semanticscholar.org/69a6/8f9cf874c69e2232f47808016c2736b90c35.pdf


1
ชุดการตรวจสอบความถูกต้องจะถูกดึงจากชุดเดียวกันกับชุดการฝึกอบรม ฉันไม่แน่ใจ 100% แต่ฉันเชื่อว่า Keras ใช้การตรวจสอบความถูกต้องก่อนการสับและการฝึกอบรม (เช่นถ้าคุณป้อนข้อมูลที่ไม่มีการสับมันการตรวจสอบจะแยกส่วนออกจากการแจกจ่ายของคุณ) ดังนั้นฉันจึงปรับสมดุลและสับเปลี่ยนด้วยตนเองก่อนส่งผ่านไปยัง Keras ปัญหาเดียวอาจเป็นเพราะฉันกำลังทำสำเนา 1 และเพิ่มเสียงรบกวนแบบเกาส์เซียนซึ่งอาจเพิ่มความพอดี
DeusXMachina

2
ฉันคิดว่าคุณไม่จำเป็นต้องพึ่งพา Keras เพื่อทำการตรวจสอบคุณสามารถแบ่งข้อมูลของคุณออกเป็นสามส่วน การฝึกอบรมการตรวจสอบและทดสอบ ตัวอย่างจากข้อมูลการฝึกอบรมและฝึกอบรมเครือข่ายของคุณ อย่าเล่นกับการแจกจ่ายในชุดการตรวจสอบและทดสอบ เพิ่มประสิทธิภาพเครือข่ายของคุณในชุดการตรวจสอบความถูกต้องแล้วตรวจสอบชุดการทดสอบ ฉันแก้ไขคำตอบของฉันเพื่อเพิ่มการอ้างอิงที่มีประโยชน์
Bashar Haddad

5

หากการสูญเสียการฝึกอบรมของคุณอยู่ภายใต้การตรวจสอบความถูกต้องของคุณคุณกำลัง overfittingแม้ว่าการตรวจสอบจะยังคงลดลง

มันเป็นสัญญาณว่าเครือข่ายของคุณกำลังเรียนรู้รูปแบบในชุดรถไฟที่ไม่สามารถใช้ได้ในการตรวจสอบความถูกต้อง


ฉันเข้าใจการสูญเสียการฝึกอบรมน้อยกว่าการสูญเสียการตรวจสอบความถูกต้อง - เป็นเพียงการกำหนดให้ชุดฝึกอบรมมากเกินไป แต่ความถูกต้องของการตรวจสอบสูงกว่าความถูกต้องของการฝึกอบรม นั่นคือส่วนที่แปลก!
DeusXMachina

ไม่ใช่ถ้าชุดของคุณไม่สมดุล ตัวอย่างเช่นในตัวแยกประเภทไบนารีหากคุณมีสัดส่วนน้อยกว่า 1 ในชุดการตรวจสอบความถูกต้องและแบบจำลองของคุณแสดงผลเพียง 0s คุณจะมีความแม่นยำในการตรวจสอบความถูกต้องสูงขึ้น
ตัวหนา
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.