วิธีการตั้งค่าจำนวนของเซลล์ประสาทและเลเยอร์ในเครือข่ายประสาท


26

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

  1. หนึ่งจะตัดสินใจจำนวนของเลเยอร์กลางเครือข่ายประสาทที่กำหนดได้อย่างไร 1 กับ 10 หรืออะไรก็ตาม
  2. หนึ่งจะตัดสินใจจำนวนของเซลล์ประสาทในแต่ละชั้นกลางได้อย่างไร ขอแนะนำให้มีเซลล์ประสาทจำนวนเท่ากันในแต่ละชั้นกลางหรือแตกต่างกันไปตามการใช้งาน?

คำตอบ:


19

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

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

ป้อนคำอธิบายรูปภาพที่นี่

ป้อนคำอธิบายรูปภาพที่นี่

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

ป้อนคำอธิบายรูปภาพที่นี่

ตอนนี้สมมติว่าคุณมีปัญหาต่อไปนี้และคุณถูกขอให้แยกชั้นเรียน ในกรณีนี้การให้เหตุผลก็เหมือนของข้างต้น

ป้อนคำอธิบายรูปภาพที่นี่

สำหรับข้อมูลต่อไปนี้:

ป้อนคำอธิบายรูปภาพที่นี่

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

ป้อนคำอธิบายรูปภาพที่นี่


สมมติว่าคุณถูกขอให้ค้นหาขอบเขตการตัดสินใจแบบวงกลมต่อไปนี้

ป้อนคำอธิบายรูปภาพที่นี่

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

ป้อนคำอธิบายรูปภาพที่นี่


11

คำถามที่ดีมากเนื่องจากยังไม่มีคำตอบที่แน่นอนสำหรับคำถามนี้ นี่เป็นสาขาการวิจัยที่กระตือรือร้น

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

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

เกิดอะไรขึ้นถ้าเครือข่ายของฉัน "ใหญ่เกินไป"

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

เกิดอะไรขึ้นถ้าเครือข่ายของฉัน "เล็กเกินไป"

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

การประมาณขนาดของเครือข่าย

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

อย่างไรก็ตามมันไม่ง่ายอย่างนั้น หากเครือข่ายของคุณต้องเป็น 64 มิติคุณจะสร้างเลเยอร์ที่ซ่อนอยู่ขนาด 64 หรือสองเลเยอร์ที่มีขนาด 8 หรือไม่ ที่นี่ฉันจะให้คุณปรีชาว่าสิ่งที่จะเกิดขึ้นในกรณีใด

จะลึกลงไป

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

โดยทั่วไปคุณจะต้องเจาะลึกถ้าข้อมูลของคุณไม่มีโครงสร้างมาก (เช่นรูปภาพ) และต้องประมวลผลค่อนข้างน้อยก่อนที่จะดึงข้อมูลที่เป็นประโยชน์ออกมาได้

กว้างขึ้น

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


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

8

คำตอบสั้น ๆ : มันเกี่ยวข้องกับมิติข้อมูลของคุณและประเภทของแอปพลิเคชัน

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

Information Bottleneck เป็นดาบสองคม:

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

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

ลิงค์ที่มีประโยชน์สำหรับตัวอย่างและการค้นหาเพิ่มเติม:

[1] https: //livebook.manning.com#! / หนังสือ / การเรียนรู้อย่างลึกซึ้งกับไพ ธ อน / ตอนที่ 3 / จุด -1130-232-232-0

[2] https://www.quantamagazine.org/new-theory-cracks-open-the-black-box-of-deep-learning-20170921/


4

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

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

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


1

เพิ่มไปยังคำตอบก่อนหน้านี้มีวิธีการที่โทโพโลยีของเครือข่ายประสาทปรากฏภายนอกซึ่งเป็นส่วนหนึ่งของการฝึกอบรม สิ่งสำคัญที่สุดคือคุณมี Neuroevolution ของ Augmenting Topologies (NEAT) ที่คุณเริ่มต้นด้วยเครือข่ายพื้นฐานที่ไม่มีเลเยอร์ที่ซ่อนอยู่จากนั้นใช้อัลกอริทึมทางพันธุกรรมเพื่อ "ทำให้โครงสร้างเครือข่าย" ซับซ้อน มีการนำ NEAT มาใช้ในกรอบงาน ML มากมาย นี่เป็นบทความเกี่ยวกับการนำไปใช้เพื่อเรียนรู้ Mario: CrAIg: การใช้ Neural Networks เพื่อเรียนรู้ Mario

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