ทำไมการตรวจสอบความถูกต้องจึงผันผวน


31

ฉันมีซีเอ็นเอ็นสี่ชั้นเพื่อทำนายการตอบสนองต่อโรคมะเร็งโดยใช้ข้อมูล MRI ฉันใช้การเปิดใช้งาน ReLU เพื่อแนะนำการไม่เชิงเส้น ความแม่นยำและการสูญเสียของขบวนรถไฟเพิ่มขึ้นและลดลงแบบ monotonically ตามลำดับ แต่ความแม่นยำในการทดสอบของฉันเริ่มผันผวนอย่างมาก ฉันลองเปลี่ยนอัตราการเรียนรู้ลดจำนวนเลเยอร์ แต่ก็ไม่ได้หยุดความผันผวน ฉันได้อ่านคำตอบนี้และลองทำตามคำแนะนำในคำตอบนั้น แต่ไม่โชคดี ใครช่วยให้ฉันคิดว่าฉันจะไปไหนผิด

ภาพหน้าจอ



ใช่ฉันอ่านคำตอบนั้น การสับเปลี่ยนข้อมูลการตรวจสอบไม่ได้ช่วย
Raghuram

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

คุณมีตัวอย่างกี่ตัวอย่าง บางทีความผันผวนนั้นไม่สำคัญอย่างแท้จริง นอกจากนี้ความแม่นยำก็น่ากลัวด้วย
rep_ho

ใครสามารถช่วยฉันตรวจสอบว่าการใช้วิธีวงดนตรีเป็นสิ่งที่ดีเมื่อความถูกต้องในการตรวจสอบความผันผวน? เพราะฉันสามารถจัดการ validation_accuracy ที่ผันผวนของฉันโดยใช้ค่าที่ดี
Sri2110

คำตอบ:


27

ถ้าฉันเข้าใจคำจำกัดความของความถูกต้องแม่นยำความถูกต้อง (% ของจุดข้อมูลที่จำแนกอย่างถูกต้อง) นั้นจะถูกสะสมน้อยกว่าที่จะบอกว่า MSE (หมายถึงข้อผิดพลาดกำลังสอง) นั่นเป็นเหตุผลที่คุณเห็นว่าคุณlossเพิ่มขึ้นอย่างรวดเร็วในขณะที่ความแม่นยำมีความผันผวน

โดยพื้นฐานแล้วนี่หมายถึงว่าบางส่วนของตัวอย่างถูกจำแนกแบบสุ่มซึ่งก่อให้เกิดความผันผวนเนื่องจากจำนวนของการคาดเดาแบบสุ่มที่ถูกต้องมักจะเปลี่ยนแปลงตลอดเวลา โดยทั่วไปความไวต่อสัญญาณรบกวน (เมื่อการจำแนกประเภทก่อให้เกิดผลลัพธ์แบบสุ่ม) เป็นคำจำกัดความทั่วไปของการ overfitting (ดูวิกิพีเดีย):

ในสถิติและการเรียนรู้ของเครื่องหนึ่งในภารกิจที่พบบ่อยที่สุดคือการใส่ "แบบจำลอง" เข้ากับชุดข้อมูลการฝึกอบรมเพื่อให้สามารถคาดการณ์ที่เชื่อถือได้สำหรับข้อมูลที่ไม่ได้รับการฝึกฝนทั่วไป ในการ overfitting แบบจำลองทางสถิติอธิบายข้อผิดพลาดแบบสุ่มหรือเสียงรบกวนแทนที่จะเป็นความสัมพันธ์พื้นฐาน

หลักฐานของการ overfitting ก็คือการสูญเสียของคุณเพิ่มขึ้นการสูญเสียวัดได้แม่นยำมากขึ้นมันมีความไวต่อการคาดคะเนเสียงดังหากไม่ได้ถูกบีบอัดโดย sigmoids / เกณฑ์ โดยสังเขปคุณสามารถจินตนาการถึงสถานการณ์เมื่อเครือข่ายมั่นใจเกินไปเกี่ยวกับเอาต์พุต (เมื่อมันผิด) ดังนั้นมันจึงให้ค่าที่อยู่ห่างจากขีด จำกัด ในกรณีที่มีการจำแนกประเภทแบบสุ่ม

เกี่ยวกับกรณีของคุณแบบจำลองของคุณไม่ได้รับการจัดวางอย่างเหมาะสมและเป็นไปได้:

  • จุดข้อมูลไม่เพียงพอความจุมากเกินไป
  • การสั่งซื้อ
  • การปรับขนาดคุณสมบัติไม่ผิด / การทำให้เป็นมาตรฐาน
  • ααα

การแก้ปัญหาที่เป็นไปได้:

  • รับจุดข้อมูลเพิ่มเติม (หรือขยายชุดของวัตถุที่มีอยู่จริง ๆ )
  • เล่นกับพารามิเตอร์ไฮเปอร์ (เพิ่ม / ลดความจุหรือเงื่อนไขการทำให้เป็นมาตรฐานเป็นต้น)
  • การทำให้เป็นมาตรฐาน : ลองออกกลางคันหยุดเร็วเป็นต้น

เกี่ยวกับ: "การสูญเสียถูกวัดได้แม่นยำยิ่งขึ้นมันมีความไวต่อการทำนายที่มีเสียงดังเพราะมันไม่ได้ถูกบีบด้วย sigmoids / ธรณีประตู" ฉันเห็นด้วยกับการไม่นวดข้าว แต่ถ้าคุณใช้เช่นเอนโทรปีของไบนารี บทบาท
Zhubarb

1
เกี่ยวกับอัตราการเรียนรู้และการขาด sgd: การถึงขั้นต่ำน่าจะหมายถึงการมีน้ำหนักเกิน (เพราะมันเป็นขั้นต่ำในชุดการฝึกอบรม)
Jan Kukacka

@Berkmeister จริงฉันได้แนะนำใหม่เล็กน้อย (ดูการแก้ไข) ฉันคิดว่ามีการสูญเสียที่เพิ่มขึ้นเป็นสัญญาณของฟังก์ชั่นที่ไม่ถูกบีบใช้
dk14

@JanKukacka คุณหมายถึง minima ทั่วโลกหรือไม่ ฉันหมายถึง minima ท้องถิ่น (จริง ๆ แล้วใกล้ minima ท้องถิ่น) - ในความหมายว่าถ้ามันไกลเกินไปจาก minima ใด ๆ ก็จะไม่เหมาะสม น่าจะเป็นฉันควรอธิบายให้ละเอียดยิ่งขึ้น (ดูการแก้ไข) ขอบคุณ
dk14

@ dk14 ฉันคิดว่าการปฏิบัติขั้นต่ำทั่วโลกไม่สามารถนำมาใช้ได้ดังนั้นฉันหมายถึงมินิมาท้องถิ่น หากคุณอยู่ไกลเกินไปคุณอาจจะอยู่ในสภาพที่ไม่เหมาะสม แต่ถ้าคุณอยู่ใกล้เกินไป มีงานที่น่าสนใจโดย Moritz Hardt "ฝึกเร็วขึ้นพูดได้ดีกว่า: เสถียรภาพของการไล่ระดับสีแบบสุ่ม" ( arxiv.org/abs/1509.01240 ) วางขอบเขตความสัมพันธ์ระหว่างการฝึกอบรมและข้อผิดพลาดในการทดสอบเมื่อฝึกกับ SGD
Jan Kukacka

6

คำถามนี้เป็นคำถามเก่า แต่การโพสต์นี้มันยังไม่ได้รับการชี้ออกยัง:

ความเป็นไปได้ 1 : คุณกำลังใช้การจัดเรียงของ preprocessing (ศูนย์ความหมาย normalizing ฯลฯ ) ทั้งชุดฝึกอบรมของคุณหรือชุดการตรวจสอบบางอย่างแต่ไม่ได้อื่น ๆ .

ความเป็นไปได้ที่ 2 : ถ้าคุณสร้างเลเยอร์บางอย่างที่มีประสิทธิภาพแตกต่างกันในระหว่างการฝึกอบรมและการอนุมานตั้งแต่เริ่มต้นโมเดลของคุณอาจถูกนำไปใช้อย่างไม่ถูกต้อง (เช่นค่าเฉลี่ยเคลื่อนที่และค่าเบี่ยงเบนมาตรฐาน อนุมาน?) อาจเป็นกรณีนี้หากรหัสของคุณใช้สิ่งเหล่านี้ตั้งแต่เริ่มต้นและไม่ใช้ฟังก์ชัน builtin ของ Tensorflow / Pytorch

ความเป็นไปได้ 3: overfitting ตามที่ทุกคนได้ชี้ให้เห็น ฉันพบว่าตัวเลือกอีกสองตัวเลือกมีแนวโน้มมากขึ้นในสถานการณ์เฉพาะของคุณเนื่องจากความถูกต้องในการตรวจสอบความถูกต้องอยู่ที่ 50% จากยุค 3 โดยทั่วไปฉันจะกังวลมากขึ้นเกี่ยวกับการ overfitting หากเกิดเหตุการณ์นี้ขึ้นในภายหลัง ที่มือ).


ฉันมีปัญหาที่คล้ายกัน แต่ไม่สมบูรณ์มีรายละเอียดเพิ่มเติมที่นี่: stackoverflow.com/questions/55348052/ ในกรณีของฉันฉันมีความแม่นยำสูงสอดคล้องกับข้อมูลการทดสอบและในระหว่างการฝึกอบรมการตรวจสอบความถูกต้อง "ความแม่นยำ "(ไม่ใช่การสูญเสีย) สูงกว่าความแม่นยำในการฝึก แต่ความจริงที่ว่ามันไม่เคยมาบรรจบกันและทำให้เกิดการสั่นทำให้ฉันนึกถึงความล้นในขณะที่บางคนแนะนำว่าไม่ใช่ในกรณีนี้ดังนั้นฉันจึงสงสัยว่ามันคืออะไรและมีเหตุผลอะไรถ้าไม่ใช่
dusa

1
นี่เป็นคำอธิบายที่น่าเชื่อถือที่สุดสำหรับคำตอบที่ได้รับ ขอให้สังเกตว่าโมเมนตัมการปรับสภาพมาตรฐานสูง (เช่น 0.999 หรือแม้แต่ค่าเริ่มต้นของ Keras 0.99) เมื่อรวมกับอัตราการเรียนรู้ที่สูงยังสามารถสร้างพฤติกรรมที่แตกต่างกันมากในการฝึกอบรมและการประเมินผล ในกรณีนั้นการลดโมเมนตัมให้บางอย่างเช่น 0.9 ควรทำเคล็ดลับ ฉันมีปัญหาคล้ายกันกับ OP และนี่ก็เป็นกลอุบาย
kristjan

5

กำลังเพิ่มคำตอบโดย @ dk14 หากคุณยังคงเห็นความผันผวนหลังจากปรับโมเดลของคุณเป็นปกติอย่างเหมาะสมสิ่งเหล่านี้อาจเป็นสาเหตุที่เป็นไปได้:

  • การใช้ตัวอย่างแบบสุ่มจากชุดการตรวจสอบของคุณ: หมายความว่าชุดการตรวจสอบของคุณในแต่ละขั้นตอนการประเมินจะแตกต่างกันดังนั้นการตรวจสอบความสูญเสียของคุณจึงเป็นเช่นนั้น
  • การใช้ฟังก์ชั่นลดน้ำหนัก (ซึ่งใช้ในกรณีที่มีปัญหาในระดับที่ไม่สมดุล) ในขั้นตอนรถไฟคุณชั่งน้ำหนักฟังก์ชั่นการสูญเสียของคุณตามน้ำหนักคลาสขณะที่ขั้นตอนการพัฒนาคุณเพียงแค่คำนวณการสูญเสียน้ำหนัก ในกรณีเช่นนี้แม้ว่าเครือข่ายของคุณกำลังก้าวเข้าสู่การบรรจบกันคุณอาจเห็นความผันผวนในการตรวจสอบความถูกต้องสูญหายหลังจากรถไฟแต่ละขั้นตอน แต่ถ้าคุณรอภาพที่ใหญ่กว่าคุณจะเห็นว่าเครือข่ายของคุณกำลังบรรจบกับ minima โดยที่ความผันผวนลดลง (ดูภาพที่แนบมาสำหรับตัวอย่างดังกล่าว)ป้อนคำอธิบายรูปภาพที่นี่ป้อนคำอธิบายรูปภาพที่นี่

2

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


1

ความถูกต้องในการตรวจสอบความถูกต้องของคุณเกี่ยวกับปัญหาการจำแนกเลขฐานสอง (ฉันถือว่า) คือ "ผันผวน" ประมาณ 50% นั่นหมายความว่าแบบจำลองของคุณให้การคาดการณ์แบบสุ่มสมบูรณ์ โดยทั่วไปแบบจำลองของคุณจะไม่ดีไปกว่าการพลิกเหรียญ

{0;1}

อย่างไรก็ตามอย่างที่คนอื่น ๆ ชี้ไปแล้วโมเดลของคุณกำลังมีปัญหาเรื่องการมีน้ำหนักเกินอย่างรุนแรง ฉันเดาว่าปัญหาของคุณมีความซับซ้อนมากเกินไปคือมันเป็นเรื่องยากมากที่จะดึงข้อมูลที่ต้องการจากข้อมูลของคุณและเช่นend2end ง่ายผ่านการฝึกอบรม 4 ชั้นแปลงสุทธิมีโอกาสของการเรียนรู้มันไม่มี


0

มีหลายวิธีที่จะลองในสถานการณ์ของคุณ ก่อนอื่นให้พยายามเพิ่มขนาดแบตช์ซึ่งจะช่วยให้มินิแบทช์ SGD ลดลงอย่างดุเดือด การปรับอัตราการเรียนรู้ครั้งที่สองอาจตั้งค่าให้เล็กลง ประการที่สามลองใช้เครื่องมือเพิ่มประสิทธิภาพที่แตกต่างกันเช่น Adam หรือ RMSProp ซึ่งสามารถปรับอัตราการเรียนรู้สำหรับคุณสมบัติ wrt ถ้าเป็นไปได้ลองเพิ่มข้อมูลของคุณ สุดท้ายลองใช้เครือข่ายประสาท Bayesian ผ่านการประมาณกลางคันซึ่งเป็นงานที่น่าสนใจของ Yarin Gal https://arxiv.org/abs/1506.02158


0

คุณลองใช้เครือข่ายที่เล็กกว่านี้หรือไม่? เมื่อพิจารณาถึงความแม่นยำในการฝึกอบรมของคุณสามารถเข้าถึง> .99 ดูเหมือนว่าเครือข่ายของคุณมีการเชื่อมต่อเพียงพอที่จะสร้างแบบจำลองข้อมูลของคุณอย่างเต็มที่ แต่คุณอาจมีการเชื่อมต่อที่ไม่เกี่ยวข้องซึ่งกำลังเรียนรู้แบบสุ่ม

จากประสบการณ์ของฉันฉันได้รับความถูกต้องของการตรวจสอบความถูกต้องของ holdout เพื่อสร้างเสถียรภาพให้กับเครือข่ายขนาดเล็กโดยการลองใช้เครือข่ายต่าง ๆ เช่น ResNet, VGG และเครือข่ายที่ง่ายกว่า

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