การเริ่มต้นน้ำหนักของ CNN ซาเวียร์


14

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

สำหรับเลเยอร์ที่เชื่อมต่ออย่างสมบูรณ์มีกฎง่ายๆในบทเรียนเหล่านี้:

Var(W)=2nin+nout,simpler alternative:Var(W)=1nin

โดยที่คือความแปรปรวนของตุ้มน้ำหนักสำหรับเลเยอร์เริ่มต้นด้วยการแจกแจงแบบปกติและ ,คือจำนวนของเซลล์ประสาทในพาเรนต์และในเลเยอร์ปัจจุบันVar(W)ninnout

มีกฎของหัวแม่มือคล้ายกันสำหรับเลเยอร์ convolutional?

ฉันกำลังดิ้นรนเพื่อหาว่าอะไรจะดีที่สุดในการเริ่มต้นน้ำหนักของชั้น convolutional เช่นในเลเยอร์ที่มีรูปร่างของน้ำหนัก(5, 5, 3, 8)ดังนั้นขนาดเคอร์เนลคือการ5x5กรองสามช่องสัญญาณ (อินพุต RGB) และการสร้าง8แผนที่คุณลักษณะ ... จะถูก3พิจารณาว่าเป็นจำนวนเซลล์ประสาทอินพุตหรือไม่ หรือมากกว่า75 = 5*5*3เพราะอินพุตเป็น5x5แพตช์สำหรับแต่ละช่องสี

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

คำตอบ:


13

5*5*3ในกรณีนี้จำนวนของเซลล์ประสาทที่ควรจะเป็น

ฉันพบว่ามันมีประโยชน์เป็นพิเศษสำหรับเลเยอร์ convolutional บ่อยครั้งที่การกระจายแบบสม่ำเสมอในช่วงใช้ได้เช่นกัน [c/(in+out),c/(in+out)]

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


1
อืมคุณมีคำแนะนำเพิ่มเติมหรือยัง เช่นหนึ่งในเครือข่ายของฉันมีเลเยอร์ที่เชื่อมต่อเต็มรูปแบบกับเซลล์ประสาท 480,000 หากฉันใช้การกำหนดค่าเริ่มต้นของซาเวียร์ฉันจะจบลงด้วยความแปรปรวนประมาณและเครือข่ายของฉันเพิ่งเรียนรู้รูปแบบการรบกวนที่แปลกประหลาด ฉันเดาว่ามันอยู่ในระดับต่ำสุดในท้องถิ่น ฉันหมายถึงน้ำหนักนั้นน้อยจริงๆ ผมส่วนใหญ่มีประสบการณ์การเรียนรู้ที่เหมาะสมกับสิ่งที่อยู่ในช่วง0.01] ความคิดใด ๆ ฉันคิดว่าการกำหนดค่าเริ่มต้นของซาเวียร์ไม่ได้ใช้กับเลเยอร์ที่มีขนาดใหญ่จริงๆเหรอ? [ 0.1 , 0.01 ]1106[0.1,0.01]
daniel451

@ascenator ขออภัยฉันไม่รู้มากเกี่ยวกับการเปลี่ยนแปลงของน้ำหนักระหว่างการฝึก บางครั้งผลลัพธ์ที่แปลกอาจมาจากอัตราการเรียนรู้ที่มาก / เล็กเกินไป
dontloo

ห้องสมุด DL หลายแห่งใช้คำเบี่ยงเบนมาตรฐานไม่ใช่คำแปรปรวนเนื่องจากเป็นพารามิเตอร์สำหรับวิธีการสร้างหมายเลขสุ่ม ดังนั้นสำหรับความแปรปรวนคุณต้องมีค่าเบี่ยงเบนมาตรฐานเท่ากับซึ่งอาจอธิบายผลลัพธ์ของคุณ 10 - 3106103
eric.mitchell

0

ฉันคำตอบที่สองของ Eric ที่นี่ ฉันยังใช้ "sqrt" ของคำศัพท์และไม่ใช่เฉพาะคำนั้น ทั้งๆที่เมื่อคุณเชื่อมต่อ sigmoid ที่ลึกลงไปในตาข่ายของคุณกับเอาต์พุต "RelU" ... มันอาจทำให้การฝึกอบรมหยุดชะงัก นี่เป็นเพราะเอาต์พุต "Relu" ที่ไม่ จำกัด ซึ่งสามารถทำให้การไล่ระดับสีที่ sigmoid ลดลงเหลือ 0 และไม่มีการเรียนรู้เกิดขึ้น ดังนั้นในกรณีที่ฉันมีปัจจัย "scaleDown" สำหรับสุทธิของฉันซึ่งจะลดความเบี่ยงเบนการเริ่มต้นโดยปัจจัยนั้น ฉันยังคงสังเกตุตุ้มน้ำหนักจนกระทั่งเกิดการเรียนรู้ วิธีง่ายๆในการค้นหาคือการบันทึกโมเดลทันทีหลังการวนซ้ำ 1 ครั้งและดูที่เอาต์พุต RELU (ที่เชื่อมต่อกับ sigmoid) ทำการปรับน้ำหนักต่อไปเรื่อย ๆ จนกว่าผลลัพธ์ RELU นี้จะสมเหตุสมผล จากนั้นใช้ตุ้มน้ำหนักเหล่านั้นเพื่อฝึก เป็นการเริ่มต้นที่ดี หากยังคงยุบหลังจากการทำซ้ำสองสามครั้ง ชั่งน้ำหนักลงอีกเล็กน้อยจนกว่าจะถึงความมั่นคง มันเป็นแค่แฮ็คที่ฉันใช้ มันทำงานสำหรับฉันสำหรับการตั้งค่าของฉัน ดังนั้นการแบ่งปันประสบการณ์ของฉัน สิ่งต่าง ๆ ทำงานสำหรับการตั้งค่าที่แตกต่างกัน

ดังนั้น ... โชคดี!

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