สถาปัตยกรรม perceptron (MLP) หลายชั้น: เกณฑ์ในการเลือกจำนวนชั้นที่ซ่อนและขนาดของชั้นที่ซ่อนอยู่?


104

ถ้าเรามี eigenvectors 10 ตัวเราก็จะมี 10 โหนดประสาทในชั้นอินพุตได้ถ้าเรามีเอาต์พุต 5 คลาสเราจะมี 5 โหนดในเลเยอร์เอาต์พุต แต่เกณฑ์ในการเลือกจำนวนเลเยอร์ที่ซ่อนอยู่ใน MLP คืออะไรและมีกี่นิวรัล โหนดใน 1 ชั้นที่ซ่อนอยู่?



คำตอบ:


217

วิธีการหลายชั้นซ่อนอยู่ ?

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

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

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


1
ฉันต้องการเพิ่มผลลัพธ์ที่เกี่ยวข้องบางอย่างเกี่ยวกับ RoT # 1: ใน SVM ที่ประสบความสำเร็จคุณจะจับคู่อินพุตของคุณกับพื้นที่มิติที่สูงขึ้น (โหนดที่ซ่อนอยู่มากกว่าโหนดในเลเยอร์อินพุตในสำนวน NN) งานของเลเยอร์เอาต์พุตคือการได้รับการตัดสินใจจากการเป็นตัวแทนที่สมบูรณ์เกินไปนี้ อาจมีการเชื่อมต่อกับการคาดการณ์แบบสุ่มด้วย บทความยอดเยี่ยมของ Adam Coates & Andrew Y. Ng (2011) กล่าวถึงหัวข้อที่เกี่ยวข้อง
Vladislavs Dovgalecs

คำอธิบายที่ดี มีความคิดอย่างไรที่ฉันจะพล็อตรูปเหมือนข้างต้นเมื่อใช้ sklearn และ MLPClassifier
seralouk

1
@sera คุณหมายถึงสไตล์ xkcd?
เดนโฟรมูฟา

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

2

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

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

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


2

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

ชิ้นสำคัญคือ:

  1. โครโมโซม : เวกเตอร์ที่กำหนดจำนวนหน่วยในแต่ละชั้นที่ซ่อนอยู่ (เช่น [20,5,1,0,0] หมายถึง 20 หน่วยในชั้นที่ซ่อนแรก 5 ในวินาที ... โดยไม่มีชั้นที่ 4 และ 5) คุณสามารถกำหนดขีด จำกัด จำนวนเลเยอร์สูงสุดที่จะลองและจำนวนยูนิตสูงสุดในแต่ละเลเยอร์ได้ คุณควรวางข้อ จำกัด เกี่ยวกับวิธีการสร้างโครโมโซม ไม่ควรสร้าง [10, 0, 3, ... ] เนื่องจากหน่วยใด ๆ หลังจากเลเยอร์ที่หายไป ('3, ... ') จะไม่เกี่ยวข้องและจะทำให้เสียรอบการประเมิน
  2. ฟังก์ชันการออกกำลังกาย : ฟังก์ชันที่ส่งกลับซึ่งกันและกันของข้อผิดพลาดในการฝึกที่ต่ำที่สุดในชุดการตรวจสอบความถูกต้องข้ามเครือข่ายที่กำหนดโดยโครโมโซมที่กำหนด นอกจากนี้คุณยังสามารถระบุจำนวนหน่วยทั้งหมดหรือเวลาในการคำนวณหากคุณต้องการค้นหา "เครือข่ายที่เล็กที่สุด / เร็วที่สุด แต่แม่นยำที่สุด"

คุณยังสามารถพิจารณา:

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

0

เมื่อเร็ว ๆ นี้มีงานทางทฤษฎีเกี่ยวกับhttps://arxiv.org/abs/1809.09953นี้นี้ สมมติว่าคุณใช้ RELU MLP เลเยอร์ที่ซ่อนอยู่ทั้งหมดมีจำนวนโหนดเท่ากันและฟังก์ชันการสูญเสียของคุณและฟังก์ชันจริงที่คุณกำลังประมาณด้วยโครงข่ายประสาทเทียมเป็นไปตามคุณสมบัติทางเทคนิคบางประการ (ในเอกสาร) คุณสามารถเลือกความลึกของคุณให้เป็น สั่งซื้อ $ \ log (n) $ และความกว้างของเลเยอร์ที่ซ่อนอยู่ของคุณให้เป็นไปตามลำดับ $ n ^ {d / (2 (\ beta + d))} \ log ^ 2 (n) $ ที่นี่ $ n $ คือขนาดตัวอย่างของคุณ $ d $ คือขนาดของเวกเตอร์อินพุตของคุณและ $ \ beta $ คือพารามิเตอร์ความเรียบสำหรับฟังก์ชันที่แท้จริงของคุณ เนื่องจากไม่เป็นที่รู้จักของ $ \ beta $ คุณอาจต้องการถือว่าเป็นไฮเปอร์พารามิเตอร์

การทำเช่นนี้คุณสามารถรับประกันได้ว่าด้วยความน่าจะเป็นที่จะแปลงเป็น $ 1 $ ตามฟังก์ชันของขนาดตัวอย่างข้อผิดพลาดในการประมาณของคุณจะแปลงเป็น $ 0 $ เป็นฟังก์ชันของขนาดตัวอย่าง พวกเขาให้อัตรา โปรดทราบว่าสิ่งนี้ไม่ได้รับประกันว่าจะเป็นสถาปัตยกรรมที่ 'ดีที่สุด' แต่อย่างน้อยก็สามารถให้จุดเริ่มต้นที่ดีแก่คุณได้ นอกจากนี้ประสบการณ์ของตัวเองยังชี้ให้เห็นว่าสิ่งต่างๆเช่นการออกกลางคันยังสามารถช่วยได้ในทางปฏิบัติ

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