วิธีการต่อสู้ underfitting ในตาข่ายประสาทลึก


50

เมื่อฉันเริ่มต้นด้วยโครงข่ายใยประสาทเทียม (NN) ฉันคิดว่าฉันต้องต่อสู้กับปัญหาล้นใจเป็นปัญหาหลัก แต่ในทางปฏิบัติฉันไม่สามารถทำให้ NN ของฉันผ่านอุปสรรคอัตราความผิดพลาด 20% ได้ ฉันไม่สามารถเอาชนะคะแนนของฉันในป่าสุ่ม!

ฉันกำลังมองหาคำแนะนำที่กว้างมากหรือไม่ควรให้คำแนะนำทั่วไปว่าควรทำอะไรเพื่อให้ NN เริ่มจับภาพแนวโน้มของข้อมูล

สำหรับการใช้งาน NN ฉันใช้ Theano Stacked Auto Encoder กับโค้ดจากบทช่วยสอนที่ใช้งานได้ดี (อัตราความผิดพลาดน้อยกว่า 5%) สำหรับการจำแนกชุดข้อมูล MNIST มันเป็นตรอนหลายชั้นด้วยชั้น softmax ด้านบนกับแต่ละซ่อนภายหลังเป็นก่อนการฝึกอบรมเป็น autoencoder (อธิบายอย่างเต็มที่ในการกวดวิชา , บทที่ 8) มีคุณสมบัติอินพุต ~ 50 และ ~ 10 คลาสเอาต์พุต NN มี sigmoid neurons และข้อมูลทั้งหมดถูกทำให้เป็นมาตรฐาน [0,1] ฉันลองการกำหนดค่าต่าง ๆ มากมาย: จำนวนเลเยอร์และเซลล์ประสาทที่ซ่อนอยู่ในนั้น (100-> 100-> 100, 60-> 60-> 60, 60-> 30-> 15, ฯลฯ ) การเรียนรู้ที่แตกต่างกันและการฝึกอบรมล่วงหน้า อัตราอื่น ๆ

และสิ่งที่ดีที่สุดที่ฉันจะได้รับคืออัตราความผิดพลาด 20% ในชุดการตรวจสอบและ 40% ข้อผิดพลาดในชุดการทดสอบ

ในทางกลับกันเมื่อฉันพยายามใช้ Random Forest (จาก scikit-learn) ฉันจะได้รับอัตราข้อผิดพลาด 12% ในชุดการตรวจสอบและ 25% (!) ในชุดทดสอบ

เป็นไปได้อย่างไรที่ NN ลึกของฉันที่มีการฝึกอบรมล่วงหน้ามีพฤติกรรมไม่ดี? ฉันควรลองทำอะไร

คำตอบ:


34

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

นอกจากนี้ฉันยังพบเอกสารต่อไปนี้มีประโยชน์มาก:

พวกเขาทั้งสองอธิบาย RBMs แต่มีข้อมูลเชิงลึกบางอย่างเกี่ยวกับเครือข่ายลึกโดยทั่วไป ตัวอย่างเช่นหนึ่งในประเด็นสำคัญคือเครือข่ายจำเป็นต้องมีการดีบั๊กเลเยอร์ที่ชาญฉลาด - หากเลเยอร์ก่อนหน้าไม่ได้แสดงคุณสมบัติที่ดีเลเยอร์ต่อไปแทบไม่มีโอกาสแก้ไขเลย


14

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

การเปิดใช้งานเชิงเส้นแบบแก้ไข

สิ่งแรกที่อาจช่วยคุณได้คือเปลี่ยนฟังก์ชั่นการเปิดใช้งานโมเดลของคุณจากsigmoid - - เป็น a แก้ไขเชิงเส้น (aka Relu) -z)f(z)=(1+ez)1f(z)=max(0,z)

การเปิดใช้งาน relu มีข้อดีสองประการ:

  • เอาท์พุทมันเป็นศูนย์ที่แท้จริง (ไม่ใช่แค่ค่าเล็ก ๆ ใกล้กับศูนย์) สำหรับและz0
  • อนุพันธ์ของมันคืออย่างต่อเนื่องไม่ว่าจะเป็น 0 สำหรับหรือ 1 สำหรับ0z0z>0

เครือข่ายของ relu units โดยทั่วไปทำหน้าที่เหมือนชุดของเครือข่ายเชิงเส้นจำนวนมากแทนเนื่องจากหน่วยที่รับอินพุตนั้นเป็น "ปิด" เป็นหลัก (ออกเป็น 0) ในขณะที่หน่วยที่รับอินพุตยุบลงเป็นเส้นตรงเดียว แบบจำลองสำหรับอินพุตนั้น นอกจากนี้อนุพันธ์คงที่มีความสำคัญเนื่องจากเครือข่ายที่ลึกที่มีการเปิดใช้งาน relu มีแนวโน้มที่จะหลีกเลี่ยงปัญหาการไล่ระดับสีที่หายไปและสามารถฝึกอบรมได้โดยไม่ต้องฝึกหัดแบบตามลำดับชั้นz0z>0

ดูที่ "เครือข่ายหน่วยความจำวงจรเรียงกระแสลึก" โดย Glorot, Bordes, & Bengio ( http://jmlr.csail.mit.edu/proceedings/papers/v15/glorot11a/glorot11a.pdf ) สำหรับบทความที่ดีเกี่ยวกับหัวข้อเหล่านี้

การออกกลางคัน

กลุ่มการวิจัยจำนวนมากในช่วงไม่กี่ปีที่ผ่านมาได้สนับสนุนให้ใช้ "การออกกลางคัน" ในเครือข่ายลักษณนามเพื่อหลีกเลี่ยงการ overtraining (ดูตัวอย่าง "การออกกลางคัน: วิธีง่าย ๆ ในการป้องกันเครือข่ายประสาทเทียมจากการ overfitting" โดย Srivastava, Hinton, Krizhevsky, Sutskever, & Salakhutdinov http://www.cs.toronto.edu/~hinton/absps/JMLRdropout.pdf ) ใน การออกกลางคันระหว่างการฝึกอบรมสัดส่วนคงที่ของหน่วยในเลเยอร์ที่กำหนดจะถูกตั้งค่าแบบสุ่มเป็น 0 สำหรับแต่ละอินพุตที่กระบวนการเครือข่าย สิ่งนี้บังคับให้หน่วยที่ไม่ได้ตั้งค่าเป็น 0 เพื่อ "สร้าง" สำหรับหน่วย "หายไป" ดูเหมือนว่าการออกกลางคันจะเป็นเครื่องมือที่มีประสิทธิภาพอย่างยิ่งสำหรับโมเดลโครงข่ายประสาทเทียมในการจำแนกประเภท ดูบทความบล็อกเกี่ยวกับเรื่องนี้ได้ที่http: // fastml


7
แต่คำถามเกี่ยวกับการทำ underfitting ไม่ใช่การทำมากเกินไป
Valentas

8

คุณอาจสนใจอ่านบทความต่อไปนี้โดยนักวิจัยของ Microsoft Research:

Kaiming เขา Xiangyu Zhang, Shaoqing Ren, Jian Sun: การเรียนรู้ส่วนที่เหลืออย่างลึกสำหรับการจดจำภาพเมื่อวันที่ arxiv, 2015

พวกเขามีปัญหาที่คล้ายกันเช่นเดียวกับคุณ:

เมื่อเครือข่ายที่ลึกกว่าสามารถเริ่มบรรจบกันได้ปัญหาการเสื่อมโทรมได้รับการเปิดเผย: เมื่อความลึกของเครือข่ายเพิ่มขึ้นความแม่นยำจะอิ่มตัว (ซึ่งอาจไม่น่าแปลกใจ) และลดลงอย่างรวดเร็ว โดยไม่คาดคิดการลดลงดังกล่าวไม่ได้เกิดจากการเติมเต็มและการเพิ่มเลเยอร์ให้กับโมเดลที่มีความลึกที่เหมาะสมจะนำไปสู่ข้อผิดพลาดในการฝึกอบรมที่สูงขึ้นดังรายงานใน [11, 42] และตรวจสอบอย่างละเอียด

เพื่อแก้ปัญหาพวกเขาใช้ประโยชน์จากสถาปัตยกรรมข้าม ด้วยเหตุนี้พวกเขาจึงฝึกอบรมเครือข่ายที่ลึกมาก (1202 ชั้น) และบรรลุผลลัพธ์ที่ดีที่สุดในการท้าทาย ILSVRC 2015


ขอบคุณสำหรับคำตอบของคุณคุณกำลังจัดการกับปัญหาการไล่ระดับสีที่หายไปหากในกรณีที่การตรวจสอบความถูกต้องสูงกว่าการฝึกอบรมตามมาตรฐานแล้วสิ่งที่น่าทำ? สามารถมีความสุขกับข้อมูลจำนวนน้อยในชุด val แต่บางครั้งมันก็ไม่ได้ขึ้นอยู่กับชุด val ฉันกำลังถามว่ามีเหตุผลอื่นใดไหมที่ค่า acc สูงกว่าการฝึกอบรมตามมาตรฐาน?
Sudip Das
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.