จะเริ่มต้นองค์ประกอบของเมทริกซ์ตัวกรองได้อย่างไร


24

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

ฉันพยายามที่จะเข้าใจรายละเอียดการใช้งานในขั้นตอนระหว่างฟีเจอร์แมปในภาพด้านล่างแสดงเลเยอร์ของซีเอ็นเอ็น

ชั้นเครือข่ายประสาทเทียม

ตามแผนภาพนี้:

โน้มน้าวใจรูปภาพ

เคอร์เนลเมทริกซ์เคอร์เนล "ขั้นตอน" เหนือภาพสร้างแผนผังคุณลักษณะโดยที่แต่ละพิกเซลคือผลรวมของผลิตภัณฑ์องค์ประกอบที่ชาญฉลาดระหว่างน้ำหนักของเคอร์เนลแต่ละตัว (หรือเมทริกซ์ฟิลเตอร์) และค่าพิกเซลที่สอดคล้องกันของภาพอินพุต

คำถามของฉันคือเราจะเริ่มต้นน้ำหนักของเคอร์เนล (หรือตัวกรอง) เมทริกซ์ได้อย่างไร

ในการสาธิตข้างต้นพวกเขาเป็นเพียง 1 และ 0 แต่ฉันคิดว่านี่เป็นเรื่องง่ายจากสาเกของแผนภาพ

น้ำหนักเหล่านี้ผ่านการฝึกอบรมในบางขั้นตอนการประมวลผลล่วงหน้าหรือไม่ หรือเลือกโดยผู้ใช้อย่างชัดเจน?

คำตอบ:


19

หนึ่งมักจะเริ่มต้นเครือข่ายจากการกระจายแบบสุ่มโดยทั่วไปหมายถึงศูนย์และการดูแลบางอย่างเกี่ยวกับการเลือกความแปรปรวน วันนี้ด้วยความก้าวหน้าในเทคนิคการปรับให้เหมาะสม (SGD + โมเมนตัมท่ามกลางวิธีอื่น ๆ ) และการเปิดใช้งานแบบไม่เชิงเส้น (การเปิดใช้งานเหมือน ReLUs และ ReLU ช่วยให้การ backproagation ดีกว่าสัญญาณการไล่ระดับสีแม้ในเครือข่ายที่ลึก) โครงข่ายประสาทเทียมจากการเริ่มต้นแบบสุ่ม

คุณสมบัติที่สำคัญมีดังต่อไปนี้:

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

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

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

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

    Glorot Uniform (มีสองรูปแบบที่นิยมมากในการเริ่มต้นน้ำหนักการทำความเข้าใจความยากลำบากของการฝึกอบรมเครือข่ายประสาทลึกคราท ) และเขาปกติ initializer ( Delving ลึกเข้าไปในวงจรเรียงกระแส: เหนือกว่าประสิทธิภาพของมนุษย์ระดับบน ImageNet การจำแนกประเภท )

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

    "วิธีการกำหนดค่าเริ่มต้นที่เหมาะสมควรหลีกเลี่ยงการลดหรือขยายขนาดของสัญญาณอินพุตเป็นทวีคูณ"

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

หมายเหตุสุดท้าย: บางครั้งคุณจะเห็นคนใช้ Gaussian ที่มีค่าเบี่ยงเบนมาตรฐานเท่ากับ. 005 หรือ. 01 หรือส่วนเบี่ยงเบนมาตรฐาน "เล็ก" อื่น ๆ ทั่วทั้งเลเยอร์ บางครั้งคุณจะเห็นคนเล่นซอกับความแปรปรวนด้วยมือโดยทั่วไปทำการตรวจสอบข้ามเพื่อค้นหาการกำหนดค่าที่ดีที่สุด


1
แต่รูปร่าง "X" (ทำโดย 1) ของตัวกรองสีเหลืองใน GIF ด้านบนคืออะไร ฉันเข้าใจว่านี่คือสิ่งที่ฉันต้องการใช้เพื่อตรวจจับรูปร่าง "X" ทุกที่ในรูปภาพ แต่ฉันจะรู้ได้อย่างไรว่า "X" เป็นรูปร่างที่ฉันต้องการ ฉันรู้สึกว่ารูปทรงตัวกรองเรียนรู้โดยอัตโนมัติ แต่ฉันไม่รู้วิธี บางทีนี่อาจเป็นคำถามของ OP ด้วยหรือ
Felipe Almeida

2

ฉันไม่สามารถแสดงความคิดเห็นได้เนื่องจากชื่อเสียงต่ำดังนั้นฉันจึงเขียนสิ่งนี้เพื่อตอบคำถามของ Felipe Almeida หลังจากคำตอบที่สมบูรณ์แบบของ Indie AI ไม่มีอะไรให้เพิ่มอีก หากคุณต้องการตรวจจับรูปร่างที่เฉพาะเจาะจง (เช่น X) คุณสามารถกำหนดตัวกรองเฉพาะล่วงหน้าได้เช่นเดียวกับกรณีที่มีการตรวจจับขอบ แต่นี่คือความงามของการเรียนรู้อย่างลึกล้ำมีหลายเลเยอร์มีฟิลเตอร์มากมายและการวนซ้ำมากมายที่ฟิลเตอร์เรียนรู้เกือบทุกรูปร่างของวัตถุที่จำเป็นในตัวมันเอง ตามทฤษฎีแล้วถ้ามีการตรวจจับ X ตัวกรองตัวใดตัวหนึ่งจะเรียนรู้ที่จะตรวจจับตัว X (เป็นตัวกรองสีเหลือง)

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