ฉันควรทำอย่างไรเมื่อเครือข่ายประสาทของฉันไม่สามารถพูดคุยได้ดี


36

ฉันกำลังฝึกอบรมโครงข่ายประสาทและการสูญเสียการฝึกอบรมลดลง แต่การสูญเสียการตรวจสอบไม่ได้หรือลดลงน้อยกว่าที่ฉันคาดไว้มากขึ้นอยู่กับการอ้างอิงหรือการทดลองกับสถาปัตยกรรมและข้อมูลที่คล้ายคลึงกันมาก ฉันจะแก้ไขสิ่งนี้ได้อย่างไร


สำหรับคำถาม

ฉันควรทำอย่างไรเมื่อเครือข่ายประสาทของฉันไม่ได้เรียนรู้

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

ดูเพิ่มเติมที่เธรดเฉพาะบน Meta:

มีคำถามทั่วไปที่เราสามารถเปลี่ยนเส้นทางคำถามประเภท "ทำไมเครือข่ายประสาทของฉันถึงไม่พูดคุยได้ดี?"


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

@ amoeba อ่าฉันไม่รู้ว่า: UI เปิดป๊อปอัปเมื่อฉันพยายามตอบคำถามดังนั้นฉันคิดว่า Q & A ไม่สามารถโพสต์ด้วยกันได้ .... ถ้ามีคนเขียนดีกว่า / อีก คำตอบที่สมบูรณ์กว่าสิ่งที่ฉันจะเขียนฉันจะหลีกเลี่ยงการเพิ่มที่ซ้ำกัน
DeltaIV

คำตอบ:


36

ครั้งแรกของทั้งหมดขอพูดถึงสิ่งที่ไม่"เครือข่ายประสาทของฉันไม่ได้คุยกัน"หมายถึงและสิ่งที่แตกต่างกับการพูดว่า"เครือข่ายประสาทของฉันไม่ได้ทำงานได้ดี"

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

ทำไมแบบจำลองของคุณถึงไม่สรุปอย่างถูกต้อง?

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

การ Overfitting เป็นสถานะที่ผู้ประเมินได้เริ่มเรียนรู้ชุดการฝึกอบรมจนเริ่มมีการจำลองเสียงในตัวอย่างการฝึกอบรม (นอกเหนือจากความสัมพันธ์ที่เป็นประโยชน์ทั้งหมด)

ตัวอย่างเช่นในภาพด้านล่างเราสามารถเห็นว่าเส้นสีฟ้ามีความชัดเจนมากเกินไปอย่างไร

แต่ทำไมมันถึงไม่ดี?

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

วิธีการป้องกันการ overfitting

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

  • พารามิเตอร์ลงโทษบรรทัดฐาน สิ่งเหล่านี้จะเพิ่มคำพิเศษลงในฟังก์ชั่นการอัพเดทน้ำหนักของแต่ละรุ่นซึ่งขึ้นอยู่กับบรรทัดฐานของพารามิเตอร์ คำนี้มีวัตถุประสงค์เพื่อต่อต้านการอัพเดทจริง (เช่น จำกัด จำนวนน้ำหนักที่สามารถอัปเดตแต่ละครั้ง) สิ่งนี้ทำให้โมเดลมีความทนทานต่อค่าผิดปกติและเสียงรบกวนมากขึ้น ตัวอย่างของการทำให้เป็นมาตรฐานดังกล่าวคือการทำให้เป็นมาตรฐานL1 และ L2ซึ่งสามารถพบได้ในregressors Lasso , RidgeและElastic Net
    เนื่องจากแต่ละเลเยอร์ (เชื่อมต่ออย่างเต็มที่) ในเครือข่ายนิวรัลทำหน้าที่คล้ายกับการถดถอยเชิงเส้นอย่างง่ายจึงถูกใช้ในโครงข่ายประสาท การใช้งานที่พบบ่อยที่สุดคือการทำให้แต่ละชั้นเป็นประจำ การดำเนินงาน
    keras

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

  • เฉพาะโครงข่ายประสาทเทียม regularizations ตัวอย่างบางส่วนคือ:
    • การออกกลางคัน การออกกลางคันเป็นเทคนิคที่น่าสนใจซึ่งทำงานได้ดีอย่างน่าประหลาดใจ มีการใช้การออกกลางคันระหว่างสองเลเยอร์ต่อเนื่องในเครือข่าย ในแต่ละซ้ำร้อยละที่กำหนดของการเชื่อมต่อ (สุ่มเลือก) ที่เชื่อมต่อกันสองชั้นที่มีการปรับตัวลดลง นี้ทำให้เกิดชั้นที่ตามมาพึ่งพาทุกการเชื่อมต่อไปชั้นก่อนหน้านี้
      การใช้งาน keras
    • การเรียนรู้การถ่ายโอน โดยเฉพาะอย่างยิ่งนี้ใช้ในการเรียนรู้ลึก สิ่งนี้ทำได้โดยการเริ่มต้นน้ำหนักของเครือข่ายของคุณกับเครือข่ายอื่นด้วยสถาปัตยกรรมเดียวกันที่ได้รับการฝึกฝนมาล่วงหน้าในชุดข้อมูลขนาดใหญ่ทั่วไป
    • สิ่งอื่น ๆ ที่อาจ จำกัด การ overfitting ใน Deep Neural Networks ได้แก่ : Batch Normalizationซึ่งสามารถทำหน้าที่เป็นเครื่องมือควบคุมและในบางกรณี (เช่นโมดูลการลงทะเบียน) ทำงานเช่นเดียวกับการออกกลางคัน; ชุดขนาดค่อนข้างเล็กใน SGD ซึ่งยังสามารถป้องกันการ overfitting การเพิ่มสัญญาณรบกวนแบบสุ่มให้กับน้ำหนักในเลเยอร์ที่ซ่อนอยู่

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

คำแนะนำการปฏิบัติ:

  • เทคนิคการทำให้เป็นมาตรฐานที่มีประสิทธิภาพมากที่สุดคือการออกกลางคันหมายความว่าควรเป็นครั้งแรกที่คุณควรใช้ อย่างไรก็ตามคุณไม่จำเป็นต้อง (และอาจไม่ควร) วางกลางคันทุกที่! เลเยอร์ที่มีแนวโน้มที่จะ overfitting มากที่สุดคือเลเยอร์ที่เชื่อมต่อเต็มที่ (FC) เนื่องจากมีพารามิเตอร์มากที่สุด ควรนำออกกลางคันกับชั้นเหล่านี้ (ส่งผลต่อการเชื่อมต่อกับชั้นถัดไป)
  • การทำให้เป็นมาตรฐานแบบกลุ่มนอกเหนือจากการมีผลกระทบจากการทำให้เป็นมาตรฐานช่วยให้แบบจำลองของคุณในหลาย ๆ ทาง (เช่นความเร็วในการลู่เข้าหากันทำให้สามารถใช้อัตราการเรียนรู้ที่สูงขึ้น) ควรใช้ในเลเยอร์ FC ด้วย
  • ดังกล่าวก่อนหน้านี้อาจเป็นประโยชน์ในการหยุดโมเดลของคุณก่อนหน้านี้ในขั้นตอนการฝึกอบรมมากกว่าที่กำหนด ปัญหาของการหยุด แต่เนิ่น ๆก็คือไม่มีการรับประกันว่า ณ จุดใดก็ตามโมเดลจะไม่เริ่มดีขึ้นอีก วิธีการที่ใช้งานได้จริงมากกว่าการหยุดทำงานชั่วคราวคือการจัดเก็บน้ำหนักของแบบจำลองเพื่อให้ได้ประสิทธิภาพที่ดีที่สุดในชุดการตรวจสอบความถูกต้อง อย่างไรก็ตามโปรดระมัดระวังเนื่องจากนี่ไม่ใช่การประเมินประสิทธิภาพของโมเดลของคุณที่ไม่ลำเอียง (ดีกว่าชุดฝึกอบรม) นอกจากนี้คุณยังสามารถ overfit ในชุดการตรวจสอบ เพิ่มเติมในภายหลัง
    การใช้งาน keras
  • ในบางแอปพลิเคชั่น (เช่นงานที่เกี่ยวข้องกับภาพ) ขอแนะนำอย่างยิ่งให้ทำตามสถาปัตยกรรมที่สร้างไว้แล้ว (เช่น VGG, ResNet, Inception) ที่คุณสามารถหาน้ำหนักของ ImageNet ได้ ลักษณะทั่วไปของชุดข้อมูลนี้ช่วยให้สามารถใช้คุณสมบัติทั่วไปได้มากพอสำหรับงานที่เกี่ยวข้องกับภาพ นอกจากความแข็งแกร่งในการ overfitting นี้จะลดเวลาการฝึกอบรมอย่างมาก
    การใช้แนวคิดที่คล้ายกันอีกอย่างหนึ่งคือ: ถ้างานของคุณมีข้อมูลไม่มากนัก แต่คุณสามารถหางานอื่นที่คล้ายกันได้คุณสามารถใช้การเรียนรู้การถ่ายโอนเพื่อลดการ overfitting ขั้นแรกให้ฝึกอบรมเครือข่ายของคุณสำหรับงานที่มีชุดข้อมูลที่มีขนาดใหญ่ขึ้นจากนั้นพยายามปรับแต่งโมเดลที่คุณต้องการในตอนแรก ในกรณีส่วนใหญ่การฝึกอบรมเบื้องต้นจะทำให้โมเดลของคุณแข็งแกร่งขึ้นไปจนถึงการมีน้ำหนักเกิน
  • เสริมข้อมูล แม้ว่าจะช่วยให้มีชุดข้อมูลที่ใหญ่กว่าเสมอ แต่เทคนิคการเพิ่มข้อมูลมีข้อบกพร่อง โดยเฉพาะอย่างยิ่งคุณต้องระวังไม่ให้รุนแรงเกินไปเพราะอาจทำลายเนื้อหาเชิงความหมายของข้อมูล ตัวอย่างเช่นในการเพิ่มรูปภาพถ้าคุณแปล / shift / scale หรือปรับความสว่าง / คอนทราสต์ภาพมากเกินไปคุณจะสูญเสียข้อมูลส่วนใหญ่ที่มีอยู่ นอกจากนี้รูปแบบการเติมจะต้องมีการดำเนินการสำหรับแต่ละงานในแบบ ad-hoc (เช่นในการรับรู้ตัวเลขด้วยลายมือที่เขียนด้วยลายมือตัวเลขมักจะจัดตำแหน่งและไม่ควรหมุนมากเกินไปพวกเขาไม่ควรพลิกไปในทิศทางใด ๆ ตามที่พวกเขา ไม่ได้อยู่ในแนวนอน / แนวตั้ง symetric เหมือนกันสำหรับภาพทางการแพทย์)
    ในระยะสั้นระวังอย่าสร้างภาพที่ไม่สมจริงผ่านการเพิ่มข้อมูล ยิ่งกว่านั้นขนาดของชุดข้อมูลที่เพิ่มขึ้นจะต้องใช้เวลาในการฝึกอบรมนานขึ้น โดยส่วนตัวแล้วฉันเริ่มพิจารณาใช้การเพิ่มข้อมูลเมื่อฉันเห็นว่าแบบจำลองของฉันใกล้ถึงสูญเสียในชุดฝึกอบรม0

9

มีหลักฐานเชิงประจักษ์มากมายที่เครือข่ายประสาทที่ลึกพอที่สามารถจดจำฉลากสุ่มบนชุดข้อมูลขนาดใหญ่ (Chiyuan Zhang, Samy Bengio, Moritz Hardt, Benjamin Recht, Oriol Vinyals "การทำความเข้าใจการเรียนรู้ลึกต้องมีการพิจารณาใหม่ทั่วไป") ดังนั้นในหลักการโดยการรับ NN ที่มากพอเราสามารถลดข้อผิดพลาดในการฝึกอบรมให้มีค่าน้อยมาก จำกัด ในทางปฏิบัติด้วยความแม่นยำเชิงตัวเลขไม่ว่างานนั้นจะไร้ความหมายก็ตาม

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

1. ตั้งค่าความคาดหวังของคุณอย่างถูกต้อง

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

อะไรคือเครือข่ายประสาทเทียมที่ทันสมัยในปัจจุบันคืออะไร?

เพื่อค้นหาปัจจุบัน (ในเวลาที่คำตอบ) ประสิทธิภาพ SOTA (State Of The Art) สำหรับ CNNs ในงานต่างๆ เป็นความคิดที่ดีที่จะพยายามทำซ้ำผลลัพธ์ดังกล่าวในชุดข้อมูลอ้างอิงเหล่านี้ก่อนที่คุณจะฝึกอบรมชุดข้อมูลของคุณเองเพื่อทดสอบว่าโครงสร้างพื้นฐานทั้งหมดของคุณอยู่ในตำแหน่งที่เหมาะสม

2. ตรวจสอบให้แน่ใจว่ากระบวนการฝึกอบรมของคุณไม่มีที่ติ

การตรวจสอบทั้งหมดที่อธิบายไว้ในคำตอบของคำถาม

ฉันควรทำอย่างไรเมื่อเครือข่ายประสาทของฉันไม่ได้เรียนรู้

เพื่อให้แน่ใจว่าขั้นตอนการฝึกอบรมของคุณนั้นโอเคเป็นข้อกำหนดเบื้องต้นสำหรับการลดข้อผิดพลาดในการวางนัยทั่วไป (ถ้า NN ของคุณไม่ได้เรียนรู้ การตรวจสอบเหล่านี้รวมถึงสิ่งอื่น ๆ :

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

3. ลองรับ superconvergence

“ Super-Convergence: การฝึกอบรมอย่างรวดเร็วของโครงข่ายประสาทโดยใช้อัตราการเรียนรู้ขนาดใหญ่”โดย Leslie N. Smith และ Nicholay Topin แสดงให้เห็นว่าในบางกรณีการรวมกันของอัตราการเรียนรู้ขนาดใหญ่กับวิธีการเรียนรู้ตามรอบของ Leslie N. Smith เร่งการลู่เข้าด้วยลำดับความสำคัญและลดความจำเป็นในการทำให้เป็นมาตรฐาน ดังนั้นนี่คือสิ่งที่ดีที่จะลองก่อน

4. ตั้งค่าการทำให้เป็นมาตรฐานของคุณเป็น MAXXX

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

วิธีการทำให้เป็นมาตรฐานที่เก่าแก่ที่สุดน่าจะเป็นการหยุดและลดน้ำหนักได้เร็ว บางส่วนของคนอื่น ๆ :

  • ลดขนาดแบทช์: ขนาดแบทช์ที่เล็กกว่ามักจะเกี่ยวข้องกับข้อผิดพลาดในการวางนัยทั่วไปที่เล็กลงดังนั้นนี่เป็นสิ่งที่ควรลอง อย่างไรก็ตามโปรดสังเกตว่าข้อโต้แย้งบางประการเกี่ยวกับประโยชน์ของรถมินิบัส: จากประสบการณ์ของฉันพวกเขาช่วย (ตราบเท่าที่คุณไม่ต้องใช้ขนาดเล็กอย่างบ้าคลั่งเช่น ) แต่ Elad Hoffer, Itay Hubara, Daniel Soudry Train อีกต่อไป พูดคุยที่ดีกว่า: ปิดช่องว่างในการฝึกอบรมชุดใหญ่ของเครือข่ายประสาทไม่เห็นด้วย โปรดทราบว่าหากคุณใช้ชุดคำสั่งแบบกลุ่ม (ดูด้านล่าง) มินิบัสขนาดเล็กเกินไปจะค่อนข้างอันตรายm=16
  • ใช้ SGD แทนที่จะใช้ตัวปรับที่เหมาะสม: สิ่งนี้ได้รับการคุ้มครองโดย @ shimao ดังนั้นฉันจึงพูดถึงเพียงเพื่อความสมบูรณ์
  • ใช้การออกกลางคัน: หากคุณใช้ LSTM ให้ใช้การออกกลางคันมาตรฐานสำหรับหน่วยอินพุตและเอาต์พุตของเลเยอร์ LSTM เท่านั้น สำหรับหน่วยที่เกิดซ้ำ (ประตู) ให้ใช้การออกกลางคันซ้ำตามที่ Yarin Gal แสดงครั้งแรกในปริญญาเอกของเขา วิทยานิพนธ์ อย่างไรก็ตามหากคุณใช้ CNNs การออกกลางคันจะถูกใช้น้อยลงในขณะนี้ คุณมักจะ ...
  • ... ใช้การปรับสภาพแบทช์: สถาปัตยกรรม CNN ล่าสุดหลีกเลี่ยงการออกกลางคันเนื่องจากการปรับสภาพแบทช์ นี่อาจเป็นเพียงแค่แฟชั่นหรืออาจเป็นเพราะความจริงที่ว่าการเลิกกลางคันและชุดการเล่นแบบปกตินั้นเล่นได้ไม่ดีนัก (Xiang Li, Shuo Chen, Xiaolin Hu, Jian Yang, การทำความเข้าใจความแตกต่างระหว่างการออกกลางคันและ Batch Normalization Shift ) เนื่องจากชุดค่าผสมมาตรฐานมีประสิทธิภาพมากกว่าการออกกลางคันเมื่อคุณมีชุดข้อมูลขนาดใหญ่นี่อาจเป็นเหตุผลว่าทำไมการออกกลางคันไม่ได้รับความนิยมสำหรับสถาปัตยกรรมของ CNN ถ้าคุณใช้การทำให้เป็นมาตรฐานแบบแบ็ตช์ตรวจสอบว่าการกระจายของน้ำหนักและอคติสำหรับแต่ละเลเยอร์นั้นปกติประมาณมาตรฐาน สำหรับ RNNs การใช้แบทช์นอร์มมีความซับซ้อน: การทำให้น้ำหนักเป็นมาตรฐาน (Tim Salimans, Diederik P. Kingma,การปรับสภาพน้ำหนักให้เป็นมาตรฐาน: การปรับแต่งพารามิเตอร์อย่างง่ายเพื่อเร่งการฝึกอบรมของโครงข่ายประสาทเทียมลึก ) เป็นทางเลือกที่ทำงานได้
  • ใช้การเพิ่มข้อมูล: มันยังมีผลเป็นปกติ

5. การค้นหาพารามิเตอร์ / สถาปัตยกรรม

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

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


5

รายการของเทคนิคการทำให้เป็นมาตรฐานที่ใช้กันทั่วไปที่ฉันเคยเห็นในวรรณกรรมคือ:

  1. การใช้การทำให้เป็นมาตรฐานแบบแบตช์ซึ่งเป็นตัวปรับปกติที่มีประสิทธิภาพอย่างน่าประหลาดใจจนถึงจุดที่ฉันไม่ค่อยเห็นการเลิกใช้อีกต่อไปเพราะมันไม่จำเป็นเลย
  2. น้ำหนักลดลงเล็กน้อย
  3. เทคนิคการทำให้เป็นมาตรฐานล่าสุดบางอย่างรวมถึงShake-shake ("Shake-Shake normalization" โดย Xavier Gastaldi) และCutout ("ปรับปรุงการทำให้เป็นมาตรฐานของ Convolutional Neural Networks with Cutout" โดย Terrance DeVries และ Graham W. Taylor) โดยเฉพาะอย่างยิ่งความสะดวกในการนำ Cutout ไปใช้ทำให้น่าสนใจมาก ฉันเชื่อว่างานเหล่านี้ดีกว่าการออกกลางคัน - แต่ฉันไม่แน่ใจ
  4. หากเป็นไปได้ให้เลือกสถาปัตยกรรมที่เต็มไปด้วยโครงสร้างที่สมบูรณ์แบบ เปรียบเทียบ VGG-16 ซึ่งมี 100 ล้านพารามิเตอร์ในเลเยอร์ที่เชื่อมต่ออย่างสมบูรณ์เดียวกับ Resnet-152 ซึ่งมีจำนวนเลเยอร์ 10 เท่าและยังคงพารามิเตอร์น้อยกว่า
  5. ชอบ SGD เพื่อเพิ่มประสิทธิภาพอื่น ๆ เช่น Rmsprop และ Adam มันแสดงให้เห็นถึงการพูดคุยที่ดีขึ้น ("การปรับปรุงประสิทธิภาพการวางนัยทั่วไปด้วยการเปลี่ยนจากอดัมเป็น SGD" โดย Nitish Shirish Keskar และ Richard Socher)

0

ฉันรู้สึกว่า Djib2011 ให้คะแนนที่ยอดเยี่ยมเกี่ยวกับวิธีการอัตโนมัติ แต่พวกเขาไม่ได้จัดการกับปัญหาพื้นฐานของวิธีการที่เรารู้ว่าวิธีการที่ใช้เพื่อลดการ overfitting ทำหน้าที่ของมันหรือไม่ ในฐานะเชิงอรรถที่สำคัญสำหรับคำตอบ DeltaIV ฉันต้องการรวมเรื่องนี้จากการวิจัยล่าสุดในช่วง 2 ปีที่ผ่านมา การ overfitting สำหรับโครงข่ายประสาทเทียมไม่ได้เกี่ยวกับรูปแบบการจดจำมากเกินไป แต่ยังเกี่ยวกับแบบจำลองที่ไม่สามารถเรียนรู้สิ่งใหม่หรือจัดการกับความผิดปกติ

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

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

  1. การตรวจจับการเลือกคุณสมบัติ : จำนวนพารามิเตอร์ที่น้อยลงและคุณสมบัติที่น้อยกว่ารุ่นของคุณจะดีกว่า ดังนั้นหากคุณรวมสิ่งที่สำคัญเพียงหนึ่งใน 100 ล้าน (อาจมี 75 ล้านแทน) คุณจะมีโมเดลที่ปรับเปลี่ยนได้ดีขึ้น ปัญหาคือเครือข่ายนิวรัลจำนวนมากไม่สมบูรณ์ในการเลือกคุณสมบัติโดยเฉพาะเมื่อมี # 2 Bootstrap หรือ Boosting พื้นฐานไม่สามารถแก้ไขได้ทั้งสองอย่าง (เฉพาะเวอร์ชันที่เรียกว่า wild bootstrap can) กล่าวง่ายๆถ้าคุณให้ข้อมูลขยะเครือข่ายนิวรัลคุณก็จะให้คุณทิ้งขยะ (การฟื้นฟู L2 ที่กล่าวถึงข้างต้นดีมากในการช่วยเหลือสิ่งนี้)

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

  3. การสุ่มตัวอย่างแบบแบ่งชั้น (Stratified Sampling, Oversampling และ Undersampling) ขึ้นอยู่กับการพิจารณาทางสถิติหรือทางจริยธรรม : ฉันหวังว่าฉันจะเป็นผู้เชี่ยวชาญในการดูและการสุ่มตัวอย่างต่ำกว่า แต่ฉันไม่ใช่ แต่ฉันรู้เกี่ยวกับการสุ่มแบบแบ่งชั้น การจัดกลุ่มปัจจัยสำคัญเช่น (เชื้อชาติ, เพศ, เพศ) แล้วทำการสุ่มตัวอย่างแบบแบ่งชั้นตามกลุ่มมีความสำคัญที่จะไม่เกินความเหมาะสมเมื่อพิจารณาจากข้อมูลขนาดใหญ่ เมื่อทำการตรวจจับภาพจำเป็นต้องมีการสุ่มตัวอย่างแบบแบ่งชั้นร่วมกับการจัดกลุ่มตามกฎหมายในบางสาขาเพื่อหลีกเลี่ยงการเลือกปฏิบัติทางเชื้อชาติ หนังสือที่ลิงก์ข้างต้นพูดสั้น ๆ เกี่ยวกับวิธีการทำเช่นนี้

ป.ล. ฉันควรรวมลิงค์เพิ่มเติมหรือไม่

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