วิธีการเลือกจำนวนของเลเยอร์และโหนดที่ซ่อนอยู่ในเครือข่ายประสาทเทียมไปข้างหน้า?


540

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


4
ในบรรดาคำตอบที่ยอดเยี่ยมทั้งหมดฉันพบบทความนี้มีประโยชน์dstath.users.uth.gr/papers/IJRS2009_Stathakis.pdf
Debpriya Seal

@DebpriyaSeal ไม่ได้ว่ามีประโยชน์ แต่ ...
DarkCygnus

คำตอบ:


467

ฉันรู้ว่าคำถามนี้ได้รับการตอบแล้ว แต่ฉันไม่คิดว่าคำตอบที่ยังหลงเหลืออยู่มีส่วนเกี่ยวข้องกับคำถามเกินกว่าที่จะชี้ไปยังลิงก์ที่เกี่ยวข้องกับเนื้อหาของคำถาม โดยเฉพาะอย่างยิ่งการเชื่อมโยงจะอธิบายเทคนิคหนึ่งอย่างสำหรับการกำหนดค่าเครือข่ายแบบเป็นโปรแกรม แต่นั่นไม่ใช่ " [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) จำนวนเซลล์ประสาทในชั้นนั้นคือค่าเฉลี่ยของเซลล์ประสาทในชั้นข้อมูลเข้าและออก


การเพิ่มประสิทธิภาพของการกำหนดค่าเครือข่าย

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

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


31
คุณระบุว่าสำหรับปัญหาส่วนใหญ่ต้องการเลเยอร์ที่ซ่อนอยู่เพียงชั้นเดียวเท่านั้น อาจเป็นการดีกว่าถ้าจะบอกว่า NNs ที่มีเลเยอร์ที่ซ่อนอยู่นั้นยากต่อการฝึกฝนอย่างมาก (ถ้าคุณต้องการทราบวิธีตรวจสอบสิ่งพิมพ์ของกลุ่ม Hinton ที่ Uof Toronto "การเรียนรู้ลึก") และปัญหาเหล่านั้นที่ต้องการมากกว่า layer ถูกพิจารณาว่าเป็น "non solvable" โดยโครงข่ายประสาทเทียม
bayerj

13
คุณเขียนถ้า NN เป็น regressor ดังนั้นเลเยอร์เอาต์พุตมีโหนดเดียว . เหตุใดจึงมีเพียงโหนดเดียว เหตุใดฉันจึงไม่สามารถมีเอาต์พุตต่อเนื่องหลายตัวได้
gerrit

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

5
ฉันคิดว่ามันตรงข้ามกับสิ่งนี้: ถ้า NN เป็นตัวจําแนกมันก็ยังมีโหนดเดียวเว้นแต่ softmax จะใช้ในกรณีที่ชั้นออกมีหนึ่งโหนดต่อชั้นฉลากในแบบจำลองของคุณ
viyps

2
@doug ขอบคุณสำหรับคำตอบที่ยอดเยี่ยมนี้ สิ่งนี้ทำให้ฉันลด ANN ของฉันจาก 3 เลเยอร์ที่ซ่อนอยู่ลงไปที่ 1 และบรรลุความแม่นยำในการจำแนกประเภทเดียวกันโดยการตั้งค่าจำนวนเซลล์ประสาทที่ซ่อนอยู่อย่างถูกต้อง ... ฉันเพิ่งใช้ค่าเฉลี่ยของอินพุตและเอาต์พุตรวมกัน ขอบคุณ!
rayryeng

129

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

Nh=Ns(α(Ni+No))

Ni
No
Ns
α

alpha

Ns(Ni+No)α

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


7
สูตรนี้น่าสนใจและเป็นประโยชน์ มีการอ้างอิงใด ๆ สำหรับสูตรนี้หรือไม่? มันจะมีประโยชน์มากขึ้น
prashanth

2
@prashanth ฉันรวมการยืนยันและสูตรหลายอย่างในข้อความการออกแบบ NN ที่อ้างถึงข้างต้น แต่ฉันไม่คิดว่ามันถูกเรียกออกมาอย่างชัดเจนในแบบฟอร์มที่ฉันแสดง และรุ่นของฉันเป็นการประมาณที่หยาบมากพร้อมข้อสมมติฐานที่ทำให้เข้าใจง่ายมาก ดังนั้น YMMV
เตาแก๊ส

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

3
Nh(Ni+No)

2
@mateus บางทีกฎดีขึ้นเล็กน้อยของหัวแม่มือสำหรับหลายชั้นเป็นN_h(ค่าเฉลี่ยของจำนวนเซลล์ประสาทซ่อนต่อชั้น) N_s = (N_i + N_o) * N_h ^ N_hidden_layersวิธีแก้ปัญหานี้ แต่ฉันก็ยังไม่ใช้สูตรนี้ สำหรับปัญหาพื้นฐานมาก (ปัญหาของเล่น) เมื่อคุณไม่ได้วางแผนที่จะใช้วิธีการทำให้เป็นมาตรฐานอื่น ๆ
เตาแก๊ส

60

จาก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 ·มหาวิทยาลัยอัลบอร์ก

[ ... ]

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


คุณรู้จักแหล่งอ้างอิงของ Steffen B Petersen หรือไม่?
เซบาสเตียนนีลเซ่น

ฉันขอโทษที่ฉันทำไม่ได้ ฉันลองค้นหา แต่หาไม่พบ ... ฉันคิดว่าบทความถูกลบออกจากเว็บ บางทีคุณสามารถติดต่อเขาโดยตรง
jj_

ขนาดของชุดฝึกอบรมไม่ควรนำมาพิจารณาหรือไม่ ฉันมีชุดข้อมูลแบบตารางที่มีตัวอย่างเฉพาะประมาณ 300,000 ตัวอย่าง (ราคารถยนต์) เลเยอร์อินพุตมี 89 โหนด การฝึกอบรมเครือข่ายที่ไม่มีการทำให้เป็นปกติและมีเพียง 89 โหนดในเลเยอร์ที่ซ่อนอยู่เพียงครั้งเดียว RMSE plateaus ที่ ~ $ 1,800 (โหนดเอาต์พุตเดี่ยวคือราคาในปัญหาการถดถอยนี้)
rodrigo-silveira

ฉันคิดว่าแหล่งอ้างอิงโดย Steffen B Petersen อยู่ที่นี่: researchgate.net/post/ …
TripleAntigen

43

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

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

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

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


"ตอนนี้ฉันกำลังศึกษาเชิงประจักษ์เกี่ยวกับเรื่องนี้" - มีการปรับปรุงบ้างไหม?
Martin Thoma

2
ไม่ 'ไม่กลัวฉันยังคงแนะนำเครือข่ายขนาดใหญ่ (ish) และการทำให้เป็นมาตรฐาน แต่ไม่มี bullet เงินปัญหาบางอย่างไม่จำเป็นต้องทำให้เป็นมาตรฐาน แต่ชุดข้อมูลบางชุดจำเป็นต้องปรับขนาดเลเยอร์ที่ซ่อนอยู่ ผู้ตรวจสอบที่น่าเศร้าไม่ชอบกระดาษ :-(
Dikran Marsupial

17

เท่าที่ฉันรู้ไม่มีวิธีเลือกจำนวนชั้นและเซลล์ประสาทโดยอัตโนมัติในแต่ละชั้น แต่มีเครือข่ายที่สามารถสร้างโทโพโลยีของพวกเขาโดยอัตโนมัติได้เช่น EANN (Evolutionary Artificial Neural Networks ซึ่งใช้ Genetic Algorithms เพื่อวิวัฒนาการโทโพโลยี)

มีหลายวิธีที่มากหรือน้อยกว่าที่ทันสมัยหนึ่งที่ดูเหมือนจะให้ผลลัพธ์ที่ดีคือมีความประณีต (Neuro วิวัฒนาการของ Augmented Topologies)



6

วิธีสร้างเครือข่ายประสาทโดยอัตโนมัติโดยใช้การค้นหาพารามิเตอร์ไฮเปอร์ทั่วโลก:

เลเยอร์อินพุตและเอาต์พุตมีขนาดคงที่

สิ่งที่สามารถแตกต่างกันไป:

  • จำนวนชั้น
  • จำนวนเซลล์ประสาทในแต่ละชั้น
  • ประเภทของชั้น

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

  • 1) กริด / การค้นหาแบบสุ่มเหนือพื้นที่พารามิเตอร์เพื่อเริ่มต้นจากตำแหน่งที่ดีขึ้นเล็กน้อย
  • 2) มีวิธีการมากมายที่สามารถใช้ในการค้นหาสถาปัตยกรรมที่เหมาะสมที่สุด (ใช่มันต้องใช้เวลา)
  • 3) ทำการทำให้เป็นมาตรฐานล้างทำซ้ำ

6

ขออภัยฉันไม่สามารถโพสต์ความคิดเห็นได้ดังนั้นโปรดอดทนกับฉัน อย่างไรก็ตามฉันชนเข้ากับหัวข้อสนทนานี้ซึ่งทำให้ฉันนึกถึงกระดาษที่ฉันได้เห็นเมื่อเร็ว ๆ นี้ ฉันคิดว่าอาจเป็นที่สนใจของคนที่เข้าร่วมที่นี่:

AdaNet: การเรียนรู้โครงสร้างแบบปรับตัวของเครือข่ายประสาทเทียม

Corinna Cortes, Xavier Gonzalvo, Vitaly Kuznetsov, Mehryar Mohri, สกอตต์หยาง; การประชุมวิชาการเครื่องจักรนานาชาติครั้งที่ 34, PMLR 70: 874-883, 2017

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


5

ฉันอยู่หลายวิธีในการเรียนรู้โครงสร้างในวิทยานิพนธ์ปริญญาโทของฉันบทที่ 3 หมวดใหญ่คือ:

  • วิธีการปลูก
  • วิธีการตัดแต่งกิ่ง
  • วิธีการทางพันธุกรรม
  • เสริมการเรียนรู้
  • ผ้าประสาทเทียม

3

ฉันอยากจะแนะนำวิธีที่ใช้กันน้อย แต่มีประสิทธิภาพมาก

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

สำหรับพารามิเตอร์ ~ 100 หรือน้อยกว่า (เช่นการเลือกจำนวนชั้นชนิดของชั้นและจำนวนเซลล์ประสาทต่อชั้น) วิธีนี้มีประสิทธิภาพสูงสุด ใช้งานได้โดยการสร้างสถาปัตยกรรมเครือข่ายที่มีศักยภาพจำนวนมากสำหรับแต่ละรุ่นและฝึกอบรมบางส่วนจนกว่าจะถึงช่วงการเรียนรู้ (ประมาณ 10-10,000 ชุดย่อยโดยทั่วไปขึ้นอยู่กับพารามิเตอร์หลายตัว) หลังจากผ่านไปหลายชั่วอายุคนคุณอาจต้องการพิจารณาจุดที่รถไฟและการตรวจสอบเริ่มมีอัตราความผิดพลาดที่แตกต่างกันอย่างมาก (overfitting) ตามวัตถุประสงค์ของคุณในการเลือกเด็ก อาจเป็นความคิดที่ดีที่จะใช้ชุดย่อยของข้อมูลขนาดเล็กมาก (10-20%) จนกว่าคุณจะเลือกรุ่นสุดท้ายเพื่อให้ได้ข้อสรุปที่รวดเร็วยิ่งขึ้น ใช้เมล็ดเดียวสำหรับการเริ่มต้นเครือข่ายของคุณเพื่อเปรียบเทียบผลลัพธ์อย่างถูกต้อง

10-50 รุ่นควรให้ผลลัพธ์ที่ยอดเยี่ยมสำหรับเครือข่ายขนาดที่เหมาะสม


อีกวิธีที่น่าสนใจมากคือการปรับแต่งแบบเบย์ซึ่งเป็นวิธีการเพิ่มประสิทธิภาพกล่องดำที่มีประสิทธิภาพอย่างยิ่งสำหรับพารามิเตอร์จำนวนเล็กน้อย arxiv.org/pdf/1206.2944.pdf
Dan Erez

2

จำนวนเลเยอร์ที่ซ่อนอยู่และสิ่งที่พวกเขาสามารถบรรลุ:

0 - สามารถแสดงฟังก์ชันหรือการตัดสินใจเชิงเส้นได้โดยตรงเท่านั้น

1 - สามารถประมาณฟังก์ชั่นใด ๆ ที่มีการทำแผนที่อย่างต่อเนื่องจากพื้นที่ จำกัด หนึ่งไปยังอีก

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

มากกว่า 2 - เลเยอร์เพิ่มเติมสามารถเรียนรู้การแทนค่าที่ซับซ้อน (เรียงลำดับของวิศวกรรมคุณลักษณะอัตโนมัติ) สำหรับเลเยอร์เลเยอร์


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