Backpropagation กับขั้นตอนวิธีเชิงพันธุกรรมสำหรับการฝึกอบรมโครงข่ายประสาทเทียม


34

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

มีกฎทั่วไปของหัวแม่มือเมื่อใช้อย่างใดอย่างหนึ่งหรือไม่? บางทีมันอาจขึ้นอยู่กับประเภทของ NN หรือมีวิธีการแก้ปัญหาบางอย่างที่โดยทั่วไปมีประสิทธิภาพสูงกว่าคนอื่น

ถ้าเป็นไปได้ฉันกำลังมองหาคำตอบทั่วไป: เช่น "ถ้า NN มีค่ามาก GA ดีกว่า" หรือ "GA ดีกว่าเสมอ แต่มีปัญหาประสิทธิภาพการคำนวณ" ฯลฯ ...

คำตอบ:


23

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

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


2
นี่คือสิ่งที่ฉันเพิ่งค้นพบเมื่อไม่นานมานี้ - หาโซลูชันที่ 'ดี' ก่อนแล้วจึงปรับปรุงให้ดีขึ้นด้วย GA ไม่เพียง แต่ใช้กับ NNs เท่านั้น แต่การเพิ่มประสิทธิภาพโดยทั่วไป ...
sashkello

1
ฉันสับสนว่าทำไมพวกเขาถึงไม่เกิดร่วมกัน ฉันคิดว่า GA ควรจะเรียนรู้โครงสร้าง การแพร่กระจายย้อนกลับสามารถเรียนรู้น้ำหนักเท่านั้น
pete

8

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

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


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

บรรจบกับที่ดีที่สุดของการแก้ปัญหาการประเมินมากกว่าตัวอย่าง จำกัด ของข้อมูลว่าสิ่งที่ทำให้เกิดมากกว่ากระชับ เพื่อหลีกเลี่ยงการ overfitting คุณต้องการที่จะรวมตัวกันในการแก้ปัญหาที่ไม่ดีที่สุด (เช่นหยุดก่อนในการฝึกอบรมเครือข่ายประสาทเทียม) GAs นั้นไม่ดีไปกว่าการเพิ่มประสิทธิภาพรูปแบบอื่น ๆ ในเครือข่ายประสาทเทียมที่เหมาะสมคุณต้องหลีกเลี่ยงการปรับเกณฑ์การฝึกอบรมให้เหมาะสม
Dikran Marsupial

5

เมื่อใดก็ตามที่คุณจัดการกับข้อมูลจำนวนมากและคุณต้องการที่จะแก้ปัญหาการเรียนรู้ภายใต้การดูแลด้วยเครือข่ายนิวรัลไปข้างหน้าโซลูชันบนพื้นฐานของการแพร่กระจายกลับมีความเป็นไปได้มากขึ้น เหตุผลสำหรับเรื่องนี้คือว่าสำหรับเครือข่ายประสาทที่ซับซ้อนจำนวนพารามิเตอร์อิสระนั้นสูงมาก โครงการอุตสาหกรรมหนึ่งที่ฉันกำลังทำงานอยู่นั้นเกี่ยวข้องกับเครือข่ายประสาทส่งต่อที่มีอินพุตประมาณ 1,000 อินพุทเลเยอร์ที่ซ่อนอยู่สองรายการ @ 384 เซลล์ประสาทแต่ละเซลล์และเอาต์พุต 60 ตัว สิ่งนี้นำไปสู่พารามิเตอร์น้ำหนัก 1000 * 384 + 384 * 384 + 384 * 60 = 554496 ซึ่งจะต้องปรับให้เหมาะสม การใช้วิธีการแบบ GA ที่นี่จะช้ามาก


ความเข้าใจของฉันคือ GA ถูกออกแบบมาเพื่อจัดการกับปัญหาที่ยากขึ้นในการแก้ไขด้วยวิธีการมาตรฐาน มันจะไม่ทำงานได้ดีขึ้นอย่างแน่นอนในสถานการณ์ที่คุณอธิบายหรือไม่?
sashkello

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

2

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

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

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

ฉันอยากรู้ว่า GAs นั้นช้ากว่า Backprop มากแค่ไหนและถ้าใครรู้เกี่ยวกับอัลกอริธึมแบบไฮบริด


1
ไม่เห็นด้วยกับวรรคแรกของคุณ การป้องกันการบรรจุมากเกินไปนั้นส่วนใหญ่ผ่านวิธีการทำให้เป็นปกติในปัญหาการฝึกฝน หากคุณเริ่มทำ meta-optimization --- นั่นคือการแก้ปัญหาการฝึกอบรมมากมาย (เช่นการปรับพารามิเตอร์เคอร์เนล, สถาปัตยกรรมเครือข่าย, ... ) - การดูแลการ overfitting กลายเป็นเรื่องยากมากขึ้นและไม่รับประกันแน่นอนอีกต่อไป
Marc Claesen

หากการ overfitting ไม่ได้เกิดจากการปรับให้เหมาะสมการหยุดก่อนหน้าจะไม่เป็นการรักษาที่มีประสิทธิภาพสำหรับการ overfitting
Dikran Marsupial

1

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


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