ในการใช้งานResNetของ Tensorflow ฉันพบว่าพวกเขาใช้ initializer scaling initializer ฉันยังพบว่า xavier initializer นั้นเป็นที่นิยม ฉันไม่มีประสบการณ์มากเกินไปเกี่ยวกับเรื่องนี้
ในการใช้งานResNetของ Tensorflow ฉันพบว่าพวกเขาใช้ initializer scaling initializer ฉันยังพบว่า xavier initializer นั้นเป็นที่นิยม ฉันไม่มีประสบการณ์มากเกินไปเกี่ยวกับเรื่องนี้
คำตอบ:
การกำหนดค่าเริ่มต้นของซาเวียร์ซึ่งเสนอโดย Xavier Glorot และ Yoshua Bengio ใน"การทำความเข้าใจกับความยากลำบากในการฝึกอบรมเครือข่ายนิวรัล feedforward ลึก"เป็นเทคนิคการเริ่มต้นน้ำหนักที่พยายามสร้างความแปรปรวนของเอาท์พุทของชั้นให้เท่ากับความแปรปรวนของอินพุต . แนวคิดนี้เป็นประโยชน์อย่างมากในทางปฏิบัติ การกำหนดค่าเริ่มต้นนี้ขึ้นอยู่กับฟังก์ชันการเปิดใช้งานเลเยอร์ และในเอกสารของพวกเขา Glorot และ Bengio พิจารณาฟังก์ชั่นการเปิดใช้งานsigmoidซึ่งเป็นตัวเลือกเริ่มต้นในขณะนั้น
หลังจากนั้นการเปิดใช้งาน sigmoid ถูกค้นพบโดย ReLu เนื่องจากได้รับอนุญาตให้แก้ปัญหาการหายไป / การระเบิดแบบไล่ระดับสี ดังนั้นจึงมีเทคนิคการเริ่มต้นใหม่ซึ่งใช้แนวคิดเดียวกัน (ปรับสมดุลของความแปรปรวนของการเปิดใช้งาน) กับฟังก์ชันการเปิดใช้งานใหม่นี้ มันได้รับการเสนอโดย Kaiming เขาที่อัลใน"Delving ลึกเข้าไปในวงจรเรียงกระแส: เหนือกว่ามนุษย์ระดับประสิทธิภาพในการจำแนกประเภท ImageNet"และตอนนี้ก็มักจะเรียกว่าเขาเริ่มต้น
ใน tensorflow เขาเริ่มต้นการใช้งานในvariance_scaling_initializer()
ฟังก์ชั่น (ซึ่งในความเป็นจริงเป็น initializer ทั่วไปมากขึ้น แต่โดยการดำเนินการเริ่มต้นของเขาเริ่มต้น) ในขณะที่ซาเวียร์ initializer xavier_initializer()
เป็นเหตุผล
โดยสรุปความแตกต่างที่สำคัญสำหรับผู้ปฏิบัติงานการเรียนรู้ของเครื่องมีดังนี้:
tanh()
ฟังก์ชั่นการเปิดใช้งานฉันควรใช้ฟังก์ชั่นเริ่มต้นใด
ความแปรปรวนปรับเป็นเพียงทั่วไปของซาเวียร์: การhttp://tflearn.org/initializations/ พวกเขาทั้งสองทำงานบนหลักการที่ว่าขนาดของการไล่ระดับสีควรจะคล้ายกันทั่วทุกชั้น ซาเวียร์น่าจะปลอดภัยกว่าที่จะใช้เนื่องจากมันไม่สามารถทดสอบการทดสอบเวลาได้ การพยายามเลือกพารามิเตอร์ของคุณเองสำหรับการปรับความแปรปรวนอาจขัดขวางการฝึกอบรมหรือทำให้เครือข่ายของคุณไม่ได้รับเลย