ฉันจะปรับปรุงเสถียรภาพเครือข่ายประสาทของฉันได้อย่างไร


11

ฉันใช้ neuralnet ใน R เพื่อสร้าง NN พร้อมอินพุต 14 ช่องและเอาต์พุตเดียว ฉันสร้าง / ฝึกอบรมเครือข่ายหลายครั้งโดยใช้ข้อมูลการฝึกอบรมอินพุตเดียวกันและสถาปัตยกรรมเครือข่าย / การตั้งค่าเดียวกัน

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

ฉันเข้าใจว่าจะมีความแตกต่างของน้ำหนักที่ผลิตภายใน NN ในแต่ละครั้งและจะไม่มีเครือข่ายประสาทเทียมสองเครือข่ายเหมือนกัน แต่ฉันจะพยายามสร้างเครือข่ายที่สอดคล้องกันมากขึ้นในแต่ละขบวนรถไฟได้อย่างไรจากข้อมูลที่เหมือนกัน


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

สวัสดีลูคัสผมใช้แพคเกจ neuralnet R เชื่อมโยงซึ่งมีบทความอธิบายที่ดีที่นี่การเชื่อมโยง ฉันใช้เลเยอร์ 8 เซลล์ที่ซ่อนอยู่หนึ่งชั้น อัลกอริทึมการเรียนรู้เป็น backpropagation ยืดหยุ่นกับ backtracking น้ำหนัก
tfb

คำตอบ:


8

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

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

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

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


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

ในnnetน้ำหนักเริ่มต้นจะเริ่มต้นทั้งหมดเป็นตัวเลขสุ่มที่สม่ำเสมอระหว่าง -0.7 และ 0.7 ถ้าฉันจำได้อย่างถูกต้อง และคุณสามารถควบคุมขนาดในพารามิเตอร์ ฉันโชคดีกับnnetแพคเกจอย่างตรงไปตรงมาและไม่เคยลองตัวเลือกอื่นใดเลย ขอให้โชคดี!
Shea Parkes

1

ฉันไม่ได้ทำงานกับ R ดังนั้นฉันจึงสามารถให้คำแนะนำทั่วไปได้มากกว่าเท่านั้น

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

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


เช่นเดียวกับ FYI ตราบใดที่เขาใช้nnetจากฐาน R จะใช้ BFGS optimวิธีการเพิ่มประสิทธิภาพจากอาร์เอส มันคำนวณการไล่ระดับสีเพื่อรับภาพพื้นผิว ไม่มีการประมวลผลแบบแบทช์และไม่มีพารามิเตอร์โมเมนตัมคงที่ในการใช้งาน ต้องบอกว่ามันสามารถล้มเหลวได้ง่าย โดยเฉพาะอย่างยิ่งกับขยะค่ะ
Shea Parkes

@SheaParkes ขอบคุณสำหรับความคิดเห็นและคำตอบเชีย จริงๆแล้วฉันใช้แพ็คเกจ neuralnet - ดูความคิดเห็นด้านบน มันใช้อัลกอริทึมการ backpropagation ที่ยืดหยุ่นพร้อม backtracking น้ำหนัก
tfb

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