ถ้าเรามี eigenvectors 10 ตัวเราก็จะมี 10 โหนดประสาทในชั้นอินพุตได้ถ้าเรามีเอาต์พุต 5 คลาสเราจะมี 5 โหนดในเลเยอร์เอาต์พุต แต่เกณฑ์ในการเลือกจำนวนเลเยอร์ที่ซ่อนอยู่ใน MLP คืออะไรและมีกี่นิวรัล โหนดใน 1 ชั้นที่ซ่อนอยู่?
ถ้าเรามี eigenvectors 10 ตัวเราก็จะมี 10 โหนดประสาทในชั้นอินพุตได้ถ้าเรามีเอาต์พุต 5 คลาสเราจะมี 5 โหนดในเลเยอร์เอาต์พุต แต่เกณฑ์ในการเลือกจำนวนเลเยอร์ที่ซ่อนอยู่ใน MLP คืออะไรและมีกี่นิวรัล โหนดใน 1 ชั้นที่ซ่อนอยู่?
คำตอบ:
วิธีการหลายชั้นซ่อนอยู่ ?
โมเดลที่มีเลเยอร์ที่ซ่อนอยู่เป็นศูนย์จะแก้ไขข้อมูลที่แยกออกจากกันเชิงเส้นได้ ดังนั้นหากคุณไม่ทราบว่าข้อมูลของคุณไม่สามารถแยกออกได้ในเชิงเส้นการตรวจสอบสิ่งนี้ก็ไม่เสียหาย - เหตุใดจึงต้องใช้โมเดลที่ซับซ้อนกว่าที่งานต้องการ ถ้ามันแยกออกจากกันเชิงเส้นได้เทคนิคที่ง่ายกว่าก็จะใช้ได้ผล แต่ Perceptron จะทำงานได้เช่นกัน
สมมติว่าข้อมูลของคุณต้องการการแยกโดยใช้เทคนิคที่ไม่ใช่เชิงเส้นจากนั้นเริ่มต้นด้วยเลเยอร์ที่ซ่อนอยู่เสมอ เกือบจะแน่นอนนั่นคือทั้งหมดที่คุณต้องการ หากข้อมูลของคุณแยกออกจากกันได้โดยใช้ MLP MLP นั้นอาจต้องการเพียงเลเยอร์เดียวที่ซ่อนอยู่ มีเหตุผลทางทฤษฎีสำหรับสิ่งนี้ แต่เหตุผลของฉันเป็นเชิงประจักษ์เท่านั้น: ปัญหาการจำแนก / การถดถอยที่ยากลำบากจำนวนมากได้รับการแก้ไขโดยใช้ MLP ชั้นเดียวที่ซ่อนอยู่ แต่ฉันจำไม่ได้ว่าพบ MLP หลายชั้นที่ซ่อนอยู่ซึ่งใช้ในการสร้างแบบจำลองข้อมูลได้สำเร็จ - - ไม่ว่าจะเป็นกระดานข่าว ML ตำรา ML เอกสารทางวิชาการ ฯลฯ มีอยู่จริง แต่สถานการณ์ที่แสดงให้เห็นถึงการใช้งานนั้นค่อนข้างหายาก
มีกี่โหนดในเลเยอร์ที่ซ่อนอยู่?
จากวรรณกรรมวิชาการ MLP ประสบการณ์ของฉันเอง ฯลฯ ฉันได้รวบรวมและมักจะอาศัยกฎง่ายๆ ( RoT ) หลายข้อและฉันพบว่าคำแนะนำที่เชื่อถือได้ (กล่าวคือคำแนะนำนั้นถูกต้องและแม้ว่าจะไม่เป็นเช่นนั้นก็ตาม มักจะชัดเจนว่าต้องทำอะไรต่อไป):
RoTขึ้นอยู่กับการปรับปรุงคอนเวอร์เจนซ์:
เมื่อคุณเริ่มสร้างโมเดลให้ทำผิดพลาดที่ด้านข้างของโหนดเพิ่มเติมในเลเยอร์ที่ซ่อนอยู่
ทำไม? ขั้นแรกโหนดพิเศษสองสามโหนดในเลเยอร์ที่ซ่อนอยู่ไม่น่าจะเป็นอันตรายใด ๆ - MLP ของคุณจะยังคงมาบรรจบกัน ในทางกลับกันโหนดน้อยเกินไปในเลเยอร์ที่ซ่อนอยู่สามารถป้องกันการบรรจบกันได้ ลองนึกถึงวิธีนี้โหนดเพิ่มเติมให้ความจุส่วนเกิน - น้ำหนักเพิ่มเติมในการจัดเก็บ / ปล่อยสัญญาณไปยังเครือข่ายระหว่างการทำซ้ำ (การฝึกอบรมหรือการสร้างโมเดล) ประการที่สองหากคุณเริ่มต้นด้วยโหนดเพิ่มเติมในเลเยอร์ที่ซ่อนอยู่คุณสามารถตัดมันได้ง่ายในภายหลัง (ในระหว่างขั้นตอนการทำซ้ำ) นี่เป็นเรื่องปกติและมีเทคนิคการวินิจฉัยเพื่อช่วยคุณ (เช่น Hinton Diagram ซึ่งเป็นเพียงการแสดงภาพของเมทริกซ์น้ำหนัก 'แผนที่ความร้อน' ของค่าน้ำหนัก)
RoTsขึ้นอยู่กับขนาดของชั้นอินพุตและขนาดของชั้นเอาต์พุต:
กฎทั่วไปคือขนาดของเลเยอร์ [ซ่อน] นี้จะอยู่ระหว่างขนาดเลเยอร์อินพุต ... และขนาดเลเยอร์เอาต์พุต ....
ในการคำนวณจำนวนโหนดที่ซ่อนอยู่เราใช้กฎทั่วไปของ: (จำนวนอินพุต + เอาต์พุต) x 2/3
RoTขึ้นอยู่กับส่วนประกอบหลัก:
โดยปกติเราจะระบุเป็นโหนดที่ซ่อนอยู่มากมายเป็นมิติ [องค์ประกอบหลัก] ที่จำเป็นในการจับภาพ 70-90% ของความแปรปรวนของการตั้งค่าการป้อนข้อมูล
แต่ผู้เขียนคำถามที่พบบ่อยของ NNเรียกกฎเหล่านี้ว่า "ไร้สาระ" (ตามตัวอักษร) เนื่องจาก: ไม่สนใจจำนวนอินสแตนซ์การฝึกเสียงรบกวนในเป้าหมาย (ค่าของตัวแปรตอบสนอง) และความซับซ้อนของพื้นที่คุณลักษณะ
ในมุมมองของเขา (และดูเหมือนสำหรับฉันเสมอว่าเขารู้ว่าเขากำลังพูดถึงอะไร) ให้เลือกจำนวนเซลล์ประสาทในเลเยอร์ที่ซ่อนอยู่โดยพิจารณาว่า MLP ของคุณมีรูปแบบการทำให้เป็นระเบียบหรือไม่หรือหยุดก่อน
เทคนิคเดียวที่ใช้ได้ในการปรับจำนวนเซลล์ประสาทใน Hidden Layer ให้เหมาะสม:
ในระหว่างการสร้างแบบจำลองของคุณให้ทดสอบอย่างหมกมุ่น การทดสอบจะเปิดเผยลายเซ็นของสถาปัตยกรรมเครือข่ายที่ "ไม่ถูกต้อง" ตัวอย่างเช่นหากคุณเริ่มต้นด้วย MLP ที่มีเลเยอร์ที่ซ่อนอยู่ซึ่งประกอบด้วยโหนดจำนวนน้อย (ซึ่งคุณจะค่อยๆเพิ่มขึ้นตามความจำเป็นตามผลการทดสอบ) ข้อผิดพลาดในการฝึกอบรมและการวางนัยทั่วไปของคุณจะเกิดจากอคติและความไม่เหมาะสม
จากนั้นเพิ่มจำนวนโหนดในเลเยอร์ที่ซ่อนอยู่ทีละโหนดจนกระทั่งข้อผิดพลาดการวางนัยทั่วไปเริ่มเพิ่มขึ้นคราวนี้เกิดจากการติดตั้งมากเกินไปและความแปรปรวนสูง
ในทางปฏิบัติฉันทำแบบนี้:
ชั้นอินพุต : ขนาดของตัวเก็บข้อมูลของฉัน (จำนวนคุณลักษณะในโมเดลของฉัน) + 1 สำหรับโหนดอคติและไม่รวมตัวแปรตอบสนองแน่นอน
เลเยอร์เอาต์พุต : โซลีย์กำหนดโดยโมเดลของฉัน: การถดถอย (หนึ่งโหนด) เทียบกับการจำแนก (จำนวนโหนดที่เทียบเท่ากับจำนวนคลาสโดยถือว่า softmax)
ชั้นที่ซ่อนอยู่ : การเริ่มต้น , ชั้นหนึ่งซ่อนด้วยจำนวนโหนดที่เท่ากับขนาดของชั้นอินพุต ขนาด "ในอุดมคติ" มีแนวโน้มที่จะเล็กกว่า (กล่าวคือจำนวนโหนดระหว่างจำนวนในชั้นอินพุตและจำนวนในชั้นเอาต์พุต) แทนที่จะใหญ่กว่า - อีกครั้งนี่เป็นเพียงการสังเกตเชิงประจักษ์และจำนวนมาก จากการสังเกตนี้เป็นประสบการณ์ของฉันเอง หากโครงการกำหนดเวลาเพิ่มเติมที่จำเป็นฉันจะเริ่มต้นด้วยเลเยอร์เดียวที่ซ่อนอยู่ซึ่งประกอบด้วยโหนดจำนวนน้อยจากนั้น (ตามที่ฉันอธิบายไว้ข้างต้น) ฉันเพิ่มโหนดไปยังเลเยอร์ที่ซ่อนทีละรายการในขณะที่คำนวณลักษณะทั่วไป ข้อผิดพลาดข้อผิดพลาดในการฝึกความลำเอียงและความแปรปรวน เมื่อข้อผิดพลาดทั่วไปลดลงและก่อนที่จะเริ่มเพิ่มขึ้นอีกครั้งจำนวนโหนดที่จุดนั้นเป็นทางเลือกของฉัน ดูรูปด้านล่าง
เป็นเรื่องยากมากที่จะเลือกจำนวนเซลล์ประสาทในชั้นที่ซ่อนอยู่และเลือกจำนวนชั้นที่ซ่อนอยู่ในเครือข่ายประสาทของคุณ
โดยปกติแล้วสำหรับแอปพลิเคชันส่วนใหญ่เลเยอร์ที่ซ่อนอยู่เพียงชั้นเดียวก็เพียงพอแล้ว นอกจากนี้จำนวนเซลล์ประสาทในชั้นที่ซ่อนอยู่ควรอยู่ระหว่างจำนวนอินพุต (10 ในตัวอย่างของคุณ) และจำนวนเอาต์พุต (5 ในตัวอย่างของคุณ)
แต่วิธีที่ดีที่สุดในการเลือกจำนวนเซลล์ประสาทและชั้นที่ซ่อนอยู่คือการทดลอง ฝึกเครือข่ายประสาทหลาย ๆ ชั้นด้วยชั้นที่ซ่อนอยู่และเซลล์ประสาทที่ซ่อนอยู่จำนวนต่างกันและวัดประสิทธิภาพของเครือข่ายเหล่านั้นโดยใช้การตรวจสอบความถูกต้องข้ามกัน คุณสามารถยึดติดกับหมายเลขที่ให้เครือข่ายที่มีประสิทธิภาพสูงสุด
ในการเลือกจำนวนชั้นที่ดีที่สุดและจำนวนเซลล์ประสาทที่ดีที่สุดสำหรับแต่ละชั้นโดยอัตโนมัติคุณสามารถใช้การเพิ่มประสิทธิภาพทางพันธุกรรมการเพิ่มประสิทธิภาพทางพันธุกรรม
ชิ้นสำคัญคือ:
คุณยังสามารถพิจารณา:
เมื่อเร็ว ๆ นี้มีงานทางทฤษฎีเกี่ยวกับhttps://arxiv.org/abs/1809.09953นี้นี้ สมมติว่าคุณใช้ RELU MLP เลเยอร์ที่ซ่อนอยู่ทั้งหมดมีจำนวนโหนดเท่ากันและฟังก์ชันการสูญเสียของคุณและฟังก์ชันจริงที่คุณกำลังประมาณด้วยโครงข่ายประสาทเทียมเป็นไปตามคุณสมบัติทางเทคนิคบางประการ (ในเอกสาร) คุณสามารถเลือกความลึกของคุณให้เป็น สั่งซื้อ $ \ log (n) $ และความกว้างของเลเยอร์ที่ซ่อนอยู่ของคุณให้เป็นไปตามลำดับ $ n ^ {d / (2 (\ beta + d))} \ log ^ 2 (n) $ ที่นี่ $ n $ คือขนาดตัวอย่างของคุณ $ d $ คือขนาดของเวกเตอร์อินพุตของคุณและ $ \ beta $ คือพารามิเตอร์ความเรียบสำหรับฟังก์ชันที่แท้จริงของคุณ เนื่องจากไม่เป็นที่รู้จักของ $ \ beta $ คุณอาจต้องการถือว่าเป็นไฮเปอร์พารามิเตอร์
การทำเช่นนี้คุณสามารถรับประกันได้ว่าด้วยความน่าจะเป็นที่จะแปลงเป็น $ 1 $ ตามฟังก์ชันของขนาดตัวอย่างข้อผิดพลาดในการประมาณของคุณจะแปลงเป็น $ 0 $ เป็นฟังก์ชันของขนาดตัวอย่าง พวกเขาให้อัตรา โปรดทราบว่าสิ่งนี้ไม่ได้รับประกันว่าจะเป็นสถาปัตยกรรมที่ 'ดีที่สุด' แต่อย่างน้อยก็สามารถให้จุดเริ่มต้นที่ดีแก่คุณได้ นอกจากนี้ประสบการณ์ของตัวเองยังชี้ให้เห็นว่าสิ่งต่างๆเช่นการออกกลางคันยังสามารถช่วยได้ในทางปฏิบัติ