การทำงานกับโครงข่ายประสาทเทียม: รายการตรวจสอบสำหรับการดีบัก

การทำงานกับโครงข่ายประสาทเทียม: รายการตรวจสอบสำหรับการดีบัก

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

บทความนี้เกี่ยวกับอัลกอริทึมสำหรับการดีบักโครงข่ายประสาทเทียมของคุณ

Skillbox แนะนำ: หลักสูตรภาคปฏิบัติ ผู้พัฒนา Python ตั้งแต่เริ่มต้น.

เราเตือนคุณ: สำหรับผู้อ่าน "Habr" ทุกคน - ส่วนลด 10 rubles เมื่อลงทะเบียนในหลักสูตร Skillbox ใด ๆ โดยใช้รหัสส่งเสริมการขาย "Habr"

อัลกอริทึมประกอบด้วยห้าขั้นตอน:

  • เริ่มต้นง่าย
  • การยืนยันการสูญเสีย
  • การตรวจสอบผลลัพธ์ระดับกลางและการเชื่อมต่อ
  • การวินิจฉัยพารามิเตอร์
  • การควบคุมการทำงาน

หากมีสิ่งที่น่าสนใจสำหรับคุณมากกว่าส่วนอื่นๆ คุณสามารถข้ามไปยังส่วนเหล่านี้ได้ทันที

เริ่มต้นง่ายๆ

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

การเริ่มต้นง่ายๆ คือการสร้างแบบจำลองที่เรียบง่ายและฝึกฝนกับชุดข้อมูลเดียว (จุด)

ขั้นแรกเราสร้างแบบจำลองที่เรียบง่าย

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

เราฝึกโมเดลด้วยชุดข้อมูล (จุด) ชุดเดียว

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

แม้ว่าทุกอย่างจะเรียบร้อยดี แต่ให้เตรียมโมเดลสำหรับยุคหนึ่งหรือหลายยุคก่อนจะดำเนินการต่อ

การประเมินการสูญเสีย

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

สิ่งสำคัญคือต้องใส่ใจกับการสูญเสียในช่วงแรก ตรวจสอบว่าผลลัพธ์จริงใกล้เคียงกับผลลัพธ์ที่คาดหวังเพียงใด หากแบบจำลองเริ่มต้นด้วยการเดาแบบสุ่ม ใน งานของ Andrey Karpathy แนะนำสิ่งต่อไปนี้:: “ตรวจสอบให้แน่ใจว่าคุณได้ผลลัพธ์ตามที่คุณคาดหวังเมื่อเริ่มต้นด้วยพารามิเตอร์จำนวนน้อย ควรตรวจสอบการสูญเสียข้อมูลทันที (โดยตั้งค่าระดับการทำให้เป็นมาตรฐานเป็นศูนย์) ตัวอย่างเช่น สำหรับ CIFAR-10 ที่มีตัวแยกประเภท Softmax เราคาดว่าการสูญเสียเริ่มต้นจะเป็น 2.302 เนื่องจากความน่าจะเป็นในการแพร่กระจายที่คาดหวังคือ 0,1 สำหรับแต่ละคลาส (เนื่องจากมี 10 คลาส) และการสูญเสีย Softmax คือโอกาสบันทึกบันทึกเชิงลบของคลาสที่ถูกต้อง โดยที่ - ln (0.1) = 2.302”

สำหรับตัวอย่างไบนารี จะมีการคำนวณที่คล้ายกันสำหรับแต่ละคลาส ตัวอย่างเช่น นี่คือข้อมูล: 20% 0 และ 80% 1 การสูญเสียเริ่มต้นที่คาดหวังจะสูงถึง –0,2ln (0,5) –0,8ln (0,5) = 0,693147 หากผลลัพธ์มากกว่า 1 อาจบ่งชี้ว่าน้ำหนักของโครงข่ายประสาทเทียมไม่สมดุลอย่างเหมาะสม หรือข้อมูลไม่ได้รับการปรับให้เป็นมาตรฐาน

ตรวจสอบผลลัพธ์ระดับกลางและการเชื่อมต่อ

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

  • นิพจน์ที่ไม่ถูกต้องสำหรับการอัพเดต gradle
  • ไม่ใช้การอัปเดตน้ำหนัก
  • การไล่ระดับสีแบบระเบิด

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

นอกจากนี้ยังจำเป็นต้องตรวจสอบค่าของฟังก์ชันการเปิดใช้งาน น้ำหนัก และการอัพเดตของแต่ละเลเยอร์ ตัวอย่างเช่น ขนาดของการอัปเดตพารามิเตอร์ (น้ำหนักและอคติ) ควรจะเป็น 1-e3.

มีปรากฏการณ์ที่เรียกว่า “Dying ReLU” หรือ “ปัญหาการไล่ระดับที่หายไป”เมื่อเซลล์ประสาท ReLU จะส่งออกเป็นศูนย์หลังจากเรียนรู้ค่าอคติเชิงลบขนาดใหญ่สำหรับน้ำหนักของมัน เซลล์ประสาทเหล่านี้จะไม่ถูกยิงอีกเลย ณ จุดใดก็ตามในข้อมูล

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

ไฟซาน ชีค ระบุสามวิธีหลักในการแสดงภาพโครงข่ายประสาทเทียม:

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

มีเครื่องมือที่มีประโยชน์หลายอย่างสำหรับการแสดงภาพการเปิดใช้งานและการเชื่อมต่อของแต่ละเลเยอร์ เช่น คอนเอ็กซ์ и เทนเซอร์บอร์ด.

การทำงานกับโครงข่ายประสาทเทียม: รายการตรวจสอบสำหรับการดีบัก

การวินิจฉัยพารามิเตอร์

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

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

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

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

การทำให้เป็นมาตรฐานแบบแบตช์ - ใช้เพื่อทำให้ข้อมูลอินพุตของแต่ละเลเยอร์เป็นมาตรฐาน ซึ่งช่วยให้เราสามารถแก้ปัญหาการเปลี่ยนแปลงโควาเรียตภายในได้ หากคุณใช้ Dropout และ Batch Norma ร่วมกัน ตรวจสอบบทความนี้.

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

การทำให้เป็นมาตรฐาน - เป็นสิ่งสำคัญสำหรับการสร้างแบบจำลองที่สามารถสรุปได้ทั่วไป เนื่องจากจะเพิ่มบทลงโทษสำหรับความซับซ้อนของโมเดลหรือค่าพารามิเตอร์ที่รุนแรง นี่เป็นวิธีลดความแปรปรวนของโมเดลโดยไม่เพิ่มอคติอย่างมีนัยสำคัญ มากกว่า ข้อมูลโดยละเอียด - ที่นี่.

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

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

สิ่งสำคัญ: หากคุณใช้ทั้งการดร็อปเอาท์และการทำให้เป็นมาตรฐานแบบแบทช์ โปรดใช้ความระมัดระวังเกี่ยวกับลำดับของการดำเนินการเหล่านี้ หรือแม้แต่การใช้ร่วมกัน ทั้งหมดนี้ยังคงมีการหารือและเสริมอย่างแข็งขัน ต่อไปนี้เป็นการอภิปรายที่สำคัญสองประการในหัวข้อนี้ บน Stackoverflow и arXiv.

การควบคุมการทำงาน

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

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

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

การทำงานกับโครงข่ายประสาทเทียม: รายการตรวจสอบสำหรับการดีบัก

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

Skillbox แนะนำ:

ที่มา: will.com

เพิ่มความคิดเห็น