การบรรจบกันของน้ำหนักเครือข่ายประสาท


10

ฉันมาถึงสถานการณ์ที่น้ำหนักของเครือข่ายประสาทของฉันไม่ได้มาบรรจบกันแม้หลังจากการวนซ้ำ 500 ครั้ง เครือข่ายประสาทของฉันมี 1 อินพุตเลเยอร์, ​​1 เลเยอร์ที่ซ่อนอยู่และ 1 เลเยอร์เอาท์พุท พวกมันมีอยู่ประมาณ 230 โหนดใน input layer, 9 nodes ใน hidden layer และ 1 output node ใน output layer ฉันอยากรู้ว่าถ้าฉันหยุดก่อนกำหนด (พูดว่าหยุดการฝึกอบรมเครือข่ายประสาทหลังจากทำซ้ำ 100 ครั้ง) จะมีผลกระทบอะไรกับโมเดลนี้?

ยังต้องการที่จะรู้ว่ามาตรฐานอุตสาหกรรมของการทำงานคืออะไรถ้าน้ำหนักในเครือข่ายประสาทไม่ได้มาบรรจบกัน?


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

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

@sashkello ใช่มีการทำให้ข้อมูลเป็นปกติอย่างถูกต้อง
ผู้เรียน

1
@juampa ไม่มีเหตุผลที่มี 9 โหนดในเลเยอร์ที่ซ่อนอยู่ เรารู้สึกว่าการมีโหนดมากกว่านี้ในเลเยอร์ที่ซ่อนอยู่จะเพิ่มความซับซ้อนของเครือข่ายและทำให้ข้อมูลเหมาะสม
ผู้เรียน

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

คำตอบ:


13

มีคำถามจำนวนมากที่ต้องถาม:

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

คุณจะให้อะไรในทาง ephemeris? คุณช่วยบอกเราเกี่ยวกับธรรมชาติของข้อมูลได้ไหม

คุณสามารถสร้างทรีแบบไล่ระดับสีของโครงข่ายประสาท

คุณถามว่าจะเกิดอะไรขึ้นถ้าคุณหยุดก่อน

คุณสามารถลองด้วยตัวเอง เรียกใช้ 300x เมื่อคุณเริ่มต้นด้วยน้ำหนักเริ่มต้นแบบสุ่มจากนั้นหยุดที่จำนวนซ้ำตามที่กำหนดไว้ให้บอกว่า 100 เมื่อถึงจุดนั้นให้คำนวณข้อผิดพลาดทั้งมวลของคุณข้อผิดพลาดชุดฝึกอบรมของคุณและชุดทดสอบผิดพลาด ทำซ้ำ หลังจากที่คุณมีค่า 300 ค่าเพื่อบอกคุณว่าข้อผิดพลาดคืออะไรคุณสามารถรับแนวคิดการแจกแจงข้อผิดพลาดของคุณเมื่อได้รับ 100 การเรียนรู้ซ้ำ หากต้องการคุณสามารถสุ่มตัวอย่างการกระจายนั้นในค่าการเรียนรู้อื่น ๆ ฉันแนะนำ 200, 500 และ 1,000 ซ้ำ นี่จะทำให้คุณทราบว่า SNR ของคุณเปลี่ยนแปลงอย่างไรเมื่อเวลาผ่านไป พล็อตของ SNR เทียบกับจำนวนการวนซ้ำสามารถให้แนวคิดเกี่ยวกับ "หน้าผา" หรือ "ดีพอ" บางครั้งก็มีหน้าผาที่ข้อผิดพลาดพังทลายลงมา บางครั้งข้อผิดพลาดเป็นที่ยอมรับได้ในตอนนั้น

ต้องใช้ข้อมูล "ค่อนข้างง่าย" หรือ "โชคดี" สำหรับระบบของคุณในการรวมกันต่ำกว่า 100 รอบอย่างสม่ำเสมอ ทั้งสองอย่างนี้ไม่เกี่ยวกับการทำซ้ำ

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

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

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

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

แล้วคุณจะรู้ได้อย่างไรว่าคุณอยู่ที่ไหน "ดีพอ"?

นี่คือการทดสอบอย่างรวดเร็วที่คุณสามารถทำได้:

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

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

คุณถามว่าจะเกิดอะไรขึ้นหากน้ำหนักไม่มาบรรจบกัน

โครงข่ายประสาทเทียมเป็นเครื่องมือหนึ่ง พวกเขาไม่ใช่เครื่องมือเดียว มีคนอื่น ๆ ฉันจะดูว่าใช้หนึ่งในนั้น

ฉันทำงานในแง่ของเกณฑ์ข้อมูลดังนั้นฉันจึงดูทั้งน้ำหนัก (จำนวนพารามิเตอร์) และข้อผิดพลาด คุณอาจลองหนึ่งในนั้น

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

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

บางครั้งมันเป็นสิ่งที่ดีที่พวกเขาไม่มาบรรจบกัน

คุณเคยได้ยินเรื่องความขัดแย้งในการโหวตหรือไม่? คุณอาจคิดว่ามันเป็นลูกพี่ลูกน้องนับที่สูงกว่ากับทางตันแบบสองทาง มันเป็นวง ในการลงคะแนนเสียงแบบ 2 คนบุคคลแรกต้องการผู้สมัคร "A" ในขณะที่คนที่สองต้องการผู้สมัคร "B" (หรือไม่ใช่ A หรืออย่างอื่น) ส่วนที่สำคัญคือคุณสามารถคิดว่ามันเป็นวง

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

บันทึก:

การใช้การวนซ้ำเพียง 500 ครั้งอาจเป็นปัญหาได้ ฉันมี NN ที่ซึ่ง 10,000 การทำซ้ำก็แทบจะไม่เพียงพอ จำนวนการทำซ้ำที่ "พอ" ขึ้นอยู่กับที่ฉันได้ระบุไว้แล้วในข้อมูล, NN-topology, ฟังก์ชั่นการถ่ายโอนโหนด, ฟังก์ชั่นการเรียนรู้ / การฝึกอบรมและแม้กระทั่งฮาร์ดแวร์คอมพิวเตอร์ คุณต้องมีความเข้าใจที่ดีว่าพวกเขาทั้งหมดโต้ตอบกับการนับซ้ำของคุณก่อนที่จะบอกว่ามีการทำซ้ำ "พอ" หรือ "มากเกินไป" ข้อควรพิจารณาอื่น ๆ เช่นเวลางบประมาณและสิ่งที่คุณต้องการทำกับ NN เมื่อคุณฝึกอบรมเสร็จแล้วควรพิจารณาด้วย

เฉิน, RB, ช้าง, SP, Wang, W. , & Wong, WK, (2011, กันยายน) การออกแบบการทดลองที่เหมาะสมผ่านวิธีการเพิ่มประสิทธิภาพจับกลุ่มอนุภาค (preprint), สืบค้น 25 มีนาคม 2012, จากhttp://www.math.ntu.edu.tw/~mathlib/preprint/2011-03.pdf


2

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

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

สำหรับภาพรวมรายละเอียดของเทคนิคและเทคนิคของการค้าที่ใช้เวลาดูที่นี้ (ต้องอ่าน) กระดาษโดยยานน์เลคัน


1

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

ทางออกหนึ่งที่เป็นไปได้คือการใช้เครื่องมือเพิ่มประสิทธิภาพที่ปรับตัวได้เช่น AdaGrad หรือ Adam

ฉันต้องเผชิญกับปัญหาที่คล้ายกันในขณะที่การฝึกอบรมเครือข่ายประสาทที่เรียบง่ายเมื่อฉันเริ่มต้นกับเครือข่ายประสาท

การอ้างอิงน้อย: https://en.wikipedia.org/wiki/Vanishing_gradient_problem https://www.youtube.com/watch?v=VuamhbEWEWA


0

ฉันมีชุดข้อมูลจำนวนมากที่แปรสภาพช้า - อาจเป็นเพราะอินพุตมีความสัมพันธ์สูง

ฉันเขียนตัววิเคราะห์ C ++ NN ของฉันเองและด้วยเหตุนี้ฉันสามารถเปลี่ยนแปลงอัตราการเรียนรู้สำหรับแต่ละน้ำหนักได้ สำหรับแต่ละน้ำหนักที่แต่ละขอบฉันทำสองสิ่งที่ช่วยได้บ้าง

ก่อนอื่นฉันคูณอัตราการเรียนรู้แต่ละรายการด้วยตัวเลขสุ่มแบบกระจายจาก [0,1] ฉันเดาว่าจะช่วยในเรื่องปัญหาความสัมพันธ์

เคล็ดลับอีกอย่างคือฉันเปรียบเทียบการไล่ระดับสีปัจจุบันกับการไล่สีก่อนหน้าของแต่ละขอบ หากการไล่ระดับสีลดลงร้อยละแทบจะน้อยฉันก็คูณอัตราการเรียนรู้สำหรับขอบนั้นด้วย 5

ฉันไม่มีเหตุผลพิเศษใด ๆ สำหรับเทคนิคเหล่านั้น แต่ดูเหมือนว่าจะทำงานได้ดี

หวังว่านี่จะช่วยได้

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