มีวิธีมาตรฐานและเป็นที่ยอมรับสำหรับการเลือกจำนวนเลเยอร์และจำนวนโหนดในแต่ละเลเยอร์ในเครือข่ายนิวรัลไปข้างหน้าหรือไม่? ฉันสนใจวิธีการสร้างเครือข่ายประสาทอัตโนมัติ
มีวิธีมาตรฐานและเป็นที่ยอมรับสำหรับการเลือกจำนวนเลเยอร์และจำนวนโหนดในแต่ละเลเยอร์ในเครือข่ายนิวรัลไปข้างหน้าหรือไม่? ฉันสนใจวิธีการสร้างเครือข่ายประสาทอัตโนมัติ
คำตอบ:
ฉันรู้ว่าคำถามนี้ได้รับการตอบแล้ว แต่ฉันไม่คิดว่าคำตอบที่ยังหลงเหลืออยู่มีส่วนเกี่ยวข้องกับคำถามเกินกว่าที่จะชี้ไปยังลิงก์ที่เกี่ยวข้องกับเนื้อหาของคำถาม โดยเฉพาะอย่างยิ่งการเชื่อมโยงจะอธิบายเทคนิคหนึ่งอย่างสำหรับการกำหนดค่าเครือข่ายแบบเป็นโปรแกรม แต่นั่นไม่ใช่ " [a] วิธีมาตรฐานและวิธีที่ยอมรับ " สำหรับการกำหนดค่าเครือข่าย
โดยทำตามกฎชุดเล็ก ๆ ที่ชัดเจนเราสามารถสร้างสถาปัตยกรรมเครือข่ายที่มีความสามารถโดยทางโปรแกรม (กล่าวคือจำนวนและประเภทของเลเยอร์ของเซลล์ประสาทและจำนวนของเซลล์ประสาทที่ประกอบไปด้วยแต่ละชั้น) การติดตามสคีมานี้จะทำให้คุณมีสถาปัตยกรรมที่มีความสามารถ แต่อาจไม่ใช่โครงสร้างที่ดีที่สุด
แต่เมื่อเริ่มต้นเครือข่ายนี้คุณสามารถปรับแต่งการกำหนดค่าซ้ำ ๆ ในระหว่างการฝึกอบรมโดยใช้อัลกอริธึมเสริมจำนวนหนึ่ง ตระกูลหนึ่งของงานเหล่านี้โดยการตัดโหนดที่ยึดตามค่า (เล็ก) ของน้ำหนักเวกเตอร์หลังจากจำนวน epochs การฝึกอบรมจำนวนหนึ่ง - กล่าวอีกนัยหนึ่งคือกำจัดโหนดที่ไม่จำเป็น / ซ้ำซ้อน (เพิ่มเติมจากด้านล่าง)
ดังนั้นทุก NN มีสามประเภทชั้น: ป้อนข้อมูล , ซ่อนและเอาท์พุท
ดังนั้นการสร้างสถาปัตยกรรม NN จึงหมายถึงการสร้างค่าสำหรับจำนวนเลเยอร์ของแต่ละประเภทและจำนวนโหนดในแต่ละเลเยอร์เหล่านี้
ชั้นการป้อนข้อมูล
เรียบง่าย - NN ทุกคนมีหนึ่งในนั้น - ไม่มีข้อยกเว้นที่ฉันรู้
ด้วยความเคารพต่อจำนวนของเซลล์ประสาทที่ประกอบด้วยชั้นนี้พารามิเตอร์นี้จะถูกกำหนดอย่างสมบูรณ์และไม่ซ้ำกันเมื่อคุณรู้รูปร่างของข้อมูลการฝึกอบรมของคุณ โดยเฉพาะจำนวนของเซลล์ประสาทประกอบด้วยชั้นว่าจะเท่ากับจำนวนของคุณสมบัติ (คอลัมน์) ในข้อมูลของคุณ การกำหนดค่า NN บางอย่างเพิ่มโหนดเพิ่มเติมอีกหนึ่งโหนดสำหรับคำอคติ
ชั้นเอาท์พุท
เช่นเดียวกับชั้นอินพุตทุก NN มีหนึ่งว่าชั้นเอาท์พุท การกำหนดขนาดของมัน (จำนวนเซลล์ประสาท) นั้นเป็นเรื่องง่าย มันถูกกำหนดอย่างสมบูรณ์โดยการกำหนดค่ารูปแบบที่เลือก
NN ของคุณกำลังทำงานในโหมดเครื่องหรือโหมดการถดถอย (การประชุม ML ของการใช้คำที่ใช้ในสถิติด้วยเช่นกัน แต่การกำหนดความหมายที่แตกต่างกันนั้นทำให้เกิดความสับสนมาก) โหมดเครื่อง: ส่งคืนคลาสฉลาก (เช่น "บัญชีพรีเมียม" / "บัญชีพื้นฐาน") Regression Mode ส่งคืนค่า (เช่นราคา)
ถ้า NN เป็น regressor ดังนั้นเลเยอร์เอาต์พุตจะมีโหนดเดียว
หาก NN เป็นตัวจําแนกมันก็จะมีเพียงโหนดเดียวยกเว้นsoftmaxจะถูกใช้ในกรณีที่ชั้นเลเยอร์มีหนึ่งโหนดต่อคลาสฉลากในโมเดลของคุณ
เลเยอร์ที่ซ่อนอยู่
ดังนั้นกฎสองสามข้อเหล่านั้นจึงกำหนดจำนวนชั้นและขนาด (เซลล์ประสาท / เลเยอร์) สำหรับทั้งชั้นข้อมูลเข้าและชั้นส่งออก นั่นทำให้ชั้นที่ซ่อนอยู่
เลเยอร์ที่ซ่อนไว้มีเท่าไร ถ้าข้อมูลของคุณแยกได้เป็นเส้นตรง (ซึ่งคุณมักจะรู้เมื่อคุณเริ่มเขียนโปรแกรม NN) คุณก็ไม่ต้องการเลเยอร์ที่ซ่อนอยู่เลย แน่นอนว่าคุณไม่จำเป็นต้องมี NN เพื่อแก้ไขข้อมูลของคุณ แต่จะยังคงทำงานอยู่
นอกเหนือจากนั้นอย่างที่คุณอาจรู้ว่ามีบทวิจารณ์มากมายเกี่ยวกับคำถามของการกำหนดค่าเลเยอร์ที่ซ่อนอยู่ใน NNs (ดูคำถามที่พบบ่อยเกี่ยวกับNNอย่างถี่ถ้วนและลึกซึ้งสำหรับบทสรุปที่ยอดเยี่ยมของคำวิจารณ์นั้น) ปัญหาหนึ่งในหัวข้อนี้ที่มีฉันทามติคือความแตกต่างของประสิทธิภาพจากการเพิ่มเลเยอร์เพิ่มเติมที่ซ่อนอยู่: สถานการณ์ที่ประสิทธิภาพดีขึ้นด้วยเลเยอร์ที่ซ่อนเร้นที่สอง เลเยอร์ที่ซ่อนอยู่หนึ่งอันเพียงพอสำหรับปัญหาส่วนใหญ่
แล้วขนาดของเลเยอร์ที่ซ่อน - เซลล์ประสาทมีเท่าไหร่? มีกฎบางอย่างที่ได้มาจากสังเกตุบางอย่างซึ่งส่วนใหญ่อาศัยอยู่คือ ' ขนาดที่เหมาะสมที่สุดของเลเยอร์ที่ซ่อนอยู่มักจะอยู่ระหว่างขนาดของอินพุตและขนาดของเลเยอร์เอาท์พุท ' Jeff Heaton ผู้เขียนIntroduction to Neural Networks ใน Java ให้บริการเพิ่มเติมอีกไม่กี่
โดยสรุปสำหรับปัญหาส่วนใหญ่เราอาจได้รับประสิทธิภาพที่ดี (แม้จะไม่มีขั้นตอนการเพิ่มประสิทธิภาพที่สอง) โดยการตั้งค่าเลเยอร์ที่ซ่อนอยู่โดยใช้เพียงสองกฎ: (i) จำนวนเลเยอร์ที่ซ่อนอยู่เท่ากับหนึ่ง และ (ii) จำนวนเซลล์ประสาทในชั้นนั้นคือค่าเฉลี่ยของเซลล์ประสาทในชั้นข้อมูลเข้าและออก
การเพิ่มประสิทธิภาพของการกำหนดค่าเครือข่าย
การตัดอธิบายชุดของเทคนิคในการตัดขนาดเครือข่าย (โดยโหนดไม่ใช่เลเยอร์) เพื่อปรับปรุงประสิทธิภาพการคำนวณและบางครั้งประสิทธิภาพการแก้ไข ส่วนสำคัญของเทคนิคเหล่านี้คือการลบโหนดออกจากเครือข่ายในระหว่างการฝึกอบรมโดยการระบุโหนดเหล่านั้นซึ่งหากลบออกจากเครือข่ายจะไม่ส่งผลกระทบต่อประสิทธิภาพของเครือข่ายอย่างเห็นได้ชัด (เช่นความละเอียดของข้อมูล) (ถึงแม้จะไม่ได้ใช้เทคนิคการตัดแต่งกิ่งอย่างเป็นทางการก็ตามคุณก็สามารถรู้ได้ว่าโหนดใดไม่สำคัญโดยการดูเมทริกซ์น้ำหนักของคุณหลังการฝึกดูน้ำหนักที่ใกล้เคียงกับศูนย์มากที่สุด - เป็นโหนดที่ปลายน้ำหนักทั้งสองด้าน ถูกลบออกระหว่างการตัด) ถ้าคุณใช้อัลกอริทึมการตัดระหว่างการฝึกอบรมให้เริ่มต้นด้วยการกำหนดค่าเครือข่ายที่มีแนวโน้มว่าจะมีโหนดส่วนเกิน (เช่น 'ที่ปรับได้') - กล่าวอีกนัยหนึ่ง
อีกวิธีหนึ่งโดยใช้อัลกอริทึมการตัดแต่งกิ่งกับเครือข่ายของคุณในระหว่างการฝึกอบรมคุณสามารถเข้าใกล้การกำหนดค่าเครือข่ายที่เหมาะสม ไม่ว่าคุณจะสามารถทำได้ใน "หน้า" (เช่นอัลกอริทึมที่ใช้อัลกอริทึมทางพันธุกรรม) เดียวฉันไม่ทราบแม้ว่าฉันจะรู้ว่าตอนนี้การเพิ่มประสิทธิภาพสองขั้นตอนนี้เป็นเรื่องธรรมดามากขึ้น
คำตอบของ @dougทำงานได้สำหรับฉัน มีกฎง่ายๆอีกข้อหนึ่งที่ช่วยสำหรับปัญหาการเรียนรู้แบบมีผู้สอน โดยปกติคุณสามารถป้องกันการปรับตัวได้มากเกินไปหากคุณใช้จำนวนเซลล์ประสาทด้านล่าง:
สำหรับขั้นตอนอัตโนมัติคุณจะต้องเริ่มต้นด้วยอัลฟ่า 2 (อิสระสองเท่าขององศาอิสระในข้อมูลการฝึกอบรมของคุณเป็นแบบจำลองของคุณ) และทำงานให้มากถึง 10 หากข้อผิดพลาด (สูญเสีย) สำหรับชุดข้อมูลการฝึกอบรมของคุณ ชุดข้อมูลทดสอบของคุณ
N_h
(ค่าเฉลี่ยของจำนวนเซลล์ประสาทซ่อนต่อชั้น) N_s = (N_i + N_o) * N_h ^ N_hidden_layers
วิธีแก้ปัญหานี้ แต่ฉันก็ยังไม่ใช้สูตรนี้ สำหรับปัญหาพื้นฐานมาก (ปัญหาของเล่น) เมื่อคุณไม่ได้วางแผนที่จะใช้วิธีการทำให้เป็นมาตรฐานอื่น ๆ
จากIntroduction to Neural Networks สำหรับ Java (รุ่นที่สอง)โดยJeff Heaton - ดูตัวอย่างได้ฟรีที่Google หนังสือและก่อนหน้านี้ที่เว็บไซต์ของผู้แต่ง :
จำนวนเลเยอร์ที่ซ่อนอยู่
มีการตัดสินใจสองอย่างที่ต้องทำเกี่ยวกับเลเยอร์ที่ซ่อนเร้น: จำนวนเลเยอร์ที่ซ่อนอยู่ที่จะมีในเครือข่ายประสาทและจำนวนเซลล์ประสาทในแต่ละเลเยอร์เหล่านี้ ก่อนอื่นเราจะตรวจสอบวิธีการกำหนดจำนวนของเลเยอร์ที่ซ่อนอยู่เพื่อใช้กับเครือข่ายประสาท
ปัญหาที่ต้องมีสองเลเยอร์ที่ซ่อนอยู่นั้นไม่ค่อยพบ อย่างไรก็ตามโครงข่ายประสาทเทียมที่มีเลเยอร์ที่ซ่อนอยู่สองชั้นสามารถแสดงฟังก์ชั่นที่มีรูปร่างทุกชนิด ขณะนี้ไม่มีเหตุผลทางทฤษฎีในการใช้โครงข่ายประสาทเทียมกับเลเยอร์ที่ซ่อนอยู่มากกว่าสองชั้น ในความเป็นจริงสำหรับปัญหาการปฏิบัติจำนวนมากไม่มีเหตุผลที่จะใช้เลเยอร์ที่ซ่อนอยู่มากกว่าหนึ่งชั้น ตารางที่ 5.1 สรุปความสามารถของสถาปัตยกรรมเครือข่ายนิวรัลด้วยเลเยอร์ที่ซ่อนอยู่ต่างๆ
ตารางที่ 5.1: การกำหนดจำนวนของเลเยอร์ที่ซ่อนอยู่
| จำนวนเลเยอร์ที่ซ่อนอยู่ ผลลัพธ์ | 0 - สามารถแสดงฟังก์ชันหรือการตัดสินใจเชิงเส้นได้โดยตรงเท่านั้น 1 - สามารถประมาณฟังก์ชั่นใด ๆ ที่มีการทำแผนที่อย่างต่อเนื่อง จากพื้นที่อัน จำกัด หนึ่งไปยังอีกพื้นที่หนึ่ง 2 - สามารถแสดงขอบเขตการตัดสินใจโดยพลการเพื่อความถูกต้องตามอำเภอใจ ด้วยฟังก์ชั่นการเปิดใช้งานอย่างมีเหตุผลและสามารถประมาณความราบรื่นใด ๆ การทำแผนที่เพื่อความถูกต้องใด ๆการตัดสินใจจำนวนเลเยอร์เซลล์ประสาทที่ซ่อนอยู่นั้นเป็นเพียงส่วนเล็ก ๆ ของปัญหา คุณต้องกำหนดจำนวนเซลล์ประสาทที่จะซ่อนอยู่ในแต่ละเลเยอร์ที่ซ่อนอยู่เหล่านี้ กระบวนการนี้ครอบคลุมในส่วนถัดไป
จำนวนของเซลล์ประสาทในเลเยอร์ที่ซ่อนอยู่
การตัดสินใจจำนวนเซลล์ประสาทในเลเยอร์ที่ซ่อนอยู่นั้นเป็นส่วนที่สำคัญมากในการตัดสินใจเลือกสถาปัตยกรรมเครือข่ายประสาทโดยรวมของคุณ แม้ว่าเลเยอร์เหล่านี้จะไม่โต้ตอบโดยตรงกับสภาพแวดล้อมภายนอก แต่ก็มีอิทธิพลอย่างมากต่อเอาต์พุตสุดท้าย ต้องพิจารณาทั้งจำนวนเลเยอร์ที่ซ่อนอยู่และจำนวนของเซลล์ประสาทในเลเยอร์ที่ซ่อนอยู่เหล่านี้อย่างระมัดระวัง
การใช้เซลล์ประสาทน้อยเกินไปในเลเยอร์ที่ซ่อนอยู่จะส่งผลให้มีบางสิ่งที่เรียกว่า underfitting Underfitting เกิดขึ้นเมื่อมีเซลล์ประสาทน้อยเกินไปในเลเยอร์ที่ซ่อนอยู่เพื่อตรวจจับสัญญาณอย่างเพียงพอในชุดข้อมูลที่ซับซ้อน
การใช้เซลล์ประสาทมากเกินไปในเลเยอร์ที่ซ่อนอยู่อาจส่งผลให้เกิดปัญหาหลายอย่าง ขั้นแรกเซลล์ประสาทมากเกินไปในเลเยอร์ที่ซ่อนอยู่อาจส่งผลให้เกิดการ overfitting การเกิด overfitting เกิดขึ้นเมื่อเครือข่ายประสาทมีความสามารถในการประมวลผลข้อมูลจำนวนมากซึ่งข้อมูลที่มีอยู่ในชุดฝึกอบรมไม่เพียงพอที่จะฝึกอบรมเซลล์ประสาททั้งหมดในชั้นซ่อนเร้น ปัญหาที่สองสามารถเกิดขึ้นได้แม้ว่าข้อมูลการฝึกอบรมจะเพียงพอ เซลล์ประสาทจำนวนมากในชั้นซ่อนเร้นสามารถเพิ่มเวลาที่ใช้ในการฝึกอบรมเครือข่าย ระยะเวลาในการฝึกอบรมสามารถเพิ่มขึ้นจนถึงจุดที่เป็นไปไม่ได้ที่จะฝึกฝนโครงข่ายประสาทเทียมอย่างเพียงพอ เห็นได้ชัดว่ามีการประนีประนอมกันระหว่างเซลล์ประสาทมากเกินไปและน้อยเกินไปในเลเยอร์ที่ซ่อนอยู่
มีกฎหลายวิธีในการกำหนดจำนวนเซลล์ประสาทที่ถูกต้องเพื่อใช้ในเลเยอร์ที่ซ่อนอยู่เช่นต่อไปนี้:
- จำนวนเซลล์ประสาทที่ซ่อนอยู่ควรอยู่ระหว่างขนาดของชั้นข้อมูลเข้าและขนาดของชั้นข้อมูลออก
- จำนวนของเซลล์ประสาทที่ซ่อนอยู่ควรเป็น 2/3 ขนาดของชั้นข้อมูลเข้ารวมทั้งขนาดของชั้นข้อมูลส่งออก
- จำนวนของเซลล์ประสาทที่ซ่อนอยู่ควรน้อยกว่าสองเท่าของขนาดของชั้นข้อมูลเข้า
กฎสามข้อนี้เป็นจุดเริ่มต้นสำหรับคุณที่จะต้องพิจารณา ในที่สุดการเลือกสถาปัตยกรรมสำหรับเครือข่ายประสาทของคุณจะลงมาทดลองใช้และข้อผิดพลาด แต่การทดลองและข้อผิดพลาดมีความหมายอะไรกันแน่ คุณไม่ต้องการเริ่มโยนเลเยอร์และเซลล์ประสาทจำนวนสุ่มในเครือข่ายของคุณ การทำเช่นนั้นจะใช้เวลานานมาก บทที่ 8“ การตัดแต่งโครงข่ายใยประสาทเทียม” จะสำรวจวิธีการต่าง ๆ เพื่อกำหนดโครงสร้างที่เหมาะสมที่สุดสำหรับโครงข่ายประสาทเทียม
ฉันชอบตัวอย่างต่อไปนี้จากคำตอบที่พบที่ researchgate.netซึ่งสื่อความหมายอย่างมากในเวลาไม่กี่คำ:
Steffen B Petersen ·มหาวิทยาลัยอัลบอร์ก
[ ... ]
เพื่อให้สามารถรักษาความปลอดภัยของเครือข่ายให้สามารถสรุปจำนวนโหนดได้จะต้องถูกรักษาให้ต่ำที่สุด หากคุณมีโหนดมากเกินไปเครือข่ายของคุณจะกลายเป็นธนาคารหน่วยความจำที่สามารถเรียกคืนชุดการฝึกอบรมได้อย่างสมบูรณ์แบบ แต่ทำงานได้ไม่ดีกับกลุ่มตัวอย่างที่ไม่ได้เป็นส่วนหนึ่งของชุดฝึกอบรม
ตอนนี้ฉันกำลังศึกษาเชิงประจักษ์เกี่ยวกับเรื่องนี้ในขณะนี้ (กำลังพิจารณาการจำลองศตวรรษของตัวประมวลผลที่โรงงาน HPC ของเรา!) คำแนะนำของฉันคือการใช้เครือข่าย "ใหญ่" และการทำให้เป็นมาตรฐานถ้าคุณใช้การทำให้เป็นปกติสถาปัตยกรรมเครือข่ายจะมีความสำคัญน้อยลง (หากมีขนาดใหญ่พอที่จะเป็นตัวแทนของฟังก์ชั่นพื้นฐานที่เราต้องการบันทึก) พารามิเตอร์อย่างถูกต้อง
ปัญหาอย่างหนึ่งของการเลือกสถาปัตยกรรมคือมันไม่ต่อเนื่องแทนที่จะควบคุมอย่างต่อเนื่องควบคุมความซับซ้อนของแบบจำลองและอาจเป็นเครื่องมือที่ไม่มีคมโดยเฉพาะเมื่อความซับซ้อนในอุดมคติต่ำ
อย่างไรก็ตามทั้งหมดนี้อยู่ภายใต้ทฤษฎีบท "ไม่มีอาหารกลางวันฟรี" ในขณะที่การทำให้เป็นมาตรฐานมีประสิทธิภาพในกรณีส่วนใหญ่มักจะมีกรณีที่การเลือกสถาปัตยกรรมทำงานได้ดีกว่าเสมอ คือลองทั้งวิธีและตรวจสอบข้าม
ถ้าฉันจะสร้างตัวสร้างโครงข่ายประสาทอัตโนมัติฉันจะใช้วิธีการแบบเบส์ไฮบริดมอนติคาร์โล (HMC) ของ Radford Neal และใช้เครือข่ายขนาดใหญ่และรวมเข้ากับน้ำหนักมากกว่าปรับน้ำหนักของเครือข่ายเดียวให้เหมาะสม อย่างไรก็ตามการคำนวณนั้นมีราคาแพงและเป็น "ศิลปะสีดำ" เล็กน้อย แต่ผลลัพธ์ที่ได้ศาสตราจารย์โอนีลประสบความสำเร็จชี้ให้เห็นว่ามันคุ้มค่า!
เท่าที่ฉันรู้ไม่มีวิธีเลือกจำนวนชั้นและเซลล์ประสาทโดยอัตโนมัติในแต่ละชั้น แต่มีเครือข่ายที่สามารถสร้างโทโพโลยีของพวกเขาโดยอัตโนมัติได้เช่น EANN (Evolutionary Artificial Neural Networks ซึ่งใช้ Genetic Algorithms เพื่อวิวัฒนาการโทโพโลยี)
มีหลายวิธีที่มากหรือน้อยกว่าที่ทันสมัยหนึ่งที่ดูเหมือนจะให้ผลลัพธ์ที่ดีคือมีความประณีต (Neuro วิวัฒนาการของ Augmented Topologies)
วิธีสร้างเครือข่ายประสาทโดยอัตโนมัติโดยใช้การค้นหาพารามิเตอร์ไฮเปอร์ทั่วโลก:
เลเยอร์อินพุตและเอาต์พุตมีขนาดคงที่
สิ่งที่สามารถแตกต่างกันไป:
สามารถใช้วิธีการหลายวิธีสำหรับปัญหาการปรับให้เหมาะสมแบบไม่ต่อเนื่องโดยมีข้อผิดพลาดของเครือข่ายหมดเนื่องจากฟังก์ชันต้นทุน
ขออภัยฉันไม่สามารถโพสต์ความคิดเห็นได้ดังนั้นโปรดอดทนกับฉัน อย่างไรก็ตามฉันชนเข้ากับหัวข้อสนทนานี้ซึ่งทำให้ฉันนึกถึงกระดาษที่ฉันได้เห็นเมื่อเร็ว ๆ นี้ ฉันคิดว่าอาจเป็นที่สนใจของคนที่เข้าร่วมที่นี่:
AdaNet: การเรียนรู้โครงสร้างแบบปรับตัวของเครือข่ายประสาทเทียม
Corinna Cortes, Xavier Gonzalvo, Vitaly Kuznetsov, Mehryar Mohri, สกอตต์หยาง; การประชุมวิชาการเครื่องจักรนานาชาติครั้งที่ 34, PMLR 70: 874-883, 2017
บทคัดย่อเรานำเสนอกรอบการทำงานใหม่สำหรับการวิเคราะห์และการเรียนรู้เครือข่ายประสาทเทียม วิธีการของเราพร้อมกันและปรับตัวได้เรียนรู้ทั้งโครงสร้างของเครือข่ายเช่นเดียวกับน้ำหนักของมัน วิธีการจะขึ้นอยู่กับและพร้อมกับการรับประกันการเรียนรู้ทางทฤษฎีที่แข็งแกร่งขึ้นอยู่กับข้อมูลเพื่อให้สถาปัตยกรรมเครือข่ายสุดท้ายปรับให้เหมาะกับความซับซ้อนของปัญหาใด ๆ
ฉันอยู่หลายวิธีในการเรียนรู้โครงสร้างในวิทยานิพนธ์ปริญญาโทของฉันบทที่ 3 หมวดใหญ่คือ:
ฉันอยากจะแนะนำวิธีที่ใช้กันน้อย แต่มีประสิทธิภาพมาก
โดยพื้นฐานแล้วคุณสามารถใช้ชุดของอัลกอริทึมที่เรียกว่า "พันธุกรรมอัลกอริธึม" ซึ่งลองชุดย่อยเล็ก ๆ ของตัวเลือกที่เป็นไปได้ (จำนวนสุ่มของเลเยอร์และโหนดต่อเลเยอร์) จากนั้นจะปฏิบัติต่อประชากรของตัวเลือกนี้ในฐานะ "ผู้ปกครอง" ที่สร้างเด็กโดยการรวม / กลายพันธุ์ผู้ปกครองหนึ่งคนหรือมากกว่านั้นเหมือนกับสิ่งมีชีวิตวิวัฒนาการ เด็กที่ดีที่สุดและเด็กที่มีการสุ่มตัวอย่างจะถูกเก็บรักษาไว้ในแต่ละรุ่นและรุ่นต่อ ๆ ไป
สำหรับพารามิเตอร์ ~ 100 หรือน้อยกว่า (เช่นการเลือกจำนวนชั้นชนิดของชั้นและจำนวนเซลล์ประสาทต่อชั้น) วิธีนี้มีประสิทธิภาพสูงสุด ใช้งานได้โดยการสร้างสถาปัตยกรรมเครือข่ายที่มีศักยภาพจำนวนมากสำหรับแต่ละรุ่นและฝึกอบรมบางส่วนจนกว่าจะถึงช่วงการเรียนรู้ (ประมาณ 10-10,000 ชุดย่อยโดยทั่วไปขึ้นอยู่กับพารามิเตอร์หลายตัว) หลังจากผ่านไปหลายชั่วอายุคนคุณอาจต้องการพิจารณาจุดที่รถไฟและการตรวจสอบเริ่มมีอัตราความผิดพลาดที่แตกต่างกันอย่างมาก (overfitting) ตามวัตถุประสงค์ของคุณในการเลือกเด็ก อาจเป็นความคิดที่ดีที่จะใช้ชุดย่อยของข้อมูลขนาดเล็กมาก (10-20%) จนกว่าคุณจะเลือกรุ่นสุดท้ายเพื่อให้ได้ข้อสรุปที่รวดเร็วยิ่งขึ้น ใช้เมล็ดเดียวสำหรับการเริ่มต้นเครือข่ายของคุณเพื่อเปรียบเทียบผลลัพธ์อย่างถูกต้อง
10-50 รุ่นควรให้ผลลัพธ์ที่ยอดเยี่ยมสำหรับเครือข่ายขนาดที่เหมาะสม
จำนวนเลเยอร์ที่ซ่อนอยู่และสิ่งที่พวกเขาสามารถบรรลุ:
0 - สามารถแสดงฟังก์ชันหรือการตัดสินใจเชิงเส้นได้โดยตรงเท่านั้น
1 - สามารถประมาณฟังก์ชั่นใด ๆ ที่มีการทำแผนที่อย่างต่อเนื่องจากพื้นที่ จำกัด หนึ่งไปยังอีก
2 - สามารถแสดงขอบเขตการตัดสินใจโดยพลการเพื่อความถูกต้องตามอำเภอใจพร้อมฟังก์ชั่นการเปิดใช้งานอย่างมีเหตุผลและสามารถประมาณการทำแผนที่ที่ราบรื่นกับความแม่นยำใด ๆ
มากกว่า 2 - เลเยอร์เพิ่มเติมสามารถเรียนรู้การแทนค่าที่ซับซ้อน (เรียงลำดับของวิศวกรรมคุณลักษณะอัตโนมัติ) สำหรับเลเยอร์เลเยอร์